]> CyberLeo.Net >> Repos - FreeBSD/releng/9.3.git/blob - crypto/openssl/crypto/bn/divtest.c
Fix multiple OpenSSL vulnerabilities.
[FreeBSD/releng/9.3.git] / crypto / openssl / crypto / bn / divtest.c
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))
32             continue;
33
34         BN_RECP_CTX_set(recp, b, ctx);
35         if (BN_div(C, D, a, b, ctx) != 1)
36             bug("BN_div failed", a, b);
37         if (BN_div_recp(c, d, a, recp, ctx) != 1)
38             bug("BN_div_recp failed", a, b);
39         else if (BN_cmp(c, C) != 0 || BN_cmp(c, C) != 0)
40             bug("mismatch", a, b);
41     }
42 }