diff options
Diffstat (limited to 'src/lib/libcrypto/asn1/a_sign.c')
-rw-r--r-- | src/lib/libcrypto/asn1/a_sign.c | 42 |
1 files changed, 21 insertions, 21 deletions
diff --git a/src/lib/libcrypto/asn1/a_sign.c b/src/lib/libcrypto/asn1/a_sign.c index 0433b49a64..349422fe9a 100644 --- a/src/lib/libcrypto/asn1/a_sign.c +++ b/src/lib/libcrypto/asn1/a_sign.c | |||
@@ -128,22 +128,22 @@ | |||
128 | int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, | 128 | int ASN1_item_sign(const ASN1_ITEM *it, X509_ALGOR *algor1, X509_ALGOR *algor2, |
129 | ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey, | 129 | ASN1_BIT_STRING *signature, void *asn, EVP_PKEY *pkey, |
130 | const EVP_MD *type) | 130 | const EVP_MD *type) |
131 | { | 131 | { |
132 | EVP_MD_CTX ctx; | 132 | EVP_MD_CTX ctx; |
133 | EVP_MD_CTX_init(&ctx); | 133 | EVP_MD_CTX_init(&ctx); |
134 | if (!EVP_DigestSignInit(&ctx, NULL, type, NULL, pkey)) | 134 | if (!EVP_DigestSignInit(&ctx, NULL, type, NULL, pkey)) |
135 | { | 135 | { |
136 | EVP_MD_CTX_cleanup(&ctx); | 136 | EVP_MD_CTX_cleanup(&ctx); |
137 | return 0; | 137 | return 0; |
138 | } | ||
139 | return ASN1_item_sign_ctx(it, algor1, algor2, signature, asn, &ctx); | ||
140 | } | 138 | } |
139 | return ASN1_item_sign_ctx(it, algor1, algor2, signature, asn, &ctx); | ||
140 | } | ||
141 | 141 | ||
142 | 142 | ||
143 | int ASN1_item_sign_ctx(const ASN1_ITEM *it, | 143 | int ASN1_item_sign_ctx(const ASN1_ITEM *it, |
144 | X509_ALGOR *algor1, X509_ALGOR *algor2, | 144 | X509_ALGOR *algor1, X509_ALGOR *algor2, |
145 | ASN1_BIT_STRING *signature, void *asn, EVP_MD_CTX *ctx) | 145 | ASN1_BIT_STRING *signature, void *asn, EVP_MD_CTX *ctx) |
146 | { | 146 | { |
147 | const EVP_MD *type; | 147 | const EVP_MD *type; |
148 | EVP_PKEY *pkey; | 148 | EVP_PKEY *pkey; |
149 | unsigned char *buf_in=NULL,*buf_out=NULL; | 149 | unsigned char *buf_in=NULL,*buf_out=NULL; |
@@ -155,13 +155,13 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, | |||
155 | pkey = EVP_PKEY_CTX_get0_pkey(ctx->pctx); | 155 | pkey = EVP_PKEY_CTX_get0_pkey(ctx->pctx); |
156 | 156 | ||
157 | if (!type || !pkey) | 157 | if (!type || !pkey) |
158 | { | 158 | { |
159 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ASN1_R_CONTEXT_NOT_INITIALISED); | 159 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ASN1_R_CONTEXT_NOT_INITIALISED); |
160 | return 0; | 160 | return 0; |
161 | } | 161 | } |
162 | 162 | ||
163 | if (pkey->ameth->item_sign) | 163 | if (pkey->ameth->item_sign) |
164 | { | 164 | { |
165 | rv = pkey->ameth->item_sign(ctx, it, asn, algor1, algor2, | 165 | rv = pkey->ameth->item_sign(ctx, it, asn, algor1, algor2, |
166 | signature); | 166 | signature); |
167 | if (rv == 1) | 167 | if (rv == 1) |
@@ -176,24 +176,24 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, | |||
176 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB); | 176 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, ERR_R_EVP_LIB); |
177 | if (rv <= 1) | 177 | if (rv <= 1) |
178 | goto err; | 178 | goto err; |
179 | } | 179 | } |
180 | else | 180 | else |
181 | rv = 2; | 181 | rv = 2; |
182 | 182 | ||
183 | if (rv == 2) | 183 | if (rv == 2) |
184 | { | 184 | { |
185 | if (type->flags & EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) | 185 | if (type->flags & EVP_MD_FLAG_PKEY_METHOD_SIGNATURE) |
186 | { | 186 | { |
187 | if (!pkey->ameth || | 187 | if (!pkey->ameth || |
188 | !OBJ_find_sigid_by_algs(&signid, | 188 | !OBJ_find_sigid_by_algs(&signid, |
189 | EVP_MD_nid(type), | 189 | EVP_MD_nid(type), |
190 | pkey->ameth->pkey_id)) | 190 | pkey->ameth->pkey_id)) |
191 | { | 191 | { |
192 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, | 192 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX, |
193 | ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED); | 193 | ASN1_R_DIGEST_AND_KEY_TYPE_NOT_SUPPORTED); |
194 | return 0; | 194 | return 0; |
195 | } | ||
196 | } | 195 | } |
196 | } | ||
197 | else | 197 | else |
198 | signid = type->pkey_type; | 198 | signid = type->pkey_type; |
199 | 199 | ||
@@ -207,25 +207,25 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, | |||
207 | if (algor2) | 207 | if (algor2) |
208 | X509_ALGOR_set0(algor2, OBJ_nid2obj(signid), paramtype, NULL); | 208 | X509_ALGOR_set0(algor2, OBJ_nid2obj(signid), paramtype, NULL); |
209 | 209 | ||
210 | } | 210 | } |
211 | 211 | ||
212 | inl=ASN1_item_i2d(asn,&buf_in, it); | 212 | inl=ASN1_item_i2d(asn,&buf_in, it); |
213 | outll=outl=EVP_PKEY_size(pkey); | 213 | outll=outl=EVP_PKEY_size(pkey); |
214 | buf_out=malloc((unsigned int)outl); | 214 | buf_out=malloc((unsigned int)outl); |
215 | if ((buf_in == NULL) || (buf_out == NULL)) | 215 | if ((buf_in == NULL) || (buf_out == NULL)) |
216 | { | 216 | { |
217 | outl=0; | 217 | outl=0; |
218 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX,ERR_R_MALLOC_FAILURE); | 218 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX,ERR_R_MALLOC_FAILURE); |
219 | goto err; | 219 | goto err; |
220 | } | 220 | } |
221 | 221 | ||
222 | if (!EVP_DigestSignUpdate(ctx, buf_in, inl) | 222 | if (!EVP_DigestSignUpdate(ctx, buf_in, inl) |
223 | || !EVP_DigestSignFinal(ctx, buf_out, &outl)) | 223 | || !EVP_DigestSignFinal(ctx, buf_out, &outl)) |
224 | { | 224 | { |
225 | outl=0; | 225 | outl=0; |
226 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX,ERR_R_EVP_LIB); | 226 | ASN1err(ASN1_F_ASN1_ITEM_SIGN_CTX,ERR_R_EVP_LIB); |
227 | goto err; | 227 | goto err; |
228 | } | 228 | } |
229 | if (signature->data != NULL) free(signature->data); | 229 | if (signature->data != NULL) free(signature->data); |
230 | signature->data=buf_out; | 230 | signature->data=buf_out; |
231 | buf_out=NULL; | 231 | buf_out=NULL; |
@@ -238,8 +238,8 @@ int ASN1_item_sign_ctx(const ASN1_ITEM *it, | |||
238 | err: | 238 | err: |
239 | EVP_MD_CTX_cleanup(ctx); | 239 | EVP_MD_CTX_cleanup(ctx); |
240 | if (buf_in != NULL) | 240 | if (buf_in != NULL) |
241 | { OPENSSL_cleanse((char *)buf_in,(unsigned int)inl); free(buf_in); } | 241 | { OPENSSL_cleanse((char *)buf_in,(unsigned int)inl); free(buf_in); } |
242 | if (buf_out != NULL) | 242 | if (buf_out != NULL) |
243 | { OPENSSL_cleanse((char *)buf_out,outll); free(buf_out); } | 243 | { OPENSSL_cleanse((char *)buf_out,outll); free(buf_out); } |
244 | return(outl); | 244 | return(outl); |
245 | } | 245 | } |