]>
Commit | Line | Data |
---|---|---|
17dddc05 | 1 | #include <openssl/bn.h> |
4ba48ec4 | 2 | #include <openssl/rand.h> |
17dddc05 | 3 | |
8d6e6048 | 4 | static int Rand(n) |
17dddc05 UM |
5 | { |
6 | unsigned char x[2]; | |
4ba48ec4 | 7 | RAND_pseudo_bytes(x,2); |
17dddc05 UM |
8 | return (x[0] + 2*x[1]); |
9 | } | |
10 | ||
4ba48ec4 | 11 | static void bug(char *m, BIGNUM *a, BIGNUM *b) |
17dddc05 UM |
12 | { |
13 | printf("%s!\na=",m); | |
14 | BN_print_fp(stdout, a); | |
15 | printf("\nb="); | |
16 | BN_print_fp(stdout, b); | |
17 | printf("\n"); | |
582afb4b | 18 | fflush(stdout); |
17dddc05 UM |
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(;;) { | |
8d6e6048 RL |
29 | BN_pseudo_rand(a,Rand(),0,0); |
30 | BN_pseudo_rand(b,Rand(),0,0); | |
17dddc05 UM |
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 | } |