summaryrefslogtreecommitdiffstats
path: root/crypto/bn/divtest.c
diff options
context:
space:
mode:
authorUlf Möller <ulf@openssl.org>2000-02-25 20:28:54 +0000
committerUlf Möller <ulf@openssl.org>2000-02-25 20:28:54 +0000
commit17dddc0596833f15161cd7fa5614004245e8c588 (patch)
tree24ea0574725649d552151574a3196e0ac9157a91 /crypto/bn/divtest.c
parentb91f8a482cc1d6199ce835f53d0ca285b9a796ee (diff)
Test the division functions.
Apparently BN_div_recp reports an error for small divisors (1,2,4,8,40). I haven't got mismatches so far. If you can, please run the test program for a few days (nohup divtest >out& or something), and if it reports a mismatch, post the output.
Diffstat (limited to 'crypto/bn/divtest.c')
-rw-r--r--crypto/bn/divtest.c39
1 files changed, 39 insertions, 0 deletions
diff --git a/crypto/bn/divtest.c b/crypto/bn/divtest.c
new file mode 100644
index 0000000000..bb301680c0
--- /dev/null
+++ b/crypto/bn/divtest.c
@@ -0,0 +1,39 @@
+#include <openssl/bn.h>
+
+int rand(n)
+{
+ unsigned char x[2];
+ RAND_bytes(&x,2);
+ return (x[0] + 2*x[1]);
+}
+
+void bug(char *m, BIGNUM *a, BIGNUM *b)
+{
+ printf("%s!\na=",m);
+ BN_print_fp(stdout, a);
+ printf("\nb=");
+ BN_print_fp(stdout, b);
+ printf("\n");
+}
+
+main()
+{
+ BIGNUM *a=BN_new(), *b=BN_new(), *c=BN_new(), *d=BN_new(),
+ *C=BN_new(), *D=BN_new();
+ BN_RECP_CTX *recp=BN_RECP_CTX_new();
+ BN_CTX *ctx=BN_CTX_new();
+
+ for(;;) {
+ BN_rand(a,rand(),0,0);
+ BN_rand(b,rand(),0,0);
+ if (BN_is_zero(b)) continue;
+
+ BN_RECP_CTX_set(recp,b,ctx);
+ if (BN_div(C,D,a,b,ctx) != 1)
+ bug("BN_div failed",a,b);
+ if (BN_div_recp(c,d,a,recp,ctx) != 1)
+ bug("BN_div_recp failed",a,b);
+ else if (BN_cmp(c,C) != 0 || BN_cmp(c,C) != 0)
+ bug("mismatch",a,b);
+ }
+}