diff options
Diffstat (limited to 'src/lib/libcrypto/ts/ts_rsp_sign.c')
-rw-r--r-- | src/lib/libcrypto/ts/ts_rsp_sign.c | 62 |
1 files changed, 30 insertions, 32 deletions
diff --git a/src/lib/libcrypto/ts/ts_rsp_sign.c b/src/lib/libcrypto/ts/ts_rsp_sign.c index f9e8c53cc8..57e2d7f348 100644 --- a/src/lib/libcrypto/ts/ts_rsp_sign.c +++ b/src/lib/libcrypto/ts/ts_rsp_sign.c | |||
@@ -1,4 +1,4 @@ | |||
1 | /* $OpenBSD: ts_rsp_sign.c,v 1.20 2016/03/11 07:08:45 mmcc Exp $ */ | 1 | /* $OpenBSD: ts_rsp_sign.c,v 1.21 2017/01/29 17:49:23 beck Exp $ */ |
2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL | 2 | /* Written by Zoltan Glozik (zglozik@stones.com) for the OpenSSL |
3 | * project 2002. | 3 | * project 2002. |
4 | */ | 4 | */ |
@@ -103,7 +103,7 @@ def_serial_cb(struct TS_resp_ctx *ctx, void *data) | |||
103 | return serial; | 103 | return serial; |
104 | 104 | ||
105 | err: | 105 | err: |
106 | TSerr(TS_F_DEF_SERIAL_CB, ERR_R_MALLOC_FAILURE); | 106 | TSerror(ERR_R_MALLOC_FAILURE); |
107 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, | 107 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, |
108 | "Error during serial number generation."); | 108 | "Error during serial number generation."); |
109 | return NULL; | 109 | return NULL; |
@@ -116,7 +116,7 @@ def_time_cb(struct TS_resp_ctx *ctx, void *data, time_t *sec, long *usec) | |||
116 | struct timeval tv; | 116 | struct timeval tv; |
117 | 117 | ||
118 | if (gettimeofday(&tv, NULL) != 0) { | 118 | if (gettimeofday(&tv, NULL) != 0) { |
119 | TSerr(TS_F_DEF_TIME_CB, TS_R_TIME_SYSCALL_ERROR); | 119 | TSerror(TS_R_TIME_SYSCALL_ERROR); |
120 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, | 120 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, |
121 | "Time is not available."); | 121 | "Time is not available."); |
122 | TS_RESP_CTX_add_failure_info(ctx, TS_INFO_TIME_NOT_AVAILABLE); | 122 | TS_RESP_CTX_add_failure_info(ctx, TS_INFO_TIME_NOT_AVAILABLE); |
@@ -147,7 +147,7 @@ TS_RESP_CTX_new(void) | |||
147 | TS_RESP_CTX *ctx; | 147 | TS_RESP_CTX *ctx; |
148 | 148 | ||
149 | if (!(ctx = calloc(1, sizeof(TS_RESP_CTX)))) { | 149 | if (!(ctx = calloc(1, sizeof(TS_RESP_CTX)))) { |
150 | TSerr(TS_F_TS_RESP_CTX_NEW, ERR_R_MALLOC_FAILURE); | 150 | TSerror(ERR_R_MALLOC_FAILURE); |
151 | return NULL; | 151 | return NULL; |
152 | } | 152 | } |
153 | 153 | ||
@@ -181,8 +181,7 @@ int | |||
181 | TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer) | 181 | TS_RESP_CTX_set_signer_cert(TS_RESP_CTX *ctx, X509 *signer) |
182 | { | 182 | { |
183 | if (X509_check_purpose(signer, X509_PURPOSE_TIMESTAMP_SIGN, 0) != 1) { | 183 | if (X509_check_purpose(signer, X509_PURPOSE_TIMESTAMP_SIGN, 0) != 1) { |
184 | TSerr(TS_F_TS_RESP_CTX_SET_SIGNER_CERT, | 184 | TSerror(TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE); |
185 | TS_R_INVALID_SIGNER_CERTIFICATE_PURPOSE); | ||
186 | return 0; | 185 | return 0; |
187 | } | 186 | } |
188 | X509_free(ctx->signer_cert); | 187 | X509_free(ctx->signer_cert); |
@@ -211,7 +210,7 @@ TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy) | |||
211 | return 1; | 210 | return 1; |
212 | 211 | ||
213 | err: | 212 | err: |
214 | TSerr(TS_F_TS_RESP_CTX_SET_DEF_POLICY, ERR_R_MALLOC_FAILURE); | 213 | TSerror(ERR_R_MALLOC_FAILURE); |
215 | return 0; | 214 | return 0; |
216 | } | 215 | } |
217 | 216 | ||
@@ -227,7 +226,7 @@ TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs) | |||
227 | if (!certs) | 226 | if (!certs) |
228 | return 1; | 227 | return 1; |
229 | if (!(ctx->certs = sk_X509_dup(certs))) { | 228 | if (!(ctx->certs = sk_X509_dup(certs))) { |
230 | TSerr(TS_F_TS_RESP_CTX_SET_CERTS, ERR_R_MALLOC_FAILURE); | 229 | TSerror(ERR_R_MALLOC_FAILURE); |
231 | return 0; | 230 | return 0; |
232 | } | 231 | } |
233 | for (i = 0; i < sk_X509_num(ctx->certs); ++i) { | 232 | for (i = 0; i < sk_X509_num(ctx->certs); ++i) { |
@@ -254,7 +253,7 @@ TS_RESP_CTX_add_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *policy) | |||
254 | return 1; | 253 | return 1; |
255 | 254 | ||
256 | err: | 255 | err: |
257 | TSerr(TS_F_TS_RESP_CTX_ADD_POLICY, ERR_R_MALLOC_FAILURE); | 256 | TSerror(ERR_R_MALLOC_FAILURE); |
258 | ASN1_OBJECT_free(copy); | 257 | ASN1_OBJECT_free(copy); |
259 | return 0; | 258 | return 0; |
260 | } | 259 | } |
@@ -272,7 +271,7 @@ TS_RESP_CTX_add_md(TS_RESP_CTX *ctx, const EVP_MD *md) | |||
272 | return 1; | 271 | return 1; |
273 | 272 | ||
274 | err: | 273 | err: |
275 | TSerr(TS_F_TS_RESP_CTX_ADD_MD, ERR_R_MALLOC_FAILURE); | 274 | TSerror(ERR_R_MALLOC_FAILURE); |
276 | return 0; | 275 | return 0; |
277 | } | 276 | } |
278 | 277 | ||
@@ -302,7 +301,7 @@ TS_RESP_CTX_set_accuracy(TS_RESP_CTX *ctx, int secs, int millis, int micros) | |||
302 | 301 | ||
303 | err: | 302 | err: |
304 | TS_RESP_CTX_accuracy_free(ctx); | 303 | TS_RESP_CTX_accuracy_free(ctx); |
305 | TSerr(TS_F_TS_RESP_CTX_SET_ACCURACY, ERR_R_MALLOC_FAILURE); | 304 | TSerror(ERR_R_MALLOC_FAILURE); |
306 | return 0; | 305 | return 0; |
307 | } | 306 | } |
308 | 307 | ||
@@ -353,7 +352,7 @@ TS_RESP_CTX_set_status_info(TS_RESP_CTX *ctx, int status, const char *text) | |||
353 | 352 | ||
354 | err: | 353 | err: |
355 | if (!ret) | 354 | if (!ret) |
356 | TSerr(TS_F_TS_RESP_CTX_SET_STATUS_INFO, ERR_R_MALLOC_FAILURE); | 355 | TSerror(ERR_R_MALLOC_FAILURE); |
357 | TS_STATUS_INFO_free(si); | 356 | TS_STATUS_INFO_free(si); |
358 | ASN1_UTF8STRING_free(utf8_text); | 357 | ASN1_UTF8STRING_free(utf8_text); |
359 | return ret; | 358 | return ret; |
@@ -384,7 +383,7 @@ TS_RESP_CTX_add_failure_info(TS_RESP_CTX *ctx, int failure) | |||
384 | return 1; | 383 | return 1; |
385 | 384 | ||
386 | err: | 385 | err: |
387 | TSerr(TS_F_TS_RESP_CTX_ADD_FAILURE_INFO, ERR_R_MALLOC_FAILURE); | 386 | TSerror(ERR_R_MALLOC_FAILURE); |
388 | return 0; | 387 | return 0; |
389 | } | 388 | } |
390 | 389 | ||
@@ -421,7 +420,7 @@ TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio) | |||
421 | 420 | ||
422 | /* Creating the response object. */ | 421 | /* Creating the response object. */ |
423 | if (!(ctx->response = TS_RESP_new())) { | 422 | if (!(ctx->response = TS_RESP_new())) { |
424 | TSerr(TS_F_TS_RESP_CREATE_RESPONSE, ERR_R_MALLOC_FAILURE); | 423 | TSerror(ERR_R_MALLOC_FAILURE); |
425 | goto end; | 424 | goto end; |
426 | } | 425 | } |
427 | 426 | ||
@@ -463,7 +462,7 @@ TS_RESP_create_response(TS_RESP_CTX *ctx, BIO *req_bio) | |||
463 | 462 | ||
464 | end: | 463 | end: |
465 | if (!result) { | 464 | if (!result) { |
466 | TSerr(TS_F_TS_RESP_CREATE_RESPONSE, TS_R_RESPONSE_SETUP_ERROR); | 465 | TSerror(TS_R_RESPONSE_SETUP_ERROR); |
467 | if (ctx->response != NULL) { | 466 | if (ctx->response != NULL) { |
468 | if (TS_RESP_CTX_set_status_info_cond(ctx, | 467 | if (TS_RESP_CTX_set_status_info_cond(ctx, |
469 | TS_STATUS_REJECTION, "Error during response " | 468 | TS_STATUS_REJECTION, "Error during response " |
@@ -567,7 +566,7 @@ TS_RESP_get_policy(TS_RESP_CTX *ctx) | |||
567 | int i; | 566 | int i; |
568 | 567 | ||
569 | if (ctx->default_policy == NULL) { | 568 | if (ctx->default_policy == NULL) { |
570 | TSerr(TS_F_TS_RESP_GET_POLICY, TS_R_INVALID_NULL_POINTER); | 569 | TSerror(TS_R_INVALID_NULL_POINTER); |
571 | return NULL; | 570 | return NULL; |
572 | } | 571 | } |
573 | /* Return the default policy if none is requested or the default is | 572 | /* Return the default policy if none is requested or the default is |
@@ -582,7 +581,7 @@ TS_RESP_get_policy(TS_RESP_CTX *ctx) | |||
582 | policy = current; | 581 | policy = current; |
583 | } | 582 | } |
584 | if (!policy) { | 583 | if (!policy) { |
585 | TSerr(TS_F_TS_RESP_GET_POLICY, TS_R_UNACCEPTABLE_POLICY); | 584 | TSerror(TS_R_UNACCEPTABLE_POLICY); |
586 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, | 585 | TS_RESP_CTX_set_status_info(ctx, TS_STATUS_REJECTION, |
587 | "Requested policy is not " | 586 | "Requested policy is not " |
588 | "supported."); | 587 | "supported."); |
@@ -665,7 +664,7 @@ end: | |||
665 | if (!result) { | 664 | if (!result) { |
666 | TS_TST_INFO_free(tst_info); | 665 | TS_TST_INFO_free(tst_info); |
667 | tst_info = NULL; | 666 | tst_info = NULL; |
668 | TSerr(TS_F_TS_RESP_CREATE_TST_INFO, TS_R_TST_INFO_SETUP_ERROR); | 667 | TSerror(TS_R_TST_INFO_SETUP_ERROR); |
669 | TS_RESP_CTX_set_status_info_cond(ctx, TS_STATUS_REJECTION, | 668 | TS_RESP_CTX_set_status_info_cond(ctx, TS_STATUS_REJECTION, |
670 | "Error during TSTInfo " | 669 | "Error during TSTInfo " |
671 | "generation."); | 670 | "generation."); |
@@ -716,14 +715,13 @@ TS_RESP_sign(TS_RESP_CTX *ctx) | |||
716 | 715 | ||
717 | /* Check if signcert and pkey match. */ | 716 | /* Check if signcert and pkey match. */ |
718 | if (!X509_check_private_key(ctx->signer_cert, ctx->signer_key)) { | 717 | if (!X509_check_private_key(ctx->signer_cert, ctx->signer_key)) { |
719 | TSerr(TS_F_TS_RESP_SIGN, | 718 | TSerror(TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE); |
720 | TS_R_PRIVATE_KEY_DOES_NOT_MATCH_CERTIFICATE); | ||
721 | goto err; | 719 | goto err; |
722 | } | 720 | } |
723 | 721 | ||
724 | /* Create a new PKCS7 signed object. */ | 722 | /* Create a new PKCS7 signed object. */ |
725 | if (!(p7 = PKCS7_new())) { | 723 | if (!(p7 = PKCS7_new())) { |
726 | TSerr(TS_F_TS_RESP_SIGN, ERR_R_MALLOC_FAILURE); | 724 | TSerror(ERR_R_MALLOC_FAILURE); |
727 | goto err; | 725 | goto err; |
728 | } | 726 | } |
729 | if (!PKCS7_set_type(p7, NID_pkcs7_signed)) | 727 | if (!PKCS7_set_type(p7, NID_pkcs7_signed)) |
@@ -747,7 +745,7 @@ TS_RESP_sign(TS_RESP_CTX *ctx) | |||
747 | /* Add a new signer info. */ | 745 | /* Add a new signer info. */ |
748 | if (!(si = PKCS7_add_signature(p7, ctx->signer_cert, | 746 | if (!(si = PKCS7_add_signature(p7, ctx->signer_cert, |
749 | ctx->signer_key, EVP_sha1()))) { | 747 | ctx->signer_key, EVP_sha1()))) { |
750 | TSerr(TS_F_TS_RESP_SIGN, TS_R_PKCS7_ADD_SIGNATURE_ERROR); | 748 | TSerror(TS_R_PKCS7_ADD_SIGNATURE_ERROR); |
751 | goto err; | 749 | goto err; |
752 | } | 750 | } |
753 | 751 | ||
@@ -755,7 +753,7 @@ TS_RESP_sign(TS_RESP_CTX *ctx) | |||
755 | oid = OBJ_nid2obj(NID_id_smime_ct_TSTInfo); | 753 | oid = OBJ_nid2obj(NID_id_smime_ct_TSTInfo); |
756 | if (!PKCS7_add_signed_attribute(si, NID_pkcs9_contentType, | 754 | if (!PKCS7_add_signed_attribute(si, NID_pkcs9_contentType, |
757 | V_ASN1_OBJECT, oid)) { | 755 | V_ASN1_OBJECT, oid)) { |
758 | TSerr(TS_F_TS_RESP_SIGN, TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR); | 756 | TSerror(TS_R_PKCS7_ADD_SIGNED_ATTR_ERROR); |
759 | goto err; | 757 | goto err; |
760 | } | 758 | } |
761 | 759 | ||
@@ -767,7 +765,7 @@ TS_RESP_sign(TS_RESP_CTX *ctx) | |||
767 | 765 | ||
768 | /* Add SigningCertificate signed attribute to the signer info. */ | 766 | /* Add SigningCertificate signed attribute to the signer info. */ |
769 | if (!ESS_add_signing_cert(si, sc)) { | 767 | if (!ESS_add_signing_cert(si, sc)) { |
770 | TSerr(TS_F_TS_RESP_SIGN, TS_R_ESS_ADD_SIGNING_CERT_ERROR); | 768 | TSerror(TS_R_ESS_ADD_SIGNING_CERT_ERROR); |
771 | goto err; | 769 | goto err; |
772 | } | 770 | } |
773 | 771 | ||
@@ -777,19 +775,19 @@ TS_RESP_sign(TS_RESP_CTX *ctx) | |||
777 | 775 | ||
778 | /* Add the DER encoded tst_info to the PKCS7 structure. */ | 776 | /* Add the DER encoded tst_info to the PKCS7 structure. */ |
779 | if (!(p7bio = PKCS7_dataInit(p7, NULL))) { | 777 | if (!(p7bio = PKCS7_dataInit(p7, NULL))) { |
780 | TSerr(TS_F_TS_RESP_SIGN, ERR_R_MALLOC_FAILURE); | 778 | TSerror(ERR_R_MALLOC_FAILURE); |
781 | goto err; | 779 | goto err; |
782 | } | 780 | } |
783 | 781 | ||
784 | /* Convert tst_info to DER. */ | 782 | /* Convert tst_info to DER. */ |
785 | if (!i2d_TS_TST_INFO_bio(p7bio, ctx->tst_info)) { | 783 | if (!i2d_TS_TST_INFO_bio(p7bio, ctx->tst_info)) { |
786 | TSerr(TS_F_TS_RESP_SIGN, TS_R_TS_DATASIGN); | 784 | TSerror(TS_R_TS_DATASIGN); |
787 | goto err; | 785 | goto err; |
788 | } | 786 | } |
789 | 787 | ||
790 | /* Create the signature and add it to the signer info. */ | 788 | /* Create the signature and add it to the signer info. */ |
791 | if (!PKCS7_dataFinal(p7, p7bio)) { | 789 | if (!PKCS7_dataFinal(p7, p7bio)) { |
792 | TSerr(TS_F_TS_RESP_SIGN, TS_R_TS_DATASIGN); | 790 | TSerror(TS_R_TS_DATASIGN); |
793 | goto err; | 791 | goto err; |
794 | } | 792 | } |
795 | 793 | ||
@@ -840,7 +838,7 @@ ESS_SIGNING_CERT_new_init(X509 *signcert, STACK_OF(X509) *certs) | |||
840 | 838 | ||
841 | err: | 839 | err: |
842 | ESS_SIGNING_CERT_free(sc); | 840 | ESS_SIGNING_CERT_free(sc); |
843 | TSerr(TS_F_ESS_SIGNING_CERT_NEW_INIT, ERR_R_MALLOC_FAILURE); | 841 | TSerror(ERR_R_MALLOC_FAILURE); |
844 | return NULL; | 842 | return NULL; |
845 | } | 843 | } |
846 | 844 | ||
@@ -886,7 +884,7 @@ ESS_CERT_ID_new_init(X509 *cert, int issuer_needed) | |||
886 | err: | 884 | err: |
887 | GENERAL_NAME_free(name); | 885 | GENERAL_NAME_free(name); |
888 | ESS_CERT_ID_free(cid); | 886 | ESS_CERT_ID_free(cid); |
889 | TSerr(TS_F_ESS_CERT_ID_NEW_INIT, ERR_R_MALLOC_FAILURE); | 887 | TSerror(ERR_R_MALLOC_FAILURE); |
890 | return NULL; | 888 | return NULL; |
891 | } | 889 | } |
892 | 890 | ||
@@ -928,13 +926,13 @@ ESS_add_signing_cert(PKCS7_SIGNER_INFO *si, ESS_SIGNING_CERT *sc) | |||
928 | 926 | ||
929 | len = i2d_ESS_SIGNING_CERT(sc, NULL); | 927 | len = i2d_ESS_SIGNING_CERT(sc, NULL); |
930 | if (!(pp = malloc(len))) { | 928 | if (!(pp = malloc(len))) { |
931 | TSerr(TS_F_ESS_ADD_SIGNING_CERT, ERR_R_MALLOC_FAILURE); | 929 | TSerror(ERR_R_MALLOC_FAILURE); |
932 | goto err; | 930 | goto err; |
933 | } | 931 | } |
934 | p = pp; | 932 | p = pp; |
935 | i2d_ESS_SIGNING_CERT(sc, &p); | 933 | i2d_ESS_SIGNING_CERT(sc, &p); |
936 | if (!(seq = ASN1_STRING_new()) || !ASN1_STRING_set(seq, pp, len)) { | 934 | if (!(seq = ASN1_STRING_new()) || !ASN1_STRING_set(seq, pp, len)) { |
937 | TSerr(TS_F_ESS_ADD_SIGNING_CERT, ERR_R_MALLOC_FAILURE); | 935 | TSerror(ERR_R_MALLOC_FAILURE); |
938 | goto err; | 936 | goto err; |
939 | } | 937 | } |
940 | free(pp); | 938 | free(pp); |
@@ -1017,6 +1015,6 @@ TS_RESP_set_genTime_with_precision(ASN1_GENERALIZEDTIME *asn1_time, | |||
1017 | return asn1_time; | 1015 | return asn1_time; |
1018 | 1016 | ||
1019 | err: | 1017 | err: |
1020 | TSerr(TS_F_TS_RESP_SET_GENTIME_WITH_PRECISION, TS_R_COULD_NOT_SET_TIME); | 1018 | TSerror(TS_R_COULD_NOT_SET_TIME); |
1021 | return NULL; | 1019 | return NULL; |
1022 | } | 1020 | } |