From 03f8b042772ce5fe04b82e2933535d92ea56dce6 Mon Sep 17 00:00:00 2001 From: Ben Laurie Date: Tue, 29 Dec 1998 17:22:31 +0000 Subject: [PATCH] Add prototypes. Make Montgomery stuff explicitly for that purpose. --- CHANGES | 6 ++++- crypto/rsa/rsa.h | 31 +++++++++++++++++++------ crypto/rsa/rsa_eay.c | 54 +++++++++++++++++++++----------------------- crypto/rsa/rsa_lib.c | 10 ++++---- 4 files changed, 60 insertions(+), 41 deletions(-) diff --git a/CHANGES b/CHANGES index 535e6abd4f..32e59ed96a 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,10 @@ Changes between 0.9.1c and 0.9.1d + *) Fix the RSA header declarations that hid a bug I fixed in 0.9.0b but + was already fixed by Eric for 0.9.1 it seems. + [Ben Laurie - pointed out by Ulf Möller ] + *) Autodetect FreeBSD3. [Ben Laurie] @@ -79,7 +83,7 @@ *) The Genesis of the OpenSSL rpject: We start with the latest (unreleased) SSLeay version 0.9.1b which Eric A. - Joung and Tim J. Hudson created while they were working for C2Net until + Young and Tim J. Hudson created while they were working for C2Net until summer 1998. [The OpenSSL Project] diff --git a/crypto/rsa/rsa.h b/crypto/rsa/rsa.h index b7c02fdab7..2342601b99 100644 --- a/crypto/rsa/rsa.h +++ b/crypto/rsa/rsa.h @@ -66,9 +66,26 @@ extern "C" { #include "bn.h" #include "crypto.h" +typedef struct rsa_st RSA; + typedef struct rsa_meth_st { char *name; +#ifndef NOPROTO + int (*rsa_pub_enc)(int flen,unsigned char *from,unsigned char *to, + RSA *rsa,int padding); + int (*rsa_pub_dec)(int flen,unsigned char *from,unsigned char *to, + RSA *rsa,int padding); + int (*rsa_priv_enc)(int flen,unsigned char *from,unsigned char *to, + RSA *rsa,int padding); + int (*rsa_priv_dec)(int flen,unsigned char *from,unsigned char *to, + RSA *rsa,int padding); + int (*rsa_mod_exp)(BIGNUM *r0,BIGNUM *I,RSA *rsa); /* Can be null */ + int (*bn_mod_exp)(BIGNUM *r, BIGNUM *a, BIGNUM *p, BIGNUM *m, + BN_CTX *ctx,BN_MONT_CTX *m_ctx); /* Can be null */ + int (*init)(RSA *rsa); /* called at new */ + int (*finish)(RSA *rsa); /* called at free */ +#else int (*rsa_pub_enc)(); int (*rsa_pub_dec)(); int (*rsa_priv_enc)(); @@ -77,12 +94,12 @@ typedef struct rsa_meth_st int (*bn_mod_exp)(); /* Can be null */ int (*init)(/* RSA * */); /* called at new */ int (*finish)(/* RSA * */); /* called at free */ - +#endif int flags; /* RSA_METHOD_FLAG_* things */ char *app_data; /* may be needed! */ } RSA_METHOD; -typedef struct rsa_st +struct rsa_st { /* The first parameter is used to pickup errors where * this is passed instead of aEVP_PKEY, it is set to 0 */ @@ -102,16 +119,16 @@ typedef struct rsa_st int references; int flags; - /* Normally used to cache montgomery values */ - char *method_mod_n; - char *method_mod_p; - char *method_mod_q; + /* Used to cache montgomery values */ + BN_MONT_CTX *_method_mod_n; + BN_MONT_CTX *_method_mod_p; + BN_MONT_CTX *_method_mod_q; /* all BIGNUM values are actually in the following data, if it is not * NULL */ char *bignum_data; BN_BLINDING *blinding; - } RSA; + }; #define RSA_3 0x3L #define RSA_F4 0x10001L diff --git a/crypto/rsa/rsa_eay.c b/crypto/rsa/rsa_eay.c index 7623189e41..b4050506c3 100644 --- a/crypto/rsa/rsa_eay.c +++ b/crypto/rsa/rsa_eay.c @@ -144,15 +144,15 @@ int padding; if (BN_bin2bn(buf,num,&f) == NULL) goto err; - if ((rsa->method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) + if ((rsa->_method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) { - if ((rsa->method_mod_n=(char *)BN_MONT_CTX_new()) != NULL) - if (!BN_MONT_CTX_set((BN_MONT_CTX *)rsa->method_mod_n, - rsa->n,ctx)) goto err; + if ((rsa->_method_mod_n=BN_MONT_CTX_new()) != NULL) + if (!BN_MONT_CTX_set(rsa->_method_mod_n,rsa->n,ctx)) + goto err; } if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, - rsa->method_mod_n)) goto err; + rsa->_method_mod_n)) goto err; /* put in leading 0 bytes if the number is less than the * length of the modulus */ @@ -380,15 +380,15 @@ int padding; if (BN_bin2bn(from,flen,&f) == NULL) goto err; /* do the decrypt */ - if ((rsa->method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) + if ((rsa->_method_mod_n == NULL) && (rsa->flags & RSA_FLAG_CACHE_PUBLIC)) { - if ((rsa->method_mod_n=(char *)BN_MONT_CTX_new()) != NULL) - if (!BN_MONT_CTX_set((BN_MONT_CTX *)rsa->method_mod_n, - rsa->n,ctx)) goto err; + if ((rsa->_method_mod_n=BN_MONT_CTX_new()) != NULL) + if (!BN_MONT_CTX_set(rsa->_method_mod_n,rsa->n,ctx)) + goto err; } if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, - rsa->method_mod_n)) goto err; + rsa->_method_mod_n)) goto err; p=buf; i=BN_bn2bin(&ret,p); @@ -435,31 +435,29 @@ RSA *rsa; if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) { - if (rsa->method_mod_p == NULL) + if (rsa->_method_mod_p == NULL) { - if ((rsa->method_mod_p=(char *) - BN_MONT_CTX_new()) != NULL) - if (!BN_MONT_CTX_set((BN_MONT_CTX *) - rsa->method_mod_p,rsa->p,ctx)) + if ((rsa->_method_mod_p=BN_MONT_CTX_new()) != NULL) + if (!BN_MONT_CTX_set(rsa->_method_mod_p,rsa->p, + ctx)) goto err; } - if (rsa->method_mod_q == NULL) + if (rsa->_method_mod_q == NULL) { - if ((rsa->method_mod_q=(char *) - BN_MONT_CTX_new()) != NULL) - if (!BN_MONT_CTX_set((BN_MONT_CTX *) - rsa->method_mod_q,rsa->q,ctx)) + if ((rsa->_method_mod_q=BN_MONT_CTX_new()) != NULL) + if (!BN_MONT_CTX_set(rsa->_method_mod_q,rsa->q, + ctx)) goto err; } } if (!BN_mod(&r1,I,rsa->q,ctx)) goto err; if (!rsa->meth->bn_mod_exp(&m1,&r1,rsa->dmq1,rsa->q,ctx, - rsa->method_mod_q)) goto err; + rsa->_method_mod_q)) goto err; if (!BN_mod(&r1,I,rsa->p,ctx)) goto err; if (!rsa->meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx, - rsa->method_mod_p)) goto err; + rsa->_method_mod_p)) goto err; if (!BN_sub(r0,r0,&m1)) goto err; /* This will help stop the size of r0 increasing, which does @@ -490,12 +488,12 @@ RSA *rsa; static int RSA_eay_finish(rsa) RSA *rsa; { - if (rsa->method_mod_n != NULL) - BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_n); - if (rsa->method_mod_p != NULL) - BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_p); - if (rsa->method_mod_q != NULL) - BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_q); + if (rsa->_method_mod_n != NULL) + BN_MONT_CTX_free(rsa->_method_mod_n); + if (rsa->_method_mod_p != NULL) + BN_MONT_CTX_free(rsa->_method_mod_p); + if (rsa->_method_mod_q != NULL) + BN_MONT_CTX_free(rsa->_method_mod_q); return(1); } diff --git a/crypto/rsa/rsa_lib.c b/crypto/rsa/rsa_lib.c index 48b87651ae..dc996fc4f1 100644 --- a/crypto/rsa/rsa_lib.c +++ b/crypto/rsa/rsa_lib.c @@ -116,9 +116,9 @@ RSA_METHOD *meth; ret->dmq1=NULL; ret->iqmp=NULL; ret->references=1; - ret->method_mod_n=NULL; - ret->method_mod_p=NULL; - ret->method_mod_q=NULL; + ret->_method_mod_n=NULL; + ret->_method_mod_p=NULL; + ret->_method_mod_q=NULL; ret->blinding=NULL; ret->bignum_data=NULL; ret->flags=ret->meth->flags; @@ -283,8 +283,8 @@ BN_CTX *p_ctx; if (!BN_rand(A,BN_num_bits(rsa->n)-1,1,0)) goto err; if ((Ai=BN_mod_inverse(NULL,A,rsa->n,ctx)) == NULL) goto err; - if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx, - (char *)rsa->method_mod_n)) goto err; + if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n)) + goto err; rsa->blinding=BN_BLINDING_new(A,Ai,rsa->n); ctx->tos--; rsa->flags|=RSA_FLAG_BLINDING;