Feed data into a hash digest accumulator. */
| 620 | |
| 621 | /* Feed data into a hash digest accumulator. */ |
| 622 | void sum_update(const char *p, int32 len) |
| 623 | { |
| 624 | #ifdef USE_OPENSSL |
| 625 | if (cur_sum_evp_md) { |
| 626 | EVP_DigestUpdate(ctx_evp, (uchar *)p, len); |
| 627 | } else |
| 628 | #endif |
| 629 | switch (cur_sum_nni->num) { |
| 630 | #ifdef SUPPORT_XXHASH |
| 631 | case CSUM_XXH64: |
| 632 | XXH64_update(xxh64_state, p, len); |
| 633 | break; |
| 634 | #endif |
| 635 | #ifdef SUPPORT_XXH3 |
| 636 | case CSUM_XXH3_64: |
| 637 | XXH3_64bits_update(xxh3_state, p, len); |
| 638 | break; |
| 639 | case CSUM_XXH3_128: |
| 640 | XXH3_128bits_update(xxh3_state, p, len); |
| 641 | break; |
| 642 | #endif |
| 643 | case CSUM_MD5: |
| 644 | md5_update(&ctx_md, (uchar *)p, len); |
| 645 | break; |
| 646 | case CSUM_MD4: |
| 647 | case CSUM_MD4_OLD: |
| 648 | case CSUM_MD4_BUSTED: |
| 649 | case CSUM_MD4_ARCHAIC: |
| 650 | if (len + sumresidue < CSUM_CHUNK) { |
| 651 | memcpy(ctx_md.buffer + sumresidue, p, len); |
| 652 | sumresidue += len; |
| 653 | break; |
| 654 | } |
| 655 | |
| 656 | if (sumresidue) { |
| 657 | int32 i = CSUM_CHUNK - sumresidue; |
| 658 | memcpy(ctx_md.buffer + sumresidue, p, i); |
| 659 | mdfour_update(&ctx_md, (uchar *)ctx_md.buffer, CSUM_CHUNK); |
| 660 | len -= i; |
| 661 | p += i; |
| 662 | } |
| 663 | |
| 664 | while (len >= CSUM_CHUNK) { |
| 665 | mdfour_update(&ctx_md, (uchar *)p, CSUM_CHUNK); |
| 666 | len -= CSUM_CHUNK; |
| 667 | p += CSUM_CHUNK; |
| 668 | } |
| 669 | |
| 670 | sumresidue = len; |
| 671 | if (sumresidue) |
| 672 | memcpy(ctx_md.buffer, p, sumresidue); |
| 673 | break; |
| 674 | case CSUM_NONE: |
| 675 | break; |
| 676 | default: /* paranoia to prevent missing case values */ |
| 677 | exit_cleanup(RERR_UNSUPPORTED); |
| 678 | } |
| 679 | } |
no test coverage detected