binius_hash/vision/
constants.rs

1// Copyright 2024-2025 Irreducible Inc.
2use binius_field::{AESTowerField32b, BinaryField32b};
3
4// The actual number of loops is twice as many because of the 2 sboxes
5pub const NUM_ROUNDS: usize = 8;
6
7pub const AFFINE_FWD_AES: [AESTowerField32b; 32] = [
8	AESTowerField32b::new(0x2d08efeb),
9	AESTowerField32b::new(0xf36ccd71),
10	AESTowerField32b::new(0x0195e6c5),
11	AESTowerField32b::new(0x65904c9f),
12	AESTowerField32b::new(0x18b119fe),
13	AESTowerField32b::new(0x72ca1f14),
14	AESTowerField32b::new(0xb14b611c),
15	AESTowerField32b::new(0x3a669717),
16	AESTowerField32b::new(0x4e9348de),
17	AESTowerField32b::new(0x408cb48b),
18	AESTowerField32b::new(0x2403c51d),
19	AESTowerField32b::new(0xe7bf2994),
20	AESTowerField32b::new(0xcfd293df),
21	AESTowerField32b::new(0x2e5f7f42),
22	AESTowerField32b::new(0x42b307d4),
23	AESTowerField32b::new(0x64a7e57a),
24	AESTowerField32b::new(0x421b9978),
25	AESTowerField32b::new(0x7b118f37),
26	AESTowerField32b::new(0x30aa893a),
27	AESTowerField32b::new(0x3e021935),
28	AESTowerField32b::new(0xf5ec09d5),
29	AESTowerField32b::new(0xc18a0f95),
30	AESTowerField32b::new(0x4fc4e3c3),
31	AESTowerField32b::new(0x904b4c02),
32	AESTowerField32b::new(0xd15d6f2e),
33	AESTowerField32b::new(0x8d185c7c),
34	AESTowerField32b::new(0x504c17e3),
35	AESTowerField32b::new(0x37e777c2),
36	AESTowerField32b::new(0x30b10e92),
37	AESTowerField32b::new(0x6e1a825a),
38	AESTowerField32b::new(0x6ea14c5c),
39	AESTowerField32b::new(0x5a1b041f),
40];
41
42pub const AFFINE_FWD_CONST_AES: AESTowerField32b = AESTowerField32b::new(0x2c285aff);
43
44pub const AFFINE_INV_AES: [AESTowerField32b; 32] = [
45	AESTowerField32b::new(0x1af256ab),
46	AESTowerField32b::new(0xb00a31c8),
47	AESTowerField32b::new(0xd0a45bad),
48	AESTowerField32b::new(0x28ba0e84),
49	AESTowerField32b::new(0x981363ab),
50	AESTowerField32b::new(0x52a94dcf),
51	AESTowerField32b::new(0x812f70aa),
52	AESTowerField32b::new(0x41a33e37),
53	AESTowerField32b::new(0x08eacb1b),
54	AESTowerField32b::new(0x8c73b796),
55	AESTowerField32b::new(0x0844bf00),
56	AESTowerField32b::new(0x906fec10),
57	AESTowerField32b::new(0xaaeee482),
58	AESTowerField32b::new(0xe2ed2212),
59	AESTowerField32b::new(0x57f4ea4e),
60	AESTowerField32b::new(0x6cf3b0cb),
61	AESTowerField32b::new(0x0bd65b47),
62	AESTowerField32b::new(0xfd84d24c),
63	AESTowerField32b::new(0x5e786c25),
64	AESTowerField32b::new(0xdd3b0c42),
65	AESTowerField32b::new(0xe0f38b73),
66	AESTowerField32b::new(0x79593770),
67	AESTowerField32b::new(0xd7e66f93),
68	AESTowerField32b::new(0x9d32ed2c),
69	AESTowerField32b::new(0x7f6862a3),
70	AESTowerField32b::new(0x07083cf2),
71	AESTowerField32b::new(0x6ac71c0c),
72	AESTowerField32b::new(0xc06890e3),
73	AESTowerField32b::new(0xbf6f5d0a),
74	AESTowerField32b::new(0xddc3dfb0),
75	AESTowerField32b::new(0xf12411c0),
76	AESTowerField32b::new(0x3cb53f46),
77];
78
79pub const AFFINE_INV_CONST_AES: AESTowerField32b = AESTowerField32b::new(0x6ad86f94);
80
81#[rustfmt::skip]
82pub const ROUND_KEYS: [[BinaryField32b; 24]; 2 * NUM_ROUNDS + 1] = [
83    [
84        BinaryField32b::new(0x545e66a7), BinaryField32b::new(0x073fdd58), BinaryField32b::new(0x84362677), BinaryField32b::new(0x95fe8565),
85		BinaryField32b::new(0x06269cd8), BinaryField32b::new(0x9c17909e), BinaryField32b::new(0xf1f0adee), BinaryField32b::new(0x2694c698),
86		BinaryField32b::new(0x94b2788f), BinaryField32b::new(0x5eac14ad), BinaryField32b::new(0x21677a78), BinaryField32b::new(0x5755730b),
87		BinaryField32b::new(0x37cef9cf), BinaryField32b::new(0x2fb31ffe), BinaryField32b::new(0xfc0082ec), BinaryField32b::new(0x609c12f0),
88		BinaryField32b::new(0x102769ee), BinaryField32b::new(0x4732860d), BinaryField32b::new(0xf97935e0), BinaryField32b::new(0x36e77c02),
89		BinaryField32b::new(0xba9e70df), BinaryField32b::new(0x67b701d7), BinaryField32b::new(0x829d77a4), BinaryField32b::new(0xf6ec454d),
90    ],
91    [
92        BinaryField32b::new(0x73fa03e1), BinaryField32b::new(0x2551a651), BinaryField32b::new(0x0541031f), BinaryField32b::new(0xec1d59dc),
93        BinaryField32b::new(0x780f0b43), BinaryField32b::new(0x04843f97), BinaryField32b::new(0xd379e20b), BinaryField32b::new(0xbe4d1f58),
94        BinaryField32b::new(0xe4c2f8bb), BinaryField32b::new(0xf29aee17), BinaryField32b::new(0x228e51f2), BinaryField32b::new(0x840ee72b),
95        BinaryField32b::new(0x0cb3b70e), BinaryField32b::new(0xbacc914a), BinaryField32b::new(0x490bfa7e), BinaryField32b::new(0xc2c3018e),
96        BinaryField32b::new(0xf6d13bd2), BinaryField32b::new(0x6a4d1fe1), BinaryField32b::new(0x4c2bc742), BinaryField32b::new(0x4508cb46),
97        BinaryField32b::new(0xed63a2f1), BinaryField32b::new(0x1802f859), BinaryField32b::new(0xa00483b5), BinaryField32b::new(0x56e12e78),
98    ],
99    [
100        BinaryField32b::new(0xbace7a4a), BinaryField32b::new(0xc3a71400), BinaryField32b::new(0x5a29b316), BinaryField32b::new(0xeedc8d26),
101		BinaryField32b::new(0x51c14d7e), BinaryField32b::new(0x2add9be8), BinaryField32b::new(0xfec386f3), BinaryField32b::new(0x630765dc),
102		BinaryField32b::new(0xaef6c21b), BinaryField32b::new(0x8c98fc1a), BinaryField32b::new(0x3f9c4f9d), BinaryField32b::new(0x399e7231),
103		BinaryField32b::new(0xba238b04), BinaryField32b::new(0x787d67ec), BinaryField32b::new(0x313ad8af), BinaryField32b::new(0xdd622ac3),
104		BinaryField32b::new(0xe0a8d9b8), BinaryField32b::new(0xaa0e6306), BinaryField32b::new(0x29864574), BinaryField32b::new(0x67ee41da),
105		BinaryField32b::new(0x5502278d), BinaryField32b::new(0xa92e20b1), BinaryField32b::new(0x0fdc5328), BinaryField32b::new(0x74dbee7a),
106    ],
107    [
108        BinaryField32b::new(0x8bd2f341), BinaryField32b::new(0x59dc2758), BinaryField32b::new(0x5146c720), BinaryField32b::new(0x9df43021),
109        BinaryField32b::new(0x0d1c49ea), BinaryField32b::new(0x81d4b0a5), BinaryField32b::new(0xdbfae4d1), BinaryField32b::new(0xc3153118),
110        BinaryField32b::new(0x8a3aec81), BinaryField32b::new(0xeacd8854), BinaryField32b::new(0xdd4b2576), BinaryField32b::new(0x7dd5cee9),
111        BinaryField32b::new(0x5e9e77b7), BinaryField32b::new(0x6b6efd8d), BinaryField32b::new(0xf11db400), BinaryField32b::new(0x0e6258b7),
112        BinaryField32b::new(0x37b3b6e3), BinaryField32b::new(0xed884c61), BinaryField32b::new(0xb948717c), BinaryField32b::new(0x3d7554cf),
113        BinaryField32b::new(0x42419311), BinaryField32b::new(0x422d11d3), BinaryField32b::new(0x5392b2e7), BinaryField32b::new(0x79c1591d),
114    ],
115    [
116        BinaryField32b::new(0x27df48ae), BinaryField32b::new(0x948bc10e), BinaryField32b::new(0xcb079dc1), BinaryField32b::new(0xed183a37),
117        BinaryField32b::new(0x81dcc076), BinaryField32b::new(0x24cb0490), BinaryField32b::new(0x52d69fb8), BinaryField32b::new(0x8b576666),
118        BinaryField32b::new(0x7499fe4d), BinaryField32b::new(0x8f879e34), BinaryField32b::new(0xcb11780a), BinaryField32b::new(0x5e876b29),
119        BinaryField32b::new(0xb72d96ab), BinaryField32b::new(0xac28e621), BinaryField32b::new(0x18aeca7e), BinaryField32b::new(0xf3d30baf),
120        BinaryField32b::new(0xc7fca53f), BinaryField32b::new(0xf7b3281a), BinaryField32b::new(0xdaf5559f), BinaryField32b::new(0x27aca0b3),
121        BinaryField32b::new(0x9515d3ee), BinaryField32b::new(0xa39fd2e1), BinaryField32b::new(0xf61b52c2), BinaryField32b::new(0x83ec5a0f),
122    ],
123    [
124        BinaryField32b::new(0x89841f23), BinaryField32b::new(0x8bd0c3e1), BinaryField32b::new(0xde2dd62b), BinaryField32b::new(0x37799416),
125        BinaryField32b::new(0x558834c7), BinaryField32b::new(0x939df560), BinaryField32b::new(0xb1a9f457), BinaryField32b::new(0xcb24dadb),
126        BinaryField32b::new(0x4f702a2a), BinaryField32b::new(0x65ad5822), BinaryField32b::new(0x7ecf577d), BinaryField32b::new(0x728b4092),
127        BinaryField32b::new(0x89e4fa7d), BinaryField32b::new(0x10cd7556), BinaryField32b::new(0x1de77ab7), BinaryField32b::new(0x2374c530),
128        BinaryField32b::new(0x95b289d4), BinaryField32b::new(0xa6ad3862), BinaryField32b::new(0xc6b1a233), BinaryField32b::new(0xac501639),
129        BinaryField32b::new(0x3f6072a3), BinaryField32b::new(0xf8ae7cc4), BinaryField32b::new(0x622f4cf3), BinaryField32b::new(0xf7ccf75b),
130    ],
131    [
132        BinaryField32b::new(0xaedf6aac), BinaryField32b::new(0xd64356b2), BinaryField32b::new(0x1cbba169), BinaryField32b::new(0x688602ae),
133        BinaryField32b::new(0x6231b358), BinaryField32b::new(0x1fba8b86), BinaryField32b::new(0xf7b83f1c), BinaryField32b::new(0x465c4050),
134        BinaryField32b::new(0x4403e74c), BinaryField32b::new(0x5f51c2f3), BinaryField32b::new(0x1b114a4d), BinaryField32b::new(0x8f32bf48),
135        BinaryField32b::new(0x87990cfc), BinaryField32b::new(0x71b55cb1), BinaryField32b::new(0x73083164), BinaryField32b::new(0x2fbd58ae),
136        BinaryField32b::new(0x59bbcbbf), BinaryField32b::new(0xb0dc1eba), BinaryField32b::new(0xf2f169ff), BinaryField32b::new(0x54cc93e8),
137        BinaryField32b::new(0x975cfc83), BinaryField32b::new(0xbefc67cf), BinaryField32b::new(0xb841429b), BinaryField32b::new(0xff127d64),
138    ],
139    [
140        BinaryField32b::new(0xd6561783), BinaryField32b::new(0x88153c99), BinaryField32b::new(0x1a04e141), BinaryField32b::new(0x62631076),
141        BinaryField32b::new(0xb20b52a2), BinaryField32b::new(0x1df18264), BinaryField32b::new(0x05176f17), BinaryField32b::new(0x505b2752),
142        BinaryField32b::new(0x914a71aa), BinaryField32b::new(0x1b6cf96d), BinaryField32b::new(0x5a8b3b59), BinaryField32b::new(0x3ab885cc),
143        BinaryField32b::new(0xed662f24), BinaryField32b::new(0xa859f626), BinaryField32b::new(0xd91136bb), BinaryField32b::new(0x6da2d95b),
144        BinaryField32b::new(0x043fd679), BinaryField32b::new(0xb9e685e8), BinaryField32b::new(0xdf796fa5), BinaryField32b::new(0x53fc28a3),
145        BinaryField32b::new(0x0c15dc77), BinaryField32b::new(0x079255d2), BinaryField32b::new(0x3373a2a0), BinaryField32b::new(0xfc6b012e),
146    ],
147    [
148        BinaryField32b::new(0xb3359ff0), BinaryField32b::new(0xa471acdc), BinaryField32b::new(0x6ad3e18a), BinaryField32b::new(0x4f012f65),
149        BinaryField32b::new(0xebd4392f), BinaryField32b::new(0x25d3af23), BinaryField32b::new(0x7a68469c), BinaryField32b::new(0xd479ea57),
150        BinaryField32b::new(0xb55b6450), BinaryField32b::new(0x86ef0a15), BinaryField32b::new(0xeefd412f), BinaryField32b::new(0xc8e98f30),
151        BinaryField32b::new(0x61e0c12d), BinaryField32b::new(0x36c4680c), BinaryField32b::new(0xe818ab96), BinaryField32b::new(0xfcb765f2),
152        BinaryField32b::new(0xcbb47fea), BinaryField32b::new(0xc9e202a8), BinaryField32b::new(0xc762caec), BinaryField32b::new(0x366f08fd),
153        BinaryField32b::new(0x5e2f3a19), BinaryField32b::new(0x242c8397), BinaryField32b::new(0x638a0042), BinaryField32b::new(0x63f1c9c5),
154    ],
155    [
156        BinaryField32b::new(0x4e28a23c), BinaryField32b::new(0xdbe6f0db), BinaryField32b::new(0x9cf4faeb), BinaryField32b::new(0x2fde2616),
157        BinaryField32b::new(0x22dedea1), BinaryField32b::new(0x08ef118e), BinaryField32b::new(0xd7f16ae2), BinaryField32b::new(0xa13b30a8),
158        BinaryField32b::new(0x2ceb58c1), BinaryField32b::new(0xca587d86), BinaryField32b::new(0xf6d54fcd), BinaryField32b::new(0x9cd9f3f5),
159        BinaryField32b::new(0x9b0f94a2), BinaryField32b::new(0xdede0863), BinaryField32b::new(0xa608eb2d), BinaryField32b::new(0x4d3c4469),
160        BinaryField32b::new(0x53784235), BinaryField32b::new(0x4cf6aa1e), BinaryField32b::new(0xcb6ec0d5), BinaryField32b::new(0xf334b49e),
161        BinaryField32b::new(0xe5f7a67a), BinaryField32b::new(0x989658a2), BinaryField32b::new(0xa1a672ca), BinaryField32b::new(0x6fb7eced),
162    ],
163    [
164        BinaryField32b::new(0x2bbdf7b8), BinaryField32b::new(0xa8626256), BinaryField32b::new(0xd95bf688), BinaryField32b::new(0x43245a87),
165        BinaryField32b::new(0xc14af030), BinaryField32b::new(0x28e5933a), BinaryField32b::new(0x3aeb3e0d), BinaryField32b::new(0x169f7dea),
166        BinaryField32b::new(0x4cd4d1e4), BinaryField32b::new(0x8db556b5), BinaryField32b::new(0xdd1a49ea), BinaryField32b::new(0xe64eff5d),
167        BinaryField32b::new(0x8bd56648), BinaryField32b::new(0x2c3422be), BinaryField32b::new(0x5cffb53f), BinaryField32b::new(0x6b7aaa6e),
168        BinaryField32b::new(0xc2a8d1af), BinaryField32b::new(0x7e79bed4), BinaryField32b::new(0xd0b08e51), BinaryField32b::new(0x1861ba54),
169        BinaryField32b::new(0xb7d3c6b4), BinaryField32b::new(0x6a9bd7ca), BinaryField32b::new(0x129d3aa5), BinaryField32b::new(0x809e9413),
170    ],
171    [
172        BinaryField32b::new(0x52538d7d), BinaryField32b::new(0xdd441420), BinaryField32b::new(0x38a2e2d5), BinaryField32b::new(0xccd05f31),
173        BinaryField32b::new(0x2a49f3a6), BinaryField32b::new(0xe533cc9b), BinaryField32b::new(0xa18de92e), BinaryField32b::new(0x495f684a),
174        BinaryField32b::new(0x0028e3ae), BinaryField32b::new(0xd4072861), BinaryField32b::new(0x370fd7a3), BinaryField32b::new(0x728224bc),
175        BinaryField32b::new(0xa8b6b3d7), BinaryField32b::new(0xdada7046), BinaryField32b::new(0xea9e71df), BinaryField32b::new(0x914f7d53),
176        BinaryField32b::new(0x9b796ac9), BinaryField32b::new(0xe7f61a69), BinaryField32b::new(0x67a68f71), BinaryField32b::new(0x7eb15ce6),
177        BinaryField32b::new(0xeb9af9e1), BinaryField32b::new(0xa75f54b1), BinaryField32b::new(0x59210427), BinaryField32b::new(0x75093378),
178    ],
179    [
180        BinaryField32b::new(0x27866fea), BinaryField32b::new(0x3bd84dca), BinaryField32b::new(0x681d1d3a), BinaryField32b::new(0xe7fb7496),
181        BinaryField32b::new(0x86fd9bf8), BinaryField32b::new(0xc1f28786), BinaryField32b::new(0xb3f17a06), BinaryField32b::new(0x60c43dbe),
182        BinaryField32b::new(0x16fee1be), BinaryField32b::new(0xa8407554), BinaryField32b::new(0xca909e3b), BinaryField32b::new(0xb1fc461c),
183        BinaryField32b::new(0xd84d663e), BinaryField32b::new(0x2e7d669b), BinaryField32b::new(0x5b5b5a56), BinaryField32b::new(0x6c53d090),
184        BinaryField32b::new(0x236707a6), BinaryField32b::new(0x7f1f4e97), BinaryField32b::new(0xe95b23f3), BinaryField32b::new(0x8cd1e3dd),
185        BinaryField32b::new(0x928f3212), BinaryField32b::new(0x9c7c1c20), BinaryField32b::new(0x00eeebe3), BinaryField32b::new(0xc0572f52),
186    ],
187    [
188        BinaryField32b::new(0xd1504060), BinaryField32b::new(0x005d8a96), BinaryField32b::new(0x058e317a), BinaryField32b::new(0x30d9d3c6),
189        BinaryField32b::new(0xa585af56), BinaryField32b::new(0x084c5111), BinaryField32b::new(0x498da85e), BinaryField32b::new(0x0149987d),
190        BinaryField32b::new(0xe130153b), BinaryField32b::new(0x817cc725), BinaryField32b::new(0x75f726b1), BinaryField32b::new(0x23941339),
191        BinaryField32b::new(0x1f26e9dd), BinaryField32b::new(0xdb013723), BinaryField32b::new(0x81f36069), BinaryField32b::new(0xe4167ba1),
192        BinaryField32b::new(0x50d59f82), BinaryField32b::new(0xbf011350), BinaryField32b::new(0x3ae71f42), BinaryField32b::new(0x9966d041),
193        BinaryField32b::new(0xdbe09577), BinaryField32b::new(0xa830b8f0), BinaryField32b::new(0x0c018c2d), BinaryField32b::new(0x08beab4f),
194    ],
195    [
196        BinaryField32b::new(0x20898252), BinaryField32b::new(0xac8aa337), BinaryField32b::new(0x5c5bbcad), BinaryField32b::new(0x2fa58f41),
197        BinaryField32b::new(0xf2446068), BinaryField32b::new(0xfff46a79), BinaryField32b::new(0x0b1980d8), BinaryField32b::new(0x01b14c53),
198        BinaryField32b::new(0x4e432072), BinaryField32b::new(0xfc610a31), BinaryField32b::new(0x80ba5531), BinaryField32b::new(0xc14507a5),
199        BinaryField32b::new(0x2433c5d2), BinaryField32b::new(0x8a461cf3), BinaryField32b::new(0x187849cd), BinaryField32b::new(0x3d4f51e8),
200        BinaryField32b::new(0x3d9cd125), BinaryField32b::new(0xe15e09ca), BinaryField32b::new(0x8c6287c6), BinaryField32b::new(0xfa0ec2f4),
201        BinaryField32b::new(0x65435f29), BinaryField32b::new(0xd33a4f3d), BinaryField32b::new(0xd61bb963), BinaryField32b::new(0x991005f9),
202    ],
203    [
204        BinaryField32b::new(0x00d80bd4), BinaryField32b::new(0x3d8b3d56), BinaryField32b::new(0xcc18a7a9), BinaryField32b::new(0x0105e9bb),
205        BinaryField32b::new(0x71f0e736), BinaryField32b::new(0x4cc71fa4), BinaryField32b::new(0x1a2ec96b), BinaryField32b::new(0xe1b8b093),
206        BinaryField32b::new(0x329232ab), BinaryField32b::new(0xb4285526), BinaryField32b::new(0x02326fe9), BinaryField32b::new(0xe79accab),
207        BinaryField32b::new(0xd893b618), BinaryField32b::new(0x9bd74bd5), BinaryField32b::new(0x2062577c), BinaryField32b::new(0x94f82da9),
208        BinaryField32b::new(0xb551d97a), BinaryField32b::new(0x862483f0), BinaryField32b::new(0x5f8e4e3e), BinaryField32b::new(0x098d5e44),
209        BinaryField32b::new(0xbe326102), BinaryField32b::new(0x4f5f050e), BinaryField32b::new(0x1bd571d5), BinaryField32b::new(0xcdd8e583),
210    ],
211    [
212        BinaryField32b::new(0x1b525e1b), BinaryField32b::new(0x1cccb851), BinaryField32b::new(0x45b3c777), BinaryField32b::new(0x63cc9153),
213        BinaryField32b::new(0xdfa0fd4a), BinaryField32b::new(0x0cf20c06), BinaryField32b::new(0x72fdd2f3), BinaryField32b::new(0xf9b6f564),
214        BinaryField32b::new(0x9552a62b), BinaryField32b::new(0x1e848099), BinaryField32b::new(0x3ba1a5a6), BinaryField32b::new(0x17ff06e0),
215        BinaryField32b::new(0x8cae82ed), BinaryField32b::new(0xb5b29fbc), BinaryField32b::new(0x9322d5a6), BinaryField32b::new(0x77f40c4c),
216        BinaryField32b::new(0x0843ce60), BinaryField32b::new(0x86ddb97f), BinaryField32b::new(0xe5a12a04), BinaryField32b::new(0x9bd65cd6),
217        BinaryField32b::new(0x1b16bea6), BinaryField32b::new(0xf4066cee), BinaryField32b::new(0xdcb3c788), BinaryField32b::new(0x499b6483),
218    ],
219];