| 1 | // Copyright (c) 2019-2024 Alexander Medvednikov. All rights reserved. |
| 2 | // Use of this source code is governed by an MIT license |
| 3 | // that can be found in the LICENSE file. |
| 4 | import crypto.sha512 |
| 5 | import hash |
| 6 | |
| 7 | // verify sha512.Digest implements hash.Hash |
| 8 | fn test_digest_implements_hash() { |
| 9 | get_digest := fn () hash.Hash { |
| 10 | return sha512.new() |
| 11 | } |
| 12 | } |
| 13 | |
| 14 | const final_result = '4143e55fcba7e39b20f62a1368e5eb28f64a8859458886117ac66027832e0f9f5263daec688c439d2d0fa07059334668d39e59543039703dbb7e03ec9da7f8d7' |
| 15 | |
| 16 | fn test_crypto_sha512() { |
| 17 | assert sha512.sum512('This is a sha512 checksum.'.bytes()).hex() == final_result |
| 18 | } |
| 19 | |
| 20 | fn test_crypto_sha512_writer() { |
| 21 | mut digest := sha512.new_digest(.sha512) |
| 22 | digest.write('This is a'.bytes()) or { assert false } |
| 23 | digest.write(' sha512 checksum.'.bytes()) or { assert false } |
| 24 | // mut sum := digest.checksum() |
| 25 | mut sum := digest.sum([]) |
| 26 | assert sum.hex() == final_result |
| 27 | sum = digest.sum([]) |
| 28 | assert sum.hex() == final_result |
| 29 | } |
| 30 | |
| 31 | fn test_crypto_sha512_writer_reset() { |
| 32 | mut digest := sha512.new_digest(.sha512) |
| 33 | digest.write('This is a'.bytes()) or { assert false } |
| 34 | digest.write(' sha512 checksum.'.bytes()) or { assert false } |
| 35 | _ = digest.sum([]) |
| 36 | digest.reset() |
| 37 | digest.write('This is a'.bytes()) or { assert false } |
| 38 | digest.write(' sha512 checksum.'.bytes()) or { assert false } |
| 39 | sum := digest.sum([]) |
| 40 | assert sum.hex() == final_result |
| 41 | } |
| 42 | |
| 43 | fn test_crypto_sha512_384() { |
| 44 | data := 'example bytes'.bytes() |
| 45 | sum384 := sha512.sum384(data) |
| 46 | expected := '8004e0038985a2d4dc40802b149f02cdd5868eaa58d87fae02f0cce2a3b566a6af63e34b11d5ba88c6035b96e587a6d6' |
| 47 | assert sum384.hex() == expected |
| 48 | |
| 49 | mut d := sha512.new384() |
| 50 | d.write(data) or { assert false } |
| 51 | sum := d.sum([]) |
| 52 | assert sum.hex() == expected |
| 53 | |
| 54 | d.reset() |
| 55 | d.write(data) or { assert false } |
| 56 | chksum := d.sum([]) |
| 57 | assert chksum.hex() == expected |
| 58 | } |
| 59 | |
| 60 | fn test_crypto_sha512_224() { |
| 61 | data := 'example bytes'.bytes() |
| 62 | sum512_224 := sha512.sum512_224(data) |
| 63 | expected := '2bcbe17a1c3cb7b2b8b75c3118ed8525b6a4c505f2e59f3dc5dfe462' |
| 64 | assert sum512_224.hex() == expected |
| 65 | |
| 66 | mut d := sha512.new512_224() |
| 67 | d.write(data) or { assert false } |
| 68 | sum := d.sum([]) |
| 69 | assert sum.hex() == expected |
| 70 | |
| 71 | d.reset() |
| 72 | d.write(data) or { assert false } |
| 73 | chksum := d.sum([]) |
| 74 | assert chksum.hex() == expected |
| 75 | } |
| 76 | |
| 77 | fn test_crypto_sha512_256() { |
| 78 | data := 'example bytes'.bytes() |
| 79 | sum512_256 := sha512.sum512_256(data) |
| 80 | expected := '984512a8f874623cf1e2d5bd85c7d1240214163db0ebd0919922768f94879563' |
| 81 | assert sum512_256.hex() == expected |
| 82 | |
| 83 | mut d := sha512.new512_256() |
| 84 | d.write(data) or { assert false } |
| 85 | sum := d.sum([]) |
| 86 | assert sum.hex() == expected |
| 87 | |
| 88 | d.reset() |
| 89 | d.write(data) or { assert false } |
| 90 | chksum := d.sum([]) |
| 91 | assert chksum.hex() == expected |
| 92 | } |
| 93 | |