generator: remove rc4 usage, some cleaning
This commit is contained in:
parent
3659cc837e
commit
fd489ae69f
|
@ -94,7 +94,7 @@ int action_gen_key (const std::string& algspec, const std::string&name,
|
||||||
}
|
}
|
||||||
|
|
||||||
sencode *pub, *priv;
|
sencode *pub, *priv;
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
|
|
||||||
err ("Gathering random seed bits from kernel...");
|
err ("Gathering random seed bits from kernel...");
|
||||||
err ("If nothing happens, move mouse, type random stuff on keyboard,");
|
err ("If nothing happens, move mouse, type random stuff on keyboard,");
|
||||||
|
@ -188,7 +188,7 @@ int action_encrypt (const std::string&recipient, bool armor,
|
||||||
|
|
||||||
//encryption part
|
//encryption part
|
||||||
encrypted_msg msg;
|
encrypted_msg msg;
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (256);
|
r.seed (256);
|
||||||
|
|
||||||
bvector plaintext;
|
bvector plaintext;
|
||||||
|
@ -341,8 +341,8 @@ int action_hash_sign (bool armor, const std::string&symmetric)
|
||||||
std::vector<std::string> parts;
|
std::vector<std::string> parts;
|
||||||
parts.resize (1);
|
parts.resize (1);
|
||||||
base64_encode (data, parts[0]);
|
base64_encode (data, parts[0]);
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (256);
|
r.seed (128);
|
||||||
data = envelope_format (ENVELOPE_HASHFILE, parts, r);
|
data = envelope_format (ENVELOPE_HASHFILE, parts, r);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -431,7 +431,7 @@ int action_sign (const std::string&user, bool armor, const std::string&detach,
|
||||||
|
|
||||||
//signature production part
|
//signature production part
|
||||||
signed_msg msg;
|
signed_msg msg;
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (256);
|
r.seed (256);
|
||||||
|
|
||||||
bvector message;
|
bvector message;
|
||||||
|
@ -869,7 +869,7 @@ int action_sign_encrypt (const std::string&user, const std::string&recipient,
|
||||||
|
|
||||||
//make a signature
|
//make a signature
|
||||||
signed_msg smsg;
|
signed_msg smsg;
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (256);
|
r.seed (256);
|
||||||
|
|
||||||
bvector bv;
|
bvector bv;
|
||||||
|
@ -1270,7 +1270,7 @@ int action_export (bool armor,
|
||||||
std::vector<std::string> parts;
|
std::vector<std::string> parts;
|
||||||
parts.resize (1);
|
parts.resize (1);
|
||||||
base64_encode (data, parts[0]);
|
base64_encode (data, parts[0]);
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (128);
|
r.seed (128);
|
||||||
data = envelope_format (ENVELOPE_PUBKEYS, parts, r);
|
data = envelope_format (ENVELOPE_PUBKEYS, parts, r);
|
||||||
}
|
}
|
||||||
|
@ -1526,7 +1526,7 @@ int action_export_sec (bool armor, bool yes,
|
||||||
std::vector<std::string> parts;
|
std::vector<std::string> parts;
|
||||||
parts.resize (1);
|
parts.resize (1);
|
||||||
base64_encode (data, parts[0]);
|
base64_encode (data, parts[0]);
|
||||||
arcfour_rng r;
|
ccr_rng r;
|
||||||
r.seed (128);
|
r.seed (128);
|
||||||
data = envelope_format (ENVELOPE_SECRETS, parts, r);
|
data = envelope_format (ENVELOPE_SECRETS, parts, r);
|
||||||
}
|
}
|
||||||
|
|
|
@ -306,7 +306,7 @@ static int fo_encrypt (const bvector&plain, bvector&cipher,
|
||||||
scipher sc;
|
scipher sc;
|
||||||
sc.init ();
|
sc.init ();
|
||||||
//whole key must be tossed in, so split if when necessary
|
//whole key must be tossed in, so split if when necessary
|
||||||
sc.load_key (K);
|
sc.load_key_vector (K);
|
||||||
|
|
||||||
//encrypt
|
//encrypt
|
||||||
for (i = 0; i < M.size(); ++i) M[i] = M[i] ^ sc.gen();
|
for (i = 0; i < M.size(); ++i) M[i] = M[i] ^ sc.gen();
|
||||||
|
@ -369,7 +369,7 @@ static int fo_decrypt (const bvector&cipher, bvector&plain,
|
||||||
scipher sc;
|
scipher sc;
|
||||||
sc.init ();
|
sc.init ();
|
||||||
//stuff in the whole key
|
//stuff in the whole key
|
||||||
sc.load_key (K);
|
sc.load_key_vector (K);
|
||||||
|
|
||||||
//decrypt the message part
|
//decrypt the message part
|
||||||
for (i = 0; i < M.size(); ++i) M[i] = M[i] ^ sc.gen();
|
for (i = 0; i < M.size(); ++i) M[i] = M[i] ^ sc.gen();
|
||||||
|
|
|
@ -71,7 +71,7 @@ static void msg_pad (const bvector&in, std::vector<byte>&out, size_t minsize)
|
||||||
padding_generator g;
|
padding_generator g;
|
||||||
g.init ();
|
g.init ();
|
||||||
//stuff in as much seed material as possible
|
//stuff in as much seed material as possible
|
||||||
g.load_key (out);
|
g.load_key_vector (out);
|
||||||
|
|
||||||
i = out.size();
|
i = out.size();
|
||||||
out.resize (minsize);
|
out.resize (minsize);
|
||||||
|
|
|
@ -67,10 +67,6 @@ public:
|
||||||
discard (disc_bytes);
|
discard (disc_bytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
void load_key (const std::vector<inttype>&K) {
|
|
||||||
load_key (& (K[0]), & (K[K.size()]) );
|
|
||||||
}
|
|
||||||
|
|
||||||
inttype gen() {
|
inttype gen() {
|
||||||
I = (I + 1) & mask;
|
I = (I + 1) & mask;
|
||||||
J = (J + S[I]) & mask;
|
J = (J + S[I]) & mask;
|
||||||
|
|
|
@ -27,14 +27,14 @@ void prepare_keygen (privgen& kg, const std::vector<byte>&SK, uint idx)
|
||||||
{
|
{
|
||||||
kg.clear();
|
kg.clear();
|
||||||
kg.init ();
|
kg.init ();
|
||||||
kg.load_key (SK);
|
kg.load_key_vector (SK);
|
||||||
std::vector<byte>tmp;
|
std::vector<byte>tmp;
|
||||||
while (idx) {
|
while (idx) {
|
||||||
tmp.push_back (idx & 0xff);
|
tmp.push_back (idx & 0xff);
|
||||||
idx >>= 8;
|
idx >>= 8;
|
||||||
}
|
}
|
||||||
tmp.resize (16, 0); //prevent chaining to other numbers
|
tmp.resize (16, 0); //prevent chaining to other numbers
|
||||||
kg.load_key (tmp);
|
kg.load_key_vector (tmp);
|
||||||
kg.discard (4096);
|
kg.discard (4096);
|
||||||
//discarding is done manually here,
|
//discarding is done manually here,
|
||||||
//for the purpose of double key loading.
|
//for the purpose of double key loading.
|
||||||
|
|
|
@ -26,7 +26,7 @@ static inline uint bytes (uint bits)
|
||||||
return (bits >> 3) + ( (bits & 7) ? 1 : 0);
|
return (bits >> 3) + ( (bits & 7) ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void arcfour_rng::seed (uint bits, bool quick)
|
void ccr_rng::seed (uint bits, bool quick)
|
||||||
{
|
{
|
||||||
std::vector<byte> s;
|
std::vector<byte> s;
|
||||||
std::ifstream f;
|
std::ifstream f;
|
||||||
|
@ -40,6 +40,6 @@ void arcfour_rng::seed (uint bits, bool quick)
|
||||||
for (uint i = 0; i < b; ++i) f >> s[i];
|
for (uint i = 0; i < b; ++i) f >> s[i];
|
||||||
f.close();
|
f.close();
|
||||||
|
|
||||||
r.load_key (s);
|
r.load_key_vector (s);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,28 +19,31 @@
|
||||||
#ifndef _ccr_generator_h_
|
#ifndef _ccr_generator_h_
|
||||||
#define _ccr_generator_h_
|
#define _ccr_generator_h_
|
||||||
|
|
||||||
#include "arcfour.h"
|
#include "chacha.h"
|
||||||
#include "prng.h"
|
#include "prng.h"
|
||||||
|
|
||||||
class arcfour_rng : public prng
|
#include <stdint.h>
|
||||||
|
#define randmax_type uint64_t
|
||||||
|
|
||||||
|
class ccr_rng : public prng
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
arcfour<byte, 8, 4096> r;
|
chacha20 r;
|
||||||
|
|
||||||
arcfour_rng() {
|
ccr_rng() {
|
||||||
r.init ();
|
r.init ();
|
||||||
}
|
}
|
||||||
|
|
||||||
~arcfour_rng() {
|
~ccr_rng() {
|
||||||
r.clear();
|
r.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
void seed (uint bits, bool quick = true);
|
void seed (uint bits, bool quick = true);
|
||||||
|
|
||||||
uint random (uint n) {
|
uint random (uint n) {
|
||||||
//rand_max is 2^32.
|
randmax_type i;
|
||||||
return ( (r.gen() << 24) | (r.gen() << 16)
|
r.gen (sizeof (randmax_type), (byte*) &i);
|
||||||
| (r.gen() << 8) | r.gen() ) % n;
|
return i % n;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
7
src/sc.h
7
src/sc.h
|
@ -23,6 +23,8 @@
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
class streamcipher
|
class streamcipher
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
@ -39,6 +41,11 @@ public:
|
||||||
void discard (size_t n) {
|
void discard (size_t n) {
|
||||||
gen (n, 0);
|
gen (n, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void load_key_vector (const std::vector<byte>&K) {
|
||||||
|
load_key (& (K[0]), & (K[K.size()]) );
|
||||||
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue