OpenSSL CVS Repository
http://cvs.openssl.org/
____________________________________________________________
________________
Server: cvs.openssl.org Name: Dr.
Stephen Henson
Root: /v/openssl/cvs Email: steve openssl.org
Module: openssl Date:
13-Apr-2006 14:56:41
Branch: HEAD Handle:
2006041313563902
Modified files:
openssl/crypto/dh dh_pmeth.c
openssl/crypto/dsa dsa_pmeth.c
openssl/crypto/evp evp.h evp_err.c evp_locl.h
pmeth_fn.c pmeth_lib.c
openssl/crypto/rsa rsa_pmeth.c
Log:
Add key derivation support.
Summary:
Revision Changes Path
1.3 +2 -0 openssl/crypto/dh/dh_pmeth.c
1.3 +2 -0 openssl/crypto/dsa/dsa_pmeth.c
1.140 +2 -0 openssl/crypto/evp/evp.h
1.36 +2 -0 openssl/crypto/evp/evp_err.c
1.19 +5 -0 openssl/crypto/evp/evp_locl.h
1.5 +35 -0 openssl/crypto/evp/pmeth_fn.c
1.13 +1 -0 openssl/crypto/evp/pmeth_lib.c
1.18 +2 -0 openssl/crypto/rsa/rsa_pmeth.c
____________________________________________________________
________________
patch -p0 <<' .'
Index: openssl/crypto/dh/dh_pmeth.c
============================================================
================
$ cvs diff -u -r1.2 -r1.3 dh_pmeth.c
--- openssl/crypto/dh/dh_pmeth.c 13 Apr 2006 00:26:05
-0000 1.2
+++ openssl/crypto/dh/dh_pmeth.c 13 Apr 2006 12:56:39
-0000 1.3
 -209,6 +209,8 
0,0,
+ 0,0,
+
pkey_dh_ctrl,
pkey_dh_ctrl_str
 .
patch -p0 <<' .'
Index: openssl/crypto/dsa/dsa_pmeth.c
============================================================
================
$ cvs diff -u -r1.2 -r1.3 dsa_pmeth.c
--- openssl/crypto/dsa/dsa_pmeth.c 12 Apr 2006 11:14:11
-0000 1.2
+++ openssl/crypto/dsa/dsa_pmeth.c 13 Apr 2006 12:56:40
-0000 1.3
 -245,6 +245,8 
0,0,
+ 0,0,
+
pkey_dsa_ctrl,
pkey_dsa_ctrl_str
 .
patch -p0 <<' .'
Index: openssl/crypto/evp/evp.h
============================================================
================
$ cvs diff -u -r1.139 -r1.140 evp.h
--- openssl/crypto/evp/evp.h 12 Apr 2006 10:20:46
-0000 1.139
+++ openssl/crypto/evp/evp.h 13 Apr 2006 12:56:40
-0000 1.140
 -1016,6 +1016,8 
#define EVP_F_EVP_PKEY_DECRYPT 104
#define EVP_F_EVP_PKEY_DECRYPT_INIT 138
#define EVP_F_EVP_PKEY_DECRYPT_OLD 151
+#define EVP_F_EVP_PKEY_DERIVE 153
+#define EVP_F_EVP_PKEY_DERIVE_INIT 154
#define EVP_F_EVP_PKEY_ENCRYPT 105
#define EVP_F_EVP_PKEY_ENCRYPT_INIT 139
#define EVP_F_EVP_PKEY_ENCRYPT_OLD 152
 .
patch -p0 <<' .'
Index: openssl/crypto/evp/evp_err.c
============================================================
================
$ cvs diff -u -r1.35 -r1.36 evp_err.c
--- openssl/crypto/evp/evp_err.c 12 Apr 2006 10:20:46
-0000 1.35
+++ openssl/crypto/evp/evp_err.c 13 Apr 2006 12:56:40
-0000 1.36
 -95,6 +95,8 
{ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT), "EVP_PKEY_decrypt&
quot;},
{ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT_INIT), "EVP_PKEY_decr
ypt_init"},
{ERR_FUNC(EVP_F_EVP_PKEY_DECRYPT_OLD), "EVP_PKEY_decry
pt_old"},
+{ERR_FUNC(EVP_F_EVP_PKEY_DERIVE), "EVP_PKEY_DERIVE&q
uot;},
+{ERR_FUNC(EVP_F_EVP_PKEY_DERIVE_INIT), "EVP_PKEY_DERI
VE_INIT"},
{ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT), "EVP_PKEY_encrypt&
quot;},
{ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT_INIT), "EVP_PKEY_encr
ypt_init"},
{ERR_FUNC(EVP_F_EVP_PKEY_ENCRYPT_OLD), "EVP_PKEY_encry
pt_old"},
 .
patch -p0 <<' .'
Index: openssl/crypto/evp/evp_locl.h
============================================================
================
$ cvs diff -u -r1.18 -r1.19 evp_locl.h
--- openssl/crypto/evp/evp_locl.h 11 Apr 2006 13:28:52
-0000 1.18
+++ openssl/crypto/evp/evp_locl.h 13 Apr 2006 12:56:40
-0000 1.19
 -241,6 +241,8 
const EVP_PKEY_METHOD *pmeth;
/* Key: may be NULL */
EVP_PKEY *pkey;
+ /* Peer key for key agreement, may be NULL */
+ EVP_PKEY *peerkey;
/* Actual operation */
int operation;
/* Algorithm specific data */
 -297,6 +299,9 
int (*decrypt)(EVP_PKEY_CTX *ctx, unsigned char *out,
int *outlen,
const unsigned char *in, int inlen);
+ int (*derive_init)(EVP_PKEY_CTX *ctx);
+ int (*derive)(EVP_PKEY_CTX *ctx, unsigned char *key, int
*keylen);
+
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);
 .
patch -p0 <<' .'
Index: openssl/crypto/evp/pmeth_fn.c
============================================================
================
$ cvs diff -u -r1.4 -r1.5 pmeth_fn.c
--- openssl/crypto/evp/pmeth_fn.c 9 Apr 2006 20:53:19
-0000 1.4
+++ openssl/crypto/evp/pmeth_fn.c 13 Apr 2006 12:56:40
-0000 1.5
 -243,3 +243,38 
return ctx->pmeth->decrypt(ctx, out, outlen, in,
inlen);
}
+
+int EVP_PKEY_derive_init(EVP_PKEY_CTX *ctx)
+ {
+ int ret;
+ if (!ctx || !ctx->pmeth || !ctx->pmeth->derive)
+ {
+ EVPerr(EVP_F_EVP_PKEY_DERIVE_INIT,
+ EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
+ return -2;
+ }
+ ctx->operation = EVP_PKEY_OP_DERIVE;
+ if (!ctx->pmeth->derive_init)
+ return 1;
+ ret = ctx->pmeth->derive_init(ctx);
+ if (ret <= 0)
+ ctx->operation = EVP_PKEY_OP_UNDEFINED;
+ return ret;
+ }
+
+int EVP_PKEY_derive(EVP_PKEY_CTX *ctx, unsigned char
*key, int *pkeylen)
+ {
+ if (!ctx || !ctx->pmeth || !ctx->pmeth->derive)
+ {
+ EVPerr(EVP_F_EVP_PKEY_DERIVE,
+ EVP_R_OPERATION_NOT_SUPPORTED_FOR_THIS_KEYTYPE);
+ return -2;
+ }
+ if (ctx->operation != EVP_PKEY_OP_DERIVE)
+ {
+ EVPerr(EVP_F_EVP_PKEY_DERIVE,
EVP_R_OPERATON_NOT_INITIALIZED);
+ return -1;
+ }
+ return ctx->pmeth->derive(ctx, key, pkeylen);
+ }
+
 .
patch -p0 <<' .'
Index: openssl/crypto/evp/pmeth_lib.c
============================================================
================
$ cvs diff -u -r1.12 -r1.13 pmeth_lib.c
--- openssl/crypto/evp/pmeth_lib.c 12 Apr 2006 23:51:24
-0000 1.12
+++ openssl/crypto/evp/pmeth_lib.c 13 Apr 2006 12:56:40
-0000 1.13
 -120,6 +120,7 
ret->pmeth = pmeth;
ret->operation = EVP_PKEY_OP_UNDEFINED;
ret->pkey = pkey;
+ ret->peerkey = NULL;
if (pkey)
CRYPTO_add(&pkey->references,1,CRYPTO_LOCK_EVP_PKEY
);
ret->data = NULL;
 .
patch -p0 <<' .'
Index: openssl/crypto/rsa/rsa_pmeth.c
============================================================
================
$ cvs diff -u -r1.17 -r1.18 rsa_pmeth.c
--- openssl/crypto/rsa/rsa_pmeth.c 12 Apr 2006 10:20:47
-0000 1.17
+++ openssl/crypto/rsa/rsa_pmeth.c 13 Apr 2006 12:56:41
-0000 1.18
 -524,6 +524,8 
0,
pkey_rsa_decrypt,
+ 0,0,
+
pkey_rsa_ctrl,
pkey_rsa_ctrl_str
 .
____________________________________________________________
__________
OpenSSL Project http://www.openssl.org
CVS Repository Commit List
openssl-cvs openssl.org
Automated List Manager
majordomo openssl.org
|