v / vlib / x / crypto / ascon / cxof_test.v
145 lines · 137 sloc · 4.05 KB · f0731691771ba7e644eeacb67695382fb4660142
Raw
1// Copyright ©2025 blackshirt.
2// Use of this source code is governed by an MIT license
3// that can be found in the LICENSE file.
4//
5import arrays
6import encoding.hex
7import x.crypto.ascon
8
9struct CxofTest {
10 count int
11 msg string
12 z string
13 md string
14}
15
16// Known Answer Tests (KAT) with 512-bits output for Ascon-CXOF128
17fn test_cxof128() ! {
18 for item in cxof128_test_data {
19 msg := hex.decode(item.msg)!
20 z := hex.decode(item.z)!
21 md := hex.decode(item.md)!
22
23 out := ascon.cxof128_64(msg, z)!
24 assert md == out
25
26 // With Xof128Digest opaque
27 mut cx := ascon.new_cxof128(ascon.default_xof_size, z)!
28 md0 := cx.sum(msg)
29 assert md0 == md
30
31 // test .read()
32 cx.reset()
33 mut dst := []u8{len: 64}
34 _ := cx.write(msg)!
35 nr := cx.read(mut dst)!
36 assert nr == 64
37 assert dst == md
38
39 // with chunked messages
40 cx.reset()
41 chunks := arrays.chunk[u8](msg, 20)
42 mut tot := 0
43 for chunk in chunks {
44 n := cx.write(chunk)!
45 tot += n
46 }
47 assert msg.len == tot
48
49 chunked_md := cx.sum([]u8{})
50 assert chunked_md == md
51 }
52}
53
54const cxof128_test_data = [
55 CxofTest{
56 count: 1
57 msg: ''
58 z: ''
59 md: '4f50159ef70bb3dad8807e034eaebd44c4fa2cbbc8cf1f05511ab66cdcc529905ca12083fc186ad899b270b1473dc5f7ec88d1052082dcdfe69fb75d269e7b74'
60 },
61 CxofTest{
62 count: 2
63 msg: ''
64 z: '10'
65 md: '0c93a483e7d574d49fe52cce03ee646117977d57a8aa57704ab4daf44b501430ff6ac11a5d1fd6f2154b5c65728268270c8bb578508487b8965718ada6272fd6'
66 },
67 CxofTest{
68 count: 3
69 msg: ''
70 z: '1011'
71 md: 'd1106c7622e79fe955bd9d79e03b918e770fe0e0cddde28beb924b02c5fc936b33acca299c89eca5d71886cbbfa4d54a21c55fde2b679f5e2488063a1719dc32'
72 },
73 CxofTest{
74 count: 4
75 msg: ''
76 z: '101112'
77 md: '6a53a6dbf1bec15a79ce1214ff76a4d6bb16f60cfa56bf2c218aec5e160372117d2a2e647b128624e9b1d2259faf083f2bedd0fc751a2e2ff268d0ee026b6449'
78 },
79 CxofTest{
80 count: 5
81 msg: ''
82 z: '10111213'
83 md: 'cc333dd5b4ea61abe4376d61058b16df5eda7056299865ed7d25f43ac5b8541574608bd95ab0a3c3b74abd4abf9e50e63be6efe1b836b58595d8c47705c4dffb'
84 },
85 CxofTest{
86 count: 6
87 msg: ''
88 z: '1011121314'
89 md: '8ee69d28b1bf3eafacf1e169fd10b6b7b72a7e2aaf0625e8e7c00153833b7224ed8c8c127b9808352c5647f9e862958d6de9eb93c4a236d59ecd84665e7164d9'
90 },
91 CxofTest{
92 count: 7
93 msg: ''
94 z: '101112131415'
95 md: '3681695c40d83f60b401ecfa14bc03780ad474438f74b823eec9f0d5a375c13488803d3b4b8c8d4acd03186039f905fa15c7860dd0e9d566f31cd9e5822a937c'
96 },
97 CxofTest{
98 count: 8
99 msg: ''
100 z: '10111213141516'
101 md: '717a9ba3b3c00f4078572b2d3fb3f0a86d45f70bc4e1cd89cb7a952bfa64162383735534ecbe0a7e62e7592cf447404db0361d98c2237245688ead15c05ae59b'
102 },
103 CxofTest{
104 count: 9
105 msg: ''
106 z: '1011121314151617'
107 md: '61324766441dd6c11e1736bad1d2185820885ed76fe2ce537775a6e855eeafd2a6651b5e862a44982765f8b4c7cbe9c8b354f569ead6abc62cc9b7cdd72e0cb3'
108 },
109 CxofTest{
110 count: 10
111 msg: ''
112 z: '101112131415161718'
113 md: '32fde6b9d290f56fc74aac9368f32c69973e1bab35d96118db7181aae577687673c01a9e35327aded556987eed3441d4f42ec36b0c198498d9e7f357b948d560'
114 },
115 CxofTest{
116 count: 11
117 msg: ''
118 z: '10111213141516171819'
119 md: '690fc893055910d7d1d38055cf5589bbbe6b82bf175847ab3e0fd9a578b044dcb42be2932067eaa563a09e634581f34c2b4cfb38e1b06841b45b7b34c746d6dd'
120 },
121 CxofTest{
122 count: 12
123 msg: ''
124 z: '101112131415161718191a'
125 md: 'ecdab5b15324f99a1709be26fc329d305bd475e5f39bc2b63788792166ad08fe720ccd14e0a4de7d83ede1c7744929dc509c73748d6661a3d3215995357d3f88'
126 },
127 CxofTest{
128 count: 13
129 msg: ''
130 z: '101112131415161718191a1b'
131 md: 'ec2ba3309cfa6d6d0b581374e7c020ad17c330ea2b76d48724a415dceca3859c11146c2f64e52e44d27b1c44fd27476990a2e959b9998827a527a7e69089895f'
132 },
133 CxofTest{
134 count: 14
135 msg: ''
136 z: '101112131415161718191a1b1c'
137 md: '659a59bc7fdece2f1bafa9f1bfb4c262043f74da550f85c902c9c4302adfcf898fbcd74c92d67bded153137e0d32ccba88767354be99103dfeb59c686ca98dea'
138 },
139 CxofTest{
140 count: 15
141 msg: ''
142 z: '101112131415161718191a1b1c1d'
143 md: '17756044b742028b508d797c2c75a0722dde763c59d3fe5f70435b82faca5a80fe9c5ec9f3c59072ae48f37a241281c25d2e903c9d9290128265f1fe92b80bed'
144 },
145]
146