Add prototypes. Make Montgomery stuff explicitly for that purpose.

This commit is contained in:
Ben Laurie 1998-12-29 17:22:31 +00:00
parent cb496082f8
commit 03f8b04277
4 changed files with 60 additions and 41 deletions

View File

@ -5,6 +5,10 @@
Changes between 0.9.1c and 0.9.1d 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 <ulf@fitug.de>]
*) Autodetect FreeBSD3. *) Autodetect FreeBSD3.
[Ben Laurie] [Ben Laurie]
@ -79,7 +83,7 @@
*) The Genesis of the OpenSSL rpject: *) The Genesis of the OpenSSL rpject:
We start with the latest (unreleased) SSLeay version 0.9.1b which Eric A. 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. summer 1998.
[The OpenSSL Project] [The OpenSSL Project]

View File

@ -66,9 +66,26 @@ extern "C" {
#include "bn.h" #include "bn.h"
#include "crypto.h" #include "crypto.h"
typedef struct rsa_st RSA;
typedef struct rsa_meth_st typedef struct rsa_meth_st
{ {
char *name; 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_enc)();
int (*rsa_pub_dec)(); int (*rsa_pub_dec)();
int (*rsa_priv_enc)(); int (*rsa_priv_enc)();
@ -77,12 +94,12 @@ typedef struct rsa_meth_st
int (*bn_mod_exp)(); /* Can be null */ int (*bn_mod_exp)(); /* Can be null */
int (*init)(/* RSA * */); /* called at new */ int (*init)(/* RSA * */); /* called at new */
int (*finish)(/* RSA * */); /* called at free */ int (*finish)(/* RSA * */); /* called at free */
#endif
int flags; /* RSA_METHOD_FLAG_* things */ int flags; /* RSA_METHOD_FLAG_* things */
char *app_data; /* may be needed! */ char *app_data; /* may be needed! */
} RSA_METHOD; } RSA_METHOD;
typedef struct rsa_st struct rsa_st
{ {
/* The first parameter is used to pickup errors where /* The first parameter is used to pickup errors where
* this is passed instead of aEVP_PKEY, it is set to 0 */ * this is passed instead of aEVP_PKEY, it is set to 0 */
@ -102,16 +119,16 @@ typedef struct rsa_st
int references; int references;
int flags; int flags;
/* Normally used to cache montgomery values */ /* Used to cache montgomery values */
char *method_mod_n; BN_MONT_CTX *_method_mod_n;
char *method_mod_p; BN_MONT_CTX *_method_mod_p;
char *method_mod_q; BN_MONT_CTX *_method_mod_q;
/* all BIGNUM values are actually in the following data, if it is not /* all BIGNUM values are actually in the following data, if it is not
* NULL */ * NULL */
char *bignum_data; char *bignum_data;
BN_BLINDING *blinding; BN_BLINDING *blinding;
} RSA; };
#define RSA_3 0x3L #define RSA_3 0x3L
#define RSA_F4 0x10001L #define RSA_F4 0x10001L

View File

@ -144,15 +144,15 @@ int padding;
if (BN_bin2bn(buf,num,&f) == NULL) goto err; 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 ((rsa->_method_mod_n=BN_MONT_CTX_new()) != NULL)
if (!BN_MONT_CTX_set((BN_MONT_CTX *)rsa->method_mod_n, if (!BN_MONT_CTX_set(rsa->_method_mod_n,rsa->n,ctx))
rsa->n,ctx)) goto err; goto err;
} }
if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, 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 /* put in leading 0 bytes if the number is less than the
* length of the modulus */ * length of the modulus */
@ -380,15 +380,15 @@ int padding;
if (BN_bin2bn(from,flen,&f) == NULL) goto err; if (BN_bin2bn(from,flen,&f) == NULL) goto err;
/* do the decrypt */ /* 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 ((rsa->_method_mod_n=BN_MONT_CTX_new()) != NULL)
if (!BN_MONT_CTX_set((BN_MONT_CTX *)rsa->method_mod_n, if (!BN_MONT_CTX_set(rsa->_method_mod_n,rsa->n,ctx))
rsa->n,ctx)) goto err; goto err;
} }
if (!rsa->meth->bn_mod_exp(&ret,&f,rsa->e,rsa->n,ctx, 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; p=buf;
i=BN_bn2bin(&ret,p); i=BN_bn2bin(&ret,p);
@ -435,31 +435,29 @@ RSA *rsa;
if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) 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 *) if ((rsa->_method_mod_p=BN_MONT_CTX_new()) != NULL)
BN_MONT_CTX_new()) != NULL) if (!BN_MONT_CTX_set(rsa->_method_mod_p,rsa->p,
if (!BN_MONT_CTX_set((BN_MONT_CTX *) ctx))
rsa->method_mod_p,rsa->p,ctx))
goto err; goto err;
} }
if (rsa->method_mod_q == NULL) if (rsa->_method_mod_q == NULL)
{ {
if ((rsa->method_mod_q=(char *) if ((rsa->_method_mod_q=BN_MONT_CTX_new()) != NULL)
BN_MONT_CTX_new()) != NULL) if (!BN_MONT_CTX_set(rsa->_method_mod_q,rsa->q,
if (!BN_MONT_CTX_set((BN_MONT_CTX *) ctx))
rsa->method_mod_q,rsa->q,ctx))
goto err; goto err;
} }
} }
if (!BN_mod(&r1,I,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, 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 (!BN_mod(&r1,I,rsa->p,ctx)) goto err;
if (!rsa->meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx, 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; if (!BN_sub(r0,r0,&m1)) goto err;
/* This will help stop the size of r0 increasing, which does /* This will help stop the size of r0 increasing, which does
@ -490,12 +488,12 @@ RSA *rsa;
static int RSA_eay_finish(rsa) static int RSA_eay_finish(rsa)
RSA *rsa; RSA *rsa;
{ {
if (rsa->method_mod_n != NULL) if (rsa->_method_mod_n != NULL)
BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_n); BN_MONT_CTX_free(rsa->_method_mod_n);
if (rsa->method_mod_p != NULL) if (rsa->_method_mod_p != NULL)
BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_p); BN_MONT_CTX_free(rsa->_method_mod_p);
if (rsa->method_mod_q != NULL) if (rsa->_method_mod_q != NULL)
BN_MONT_CTX_free((BN_MONT_CTX *)rsa->method_mod_q); BN_MONT_CTX_free(rsa->_method_mod_q);
return(1); return(1);
} }

View File

@ -116,9 +116,9 @@ RSA_METHOD *meth;
ret->dmq1=NULL; ret->dmq1=NULL;
ret->iqmp=NULL; ret->iqmp=NULL;
ret->references=1; ret->references=1;
ret->method_mod_n=NULL; ret->_method_mod_n=NULL;
ret->method_mod_p=NULL; ret->_method_mod_p=NULL;
ret->method_mod_q=NULL; ret->_method_mod_q=NULL;
ret->blinding=NULL; ret->blinding=NULL;
ret->bignum_data=NULL; ret->bignum_data=NULL;
ret->flags=ret->meth->flags; 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 (!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 ((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, if (!rsa->meth->bn_mod_exp(A,A,rsa->e,rsa->n,ctx,rsa->_method_mod_n))
(char *)rsa->method_mod_n)) goto err; goto err;
rsa->blinding=BN_BLINDING_new(A,Ai,rsa->n); rsa->blinding=BN_BLINDING_new(A,Ai,rsa->n);
ctx->tos--; ctx->tos--;
rsa->flags|=RSA_FLAG_BLINDING; rsa->flags|=RSA_FLAG_BLINDING;