From 17dddc0596833f15161cd7fa5614004245e8c588 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ulf=20M=C3=B6ller?= Date: Fri, 25 Feb 2000 20:28:54 +0000 Subject: [PATCH] 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. --- crypto/bn/Makefile.ssl | 2 ++ crypto/bn/divtest.c | 39 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 crypto/bn/divtest.c diff --git a/crypto/bn/Makefile.ssl b/crypto/bn/Makefile.ssl index 3b7b29827c..cc72ac9111 100644 --- a/crypto/bn/Makefile.ssl +++ b/crypto/bn/Makefile.ssl @@ -65,6 +65,8 @@ knuth: bn_knuth.c knuth.fast: bn_knuth.c cc -pg -fast -I.. -I../../include bn_knuth.c -o knuth $(LIB) #../../../libefence.a +divtest: divtest.c + cc -I../../include divtest.c -o divtest ../../libcrypto.a lib: $(LIBOBJ) $(AR) $(LIB) $(LIBOBJ) 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 + +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); + } +} -- 2.34.1