v / vlib / crypto / sha3 / usage_test.v
95 lines · 84 sloc · 3.73 KB · b471887df20a64b6c3b6dbd6c8f451ba51ef194d
Raw
1import crypto.sha3
2
3fn 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