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 "prerr.h" | 9 #include "prerr.h" |
10 #include "secerr.h" | 10 #include "secerr.h" |
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
516 cx->u.w[14] = lendian(lowInput); | 516 cx->u.w[14] = lendian(lowInput); |
517 cx->u.w[15] = lendian(highInput); | 517 cx->u.w[15] = lendian(highInput); |
518 | 518 |
519 /* Final call to compress. */ | 519 /* Final call to compress. */ |
520 #ifndef IS_LITTLE_ENDIAN | 520 #ifndef IS_LITTLE_ENDIAN |
521 md5_prep_state_le(cx); | 521 md5_prep_state_le(cx); |
522 #endif | 522 #endif |
523 md5_compress(cx, cx->u.w); | 523 md5_compress(cx, cx->u.w); |
524 | 524 |
525 /* Copy the resulting values out of the chain variables into return buf. */ | 525 /* Copy the resulting values out of the chain variables into return buf. */ |
526 » *digestLen = MD5_HASH_LEN; | 526 » if (digestLen) |
527 » » *digestLen = MD5_HASH_LEN; | |
527 #ifndef IS_LITTLE_ENDIAN | 528 #ifndef IS_LITTLE_ENDIAN |
528 cx->cv[0] = lendian(cx->cv[0]); | 529 cx->cv[0] = lendian(cx->cv[0]); |
529 cx->cv[1] = lendian(cx->cv[1]); | 530 cx->cv[1] = lendian(cx->cv[1]); |
530 cx->cv[2] = lendian(cx->cv[2]); | 531 cx->cv[2] = lendian(cx->cv[2]); |
531 cx->cv[3] = lendian(cx->cv[3]); | 532 cx->cv[3] = lendian(cx->cv[3]); |
532 #endif | 533 #endif |
533 memcpy(digest, cx->cv, MD5_HASH_LEN); | 534 memcpy(digest, cx->cv, MD5_HASH_LEN); |
534 } | 535 } |
535 | 536 |
537 void | |
538 MD5_EndRaw(MD5Context *cx, unsigned char *digest, | |
539 unsigned int *digestLen, unsigned int maxDigestLen) | |
540 { | |
541 #ifndef IS_LITTLE_ENDIAN | |
542 PRUint32 tmp; | |
543 #endif | |
544 PRUint32 cv[4]; | |
545 | |
546 if (maxDigestLen < MD5_HASH_LEN) { | |
547 PORT_SetError(SEC_ERROR_INVALID_ARGS); | |
548 return; | |
549 } | |
550 | |
551 memcpy(cv, cx->cv, sizeof(cv)); | |
wtc
2013/02/08 02:17:52
Why do the <Hash>_EndRaw functions need to copy th
agl
2013/02/08 02:26:03
(Late - brain may not be working.)
The EndRaw fun
| |
552 #ifndef IS_LITTLE_ENDIAN | |
553 cv[0] = lendian(cv[0]); | |
554 cv[1] = lendian(cv[1]); | |
555 cv[2] = lendian(cv[2]); | |
556 cv[3] = lendian(cv[3]); | |
557 #endif | |
558 memcpy(digest, cv, MD5_HASH_LEN); | |
559 if (digestLen) | |
560 *digestLen = MD5_HASH_LEN; | |
561 } | |
562 | |
536 unsigned int | 563 unsigned int |
537 MD5_FlattenSize(MD5Context *cx) | 564 MD5_FlattenSize(MD5Context *cx) |
538 { | 565 { |
539 return sizeof(*cx); | 566 return sizeof(*cx); |
540 } | 567 } |
541 | 568 |
542 SECStatus | 569 SECStatus |
543 MD5_Flatten(MD5Context *cx, unsigned char *space) | 570 MD5_Flatten(MD5Context *cx, unsigned char *space) |
544 { | 571 { |
545 memcpy(space, cx, sizeof(*cx)); | 572 memcpy(space, cx, sizeof(*cx)); |
(...skipping 12 matching lines...) Expand all Loading... | |
558 void MD5_Clone(MD5Context *dest, MD5Context *src) | 585 void MD5_Clone(MD5Context *dest, MD5Context *src) |
559 { | 586 { |
560 memcpy(dest, src, sizeof *dest); | 587 memcpy(dest, src, sizeof *dest); |
561 } | 588 } |
562 | 589 |
563 void | 590 void |
564 MD5_TraceState(MD5Context *cx) | 591 MD5_TraceState(MD5Context *cx) |
565 { | 592 { |
566 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); | 593 PORT_SetError(PR_NOT_IMPLEMENTED_ERROR); |
567 } | 594 } |
OLD | NEW |