List Info

Thread: OpenSSL: openssl/crypto/evp/ evp.h evp_locl.h pmeth_lib.c




OpenSSL: openssl/crypto/evp/ evp.h evp_locl.h pmeth_lib.c
user name
2006-04-14 12:41:35
  OpenSSL CVS Repository
  http://cvs.openssl.org/
 
____________________________________________________________
________________

  Server: cvs.openssl.org                  Name:   Dr.
Stephen Henson
  Root:   /v/openssl/cvs                   Email:  steveopenssl.org
  Module: openssl                          Date:  
14-Apr-2006 14:41:35
  Branch: HEAD                             Handle:
2006041413413401

  Modified files:
    openssl/crypto/evp      evp.h evp_locl.h pmeth_lib.c

  Log:
    Add functions to allow setting and adding external
EVP_PKEY_METHOD.

  Summary:
    Revision    Changes     Path
    1.142       +59 -0      openssl/crypto/evp/evp.h
    1.20        +2  -0      openssl/crypto/evp/evp_locl.h
    1.15        +167 -0     openssl/crypto/evp/pmeth_lib.c
 
____________________________________________________________
________________

  patch -p0 <<' .'
  Index: openssl/crypto/evp/evp.h
 
============================================================
================
  $ cvs diff -u -r1.141 -r1.142 evp.h
  --- openssl/crypto/evp/evp.h	13 Apr 2006 20:16:55
-0000	1.141
  +++ openssl/crypto/evp/evp.h	14 Apr 2006 12:41:34
-0000	1.142
   -987,6 +987,65 
   void EVP_PKEY_CTX_set_cb(EVP_PKEY_CTX *ctx,
EVP_PKEY_gen_cb *cb);
   int EVP_PKEY_CTX_get_keygen_info(EVP_PKEY_CTX *ctx, int
idx);
   
  +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
  +	int (*init)(EVP_PKEY_CTX *ctx));
  +
  +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
  +	void (*cleanup)(EVP_PKEY_CTX *ctx));
  +
  +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
  +	int (*paramgen_init)(EVP_PKEY_CTX *ctx),
  +	int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
  +
  +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
  +	int (*keygen_init)(EVP_PKEY_CTX *ctx),
  +	int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey));
  +
  +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
  +	int (*sign_init)(EVP_PKEY_CTX *ctx),
  +	int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, int
*siglen,
  +					const unsigned char *tbs, int tbslen));
  +
  +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
  +	int (*verify_init)(EVP_PKEY_CTX *ctx),
  +	int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char
*sig, int siglen,
  +					const unsigned char *tbs, int tbslen));
  +
  +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD
*pmeth,
  +	int (*verify_recover_init)(EVP_PKEY_CTX *ctx),
  +	int (*verify_recover)(EVP_PKEY_CTX *ctx,
  +					unsigned char *sig, int *siglen,
  +					const unsigned char *tbs, int tbslen));
  +
  +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
  +	int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX
*mctx),
  +	int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig,
int *siglen,
  +					EVP_MD_CTX *mctx));
  +
  +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
  +	int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX
*mctx),
  +	int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char
*sig,int siglen,
  +					EVP_MD_CTX *mctx));
  +
  +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
  +	int (*encrypt_init)(EVP_PKEY_CTX *ctx),
  +	int (*encrypt)(EVP_PKEY_CTX *ctx, unsigned char *out,
int *outlen,
  +					const unsigned char *in, int inlen));
  +
  +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
  +	int (*decrypt_init)(EVP_PKEY_CTX *ctx),
  +	int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out,
int *outlen,
  +					const unsigned char *in, int inlen));
  +
  +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
  +	int (*derive_init)(EVP_PKEY_CTX *ctx),
  +	int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, int
*keylen));
  +
  +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
  +	int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void
*p2),
  +	int (*ctrl_str)(EVP_PKEY_CTX *ctx,
  +					const char *type, const char *value));
  +
   /* BEGIN ERROR CODES */
   /* The following lines are auto generated by the script
mkerr.pl. Any changes
    * made after this point may be overwritten when the
script is next run.
   .
  patch -p0 <<' .'
  Index: openssl/crypto/evp/evp_locl.h
 
============================================================
================
  $ cvs diff -u -r1.19 -r1.20 evp_locl.h
  --- openssl/crypto/evp/evp_locl.h	13 Apr 2006 12:56:40
-0000	1.19
  +++ openssl/crypto/evp/evp_locl.h	14 Apr 2006 12:41:34
-0000	1.20
   -256,6 +256,8 
   	int keygen_info_count;
   	} /* EVP_PKEY_CTX */;
   
  +#define EVP_PKEY_DYNAMIC	1
  +
   struct evp_pkey_method_st
   	{
   	int pkey_id;
   .
  patch -p0 <<' .'
  Index: openssl/crypto/evp/pmeth_lib.c
 
============================================================
================
  $ cvs diff -u -r1.14 -r1.15 pmeth_lib.c
  --- openssl/crypto/evp/pmeth_lib.c	13 Apr 2006 20:16:56
-0000	1.14
  +++ openssl/crypto/evp/pmeth_lib.c	14 Apr 2006 12:41:35
-0000	1.15
   -64,6 +64,7 
   #include "asn1_locl.h"
   #include "evp_locl.h"
   
  +typedef int sk_cmp_fn_type(const char * const *a, const
char * const *b);
   STACK *app_pkey_methods = NULL;
   
   extern EVP_PKEY_METHOD rsa_pkey_meth, dh_pkey_meth,
dsa_pkey_meth;
   -137,6 +138,50 
   	return ret;
   	}
   
  +EVP_PKEY_METHOD* EVP_PKEY_meth_new(int id, int flags)
  +	{
  +	EVP_PKEY_METHOD *pmeth;
  +	pmeth = OPENSSL_malloc(sizeof(EVP_PKEY_METHOD));
  +	if (!pmeth)
  +		return NULL;
  +
  +	pmeth->pkey_id = id;
  +	pmeth->flags = flags | EVP_PKEY_DYNAMIC;
  +
  +	pmeth->init = 0;
  +	pmeth->cleanup = 0;
  +	pmeth->paramgen_init = 0;
  +	pmeth->paramgen = 0;
  +	pmeth->keygen_init = 0;
  +	pmeth->keygen = 0;
  +	pmeth->sign_init = 0;
  +	pmeth->sign = 0;
  +	pmeth->verify_init = 0;
  +	pmeth->verify = 0;
  +	pmeth->verify_recover_init = 0;
  +	pmeth->verify_recover = 0;
  +	pmeth->signctx_init = 0;
  +	pmeth->signctx = 0;
  +	pmeth->verifyctx_init = 0;
  +	pmeth->verifyctx = 0;
  +	pmeth->encrypt_init = 0;
  +	pmeth->encrypt = 0;
  +	pmeth->decrypt_init = 0;
  +	pmeth->decrypt = 0;
  +	pmeth->derive_init = 0;
  +	pmeth->derive = 0;
  +	pmeth->ctrl = 0;
  +	pmeth->ctrl_str = 0;
  +
  +	return pmeth;
  +	}
  +
  +void EVP_PKEY_meth_free(EVP_PKEY_METHOD *pmeth)
  +	{
  +	if (pmeth && (pmeth->flags &
EVP_PKEY_DYNAMIC))
  +		OPENSSL_free(pmeth);
  +	}
  +
   EVP_PKEY_CTX *EVP_PKEY_CTX_new(EVP_PKEY *pkey, ENGINE *e)
   	{
   	return int_ctx_new(pkey, e, -1);
   -147,6 +192,20 
   	return int_ctx_new(NULL, e, id);
   	}
   
  +int EVP_PKEY_meth_add0(const EVP_PKEY_METHOD *pmeth)
  +	{
  +	if (app_pkey_methods == NULL)
  +		{
  +		app_pkey_methods = sk_new((sk_cmp_fn_type *)pmeth_cmp);
  +		if (!app_pkey_methods)
  +			return 0;
  +		}
  +	if (!sk_push(app_pkey_methods, (char *)pmeth))
  +		return 0;
  +	sk_sort(app_pkey_methods);
  +	return 1;
  +	}
  +
   void EVP_PKEY_CTX_free(EVP_PKEY_CTX *ctx)
   	{
   	if (ctx->pmeth && ctx->pmeth->cleanup)
   -233,3 +292,111 
   	{
   	return ctx->app_data;
   	}
  +
  +void EVP_PKEY_meth_set_init(EVP_PKEY_METHOD *pmeth,
  +	int (*init)(EVP_PKEY_CTX *ctx))
  +	{
  +	pmeth->init = init;
  +	}
  +
  +void EVP_PKEY_meth_set_cleanup(EVP_PKEY_METHOD *pmeth,
  +	void (*cleanup)(EVP_PKEY_CTX *ctx))
  +	{
  +	pmeth->cleanup = cleanup;
  +	}
  +
  +void EVP_PKEY_meth_set_paramgen(EVP_PKEY_METHOD *pmeth,
  +	int (*paramgen_init)(EVP_PKEY_CTX *ctx),
  +	int (*paramgen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey))
  +	{
  +	pmeth->paramgen_init = paramgen_init;
  +	pmeth->paramgen = paramgen;
  +	}
  +
  +void EVP_PKEY_meth_set_keygen(EVP_PKEY_METHOD *pmeth,
  +	int (*keygen_init)(EVP_PKEY_CTX *ctx),
  +	int (*keygen)(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey))
  +	{
  +	pmeth->keygen_init = keygen_init;
  +	pmeth->keygen = keygen;
  +	}
  +
  +void EVP_PKEY_meth_set_sign(EVP_PKEY_METHOD *pmeth,
  +	int (*sign_init)(EVP_PKEY_CTX *ctx),
  +	int (*sign)(EVP_PKEY_CTX *ctx, unsigned char *sig, int
*siglen,
  +					const unsigned char *tbs, int tbslen))
  +	{
  +	pmeth->sign_init = sign_init;
  +	pmeth->sign = sign;
  +	}
  +
  +void EVP_PKEY_meth_set_verify(EVP_PKEY_METHOD *pmeth,
  +	int (*verify_init)(EVP_PKEY_CTX *ctx),
  +	int (*verify)(EVP_PKEY_CTX *ctx, const unsigned char
*sig, int siglen,
  +					const unsigned char *tbs, int tbslen))
  +	{
  +	pmeth->verify_init = verify_init;
  +	pmeth->verify = verify;
  +	}
  +
  +void EVP_PKEY_meth_set_verify_recover(EVP_PKEY_METHOD
*pmeth,
  +	int (*verify_recover_init)(EVP_PKEY_CTX *ctx),
  +	int (*verify_recover)(EVP_PKEY_CTX *ctx,
  +					unsigned char *sig, int *siglen,
  +					const unsigned char *tbs, int tbslen))
  +	{
  +	pmeth->verify_recover_init = verify_recover_init;
  +	pmeth->verify_recover = verify_recover;
  +	}
  +
  +void EVP_PKEY_meth_set_signctx(EVP_PKEY_METHOD *pmeth,
  +	int (*signctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX
*mctx),
  +	int (*signctx)(EVP_PKEY_CTX *ctx, unsigned char *sig,
int *siglen,
  +					EVP_MD_CTX *mctx))
  +	{
  +	pmeth->signctx_init = signctx_init;
  +	pmeth->signctx = signctx;
  +	}
  +
  +void EVP_PKEY_meth_set_verifyctx(EVP_PKEY_METHOD *pmeth,
  +	int (*verifyctx_init)(EVP_PKEY_CTX *ctx, EVP_MD_CTX
*mctx),
  +	int (*verifyctx)(EVP_PKEY_CTX *ctx, const unsigned char
*sig,int siglen,
  +					EVP_MD_CTX *mctx))
  +	{
  +	pmeth->verifyctx_init = verifyctx_init;
  +	pmeth->verifyctx = verifyctx;
  +	}
  +
  +void EVP_PKEY_meth_set_encrypt(EVP_PKEY_METHOD *pmeth,
  +	int (*encrypt_init)(EVP_PKEY_CTX *ctx),
  +	int (*encrypt)(EVP_PKEY_CTX *ctx, unsigned char *out,
int *outlen,
  +					const unsigned char *in, int inlen))
  +	{
  +	pmeth->encrypt_init = encrypt_init;
  +	pmeth->encrypt = encrypt;
  +	}
  +
  +void EVP_PKEY_meth_set_decrypt(EVP_PKEY_METHOD *pmeth,
  +	int (*decrypt_init)(EVP_PKEY_CTX *ctx),
  +	int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out,
int *outlen,
  +					const unsigned char *in, int inlen))
  +	{
  +	pmeth->decrypt_init = decrypt_init;
  +	pmeth->decrypt = decrypt;
  +	}
  +
  +void EVP_PKEY_meth_set_derive(EVP_PKEY_METHOD *pmeth,
  +	int (*derive_init)(EVP_PKEY_CTX *ctx),
  +	int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, int
*keylen))
  +	{
  +	pmeth->derive_init = derive_init;
  +	pmeth->derive = derive;
  +	}
  +
  +void EVP_PKEY_meth_set_ctrl(EVP_PKEY_METHOD *pmeth,
  +	int (*ctrl)(EVP_PKEY_CTX *ctx, int type, int p1, void
*p2),
  +	int (*ctrl_str)(EVP_PKEY_CTX *ctx, const char *type,
const char *value))
  +	{
  +	pmeth->ctrl = ctrl;
  +	pmeth->ctrl_str = ctrl_str;
  +	}
   .
____________________________________________________________
__________
OpenSSL Project                                 http://www.openssl.org
CVS Repository Commit List                    
openssl-cvsopenssl.org
Automated List Manager                          
majordomoopenssl.org
[1]

about | contact  Other archives ( Real Estate discussion Medical topics )