OLD | NEW |
1 /* This Source Code Form is subject to the terms of the Mozilla Public | 1 /* This Source Code Form is subject to the terms of the Mozilla Public |
2 * License, v. 2.0. If a copy of the MPL was not distributed with this | 2 * License, v. 2.0. If a copy of the MPL was not distributed with this |
3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ | 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
4 | 4 |
5 #ifdef FREEBL_NO_DEPEND | 5 #ifdef FREEBL_NO_DEPEND |
6 #include "stubs.h" | 6 #include "stubs.h" |
7 #endif | 7 #endif |
8 | 8 |
9 #include <memory.h> | 9 #include <memory.h> |
10 #include "blapi.h" | 10 #include "blapi.h" |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
141 | 141 |
142 /* | 142 /* |
143 * SHA: Generate hash value from context | 143 * SHA: Generate hash value from context |
144 */ | 144 */ |
145 void | 145 void |
146 SHA1_End(SHA1Context *ctx, unsigned char *hashout, | 146 SHA1_End(SHA1Context *ctx, unsigned char *hashout, |
147 unsigned int *pDigestLen, unsigned int maxDigestLen) | 147 unsigned int *pDigestLen, unsigned int maxDigestLen) |
148 { | 148 { |
149 register PRUint64 size; | 149 register PRUint64 size; |
150 register PRUint32 lenB; | 150 register PRUint32 lenB; |
| 151 PRUint32 tmpbuf[5]; |
151 | 152 |
152 static const unsigned char bulk_pad[64] = { 0x80,0,0,0,0,0,0,0,0,0, | 153 static const unsigned char bulk_pad[64] = { 0x80,0,0,0,0,0,0,0,0,0, |
153 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, | 154 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, |
154 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; | 155 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; |
155 #define tmp lenB | 156 #define tmp lenB |
156 | 157 |
157 PORT_Assert (maxDigestLen >= SHA1_LENGTH); | 158 PORT_Assert (maxDigestLen >= SHA1_LENGTH); |
158 | 159 |
159 /* | 160 /* |
160 * Pad with a binary 1 (e.g. 0x80), then zeroes, then length in bits | 161 * Pad with a binary 1 (e.g. 0x80), then zeroes, then length in bits |
161 */ | 162 */ |
162 size = ctx->size; | 163 size = ctx->size; |
163 | 164 |
164 lenB = (PRUint32)size & 63; | 165 lenB = (PRUint32)size & 63; |
165 SHA1_Update(ctx, bulk_pad, (((55+64) - lenB) & 63) + 1); | 166 SHA1_Update(ctx, bulk_pad, (((55+64) - lenB) & 63) + 1); |
166 PORT_Assert(((PRUint32)ctx->size & 63) == 56); | 167 PORT_Assert(((PRUint32)ctx->size & 63) == 56); |
167 /* Convert size from bytes to bits. */ | 168 /* Convert size from bytes to bits. */ |
168 size <<= 3; | 169 size <<= 3; |
169 ctx->W[14] = SHA_HTONL((PRUint32)(size >> 32)); | 170 ctx->W[14] = SHA_HTONL((PRUint32)(size >> 32)); |
170 ctx->W[15] = SHA_HTONL((PRUint32)size); | 171 ctx->W[15] = SHA_HTONL((PRUint32)size); |
171 shaCompress(&ctx->H[H2X], ctx->W); | 172 shaCompress(&ctx->H[H2X], ctx->W); |
172 | 173 |
173 /* | 174 /* |
174 * Output hash | 175 * Output hash |
175 */ | 176 */ |
176 SHA_STORE_RESULT; | 177 SHA_STORE_RESULT; |
177 *pDigestLen = SHA1_LENGTH; | 178 if (pDigestLen) { |
| 179 *pDigestLen = SHA1_LENGTH; |
| 180 } |
| 181 #undef tmp |
| 182 } |
178 | 183 |
| 184 void |
| 185 SHA1_EndRaw(SHA1Context *ctx, unsigned char *hashout, |
| 186 unsigned int *pDigestLen, unsigned int maxDigestLen) |
| 187 { |
| 188 #if defined(SHA_NEED_TMP_VARIABLE) |
| 189 register PRUint32 tmp; |
| 190 #endif |
| 191 PRUint32 tmpbuf[5]; |
| 192 PORT_Assert (maxDigestLen >= SHA1_LENGTH); |
| 193 |
| 194 SHA_STORE_RESULT; |
| 195 if (pDigestLen) |
| 196 *pDigestLen = SHA1_LENGTH; |
179 } | 197 } |
180 | 198 |
181 #undef B | 199 #undef B |
182 #undef tmp | |
183 /* | 200 /* |
184 * SHA: Compression function, unrolled. | 201 * SHA: Compression function, unrolled. |
185 * | 202 * |
186 * Some operations in shaCompress are done as 5 groups of 16 operations. | 203 * Some operations in shaCompress are done as 5 groups of 16 operations. |
187 * Others are done as 4 groups of 20 operations. | 204 * Others are done as 4 groups of 20 operations. |
188 * The code below shows that structure. | 205 * The code below shows that structure. |
189 * | 206 * |
190 * The functions that compute the new values of the 5 state variables | 207 * The functions that compute the new values of the 5 state variables |
191 * A-E are done in 4 groups of 20 operations (or you may also think | 208 * A-E are done in 4 groups of 20 operations (or you may also think |
192 * of them as being done in 16 groups of 5 operations). They are | 209 * of them as being done in 16 groups of 5 operations). They are |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
437 void SHA1_Clone(SHA1Context *dest, SHA1Context *src) | 454 void SHA1_Clone(SHA1Context *dest, SHA1Context *src) |
438 { | 455 { |
439 memcpy(dest, src, sizeof *dest); | 456 memcpy(dest, src, sizeof *dest); |
440 } | 457 } |
441 | 458 |
442 void | 459 void |
443 SHA1_TraceState(SHA1Context *ctx) | 460 SHA1_TraceState(SHA1Context *ctx) |
444 { | 461 { |
445 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); | 462 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); |
446 } | 463 } |
OLD | NEW |