symm/poly1305.c, etc.: Convert the Monte-Carlo tests to incremental form.
[catacomb] / symm / t / poly1305
1 ### Poly1305 tests.
2
3 poly1305-hash {
4 ## The tests from Daniel J. Bernstein, `The Poly1305-AES message-
5 ## authentication code', 2005-03-29, Appendix B,
6 ## https://cr.yp.to/mac/poly1305-20050329.pdf
7 851fc40c3467ac0be05cc20404f3f700 580b3b0f9447bb1e69d095b5928b6dbc
8 f3f6
9 f4c633c3044fc145f84f335cb81953de;
10 a0f3080000f46400d0c7e9076c834403 dd3fab2251f11ac759f0887129cc2ee7
11 ""
12 dd3fab2251f11ac759f0887129cc2ee7;
13 48443d0bb0d21109c89a100b5ce2c208 83149c69b561dd88298a1798b10716ef
14 663cea190ffb83d89593f3f476b6bc24d7e679107ea26adb8caf6652d0656136
15 0ee1c16bb73f0f4fd19881753c01cdbe;
16 12976a08c4426d0ce8a82407c4f48207 80f8c20aa71202d1e29179cbcb555a57
17 ab0812724a7f1e342742cbed374d94d136c6b8795d45b3819830f2c04491faf0990c62e48b8018b2c3e4a0fa3134cb67fa83e158c994d961c4cb21095c1bf9
18 5154ad0d2cb26e01274fc51148491f1b;
19
20 ## This one's from Daniel J. Bernstein, `Cryptography in NaCL', 2009-03-10,
21 ## https://cr.yp.to/highspeed/naclcrypto-20090310.pdf
22 eea6a7251c1e72916d11c2cb214d3c25 2539121d8e234e652d651fa4c8cff880
23 8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b37973f622a43d14a6599b1f654cb45a74e355a5
24 f3ffc7703f9400e52a7dfb4b3d3305d9;
25
26 ## Test vectors from RFC7539.
27 85d6be7857556d337f4452fe42d506a8 0103808afb0db2fd4abff6af4149f51b
28 43727970746f6772617068696320466f72756d2052657365617263682047726f7570
29 a8061dc1305136c6c22b8baf0c0127a9;
30 00000000000000000000000000000000 00000000000000000000000000000000
31 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
32 00000000000000000000000000000000;
33 00000000000000000000000000000000 36e5f6b5c5e06070f0efca96227a863e
34 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
35 36e5f6b5c5e06070f0efca96227a863e;
36 36e5f6b5c5e06070f0efca96227a863e 00000000000000000000000000000000
37 416e79207375626d697373696f6e20746f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c207768696368206172652061646472657373656420746f
38 f3477e7cd95417af89a6b8794c310cf0;
39 1c9240a5eb55d38af333888604f6b5f0 473917c1402b80099dca5cbc207075c0
40 2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e
41 4541669a7eaaee61e708dc7cbcc5eb62;
42 02000000000000000000000000000000 00000000000000000000000000000000
43 ffffffffffffffffffffffffffffffff
44 03000000000000000000000000000000;
45 02000000000000000000000000000000 ffffffffffffffffffffffffffffffff
46 02000000000000000000000000000000
47 03000000000000000000000000000000;
48 01000000000000000000000000000000 00000000000000000000000000000000
49 fffffffffffffffffffffffffffffffff0ffffffffffffffffffffffffffffff11000000000000000000000000000000
50 05000000000000000000000000000000;
51 01000000000000000000000000000000 00000000000000000000000000000000
52 fffffffffffffffffffffffffffffffffbfefefefefefefefefefefefefefefe01010101010101010101010101010101
53 00000000000000000000000000000000;
54 02000000000000000000000000000000 00000000000000000000000000000000
55 fdffffffffffffffffffffffffffffff
56 faffffffffffffffffffffffffffffff;
57 01000000000000000400000000000000 00000000000000000000000000000000
58 e33594d7505e43b900000000000000003394d7505e4379cd01000000000000000000000000000000000000000000000001000000000000000000000000000000
59 14000000000000005500000000000000;
60 01000000000000000400000000000000 00000000000000000000000000000000
61 e33594d7505e43b900000000000000003394d7505e4379cd010000000000000000000000000000000000000000000000
62 13000000000000000000000000000000;
63
64 ## This is a test of reduction which I constructed by hand.
65 ab59ca0d7cb5fb09b8065a01f03f310a 00000000000000000000000000000000
66 8daf7e633cf2fc399143a09fd109aa4d
67 04000000000000000000000000000000;
68 }
69
70 poly1305-cat {
71 36e5f6b5c5e06070f0efca96227a863e 00000000000000000000000000000000
72 416e79207375626d697373696f6e2074 6f20746865204945544620696e74656e6465642062792074686520436f6e7472696275746f7220666f72207075626c69636174696f6e20617320616c6c206f722070617274206f6620616e204945544620496e7465726e65742d4472616674206f722052464320616e6420616e792073746174656d656e74206d6164652077697468696e2074686520636f6e74657874206f6620616e204945544620616374697669747920697320636f6e7369646572656420616e20224945544620436f6e747269627574696f6e222e20537563682073746174656d656e747320696e636c756465206f72616c2073746174656d656e747320696e20494554462073657373696f6e732c2061732077656c6c206173207772697474656e20616e6420656c656374726f6e696320636f6d6d756e69636174696f6e73206d61646520617420616e792074696d65206f7220706c6163652c 207768696368206172652061646472657373656420746f
73 f3477e7cd95417af89a6b8794c310cf0;
74 eea6a7251c1e72916d11c2cb214d3c25 2539121d8e234e652d651fa4c8cff880
75 8e993b9f48681273c29650ba32fc76ce48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c97271d2c20f9b928fe2270d6fb863d51738
76 b48eeee314a7cc8ab932164548e526ae90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3
77 7973f622a43d14a6599b1f654cb45a74e355a5
78 f3ffc7703f9400e52a7dfb4b3d3305d9;
79 }
80
81 poly1305-mct {
82 ## Monte-Carlo test from https://cr.yp.to/mac/test.html.
83 ## Rather than check MD5 hashes of transcripts, I check the final tag
84 ## value. These were calculated from transcripts of a scratch
85 ## implementation (utils/poly1305-mct.c) which I checked against the
86 ## reference hashes.
87 ##
88 ## [universe /tmp/mdw]{ ./poly1305-mct | tee >(md5sum >&3) | tail -n1; } 3>&1
89 ## 3ceb64843c00984c5c2b7897f499141b -
90 ## df62013a9d388ea6e82cb7295fa706ec
91
92 00000000000000000000000000000000
93 00000000000000000000000000000000
94 00000000000000000000000000000000
95 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
96 0 1 596382b2c34704b87e291250fcb927fd;
97 87d0ce793cb4cb966c8dd6ad0e6c6799
98 18bf6ee80c6d2d8d11ffe4f5b7214cf2
99 2a3dbb3acef3b4172e5f7045a33bd038
100 66f75c0e0c7a40658629e3392f7f8e3349a02191ffd49f39879a8d9d1d0e23ea3caa4d240bd2ab8a8c4a6bb8d3288d9de4b793f05e97646dd4d98055defc3e0677d956b4c62664bac15962ab15d93ccbbc03aafdbde779162ed93b55361f0f8acaa41d50ef5175927fe79ea316186516eef15001cd04d3524a55e4fa3c5ca479d3aaa8a897c21807f721b6270ffc68b6889d81a116799f6aaa35d8e04c7a7dd5e6da2519e8759f54e906696f5772fee093283bcef7b930aed50323bcbc8c820c67422c1e16bdc022a9c0277c9d95fef0ea4ee11e2b27276da811523c5acb80154989f8a67ee9e3fa30b73b0c1c34bf46e3464d977cd7fcd0ac3b82721080bb0d9b982ee2c77feee983d7ba35da88ce86955002940652ab63bc56fb16f994da2b01d74356509d7d1b6d7956b0e5a557757bd1ced2eef8650bc5b6d426108c1518abcbd0befb6a0d5fd57a3e2dbf31458eab63df66613653d4beae73f5c40eb438fbcfdcf4a4ba46320184b9ca0da4dfae77de7ccc910356caea3243f33a3c81b064b3b7cedc7435c223f664227215715980e6e0bb570d459ba80d7512dbe458c8f0f3f52d659b6e8eef19ee71aea2ced85c7a42ffca6522a62db49a2a46eff72bd7f7e0883acd087183f0627f3537a4d558754ed63358e8182bee196735b361dc9bd64d5e34e1074a855655d2974cc6fa1653754cf40f561d8c7dc526aab2908ec2d2b977cde1a1fb1071e32f40e049ea20f30368ba1592b4fe57fb51595d23acbdace324cdd78060a17187c662368854e915402d9b52fb21e984663e41c26a109437e162cfaf071b53f77e50000a5388ff183b82ce7a1af476c416d7d204157b3633b2f4ec077b699b032816997e37bceded8d4a04976fd7d0c0b029f290794c3be504c5242287ea2f831f11ed5690d92775cd6e863d7731fd4da687ebfb13df4c41dc0fb8aec3d45ef6076ec131cdd55e724bae2931260484b73b12fdf2546d852cf089b64f622809c6ff963010d8aebc14e0cf4d5d06fc92e8e022a2a97dd822329d7bf26baf95f2f25fd2274cb4e10a596b570a97176273053be918c9a0a12ab3f61d83229e403e512b9f1fd89824ec9942ee782ee6972faf4cb5898e4a123c5e9e3f3fb71397d435b4de0f83627475ee6170f55646fc8aa52375fe4aae3711138b550c5f5654106b4ba7bc268ae7f63cf8a2401b2ba6c0894177e3f6696f9086760c3ce4e16844d1780c10b7785dcb3641fb488f077eacb89b8cf5b627a4449224923378dab62b90ef1c2dc7f1f7a196304e1805ee1a13f8cf12aed5526b82f62b5759ff12a573f68b8ccbe2d01d2e5615802edc3ef0a7778a1c565d9a836d770d1f5812e5698af213e398e0357834fffcde35d1cb77c821d21377401341f898475a4df74c58
101 1 10 7f1d971da577bdd6fb24437aaac845f5;
102 9eff9b802b9d43922975aea18a62834a
103 1f22e8534c98f80321384c88d00972d7
104 2b2f5dfbc2aeaead12f8dfaad90d4ec9
105 b84d332e02eda38a6cf2763928ba014bc632a0f2c0266f9093edc731eb2ce1e61c9a10bcb4bbd2b4b69e3f84da37dcc011142fbf8222c68a31f9bc227ead19f629ff4d6d414e95d3e9a3b2998d8e6db6379112f2d1e5edb32294729ad7d1c087b87d1c26a7e3b491f9d4452a2da50df87027d0f52c75e281091e86c86cc15091b0a6459a94e74597f86cd4801b4413f6185a7dd87f5d6bd3dfc8717afabd833c08160428a0fd0c2f9934921e9a7e40d9bf8a4d61781985aa6691cec4f466ab0bd8fe4cce660b31aeedec1cdc8ae76d3b9a01e5b5ca1e5d6932096bef253f427da7e974eab8aca5c0f22c9f0b5f1598e857f28c4a0b313890c718130e6bd18a150e5aa18e2f19bec1cb88adaeade2122ee13193287bbab77b2a334ffd9ba26210d170b6e7c7edd2fb6808d03acac8fe38b87a7523926e04028bc8df5753ced4b1bdf0b8a8d2315d210433417509dc685c660bd97678ef2d470c5845497d7d726e5ffbcc6e4db02d5d1a6a8b4629580ca3fae7392b33a992e73afd9e07c1cdc3576aedf6d2330f8dcf5d148873799e76cd4b8dda4eba698178d5edd6b260ef84af4517fbb68810571cfa7df52e241d8c43d3e035e23684e386c5d57cd0c4755614a6b8fb3529ee54ae2b2393dba3638795ec5c30c84dd3651ad75f96a4675df0b2d7e67329c5eefd62c2b4c378e2212ffcd788690201ba9eadb62395e8b3ca8bdacddc3a96f36456d0f95edb90dd975dd685348ada9658dc0d452cc99288460e12749a433770560281e6cc60a0cc654c664e53ebfa5bbc71c67993418c32ce1eb2643f64e9357b1ecca7805de5b75a3b8b918d719a229662fa8f0100bf6d717823b41b72fb9e91edcc75eaaabb066f7a714bcb0dfecf8d6944295cd40e3e53b041ac373e4dfe54336c9ce2417f297b64b1a5f45223a3b135c2faa6dda33a8128a545fca0dafeec4c1e6d187b336712802abdc8f658e5b3cbfc8961c0324e138cfafe635e3d47537890ccb5557d71e77419da3f7f513d22c6300cd51397c2e9f07d4584cd54081ec5339a43d64d6607159b9227f32e112b48e6644c7543be64d2015bddb8e50093143761a48cacb3376f16a34b86f82f066c9087d74663082549784b44444ee744cf5b62a5efc25aea49238df87dbecb07d9977901b70db24f8d851cb78b50d814be55d91c0775b5b7acb6a5651b260427057f6c86cd9fa709205f1d40431cfef5e3f90bc124637bcf35cdf343e3f52ce4236db25ac29aba0a8c69a9b0f1ae180f5be6e9c2a79fa522078604855624d5ec85a113738ee0a81f2d6ca9be1caa26ba628b0b1429c06b371f5e2801fec0599588417c02d21b6412ba01b904cae803c61e83ddf17e083a9b42564255c49ca91c2f079f8fc9439fe93ae322de7480df086018
106 10 100 e1cb88ba2c498ade2091ab06cefa24fd;
107 0c4ac91a4cbcd2ddec777ed12feaee3b
108 0411d5def6fe88aff66611870f7b83d8
109 5ba282f23cef22af42c21616603b8f25
110 1d630211fdf32fb5c4432d71b34bfd6daa6aac7ef09bd1656e7b710a70166f0e926d61116e29486f407724d581acf140d70b1352195971ed43c0857c2fe1018cb570317da3f5eae2b83e795e3375106bad876f2fd2cec8b972681cd3b0f4f75442694294f3659b0d452c8e39728e73bf402783d9c9ba3bc913473c747f212aa29d5303614869abce329d8c872a0da70f7d3e0d48a99f076117e32f313584d8531de33d8f99fc5379cc4f0dc2fb785bbdc372868d7598d7c2773ec7c6717f45c45a0d1db3f9fe342c809c407b56af8bc5896ecbd27c7c2517884018142a37cc50ad0a754dc5f2fbbcfdc45a8a0f4815c1ab75ea15fb1585e475c6ecd452a75fe4fad2719e5915b044833b67174cd6eaf4106d6e3512c9986e34442da5d46700c68b391f6dd0beb025f0ec3b719cfb643313223dc859c824025dddfb3cef7084c5ae0b139930c51f8f925d4c5cf7e9c8b6af2e43eed9fb2bbead8999e9d629d1e346244f5ef6034a018517954508ea83a1f32a682b927b5814a67bf581980d620e6f2102344121c74f774721d2e24a7fe426fd216ffcd1d7a3abeec214e21e6db6d17b5237ece8ad09e19643e0cbdc1a25e72d1e58c85810900e965e2f42ee1a5d947ea20815c46019cafefbf808264cd151a551607d57295b08b130dcc936c32b9d9c586ecf2d2ae62f353b0fb9c0a9b2eb4dc50a7ac12cb1c782415adfe6a2ef7d58f4c893d2cb501785e5d5fc4439847018ffa0142707474dcb40736a379a408f92bf83e719e9599e35969f0f3ec47c1a1a78b2663468609f818f1b3fe267f2acd2ddcda6068f9b3d2e021f9d63b9c6d922f6a879f763f17c9fa4fc64c18ba9fee1ad1a383e9384b6978595bfddd54a08ec4a1b56fb7dbf7fe9de9b60cf4d8d3082b238864ef23f0336756f4b0e00e30872600f87b76112d6c4b2ec1cd5c234cd4e3062f886040b8e4a6d267edecad7966ee43e92428c44ef294c18434f4ee0317ab1856e8b01acc9a821b7594462da20b7cbca013b9e6ef07434dfba97cf4b41fdd36aadc8ffdfc95bec624b227af1ea06af10cae4fea72ada570f2df547c3e9fd8ddd84283cebb8de338d5e83e454faa25394dad66457f66a3813993888606876d2bec156e29755d251e88af6c1603c3ae0427db9de04bb2e83a85eab1d6180553f35d9d0ee1dca7a3083f47ea6e1c7686fd89910b4f0bb5a768ea7ee97d55ce24c0bb733239074f79f7ccb25ccdcddd0c2d2693e37546cf8237451828b4147a688f2a2a891e2e23108bafd413e512c4a50dfd101c44ec1b27acbf4d68b566a6a544c81d5f67ab7ed5d7b42dcd389d367539b360fbc70eee289699a9000cddff14bc212ec8a6e18ab58c19727c403b99a7b982fc660f3d8f54e096dad2a281308d4f5d50fc6e1
111 100 1000 f7064b7217e8a6b74b381c58175d9ff2;
112 }