diff options
Diffstat (limited to 'src/lib/libcrypto/cms/cms_dd.c')
-rw-r--r-- | src/lib/libcrypto/cms/cms_dd.c | 51 |
1 files changed, 25 insertions, 26 deletions
diff --git a/src/lib/libcrypto/cms/cms_dd.c b/src/lib/libcrypto/cms/cms_dd.c index 8919c15be1..f115d2274b 100644 --- a/src/lib/libcrypto/cms/cms_dd.c +++ b/src/lib/libcrypto/cms/cms_dd.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 |
@@ -63,10 +63,12 @@ DECLARE_ASN1_ITEM(CMS_DigestedData) | |||
63 | 63 | ||
64 | /* CMS DigestedData Utilities */ | 64 | /* CMS DigestedData Utilities */ |
65 | 65 | ||
66 | CMS_ContentInfo *cms_DigestedData_create(const EVP_MD *md) | 66 | CMS_ContentInfo * |
67 | { | 67 | cms_DigestedData_create(const EVP_MD *md) |
68 | { | ||
68 | CMS_ContentInfo *cms; | 69 | CMS_ContentInfo *cms; |
69 | CMS_DigestedData *dd; | 70 | CMS_DigestedData *dd; |
71 | |||
70 | cms = CMS_ContentInfo_new(); | 72 | cms = CMS_ContentInfo_new(); |
71 | if (!cms) | 73 | if (!cms) |
72 | return NULL; | 74 | return NULL; |
@@ -86,28 +88,30 @@ CMS_ContentInfo *cms_DigestedData_create(const EVP_MD *md) | |||
86 | 88 | ||
87 | return cms; | 89 | return cms; |
88 | 90 | ||
89 | err: | 91 | err: |
90 | |||
91 | if (cms) | 92 | if (cms) |
92 | CMS_ContentInfo_free(cms); | 93 | CMS_ContentInfo_free(cms); |
93 | |||
94 | return NULL; | 94 | return NULL; |
95 | } | 95 | } |
96 | 96 | ||
97 | BIO *cms_DigestedData_init_bio(CMS_ContentInfo *cms) | 97 | BIO * |
98 | { | 98 | cms_DigestedData_init_bio(CMS_ContentInfo *cms) |
99 | { | ||
99 | CMS_DigestedData *dd; | 100 | CMS_DigestedData *dd; |
101 | |||
100 | dd = cms->d.digestedData; | 102 | dd = cms->d.digestedData; |
101 | return cms_DigestAlgorithm_init_bio(dd->digestAlgorithm); | 103 | return cms_DigestAlgorithm_init_bio(dd->digestAlgorithm); |
102 | } | 104 | } |
103 | 105 | ||
104 | int cms_DigestedData_do_final(CMS_ContentInfo *cms, BIO *chain, int verify) | 106 | int |
105 | { | 107 | cms_DigestedData_do_final(CMS_ContentInfo *cms, BIO *chain, int verify) |
108 | { | ||
106 | EVP_MD_CTX mctx; | 109 | EVP_MD_CTX mctx; |
107 | unsigned char md[EVP_MAX_MD_SIZE]; | 110 | unsigned char md[EVP_MAX_MD_SIZE]; |
108 | unsigned int mdlen; | 111 | unsigned int mdlen; |
109 | int r = 0; | 112 | int r = 0; |
110 | CMS_DigestedData *dd; | 113 | CMS_DigestedData *dd; |
114 | |||
111 | EVP_MD_CTX_init(&mctx); | 115 | EVP_MD_CTX_init(&mctx); |
112 | 116 | ||
113 | dd = cms->d.digestedData; | 117 | dd = cms->d.digestedData; |
@@ -118,31 +122,26 @@ int cms_DigestedData_do_final(CMS_ContentInfo *cms, BIO *chain, int verify) | |||
118 | if (EVP_DigestFinal_ex(&mctx, md, &mdlen) <= 0) | 122 | if (EVP_DigestFinal_ex(&mctx, md, &mdlen) <= 0) |
119 | goto err; | 123 | goto err; |
120 | 124 | ||
121 | if (verify) | 125 | if (verify) { |
122 | { | 126 | if (mdlen != (unsigned int)dd->digest->length) { |
123 | if (mdlen != (unsigned int)dd->digest->length) | ||
124 | { | ||
125 | CMSerr(CMS_F_CMS_DIGESTEDDATA_DO_FINAL, | 127 | CMSerr(CMS_F_CMS_DIGESTEDDATA_DO_FINAL, |
126 | CMS_R_MESSAGEDIGEST_WRONG_LENGTH); | 128 | CMS_R_MESSAGEDIGEST_WRONG_LENGTH); |
127 | goto err; | 129 | goto err; |
128 | } | 130 | } |
129 | 131 | ||
130 | if (memcmp(md, dd->digest->data, mdlen)) | 132 | if (memcmp(md, dd->digest->data, mdlen)) |
131 | CMSerr(CMS_F_CMS_DIGESTEDDATA_DO_FINAL, | 133 | CMSerr(CMS_F_CMS_DIGESTEDDATA_DO_FINAL, |
132 | CMS_R_VERIFICATION_FAILURE); | 134 | CMS_R_VERIFICATION_FAILURE); |
133 | else | 135 | else |
134 | r = 1; | 136 | r = 1; |
135 | } | 137 | } else { |
136 | else | ||
137 | { | ||
138 | if (!ASN1_STRING_set(dd->digest, md, mdlen)) | 138 | if (!ASN1_STRING_set(dd->digest, md, mdlen)) |
139 | goto err; | 139 | goto err; |
140 | r = 1; | 140 | r = 1; |
141 | } | 141 | } |
142 | 142 | ||
143 | err: | 143 | err: |
144 | EVP_MD_CTX_cleanup(&mctx); | 144 | EVP_MD_CTX_cleanup(&mctx); |
145 | 145 | ||
146 | return r; | 146 | return r; |
147 | 147 | } | |
148 | } | ||