summaryrefslogtreecommitdiff
path: root/src/lib/libcrypto/evp/evp_pkey.c
diff options
context:
space:
mode:
authorjsing <>2014-05-08 15:42:26 +0000
committerjsing <>2014-05-08 15:42:26 +0000
commit9d444b7e0aa2551bd5277cfb7499d8435434d0df (patch)
treeed1791b800e1dec369aebdec3e1c883c6f688694 /src/lib/libcrypto/evp/evp_pkey.c
parent8abe0e883a32bb48c2480317b8361bd671797757 (diff)
downloadopenbsd-9d444b7e0aa2551bd5277cfb7499d8435434d0df.tar.gz
openbsd-9d444b7e0aa2551bd5277cfb7499d8435434d0df.tar.bz2
openbsd-9d444b7e0aa2551bd5277cfb7499d8435434d0df.zip
KNF.
Diffstat (limited to 'src/lib/libcrypto/evp/evp_pkey.c')
-rw-r--r--src/lib/libcrypto/evp/evp_pkey.c135
1 files changed, 67 insertions, 68 deletions
diff --git a/src/lib/libcrypto/evp/evp_pkey.c b/src/lib/libcrypto/evp/evp_pkey.c
index 94056f0da9..99fe5b3221 100644
--- a/src/lib/libcrypto/evp/evp_pkey.c
+++ b/src/lib/libcrypto/evp/evp_pkey.c
@@ -10,7 +10,7 @@
10 * are met: 10 * are met:
11 * 11 *
12 * 1. Redistributions of source code must retain the above copyright 12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer. 13 * notice, this list of conditions and the following disclaimer.
14 * 14 *
15 * 2. Redistributions in binary form must reproduce the above copyright 15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in 16 * notice, this list of conditions and the following disclaimer in
@@ -65,7 +65,8 @@
65 65
66/* Extract a private key from a PKCS8 structure */ 66/* Extract a private key from a PKCS8 structure */
67 67
68EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8) 68EVP_PKEY *
69EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8)
69{ 70{
70 EVP_PKEY *pkey = NULL; 71 EVP_PKEY *pkey = NULL;
71 ASN1_OBJECT *algoid; 72 ASN1_OBJECT *algoid;
@@ -75,166 +76,164 @@ EVP_PKEY *EVP_PKCS82PKEY(PKCS8_PRIV_KEY_INFO *p8)
75 return NULL; 76 return NULL;
76 77
77 if (!(pkey = EVP_PKEY_new())) { 78 if (!(pkey = EVP_PKEY_new())) {
78 EVPerr(EVP_F_EVP_PKCS82PKEY,ERR_R_MALLOC_FAILURE); 79 EVPerr(EVP_F_EVP_PKCS82PKEY, ERR_R_MALLOC_FAILURE);
79 return NULL; 80 return NULL;
80 } 81 }
81 82
82 if (!EVP_PKEY_set_type(pkey, OBJ_obj2nid(algoid))) 83 if (!EVP_PKEY_set_type(pkey, OBJ_obj2nid(algoid))) {
83 { 84 EVPerr(EVP_F_EVP_PKCS82PKEY,
84 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM); 85 EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
85 i2t_ASN1_OBJECT(obj_tmp, 80, algoid); 86 i2t_ASN1_OBJECT(obj_tmp, 80, algoid);
86 ERR_asprintf_error_data("TYPE=%s", obj_tmp); 87 ERR_asprintf_error_data("TYPE=%s", obj_tmp);
87 goto error; 88 goto error;
88 } 89 }
89 90
90 if (pkey->ameth->priv_decode) 91 if (pkey->ameth->priv_decode) {
91 { 92 if (!pkey->ameth->priv_decode(pkey, p8)) {
92 if (!pkey->ameth->priv_decode(pkey, p8))
93 {
94 EVPerr(EVP_F_EVP_PKCS82PKEY, 93 EVPerr(EVP_F_EVP_PKCS82PKEY,
95 EVP_R_PRIVATE_KEY_DECODE_ERROR); 94 EVP_R_PRIVATE_KEY_DECODE_ERROR);
96 goto error; 95 goto error;
97 }
98 } 96 }
99 else 97 } else {
100 {
101 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_METHOD_NOT_SUPPORTED); 98 EVPerr(EVP_F_EVP_PKCS82PKEY, EVP_R_METHOD_NOT_SUPPORTED);
102 goto error; 99 goto error;
103 } 100 }
104 101
105 return pkey; 102 return pkey;
106 103
107 error: 104error:
108 EVP_PKEY_free (pkey); 105 EVP_PKEY_free (pkey);
109 return NULL; 106 return NULL;
110} 107}
111 108
112PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8(EVP_PKEY *pkey) 109PKCS8_PRIV_KEY_INFO *
110EVP_PKEY2PKCS8(EVP_PKEY *pkey)
113{ 111{
114 return EVP_PKEY2PKCS8_broken(pkey, PKCS8_OK); 112 return EVP_PKEY2PKCS8_broken(pkey, PKCS8_OK);
115} 113}
116 114
117/* Turn a private key into a PKCS8 structure */ 115/* Turn a private key into a PKCS8 structure */
118 116
119PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken) 117PKCS8_PRIV_KEY_INFO *
118EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken)
120{ 119{
121 PKCS8_PRIV_KEY_INFO *p8; 120 PKCS8_PRIV_KEY_INFO *p8;
122 121
123 if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) { 122 if (!(p8 = PKCS8_PRIV_KEY_INFO_new())) {
124 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN,ERR_R_MALLOC_FAILURE); 123 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN, ERR_R_MALLOC_FAILURE);
125 return NULL; 124 return NULL;
126 } 125 }
127 p8->broken = broken; 126 p8->broken = broken;
128 127
129 if (pkey->ameth) 128 if (pkey->ameth) {
130 { 129 if (pkey->ameth->priv_encode) {
131 if (pkey->ameth->priv_encode) 130 if (!pkey->ameth->priv_encode(p8, pkey)) {
132 {
133 if (!pkey->ameth->priv_encode(p8, pkey))
134 {
135 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN, 131 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN,
136 EVP_R_PRIVATE_KEY_ENCODE_ERROR); 132 EVP_R_PRIVATE_KEY_ENCODE_ERROR);
137 goto error; 133 goto error;
138 }
139 } 134 }
140 else 135 } else {
141 {
142 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN, 136 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN,
143 EVP_R_METHOD_NOT_SUPPORTED); 137 EVP_R_METHOD_NOT_SUPPORTED);
144 goto error; 138 goto error;
145 }
146 } 139 }
147 else 140 } else {
148 {
149 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN, 141 EVPerr(EVP_F_EVP_PKEY2PKCS8_BROKEN,
150 EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM); 142 EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM);
151 goto error; 143 goto error;
152 } 144 }
153 return p8; 145 return p8;
154 error: 146
147error:
155 PKCS8_PRIV_KEY_INFO_free(p8); 148 PKCS8_PRIV_KEY_INFO_free(p8);
156 return NULL; 149 return NULL;
157} 150}
158 151
159PKCS8_PRIV_KEY_INFO *PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken) 152PKCS8_PRIV_KEY_INFO *
153PKCS8_set_broken(PKCS8_PRIV_KEY_INFO *p8, int broken)
160{ 154{
161 switch (broken) { 155 switch (broken) {
162 156 case PKCS8_OK:
163 case PKCS8_OK:
164 p8->broken = PKCS8_OK; 157 p8->broken = PKCS8_OK;
165 return p8; 158 return p8;
166 break; 159 break;
167 160
168 case PKCS8_NO_OCTET: 161 case PKCS8_NO_OCTET:
169 p8->broken = PKCS8_NO_OCTET; 162 p8->broken = PKCS8_NO_OCTET;
170 p8->pkey->type = V_ASN1_SEQUENCE; 163 p8->pkey->type = V_ASN1_SEQUENCE;
171 return p8; 164 return p8;
172 break; 165 break;
173 166
174 default: 167 default:
175 EVPerr(EVP_F_PKCS8_SET_BROKEN,EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE); 168 EVPerr(EVP_F_PKCS8_SET_BROKEN, EVP_R_PKCS8_UNKNOWN_BROKEN_TYPE);
176 return NULL; 169 return NULL;
177 } 170 }
178} 171}
179 172
180/* EVP_PKEY attribute functions */ 173/* EVP_PKEY attribute functions */
181 174
182int EVP_PKEY_get_attr_count(const EVP_PKEY *key) 175int
176EVP_PKEY_get_attr_count(const EVP_PKEY *key)
183{ 177{
184 return X509at_get_attr_count(key->attributes); 178 return X509at_get_attr_count(key->attributes);
185} 179}
186 180
187int EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, 181int
188 int lastpos) 182EVP_PKEY_get_attr_by_NID(const EVP_PKEY *key, int nid, int lastpos)
189{ 183{
190 return X509at_get_attr_by_NID(key->attributes, nid, lastpos); 184 return X509at_get_attr_by_NID(key->attributes, nid, lastpos);
191} 185}
192 186
193int EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, 187int
194 int lastpos) 188EVP_PKEY_get_attr_by_OBJ(const EVP_PKEY *key, ASN1_OBJECT *obj, int lastpos)
195{ 189{
196 return X509at_get_attr_by_OBJ(key->attributes, obj, lastpos); 190 return X509at_get_attr_by_OBJ(key->attributes, obj, lastpos);
197} 191}
198 192
199X509_ATTRIBUTE *EVP_PKEY_get_attr(const EVP_PKEY *key, int loc) 193X509_ATTRIBUTE *
194EVP_PKEY_get_attr(const EVP_PKEY *key, int loc)
200{ 195{
201 return X509at_get_attr(key->attributes, loc); 196 return X509at_get_attr(key->attributes, loc);
202} 197}
203 198
204X509_ATTRIBUTE *EVP_PKEY_delete_attr(EVP_PKEY *key, int loc) 199X509_ATTRIBUTE *
200EVP_PKEY_delete_attr(EVP_PKEY *key, int loc)
205{ 201{
206 return X509at_delete_attr(key->attributes, loc); 202 return X509at_delete_attr(key->attributes, loc);
207} 203}
208 204
209int EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr) 205int
206EVP_PKEY_add1_attr(EVP_PKEY *key, X509_ATTRIBUTE *attr)
210{ 207{
211 if(X509at_add1_attr(&key->attributes, attr)) return 1; 208 if (X509at_add1_attr(&key->attributes, attr))
209 return 1;
212 return 0; 210 return 0;
213} 211}
214 212
215int EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, 213int
216 const ASN1_OBJECT *obj, int type, 214EVP_PKEY_add1_attr_by_OBJ(EVP_PKEY *key, const ASN1_OBJECT *obj, int type,
217 const unsigned char *bytes, int len) 215 const unsigned char *bytes, int len)
218{ 216{
219 if(X509at_add1_attr_by_OBJ(&key->attributes, obj, 217 if (X509at_add1_attr_by_OBJ(&key->attributes, obj, type, bytes, len))
220 type, bytes, len)) return 1; 218 return 1;
221 return 0; 219 return 0;
222} 220}
223 221
224int EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, 222int
225 int nid, int type, 223EVP_PKEY_add1_attr_by_NID(EVP_PKEY *key, int nid, int type,
226 const unsigned char *bytes, int len) 224 const unsigned char *bytes, int len)
227{ 225{
228 if(X509at_add1_attr_by_NID(&key->attributes, nid, 226 if (X509at_add1_attr_by_NID(&key->attributes, nid, type, bytes, len))
229 type, bytes, len)) return 1; 227 return 1;
230 return 0; 228 return 0;
231} 229}
232 230
233int EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, 231int
234 const char *attrname, int type, 232EVP_PKEY_add1_attr_by_txt(EVP_PKEY *key, const char *attrname, int type,
235 const unsigned char *bytes, int len) 233 const unsigned char *bytes, int len)
236{ 234{
237 if(X509at_add1_attr_by_txt(&key->attributes, attrname, 235 if (X509at_add1_attr_by_txt(&key->attributes, attrname, type,
238 type, bytes, len)) return 1; 236 bytes, len))
237 return 1;
239 return 0; 238 return 0;
240} 239}