diff -uNr nacl-2/MACROS nacl/MACROS --- nacl-2/MACROS 2011-04-09 18:06:19.000000000 +0000 +++ nacl/MACROS 2011-04-09 19:00:19.000000000 +0000 @@ -48,9 +48,11 @@ crypto_box_NONCEBYTES crypto_box_ZEROBYTES crypto_box_BOXZEROBYTES +crypto_box_KEYPAIRRANDOMBYTES crypto_sign crypto_sign_open crypto_sign_keypair crypto_sign_BYTES crypto_sign_PUBLICKEYBYTES crypto_sign_SECRETKEYBYTES +crypto_sign_KEYPAIRRANDOMBYTES diff -uNr nacl-2/PROTOTYPES.c nacl/PROTOTYPES.c --- nacl-2/PROTOTYPES.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/PROTOTYPES.c 2011-04-09 19:00:19.000000000 +0000 @@ -17,10 +17,10 @@ extern int crypto_scalarmult_base(unsigned char *,const unsigned char *); extern int crypto_box(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); extern int crypto_box_open(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *,const unsigned char *); -extern int crypto_box_keypair(unsigned char *,unsigned char *); +extern int crypto_box_keypair(unsigned char *,unsigned char *,unsigned char *); extern int crypto_box_beforenm(unsigned char *,const unsigned char *,const unsigned char *); extern int crypto_box_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); extern int crypto_box_open_afternm(unsigned char *,const unsigned char *,unsigned long long,const unsigned char *,const unsigned char *); extern int crypto_sign(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); extern int crypto_sign_open(unsigned char *,unsigned long long *,const unsigned char *,unsigned long long,const unsigned char *); -extern int crypto_sign_keypair(unsigned char *,unsigned char *); +extern int crypto_sign_keypair(unsigned char *,unsigned char *,unsigned char *); diff -uNr nacl-2/crypto_box/curve25519xsalsa20poly1305/ref/api.h nacl/crypto_box/curve25519xsalsa20poly1305/ref/api.h --- nacl-2/crypto_box/curve25519xsalsa20poly1305/ref/api.h 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_box/curve25519xsalsa20poly1305/ref/api.h 2011-04-09 19:00:19.000000000 +0000 @@ -4,3 +4,4 @@ #define CRYPTO_NONCEBYTES 24 #define CRYPTO_ZEROBYTES 32 #define CRYPTO_BOXZEROBYTES 16 +#define CRYPTO_KEYPAIRRANDOMBYTES 32 diff -uNr nacl-2/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c nacl/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c --- nacl-2/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_box/curve25519xsalsa20poly1305/ref/keypair.c 2011-04-09 19:53:12.000000000 +0000 @@ -1,12 +1,13 @@ #include "crypto_scalarmult_curve25519.h" #include "crypto_box.h" -#include "randombytes.h" int crypto_box_keypair( unsigned char *pk, - unsigned char *sk + unsigned char *sk, + unsigned char *random ) { - randombytes(sk,32); + int i; + for (i=0;i<32;i++)sk[i]=random[i]; return crypto_scalarmult_curve25519_base(pk,sk); } diff -uNr nacl-2/crypto_box/measure.c nacl/crypto_box/measure.c --- nacl-2/crypto_box/measure.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_box/measure.c 2011-04-09 19:00:19.000000000 +0000 @@ -28,6 +28,7 @@ static unsigned char *c; static unsigned char *sa; static unsigned char *sb; +static unsigned char *kprb; void preallocate(void) { @@ -44,6 +45,7 @@ c = alignedcalloc(MAXTEST_BYTES + crypto_box_ZEROBYTES); sa = alignedcalloc(crypto_box_BEFORENMBYTES); sb = alignedcalloc(crypto_box_BEFORENMBYTES); + kprb = alignedcalloc(crypto_box_KEYPAIRRANDOMBYTES); } #define TIMINGS 15 @@ -58,14 +60,14 @@ for (loop = 0;loop < LOOPS;++loop) { for (i = 0;i <= TIMINGS;++i) { cycles[i] = cpucycles(); - crypto_box_keypair(pka,ska); + crypto_box_keypair(pka,ska,kprb); } for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; printentry(-1,"keypair_cycles",cycles,TIMINGS); for (i = 0;i <= TIMINGS;++i) { cycles[i] = cpucycles(); - crypto_box_keypair(pkb,skb); + crypto_box_keypair(pkb,skb,kprb); } for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; printentry(-1,"keypair_cycles",cycles,TIMINGS); diff -uNr nacl-2/crypto_box/try.c nacl/crypto_box/try.c --- nacl-2/crypto_box/try.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_box/try.c 2011-04-09 21:03:14.000000000 +0000 @@ -7,6 +7,7 @@ #include "crypto_box.h" extern unsigned char *alignedcalloc(unsigned long long); +extern void randombytes(unsigned char *x,unsigned long long xlen); const char *primitiveimplementation = crypto_box_IMPLEMENTATION; @@ -32,6 +33,7 @@ static unsigned char *m2; static unsigned char *c2; static unsigned char *t2; +static unsigned char *kprb; #define sklen crypto_box_SECRETKEYBYTES #define pklen crypto_box_PUBLICKEYBYTES @@ -62,6 +64,7 @@ c2 = alignedcalloc(MAXTEST_BYTES + crypto_box_ZEROBYTES); t2 = alignedcalloc(MAXTEST_BYTES + crypto_box_ZEROBYTES); s2 = alignedcalloc(slen); + kprb = alignedcalloc(crypto_box_KEYPAIRRANDOMBYTES); } void predoit(void) @@ -81,8 +84,10 @@ long long i; long long j; - if (crypto_box_keypair(pka,ska) != 0) return "crypto_box_keypair returns nonzero"; - if (crypto_box_keypair(pkb,skb) != 0) return "crypto_box_keypair returns nonzero"; + randombytes(kprb,crypto_box_KEYPAIRRANDOMBYTES); + if (crypto_box_keypair(pka,ska,kprb) != 0) return "crypto_box_keypair returns nonzero"; + randombytes(kprb,crypto_box_KEYPAIRRANDOMBYTES); + if (crypto_box_keypair(pkb,skb,kprb) != 0) return "crypto_box_keypair returns nonzero"; for (j = 0;j < crypto_box_ZEROBYTES;++j) m[j] = 0; diff -uNr nacl-2/crypto_sign/edwards25519sha512batch/ref/api.h nacl/crypto_sign/edwards25519sha512batch/ref/api.h --- nacl-2/crypto_sign/edwards25519sha512batch/ref/api.h 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_sign/edwards25519sha512batch/ref/api.h 2011-04-09 19:00:19.000000000 +0000 @@ -1,3 +1,4 @@ #define CRYPTO_SECRETKEYBYTES 64 #define CRYPTO_PUBLICKEYBYTES 32 #define CRYPTO_BYTES 64 +#define CRYPTO_KEYPAIRRANDOMBYTES 32 diff -uNr nacl-2/crypto_sign/edwards25519sha512batch/ref/sign.c nacl/crypto_sign/edwards25519sha512batch/ref/sign.c --- nacl-2/crypto_sign/edwards25519sha512batch/ref/sign.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_sign/edwards25519sha512batch/ref/sign.c 2011-04-09 19:53:08.000000000 +0000 @@ -1,20 +1,21 @@ #include "api.h" #include "crypto_sign.h" #include "crypto_hash_sha512.h" -#include "randombytes.h" #include "crypto_verify_32.h" #include "ge25519.h" int crypto_sign_keypair( unsigned char *pk, - unsigned char *sk + unsigned char *sk, + unsigned char *random ) { sc25519 scsk; ge25519 gepk; - randombytes(sk, 32); + int i; + for (i=0;i<32;i++)sk[i]=random[i]; crypto_hash_sha512(sk, sk, 32); sk[0] &= 248; sk[31] &= 127; diff -uNr nacl-2/crypto_sign/measure.c nacl/crypto_sign/measure.c --- nacl-2/crypto_sign/measure.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_sign/measure.c 2011-04-09 19:00:19.000000000 +0000 @@ -24,6 +24,7 @@ static unsigned char *m; unsigned long long mlen; static unsigned char *sm; unsigned long long smlen; static unsigned char *t; unsigned long long tlen; +static unsigned char *kprb; void preallocate(void) { @@ -39,6 +40,7 @@ m = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); sm = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); t = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); + kprb = alignedcalloc(crypto_sign_KEYPAIRRANDOMBYTES); } #define TIMINGS 31 @@ -53,7 +55,7 @@ for (loop = 0;loop < LOOPS;++loop) { for (i = 0;i <= TIMINGS;++i) { cycles[i] = cpucycles(); - crypto_sign_keypair(pk,sk); + crypto_sign_keypair(pk,sk,kprb); } for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i]; printentry(-1,"keypair_cycles",cycles,TIMINGS); diff -uNr nacl-2/crypto_sign/try.c nacl/crypto_sign/try.c --- nacl-2/crypto_sign/try.c 2011-04-09 18:06:19.000000000 +0000 +++ nacl/crypto_sign/try.c 2011-04-09 21:03:31.000000000 +0000 @@ -5,13 +5,13 @@ */ #include -#include "randombytes.h" #include "crypto_sign.h" #define MAXTEST_BYTES 10000 #define TUNE_BYTES 1536 extern unsigned char *alignedcalloc(unsigned long long); +extern void randombytes(unsigned char *x,unsigned long long xlen); const char *primitiveimplementation = crypto_sign_IMPLEMENTATION; @@ -20,6 +20,7 @@ static unsigned char *m; unsigned long long mlen; static unsigned char *sm; unsigned long long smlen; static unsigned char *t; unsigned long long tlen; +static unsigned char *kprb; void preallocate(void) { @@ -35,11 +36,13 @@ m = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); sm = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); t = alignedcalloc(MAXTEST_BYTES + crypto_sign_BYTES); + kprb = alignedcalloc(crypto_sign_KEYPAIRRANDOMBYTES); } void predoit(void) { - crypto_sign_keypair(pk,sk); + randombytes(kprb,crypto_sign_KEYPAIRRANDOMBYTES); + crypto_sign_keypair(pk,sk,kprb); mlen = TUNE_BYTES; smlen = 0; randombytes(m,mlen); @@ -59,7 +62,8 @@ long long i; long long j; - if (crypto_sign_keypair(pk,sk) != 0) return "crypto_sign_keypair returns nonzero"; + randombytes(kprb,crypto_sign_KEYPAIRRANDOMBYTES); + if (crypto_sign_keypair(pk,sk,kprb) != 0) return "crypto_sign_keypair returns nonzero"; for (mlen = 0;mlen < MAXTEST_BYTES;mlen += 1 + (mlen / 16)) { if (crypto_sign(sm,&smlen,m,mlen,sk) != 0) return "crypto_sign returns nonzero"; if (crypto_sign_open(t,&tlen,sm,smlen,pk) != 0) return "crypto_sign_open returns nonzero";