diff options
author | Ulf Möller <ulf@openssl.org> | 2000-02-25 20:28:54 +0000 |
---|---|---|
committer | Ulf Möller <ulf@openssl.org> | 2000-02-25 20:28:54 +0000 |
commit | 17dddc0596833f15161cd7fa5614004245e8c588 (patch) | |
tree | 24ea0574725649d552151574a3196e0ac9157a91 /crypto/bn | |
parent | b91f8a482cc1d6199ce835f53d0ca285b9a796ee (diff) | |
download | openssl-17dddc0596833f15161cd7fa5614004245e8c588.tar.gz |
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')
-rw-r--r-- | crypto/bn/Makefile.ssl | 2 | ||||
-rw-r--r-- | crypto/bn/divtest.c | 39 |
2 files changed, 41 insertions, 0 deletions
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 <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); + } +} |