| 1 | import crypto.sha3 |
| 2 | |
| 3 | fn test_api_call() { |
| 4 | input := 'abc'.bytes() |
| 5 | |
| 6 | // Digest generation |
| 7 | mut digest_224 := sha3.new_digest(sha3.rate_224, sha3.size_224)! |
| 8 | mut digest_256 := sha3.new_digest(sha3.rate_256, sha3.size_256)! |
| 9 | mut digest_384 := sha3.new_digest(sha3.rate_384, sha3.size_384)! |
| 10 | mut digest_512 := sha3.new_digest(sha3.rate_512, sha3.size_512)! |
| 11 | mut digest_keccak_224 := sha3.new_digest(sha3.rate_224, sha3.size_224, padding: .keccak)! |
| 12 | mut digest_keccak_256 := sha3.new_digest(sha3.rate_256, sha3.size_256, padding: .keccak)! |
| 13 | mut digest_keccak_384 := sha3.new_digest(sha3.rate_384, sha3.size_384, padding: .keccak)! |
| 14 | mut digest_keccak_512 := sha3.new_digest(sha3.rate_512, sha3.size_512, padding: .keccak)! |
| 15 | |
| 16 | // Result should be same as shortened version |
| 17 | assert digest_224 == sha3.new224()! |
| 18 | assert digest_256 == sha3.new256()! |
| 19 | assert digest_384 == sha3.new384()! |
| 20 | assert digest_512 == sha3.new512()! |
| 21 | assert digest_keccak_256 == sha3.new256keccak()! |
| 22 | assert digest_keccak_512 == sha3.new512keccak()! |
| 23 | |
| 24 | // Should not panic |
| 25 | digest_224.write(input)! |
| 26 | digest_256.write(input)! |
| 27 | digest_384.write(input)! |
| 28 | digest_512.write(input)! |
| 29 | digest_keccak_256.write(input)! |
| 30 | digest_keccak_512.write(input)! |
| 31 | |
| 32 | // Result should be same as shortened version |
| 33 | assert digest_224.checksum() == sha3.sum224(input) |
| 34 | assert digest_256.checksum() == sha3.sum256(input) |
| 35 | assert digest_384.checksum() == sha3.sum384(input) |
| 36 | assert digest_512.checksum() == sha3.sum512(input) |
| 37 | assert digest_keccak_256.checksum() == sha3.keccak256(input) |
| 38 | assert digest_keccak_512.checksum() == sha3.keccak512(input) |
| 39 | |
| 40 | for size in 1 .. 65 { |
| 41 | // Digest generation |
| 42 | mut digest_xof_128 := sha3.new_digest(sha3.xof_rate_128, size, padding: .xof)! |
| 43 | mut digest_xof_256 := sha3.new_digest(sha3.xof_rate_256, size, padding: .xof)! |
| 44 | |
| 45 | // Result should be same as shortened version |
| 46 | assert digest_xof_128 == sha3.new_xof_digest(sha3.xof_rate_128, size)! |
| 47 | assert digest_xof_256 == sha3.new_xof_digest(sha3.xof_rate_256, size)! |
| 48 | assert digest_xof_128 == sha3.new128xof(size)! |
| 49 | assert digest_xof_256 == sha3.new256xof(size)! |
| 50 | |
| 51 | // Should not panic |
| 52 | digest_xof_128.write(input)! |
| 53 | digest_xof_256.write(input)! |
| 54 | } |
| 55 | |
| 56 | // Should be AbsorptionRateError |
| 57 | if should_be_error := sha3.new_digest(sha3.rate_224, sha3.size_256) { |
| 58 | assert false, 'new_digest(sha3.rate_224, sha3.size_256) should be error' |
| 59 | } |
| 60 | if should_be_error := sha3.new_digest(sha3.rate_224, sha3.size_256, padding: .keccak) { |
| 61 | assert false, 'new_digest(sha3.rate_224, sha3.size_256, padding: .keccak) should be error' |
| 62 | } |
| 63 | if should_be_error := sha3.new_digest(0, sha3.size_256) { |
| 64 | assert false, 'new_digest(0, sha3.size_256) should be error' |
| 65 | } |
| 66 | if should_be_error := sha3.new_digest(0, sha3.size_256, padding: .keccak) { |
| 67 | assert false, 'new_digest(0, sha3.size_256, padding: .keccak) should be error' |
| 68 | } |
| 69 | |
| 70 | // Should be HashSizeError |
| 71 | if should_be_error := sha3.new_digest(sha3.rate_256, -1) { |
| 72 | assert false, 'new_digest(sha3.rate_256, -1) should be error' |
| 73 | } |
| 74 | if should_be_error := sha3.new_digest(sha3.rate_256, -1, padding: .keccak) { |
| 75 | assert false, 'new_digest(sha3.rate_256, -1, padding: .keccak) should be error' |
| 76 | } |
| 77 | if should_be_error := sha3.new_digest(sha3.rate_256, 100) { |
| 78 | assert false, 'new_digest(sha3.rate_256, -1) should be error' |
| 79 | } |
| 80 | if should_be_error := sha3.new_digest(sha3.rate_256, 100, padding: .keccak) { |
| 81 | assert false, 'new_digest(sha3.rate_256, -1, padding: .keccak) should be error' |
| 82 | } |
| 83 | |
| 84 | // Should be XOFSizeError |
| 85 | if should_be_error := sha3.new128xof(-1) { |
| 86 | assert false, 'new128xof(-1) should be error' |
| 87 | } |
| 88 | if should_be_error := sha3.new256xof(-1) { |
| 89 | assert false, 'new256xof(-1) should be error' |
| 90 | } |
| 91 | // Shoud be XOFRateError |
| 92 | if should_be_error := sha3.new_xof_digest(0, sha3.size_256) { |
| 93 | assert false, 'new_xof_digest(0, sha3.size_256) should be error' |
| 94 | } |
| 95 | } |
| 96 | |