diff options
Diffstat (limited to 'src/lib/libcrypto/pkcs12/p12_crt.c')
-rw-r--r-- | src/lib/libcrypto/pkcs12/p12_crt.c | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/src/lib/libcrypto/pkcs12/p12_crt.c b/src/lib/libcrypto/pkcs12/p12_crt.c index dbafda17b6..9748256b6f 100644 --- a/src/lib/libcrypto/pkcs12/p12_crt.c +++ b/src/lib/libcrypto/pkcs12/p12_crt.c | |||
@@ -63,6 +63,19 @@ | |||
63 | 63 | ||
64 | static int pkcs12_add_bag(STACK_OF(PKCS12_SAFEBAG) **pbags, PKCS12_SAFEBAG *bag); | 64 | static int pkcs12_add_bag(STACK_OF(PKCS12_SAFEBAG) **pbags, PKCS12_SAFEBAG *bag); |
65 | 65 | ||
66 | static int copy_bag_attr(PKCS12_SAFEBAG *bag, EVP_PKEY *pkey, int nid) | ||
67 | { | ||
68 | int idx; | ||
69 | X509_ATTRIBUTE *attr; | ||
70 | idx = EVP_PKEY_get_attr_by_NID(pkey, nid, -1); | ||
71 | if (idx < 0) | ||
72 | return 1; | ||
73 | attr = EVP_PKEY_get_attr(pkey, idx); | ||
74 | if (!X509at_add1_attr(&bag->attrib, attr)) | ||
75 | return 0; | ||
76 | return 1; | ||
77 | } | ||
78 | |||
66 | PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, | 79 | PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, |
67 | STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, | 80 | STACK_OF(X509) *ca, int nid_key, int nid_cert, int iter, int mac_iter, |
68 | int keytype) | 81 | int keytype) |
@@ -122,20 +135,15 @@ PKCS12 *PKCS12_create(char *pass, char *name, EVP_PKEY *pkey, X509 *cert, | |||
122 | 135 | ||
123 | if (pkey) | 136 | if (pkey) |
124 | { | 137 | { |
125 | int cspidx; | ||
126 | bag = PKCS12_add_key(&bags, pkey, keytype, iter, nid_key, pass); | 138 | bag = PKCS12_add_key(&bags, pkey, keytype, iter, nid_key, pass); |
127 | 139 | ||
128 | if (!bag) | 140 | if (!bag) |
129 | goto err; | 141 | goto err; |
130 | 142 | ||
131 | cspidx = EVP_PKEY_get_attr_by_NID(pkey, NID_ms_csp_name, -1); | 143 | if (!copy_bag_attr(bag, pkey, NID_ms_csp_name)) |
132 | if (cspidx >= 0) | 144 | goto err; |
133 | { | 145 | if (!copy_bag_attr(bag, pkey, NID_LocalKeySet)) |
134 | X509_ATTRIBUTE *cspattr; | 146 | goto err; |
135 | cspattr = EVP_PKEY_get_attr(pkey, cspidx); | ||
136 | if (!X509at_add1_attr(&bag->attrib, cspattr)) | ||
137 | goto err; | ||
138 | } | ||
139 | 147 | ||
140 | if(name && !PKCS12_add_friendlyname(bag, name, -1)) | 148 | if(name && !PKCS12_add_friendlyname(bag, name, -1)) |
141 | goto err; | 149 | goto err; |