2 * crypto_sign/try.c version 20090118
8 #include "randombytes.h"
9 #include "crypto_sign.h"
10 #include "windows/windows-quirks.h"
12 #define MAXTEST_BYTES 10000
13 #define TUNE_BYTES 1536
15 extern unsigned char *alignedcalloc(unsigned long long);
17 const char *primitiveimplementation
= crypto_sign_IMPLEMENTATION
;
19 static unsigned char *pk
;
20 static unsigned char *sk
;
21 static unsigned char *m
; unsigned long long mlen
;
22 static unsigned char *sm
; unsigned long long smlen
;
23 static unsigned char *t
; unsigned long long tlen
;
25 void preallocate(void)
27 #ifdef RAND_R_PRNG_NOT_SEEDED
34 pk
= alignedcalloc(crypto_sign_PUBLICKEYBYTES
);
35 sk
= alignedcalloc(crypto_sign_SECRETKEYBYTES
);
36 m
= alignedcalloc(MAXTEST_BYTES
+ crypto_sign_BYTES
);
37 sm
= alignedcalloc(MAXTEST_BYTES
+ crypto_sign_BYTES
);
38 t
= alignedcalloc(MAXTEST_BYTES
+ crypto_sign_BYTES
);
43 crypto_sign_keypair(pk
,sk
);
47 crypto_sign(sm
,&smlen
,m
,mlen
,sk
);
52 crypto_sign_open(t
,&tlen
,sm
,smlen
,pk
);
55 char checksum
[crypto_sign_BYTES
* 2 + 1];
57 const char *checksum_compute(void)
63 if (crypto_sign_keypair(pk
,sk
) != 0) return "crypto_sign_keypair returns nonzero";
64 for (mlen
= 0;mlen
< MAXTEST_BYTES
;mlen
+= 1 + (mlen
/ 16)) {
65 if (crypto_sign(sm
,&smlen
,m
,mlen
,sk
) != 0) return "crypto_sign returns nonzero";
66 if (crypto_sign_open(t
,&tlen
,sm
,smlen
,pk
) != 0) return "crypto_sign_open returns nonzero";
67 if (tlen
!= mlen
) return "crypto_sign_open does not match length";
68 for (i
= 0;i
< tlen
;++i
)
70 return "crypto_sign_open does not match contents";
74 if (crypto_sign_open(t
,&tlen
,sm
,smlen
,pk
) == 0) {
75 if (tlen
!= mlen
) return "crypto_sign_open allows trivial forgery of length";
76 for (i
= 0;i
< tlen
;++i
)
78 return "crypto_sign_open allows trivial forgery of contents";
84 /* do some long-term checksum */