diff options
author | beck <> | 2002-05-15 02:29:21 +0000 |
---|---|---|
committer | beck <> | 2002-05-15 02:29:21 +0000 |
commit | b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9 (patch) | |
tree | fa27cf82a1250b64ed3bf5f4a18c7354d470bbcc /src/lib/libssl/src/crypto/evp/evp_pkey.c | |
parent | e471e1ea98d673597b182ea85f29e30c97cd08b5 (diff) | |
download | openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.gz openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.tar.bz2 openbsd-b64270d1e45fe7f3241e4c9b6ce60d5ac89bc2e9.zip |
OpenSSL 0.9.7 stable 2002 05 08 merge
Diffstat (limited to 'src/lib/libssl/src/crypto/evp/evp_pkey.c')
-rw-r--r-- | src/lib/libssl/src/crypto/evp/evp_pkey.c | 24 |
1 files changed, 14 insertions, 10 deletions
diff --git a/src/lib/libssl/src/crypto/evp/evp_pkey.c b/src/lib/libssl/src/crypto/evp/evp_pkey.c index 8df2874f3c..34b5b1d21c 100644 --- a/src/lib/libssl/src/crypto/evp/evp_pkey.c +++ b/src/lib/libssl/src/crypto/evp/evp_pkey.c | |||
@@ -62,17 +62,19 @@ | |||
62 | #include <openssl/x509.h> | 62 | #include <openssl/x509.h> |
63 | #include <openssl/rand.h> | 63 | #include <openssl/rand.h> |
64 | 64 | ||
65 | #ifndef OPENSSL_NO_DSA | ||
65 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8inf, EVP_PKEY *pkey); | 66 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8inf, EVP_PKEY *pkey); |
67 | #endif | ||
66 | 68 | ||
67 | /* Extract a private key from a PKCS8 structure */ | 69 | /* Extract a private key from a PKCS8 structure */ |
68 | 70 | ||
69 | EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) | 71 | EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) |
70 | { | 72 | { |
71 | EVP_PKEY *pkey = NULL; | 73 | EVP_PKEY *pkey = NULL; |
72 | #ifndef NO_RSA | 74 | #ifndef OPENSSL_NO_RSA |
73 | RSA *rsa = NULL; | 75 | RSA *rsa = NULL; |
74 | #endif | 76 | #endif |
75 | #ifndef NO_DSA | 77 | #ifndef OPENSSL_NO_DSA |
76 | DSA *dsa = NULL; | 78 | DSA *dsa = NULL; |
77 | ASN1_INTEGER *privkey; | 79 | ASN1_INTEGER *privkey; |
78 | ASN1_TYPE *t1, *t2, *param = NULL; | 80 | ASN1_TYPE *t1, *t2, *param = NULL; |
@@ -82,6 +84,7 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) | |||
82 | #endif | 84 | #endif |
83 | X509_ALGOR *a; | 85 | X509_ALGOR *a; |
84 | unsigned char *p; | 86 | unsigned char *p; |
87 | const unsigned char *cp; | ||
85 | int pkeylen; | 88 | int pkeylen; |
86 | char obj_tmp[80]; | 89 | char obj_tmp[80]; |
87 | 90 | ||
@@ -101,16 +104,17 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) | |||
101 | a = p8->pkeyalg; | 104 | a = p8->pkeyalg; |
102 | switch (OBJ_obj2nid(a->algorithm)) | 105 | switch (OBJ_obj2nid(a->algorithm)) |
103 | { | 106 | { |
104 | #ifndef NO_RSA | 107 | #ifndef OPENSSL_NO_RSA |
105 | case NID_rsaEncryption: | 108 | case NID_rsaEncryption: |
106 | if (!(rsa = d2i_RSAPrivateKey (NULL, &p, pkeylen))) { | 109 | cp = p; |
110 | if (!(rsa = d2i_RSAPrivateKey (NULL,&cp, pkeylen))) { | ||
107 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); | 111 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); |
108 | return NULL; | 112 | return NULL; |
109 | } | 113 | } |
110 | EVP_PKEY_assign_RSA (pkey, rsa); | 114 | EVP_PKEY_assign_RSA (pkey, rsa); |
111 | break; | 115 | break; |
112 | #endif | 116 | #endif |
113 | #ifndef NO_DSA | 117 | #ifndef OPENSSL_NO_DSA |
114 | case NID_dsa: | 118 | case NID_dsa: |
115 | /* PKCS#8 DSA is weird: you just get a private key integer | 119 | /* PKCS#8 DSA is weird: you just get a private key integer |
116 | * and parameters in the AlgorithmIdentifier the pubkey must | 120 | * and parameters in the AlgorithmIdentifier the pubkey must |
@@ -163,9 +167,9 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) | |||
163 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); | 167 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); |
164 | goto dsaerr; | 168 | goto dsaerr; |
165 | } | 169 | } |
166 | p = param->value.sequence->data; | 170 | cp = p = param->value.sequence->data; |
167 | plen = param->value.sequence->length; | 171 | plen = param->value.sequence->length; |
168 | if (!(dsa = d2i_DSAparams (NULL, &p, plen))) { | 172 | if (!(dsa = d2i_DSAparams (NULL, &cp, plen))) { |
169 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); | 173 | EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_DECODE_ERROR); |
170 | goto dsaerr; | 174 | goto dsaerr; |
171 | } | 175 | } |
@@ -239,7 +243,7 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken) | |||
239 | } | 243 | } |
240 | p8->pkey->type = V_ASN1_OCTET_STRING; | 244 | p8->pkey->type = V_ASN1_OCTET_STRING; |
241 | switch (EVP_PKEY_type(pkey->type)) { | 245 | switch (EVP_PKEY_type(pkey->type)) { |
242 | #ifndef NO_RSA | 246 | #ifndef OPENSSL_NO_RSA |
243 | case EVP_PKEY_RSA: | 247 | case EVP_PKEY_RSA: |
244 | 248 | ||
245 | if(p8->broken == PKCS8_NO_OCTET) p8->pkey->type = V_ASN1_SEQUENCE; | 249 | if(p8->broken == PKCS8_NO_OCTET) p8->pkey->type = V_ASN1_SEQUENCE; |
@@ -254,7 +258,7 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken) | |||
254 | } | 258 | } |
255 | break; | 259 | break; |
256 | #endif | 260 | #endif |
257 | #ifndef NO_DSA | 261 | #ifndef OPENSSL_NO_DSA |
258 | case EVP_PKEY_DSA: | 262 | case EVP_PKEY_DSA: |
259 | if(!dsa_pkey2pkcs8(p8, pkey)) { | 263 | if(!dsa_pkey2pkcs8(p8, pkey)) { |
260 | PKCS8_PRIV_KEY_INFO_free (p8); | 264 | PKCS8_PRIV_KEY_INFO_free (p8); |
@@ -296,7 +300,7 @@ PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken) | |||
296 | } | 300 | } |
297 | } | 301 | } |
298 | 302 | ||
299 | #ifndef NO_DSA | 303 | #ifndef OPENSSL_NO_DSA |
300 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) | 304 | static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) |
301 | { | 305 | { |
302 | ASN1_STRING *params; | 306 | ASN1_STRING *params; |