summaryrefslogtreecommitdiff
path: root/src/lib/libssl/src/crypto/evp/evp_pkey.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/libssl/src/crypto/evp/evp_pkey.c')
-rw-r--r--src/lib/libssl/src/crypto/evp/evp_pkey.c24
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
65static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8inf, EVP_PKEY *pkey); 66static 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
69EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8) 71EVP_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
300static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey) 304static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
301{ 305{
302 ASN1_STRING *params; 306 ASN1_STRING *params;