The "sum" buffer must be at least MAX_DIGEST_LEN bytes! */
| 302 | |
| 303 | /* The "sum" buffer must be at least MAX_DIGEST_LEN bytes! */ |
| 304 | void get_checksum2(char *buf, int32 len, char *sum) |
| 305 | { |
| 306 | #ifdef USE_OPENSSL |
| 307 | if (xfer_sum_evp_md) { |
| 308 | static EVP_MD_CTX *evp = NULL; |
| 309 | uchar seedbuf[4]; |
| 310 | if (!evp && !(evp = EVP_MD_CTX_create())) |
| 311 | out_of_memory("get_checksum2"); |
| 312 | EVP_DigestInit_ex(evp, xfer_sum_evp_md, NULL); |
| 313 | if (checksum_seed) { |
| 314 | SIVALu(seedbuf, 0, checksum_seed); |
| 315 | EVP_DigestUpdate(evp, seedbuf, 4); |
| 316 | } |
| 317 | EVP_DigestUpdate(evp, (uchar *)buf, len); |
| 318 | EVP_DigestFinal_ex(evp, (uchar *)sum, NULL); |
| 319 | } else |
| 320 | #endif |
| 321 | switch (xfer_sum_nni->num) { |
| 322 | #ifdef SUPPORT_XXHASH |
| 323 | case CSUM_XXH64: |
| 324 | SIVAL64(sum, 0, XXH64(buf, len, checksum_seed)); |
| 325 | break; |
| 326 | #endif |
| 327 | #ifdef SUPPORT_XXH3 |
| 328 | case CSUM_XXH3_64: |
| 329 | SIVAL64(sum, 0, XXH3_64bits_withSeed(buf, len, checksum_seed)); |
| 330 | break; |
| 331 | case CSUM_XXH3_128: { |
| 332 | XXH128_hash_t digest = XXH3_128bits_withSeed(buf, len, checksum_seed); |
| 333 | SIVAL64(sum, 0, digest.low64); |
| 334 | SIVAL64(sum, 8, digest.high64); |
| 335 | break; |
| 336 | } |
| 337 | #endif |
| 338 | case CSUM_MD5: { |
| 339 | md_context m5; |
| 340 | uchar seedbuf[4]; |
| 341 | md5_begin(&m5); |
| 342 | if (proper_seed_order) { |
| 343 | if (checksum_seed) { |
| 344 | SIVALu(seedbuf, 0, checksum_seed); |
| 345 | md5_update(&m5, seedbuf, 4); |
| 346 | } |
| 347 | md5_update(&m5, (uchar *)buf, len); |
| 348 | } else { |
| 349 | md5_update(&m5, (uchar *)buf, len); |
| 350 | if (checksum_seed) { |
| 351 | SIVALu(seedbuf, 0, checksum_seed); |
| 352 | md5_update(&m5, seedbuf, 4); |
| 353 | } |
| 354 | } |
| 355 | md5_result(&m5, (uchar *)sum); |
| 356 | break; |
| 357 | } |
| 358 | case CSUM_MD4: |
| 359 | case CSUM_MD4_OLD: |
| 360 | case CSUM_MD4_BUSTED: |
| 361 | case CSUM_MD4_ARCHAIC: { |
no test coverage detected