OLD | NEW |
| (Empty) |
1 #include <openssl/bn.h> | |
2 #include <openssl/rand.h> | |
3 | |
4 static int Rand(n) | |
5 { | |
6 unsigned char x[2]; | |
7 RAND_pseudo_bytes(x,2); | |
8 return (x[0] + 2*x[1]); | |
9 } | |
10 | |
11 static void bug(char *m, BIGNUM *a, BIGNUM *b) | |
12 { | |
13 printf("%s!\na=",m); | |
14 BN_print_fp(stdout, a); | |
15 printf("\nb="); | |
16 BN_print_fp(stdout, b); | |
17 printf("\n"); | |
18 fflush(stdout); | |
19 } | |
20 | |
21 main() | |
22 { | |
23 BIGNUM *a=BN_new(), *b=BN_new(), *c=BN_new(), *d=BN_new(), | |
24 *C=BN_new(), *D=BN_new(); | |
25 BN_RECP_CTX *recp=BN_RECP_CTX_new(); | |
26 BN_CTX *ctx=BN_CTX_new(); | |
27 | |
28 for(;;) { | |
29 BN_pseudo_rand(a,Rand(),0,0); | |
30 BN_pseudo_rand(b,Rand(),0,0); | |
31 if (BN_is_zero(b)) continue; | |
32 | |
33 BN_RECP_CTX_set(recp,b,ctx); | |
34 if (BN_div(C,D,a,b,ctx) != 1) | |
35 bug("BN_div failed",a,b); | |
36 if (BN_div_recp(c,d,a,recp,ctx) != 1) | |
37 bug("BN_div_recp failed",a,b); | |
38 else if (BN_cmp(c,C) != 0 || BN_cmp(c,C) != 0) | |
39 bug("mismatch",a,b); | |
40 } | |
41 } | |
OLD | NEW |