symm/ccm.h, symm/ccm-def.h: Implement the CCM authenticated encryption mode.
[catacomb] / symm / t / rijndael.local
index 053a0d4..3060c55 100644 (file)
@@ -92,3 +92,1049 @@ rijndael-cmac {
     9c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7cadcb6
     3a2d6cd3d65ba29059613d7e6b6e1278;
 }
+
+rijndael-ccm {
+  ## From the Housley, Whiting, and Ferguson submission to NIST, somewhat
+  ## rearranged because of the bizarre (and undocumented) nonce structure.
+
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000003020100a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e
+    588c979a61c663d2f066d0c2c0f989806d5f6b61dac384
+    17e8d12cfdf926e0;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000004030201a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    72c91a36e135f8cf291ca894085c87e3cc15c439c9e43a3b
+    a091d56e10400916;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000005040302a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20
+    51b1e5f44a197d1da46b0f8e2d282ae871e838bb64da859657
+    4adaa76fbd9fb0c5;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000006050403a0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e
+    a28c6865939a9a79faaa5c4c2a9d4a91cdac8c
+    96c861b9c9e61ef1;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000007060504a0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e1f
+    dcf1fb7b5d9e23fb9d4e131253658ad86ebdca3e
+    51e83f077d9c2d93;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000008070605a0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e1f20
+    6fc1b011f006568b5171a42d953d469b2570a4bd87
+    405a0443ac91cb94;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    00000009080706a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e
+    0135d1b2c95f41d5d1d4fec185d166b8094e999dfed96c
+    048c56602c97acbb7490;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    0000000a090807a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
+    7b75399ac0831dd2f0bbd75879a2fd8f6cae6b6cd9b7db24
+    c17b4433f434963f34b4;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    0000000b0a0908a0a1a2a3a4a5
+    0001020304050607
+    08090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f20
+    82531a60cc24945a4b8279181ab5c84df21ce7f9b73f42e197
+    ea9c07e56b5eb17e5f4e;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    0000000c0b0a09a0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e
+    07342594157785152b074098330abb141b947b
+    566aa9406b4d999988dd;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    0000000d0c0b0aa0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e1f
+    676bb20380b0e301e8ab79590a396da78b834934
+    f53aa2e9107a8b6c022c;
+  c0c1c2c3c4c5c6c7c8c9cacbcccdcecf
+    0000000e0d0c0ba0a1a2a3a4a5
+    000102030405060708090a0b
+    0c0d0e0f101112131415161718191a1b1c1d1e1f20
+    c0ffa0d6f05bdb67f24d43a4338d2aa4bed7b20e43
+    cd1aa31662e7ad65d6db;
+  aca23752615c82c1d454c4fc1462dcf3
+    00b9965d963ec163c54530549a
+    20f2c84a078983d6
+    d9215a08e37911f08e13e868d561fd8de3bc968e0978ae
+    8ca7df83589d89f1e2f9633a4e219e4e8c4daf918cbd4a
+    795fa85da6e5711c;
+  aca23752615c82c1d454c4fc1462dcf3
+    0044144a825d7363c54530549a
+    23bc9db76f5e4761
+    5297b4a9984845b03b01cf4794fa66cf27cc89c002ff4a4b
+    c7d563f1e02eb4f54919ae707d6cc9573ca85434f3559b30
+    78aeda0f601d877e;
+  aca23752615c82c1d454c4fc1462dcf3
+    00aaf7bf9d75c663c54530549a
+    86eec4ba8409465f
+    875547667e2424abb2a30fde33b6e81c2b5c1c5629b262555c
+    a15c03b3d37d1f5fba858d394997e935c44985212cfaed5037
+    bd7dd7a68f95a476;
+  aca23752615c82c1d454c4fc1462dcf3
+    0040da4cf416fc63c54530549a
+    15801a12adb41e13223d9c4f
+    f1d25ee5bd3014d5eb7254c3c62ded9d1dbb7d
+    0c9c100d74193c6d5679cd01b6418fff3a4fe4
+    7cf0866237842658;
+  aca23752615c82c1d454c4fc1462dcf3
+    002c2cbdfa28bf63c54530549a
+    d9808ff2b59b6a89bf9c4a82
+    05bba8822b40f4803253fb91f0b5bcf60ee5dd95
+    b5b3b7fab03d662e1842333328466dd81dd8fe3d
+    6f8c861ab1617dc3;
+  aca23752615c82c1d454c4fc1462dcf3
+    0016230909f7cc63c54530549a
+    9b85df31226b387fdf8ddd4d
+    4eb993044b71beddc6ef3f287197e4d46e9f29e427
+    a0e19481ba549ce66fadd81937a09a4f542b2f421d
+    12695462fd931591;
+  aca23752615c82c1d454c4fc1462dcf3
+    00797b71e3c96963c54530549a
+    e7e6473a07dacca4
+    9436254b379e38d73861ca027fc79b0440aba519e9e1dc
+    0d22d68dc1d39934f8e5882c2058436a0cc58e03258b4e
+    2bb39e01a568aba1f1ba;
+  aca23752615c82c1d454c4fc1462dcf3
+    0083ae22deb9b163c54530549a
+    a1c6b900678806b8
+    37709803b3fff94ffac1150b28a3cef1bf4feea0ff19541c
+    3103c511e43dc5e01aba07db0b84a443a1e3425983c3fe7e
+    19c626fd947eafb9c1b3;
+  aca23752615c82c1d454c4fc1462dcf3
+    006541e08f013463c54530549a
+    ea6abbb54793ecc2
+    eb0e990f88cfb0e78c1d6196890f8b6fa7787fe2dd85a72355
+    a449f8b7a3c9d0c3fca9a6e7a89953fdbbb5d4d05dc77f67ae
+    4efbc470d8a0b1c4f967;
+  aca23752615c82c1d454c4fc1462dcf3
+    00ede32aa3875a63c54530549a
+    869cbaf565fbb429d4603ace
+    6cd5e33d9e5ff526e21b24f40d6b15e5ed25fb
+    450c728aac9be3105cbe74653ffd52feb4a5ad
+    d6db7bc4dfdfc165dd93;
+  aca23752615c82c1d454c4fc1462dcf3
+    0073331529b3db63c54530549a
+    934cae407d3e300ae7111b43
+    e9a5e8b187d1e7baa3ad94fcf9e1b25aff726259
+    5f7716b16a6218b2a44033c29260df1d75caadd4
+    583c50b41845b3867f21;
+  aca23752615c82c1d454c4fc1462dcf3
+    00cdf8f729be7363c54530549a
+    6dbf3223e9758ce37ed8e2a9
+    ab8db40bc61588976d79d96e3012f0ff60e37e0732
+    220bb8f4aba55c7d573f1f2fbd3d78a4361c665f51
+    659f6d2e866db4de0e97;
+
+  ## From NIST SP800-38C.
+  404142434445464748494a4b4c4d4e4f
+    10111213141516
+    0001020304050607
+    20212223
+    7162015b
+    4dac255d;
+  404142434445464748494a4b4c4d4e4f
+    1011121314151617
+    000102030405060708090a0b0c0d0e0f
+    202122232425262728292a2b2c2d2e2f
+    d2a1f0e051ea5f62081a7792073d593d
+    1fc64fbfaccd;
+  404142434445464748494a4b4c4d4e4f
+    101112131415161718191a1b
+    000102030405060708090a0b0c0d0e0f10111213
+    202122232425262728292a2b2c2d2e2f3031323334353637
+    e3b201a9f5b71a7a9b1ceaeccd97e70b6176aad9a4428aa5
+    484392fbc1b09951;
+
+  ## Other NIST examples.
+  404142434445464748494a4b4c4d4e4f
+    10111213141516
+    ""
+    202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    7162015bc051951e5918aeaf3c11f3d4ac363f8d5b6af3d369603b04f24cae29964e2f2bf9d31143f72527ce2db402eab7660e4a10b08e82266517cdf60267f9
+    c66b655c;
+  404142434445464748494A4B4C4D4E4F
+    10111213141516
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+    ""
+    ""
+    e84023f8;
+  404142434445464748494a4b4c4d4e4f5051525354555657
+    10111213141516
+    0001020304050607
+    20212223
+    18ee1730
+    c8c326d5;
+  404142434445464748494a4b4c4d4e4f5051525354555657
+    1011121314151617
+    000102030405060708090a0b0c0d0e0f
+    202122232425262728292a2b2c2d2e2f
+    2232b6e0924148ae7239bcbd1a0f7ecb
+    56e9cc28aa67;
+  404142434445464748494a4b4c4d4e4f5051525354555657
+    101112131415161718191a1b
+    000102030405060708090a0b0c0d0e0f10111213
+    202122232425262728292a2b2c2d2e2f3031323334353637
+    8081316fd89624d62ce7637fb94995b6631c50d61586de01
+    42366952505f995a;
+  404142434445464748494a4b4c4d4e4f5051525354555657
+    10111213141516
+    ""
+    202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    18ee1730f4490ea847a8e9c532c69f9c0a539a585c1e7b6a5af919f4819088a96ed632555098d3007e7d963c7bd013eb307671d0fbc39a0df4a26a9f4b9e4dad
+    c9ce2fbc;
+  404142434445464748494a4b4c4d4e4f5051525354555657
+    10111213141516
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+    ""
+    ""
+    f1fb2a57;
+  404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    10111213141516
+    0001020304050607
+    20212223
+    8ab1a874
+    95fc0820;
+
+  404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    1011121314151617
+    000102030405060708090a0b0c0d0e0f
+    202122232425262728292a2b2c2d2e2f
+    af1785fc0f5ea7d0cfba837246484497
+    94b826c8849e;
+
+  404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    101112131415161718191a1b
+    000102030405060708090a0b0c0d0e0f10111213
+    202122232425262728292a2b2c2d2e2f3031323334353637
+    04f883aeb3bd0730eaf50bb6de4fa2212034e4e41b0e75e5
+    2b48c8766f7e7649;
+
+  404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    10111213141516
+    ""
+    202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    8ab1a874f6853f2443a59500f78d17272d6d39dfa6d0e65107b10700c2ce9ee8663d3e2a01c2e12c32e9377442231920be53278f4f60a972b709bb16932936ba
+    3fbd0fae;
+
+  404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f
+    10111213141516
+    000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
+    ""
+    ""
+    a6cf8230;
+
+  ## Locally generated tests.
+  60d7bcda163547d348b7551195e77022
+    907dd1dff7dac5c9941d26
+    ""
+    ""
+    ""
+    cf28ba78;
+  d0c6eb14ad568f86edd1dc9268eeee53
+    3285a6ed810c9b689daaa9
+    06
+    ""
+    ""
+    f258e4d7;
+  0d2d4b6003062365b0a54364c76c160f
+    11896c4794846ecfa14a71
+    ""
+    30
+    d6
+    0c31647b;
+  c9f137120634c9519848a877ff77bf79
+    192a5b50ade5d9cd73
+    9a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8cde8e160ad10997a21
+    635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505da1435dceaa7b1cc49
+    41b97c9616d0af69288f13e20d74901645bc9b5263044121e5562fa5b0e5ef40a2639909c2e07e329cc50737613a2c53
+    e992acc597653980b46bc43fd471eb5f;
+  ae1d50c38201a894476b3f102b752eb9
+    529533966f27043eb6
+    21b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6
+    c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac26afa3
+    8c314091d48b18dba473f0180ebfa878c920562f0d3c63303cafd8b92e31c35ca8e30e5dde711d30e7360b70030864de8d8156be5e
+    672d9df3a0e99ed948e4f598a913b421;
+  349829b94586306fed54154f8f28523c03d4de16
+    00157846b710ee72807a22
+    ""
+    ""
+    ""
+    9205b2da;
+  19bfb474fd71d891f24bb65d1563259f9eb53b57
+    1ea629c54d57dd2d42f708
+    00
+    ""
+    ""
+    9ae9b8a9;
+  df9fcbaca48b77dba189196d1ebba10b0467cb9f
+    c2712a199e533fa9156308
+    ""
+    cd
+    19
+    fab4799d;
+  ec3f768281e040a9b9a222bd689aef66f5306ceb
+    0c6b08ac8b0a22260c
+    571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc8151784873f0eb5b647da
+    6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd211499268878dbf3
+    a11307a1d9df486ff782f6643324950ec651e2df47bab6ef1254fa7d04b59bca5f509bc9e781ed797105d39fb509de45
+    27d12d4fb2bc29dc306d5c2240e4894c;
+  0f1dad89d4b9b12012e4713df46795630e7952d2
+    2bb02d7100b8b64937
+    7d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d0798391805da0
+    8da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0b7ca
+    45adc79632d8fdc8470e9ea47e2523d2a9ad568b2817b5295c078756df3d7f584aaf4b4e9667023b719c1ef7ad9cb72bdf31746f56
+    f1855db5745f0561fd8113b2ff6006ce;
+  dcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a874498
+    ad0abef8bc4fcb70e27e98
+    ""
+    ""
+    ""
+    a84a331d;
+  ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4
+    ae985511265febd11c1647
+    20
+    ""
+    ""
+    e4256cb2;
+  eef9eb1c8dd0b00951f284649016ed00456331854bc78bf43966eb0c
+    fa9138ddc39908445608fe
+    ""
+    95
+    52
+    87c71b52;
+  e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3
+    f9099c5ffb824173d7
+    634c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc
+    9bc597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911
+    b000328931c8a1484cae26f4f7be0415d58858fcff326136d37fd981492c5851163f68326cac9d4b80f29f5c157a28c2
+    9b9c5705e2d569fc1b280731e4286027;
+  e32d65cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1c4c9
+    67c0a458cb948bdd40
+    9b687fa3a6827b480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8de
+    b9bd205b70e04c091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb4
+    d038ac6646cb2b6da23963eac488def0a233d63e097f9b981d322f96d6cad2d2c2be978d566a5afd8b20ecff4f1c8765ee5446c2a3
+    28b572f708c9a6eb036444c0a9e8818c;
+  4d65bad397abfaf529ee41cf
+    9a05c7efedef3401539c51
+    ""
+    ""
+    ""
+    66c301e7;
+  d2a90bbf7f1bfc338ab0ef57
+    46ea8fdcccd213e33f7e8a
+    57
+    ""
+    ""
+    df5a4e4e;
+  18fd25014107c8e7d715a92a
+    dd9589d1f5c054b2d98351
+    ""
+    46
+    2a
+    0c3bbfb2;
+  05ec590294a319b9802068a9
+    f891bc5ba5afabf8c3
+    122d12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725cb2dac07ecde9
+    5759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4
+    5c4a984366df29ee88817bba556a52b0c17ce5c3a337caac667c792cd1d7b705e3db87734963b51d606d8022346fc267
+    1494a9ba0a649a71409b719d821d546f;
+  563d405e51881e99027b8ab9
+    aea3ccf860b0009740
+    763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3
+    aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd6777
+    73f618f0bfb917a6ca4f6b7872dbd148fa97bbf8ab044f3331410eef1be00037e9293d851e99ee70c65cad306c4fc0cee754ee1e5c
+    f1c35f66bbb6b69b6c7aa3e7ed23e47e;
+}
+
+rijndael-eax {
+  ## From Mihir Bellare, Phillip Rogaway, David Wagner, `The EAX Mode of
+  ## Operation (A Two-Pass Authenticated-Encryption Scheme Optimized for
+  ## Simplicity and Efficiency)'.
+
+  233952dee4d5ed5f9b9c6d6ff80ff478
+    62ec67f9c3a4a407fcb2a8c49031a8b3
+    6bfb914fd07eae6b
+    ""
+    ""
+    e037830e8389f27b025a2d6527e79d01;
+  91945d3f4dcbee0bf45ef52255f095a4
+    becaf043b0a23d843194ba972c66debd
+    fa3bfd4806eb53fa
+    f7fb
+    19dd
+    5c4c9331049d0bdab0277408f67967e5;
+  01f74ad64077f2e704c0f60ada3dd523
+    70c3db4f0d26368400a10ed05d2bff5e
+    234a3463c1264ac6
+    1a47cb4933
+    d851d5bae0
+    3a59f238a23e39199dc9266626c40f80;
+  d07cf6cbb7f313bdde66b727afd3c5e8
+    8408dfff3c1a2b1292dc199e46b7d617
+    33cce2eabff5a79d
+    481c9e39b1
+    632a9d131a
+    d4c168a4225d8e1ff755939974a7bede;
+  35b6d0580005bbc12b0587124557d2c2
+    fdb6b06676eedc5c61d74276e1f8e816
+    aeb96eaebe2970e9
+    40d0c07da5e4
+    071dfe16c675
+    cb0677e536f73afe6a14b74ee49844dd;
+  bd8e6e11475e60b268784c38c62feb22
+    6eac5c93072d8e8513f750935e46da1b
+    d4482d1ca78dce0f
+    4de3b35c3fc039245bd1fb7d
+    835bb4f15d743e350e728414
+    abb8644fd6ccb86947c5e10590210a4f;
+  7c77d6e813bed5ac98baa417477a2e7d
+    1a8c98dcd73d38393b2bf1569deefc19
+    65d2017990d62528
+    8b0a79306c9ce7ed99dae4f87f8dd61636
+    02083e3979da014812f59f11d52630da30
+    137327d10649b0aa6e1c181db617d7f2;
+  5fff20cafab119ca2fc73549e20f5b0d
+    dde59b97d722156d4d9aff2bc7559826
+    54b9f04e6a09189a
+    1bda122bce8a8dbaf1877d962b8592dd2d56
+    2ec47b2c4954a489afc7ba4897edcdae8cc3
+    3b60450599bd02c96382902aef7f832a;
+  a4a4782bcffd3ec5e7ef6d8c34a56123
+    b781fcf2f75fa5a8de97a9ca48e522ec
+    899a175897561d7e
+    6cf36720872b8513f6eab1a8a44438d5ef11
+    0de18fd0fdd91e7af19f1d8ee8733938b1e8
+    e7f6d2231618102fdb7fe55ff1991700;
+  8395fcf1e95bebd697bd010bc766aac3
+    22e7add93cfc6393c57ec0b3c17d6b44
+    126735fcc320d25a
+    ca40d7446e545ffaed3bd12a740a659ffbbb3ceab7
+    cb8920f87a6c75cff39627b56e3ed197c552d295a7
+    cfc46afc253b4652b1af3795b124ab6e;
+
+  ## Some local tests for additional edge cases, generated using the toy
+  ## implementation in Python.
+  60d7bcda163547d348b7551195e77022
+    ""
+    ""
+    ""
+    ""
+    fc65784451ea97468ec025e17a709456;
+  907dd1dff7dac5c9941d26d0c6eb14ad
+    56
+    ""
+    ""
+    ""
+    d8da3364e510165ed5afd2aab762f5d2;
+  8f86edd1dc9268eeee533285a6ed810c
+    ""
+    9b
+    ""
+    ""
+    715b06133d886f3b8fb8fdfcadd0fa5c;
+  689daaa9060d2d4b6003062365b0a543
+    ""
+    ""
+    64
+    69
+    16c192d8633a39465ce18da2ce132233;
+  c76c160f11896c4794846ecfa14a7130
+    c9f137120634c9519848a877ff77bf79
+    192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8
+    cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505
+    963801ede08bd2b86a3c33cf18c27d98c7c22f14c08621651e6094e72bcbd4bbf38f5e20814d465daa9c5929b9f59375
+    180ad55fa758703dd6a4e345956705e5;
+  da1435dceaa7b1cc49ae1d50c38201a8
+    94476b3f102b752eb9529533966f27
+    043eb621b7f65b000961040ef2f9b2fc5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbb
+    b18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93bf4f2aad2605faee2b03fb648e27fff63102758fe2b69ac
+    448792431ef5eb64efcfb2e6a9bb454d7ef09598ca4bc057d9cba969328ad75c05b7da7012e5ff1826dc3c981072fc9dce719cfffa
+    aeaa46b633b5c3ba7db2e404af2eb9a8;
+  26afa3349829b94586306fed54154f8f28523c03
+    ""
+    ""
+    ""
+    ""
+    d0a749a3ae472501971c7521066a5c14;
+  d4de1600157846b710ee72807a2219bfb474fd71
+    d8
+    ""
+    ""
+    ""
+    5998cfaef8d97abd4c8017aba424a845;
+  91f24bb65d1563259f9eb53b571ea629c54d57dd
+    ""
+    2d
+    ""
+    ""
+    7ecfd7cde12120a79d65622bd02993f8;
+  42f70800df9fcbaca48b77dba189196d1ebba10b
+    ""
+    ""
+    04
+    46
+    b4b2f22374e5416565ea5da09bd65726;
+  67cb9fc2712a199e533fa9156308cdec3f768281
+    e040a9b9a222bd689aef66f5306ceb0c
+    6b08ac8b0a22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95214ade49cb3b6f5fe8368131115c037ba323fe1dc81517
+    84873f0eb5b647da6794c18b5337685a96ed65b9aca338527ef19b09c063c46f88de9fd41e72d7b97e23e6eabdff3bcd
+    78ebdb6a281df84204a58c3071a81ee62c604c4ff408d02ec9401bd284beba033e438279a8cf450bccc58ddb0480b0b1
+    8f3edaf96c1c577c99d506fa9bdd342c;
+  211499268878dbf30f1dad89d4b9b12012e4713d
+    f46795630e7952d22bb02d7100b8b6
+    49377d20a8f083455b663e4ee1315f3c8f2aebfa921451dcd1af5813b70d30ce2f1fef6ef315d079839180
+    5da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1ecdf3d264a7f16cb16c2e815f422cdf0c8e30308be3c31e6bc58c0
+    b81e04dfef276af4992a4daacad70a724bd2bc5f857d739b82781dab188f6c172f1dc3390ab9226f6a286bf89e3fd198ee3e781db4
+    1096e8cbf9132840e22c4e9618a981c2;
+  b7cadcb658b970e47479a684b5aefa69a4cd52147ed12ca986981a87
+    ""
+    ""
+    ""
+    ""
+    8517441bde0b33302a5d73d756bbaea3;
+  4498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc1
+    88
+    ""
+    ""
+    ""
+    2703e5e0acbf6d762e635e66e599c7e7;
+  d472a784e0c6f21195a3b9f4ae985511265febd11c164720eef9eb1c
+    ""
+    8d
+    ""
+    ""
+    21ba7e9152f7a188a570a435a9118dd7;
+  d0b00951f284649016ed00456331854bc78bf43966eb0cfa9138ddc3
+    ""
+    ""
+    99
+    8f
+    19edae1a9f72c3ec1a95456a7602fbea;
+  08445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b8
+    07e6daa089c3f9099c5ffb824173d763
+    4c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9b
+    c597f56ccbb2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4ffa91544485f1a1258b2b9b8f0911e3
+    7da2cbb1dbb96d57e6eae7f7463cdaf220f06e96bcce1303ef6c987de22fa64d62c89f8bef1676b6c9447b03575fce9a
+    83e41c3c033397193406be50be532022;
+  2d65cc1770a18cbfe6effd1ff6778554acf1270485b203a3c1c4c967
+    c0a458cb948bdd409b687fa3a6827b
+    480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8743d16687b7bb8deb9bd205b70e04c
+    091d205cdad9e9a79b1abf91b0851e5ca605ac8451399587011677508a15dde524af3e2bee0646541a42c2ecccb44d65bad397abfa
+    5c26f8ce44729fef7b23d7a08a6f770499d3efd779ec6975b549f418abdffc8a1fe5c279e41e3815b8667e96a4ad39aeef24bee42f
+    cd68c88ece3bead81778b31e8dbe34db;
+  f529ee41cf9a05c7efedef34
+    ""
+    ""
+    ""
+    ""
+    9fa09ea950f21cf235e494490111462f;
+  01539c51d2a90bbf7f1bfc33
+    8a
+    ""
+    ""
+    ""
+    b694f1a079840c1a5306fa86a0d4bba3;
+  b0ef5746ea8fdcccd213e33f
+    ""
+    7e
+    ""
+    ""
+    91c2e974c399c84bdff77b962441e1f3;
+  8a5718fd25014107c8e7d715
+    ""
+    ""
+    a9
+    14
+    279ad0e41ab70a6751f9fbd01030784e;
+  2add9589d1f5c054b2d98351
+    4605ec590294a319b9802068a9f891bc
+    5ba5afabf8c3122d12d7ff3c41122d70d17d4569eaff59a332ba58d5d5589bfe079753ee1a957eb6d6699e6b7ea2725c
+    b2dac07ecde95759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d9803
+    cb3a052da8d3fc8c6e40de726ef40596a871d596df7b7c33b11467ba4ab39210df119a6e202267b44f86db3b4074c886
+    4ea05695bbf7f261c4e76415e3642945;
+  98bd94e66eb4563d405e5188
+    1e99027b8ab9aea3ccf860b0009740
+    763d96836c5f87b95460938de1288c69d80ea12ff4bb5f069b8a2e86041c1b9fc214e9ca2186ddf1f6a7a3
+    aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba60076817523bd2abf1261b089d8f23a9c2835076a23faac2cdd6777
+    03f7e555335edc0f776c210da68ddceda30e7b6d11f62aab60a17f443e6000c31ca8927b28791f8b5dcff245c82b63ebca8cdbeb9a
+    a860ca21635e5d2c1fa19d96a4c394fa;
+}
+
+rijndael-gcm {
+
+  ## NIST examples.
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    ""
+    ""
+    ""
+    3247184b3c4f69a44dbcd22887bbb418;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    ""
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985
+    4d5c2af327cd64a62cf35abd2ba6fab4;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    ""
+    ""
+    5f91d77123ef5eb9997913849b8dc1e9;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985
+    64c0232904af398a5b67c10b53a5024d;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d585
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091
+    f07c2528eea2fca1211f905e1b6a881b;
+
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    ""
+    ""
+    ""
+    c835aa88aebbc94f5a02e179fdcfc3e4;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    ""
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256
+    9924a7c8587336bfb118024db8674a14;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    ""
+    ""
+    02cc773bc919f4e1c5e9c54313bface0;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256
+    3b9153b4e7318a5f3bbeac108f8a8edb;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d585
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710
+    93ea28c659e269902a80acd208e7fc80;
+
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    ""
+    ""
+    ""
+    fd2caa16a5832e76aa132c1453eeda7e;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    ""
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad
+    b094dac5d93471bdec1a502270e3cc6c;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    ""
+    ""
+    de34b6dcd4cee2fdbec3cea01af1ee44;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d58503b9699de785895a96fdbaaf43b1cd7f598ece23881b00e3ed0306887b0c785e27e8ad3f8223207104725dd4
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255
+    522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad
+    c06d76f31930fef37acae23ed465ae62;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    3ad77bb40d7a3660a89ecaf32466ef97f5d3d585
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662
+    e097195f4532da895fb917a5a55c6aa0;
+
+  ## IEEE tests for P802.1.
+  ad7a2bd03eac835a6f620fdcb506b345
+    12153524c0895e81b2c28465
+    d609b1f056637a0d46df998d88e5222ab2c2846512153524c0895e8108000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340001
+    ""
+    ""
+    f09478a9b09007d06f46e9b6a1da25dd;
+  ad7a2bd03eac835a6f620fdcb506b345
+    12153524c0895e81b2c28465
+    d609b1f056637a0d46df998d88e52e00b2c2846512153524c0895e81
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0002
+    701afa1cc039c0d765128a665dab69243899bf7318ccdc81c9931da17fbe8edd7d17cb8b4c26fc81e3284f2b7fba713d
+    4f8d55e7d3f06fd5a13c0c29b9d5b880;
+  071b113b0ca743fecccf3d051f737382
+    f0761e8dcd3d000176d457ed
+    e20106d7cd0df0761e8dcd3d88e5400076d457ed08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0003
+    ""
+    ""
+    0c017bc73b227dfcc9bafa1c41acc353;
+  071b113b0ca743fecccf3d051f737382
+    f0761e8dcd3d000176d457ed
+    e20106d7cd0df0761e8dcd3d88e54c2a76d457ed
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340004
+    13b4c72b389dc5018e72a171dd85a5d3752274d3a019fbcaed09a425cd9b2e1c9b72eee7c9de7d52b3f3
+    d6a5284f4a6d3fe22a5d6c2b960494c3;
+  013fe00b5f11be7f866d0cbbc55a7a90
+    7cfde9f9e33724c68932d612
+    84c5d513d2aaf6e5bbd2727788e523008932d6127cfde9f9e33724c608000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f0005
+    ""
+    ""
+    217867e50c2dad74c28c3b50abdf695a;
+  013fe00b5f11be7f866d0cbbc55a7a90
+    7cfde9f9e33724c68932d612
+    84c5d513d2aaf6e5bbd2727788e52f008932d6127cfde9f9e33724c6
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b0006
+    3a4de6fa32191014dbb303d92ee3a9e8a1b599c14d22fb080096e13811816a3c9c9bcf7c1b9b96da809204e29d0e2a7642
+    bfd310a4837c816ccfa5ac23ab003988;
+  88ee087fd95da9fbf6725aa9d757b0cd
+    7ae8e2ca4ec500012e58495c
+    68f2e77696ce7ae8e2ca4ec588e541002e58495c08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d0007
+    ""
+    ""
+    07922b8ebcf10bb2297588ca4c614523;
+  88ee087fd95da9fbf6725aa9d757b0cd
+    7ae8e2ca4ec500012e58495c
+    68f2e77696ce7ae8e2ca4ec588e54d002e58495c
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748490008
+    c31f53d99e5687f7365119b832d2aae70741d593f1f9e2ab3455779b078eb8feacdfec1f8e3e5277f8180b43361f6512adb16d2e38548a2c719dba7228d840
+    88f8757adb8aa788d8f65ad668be70e7;
+
+  e3c08a8f06c6e3ad95a70557b23f75483ce33021a9c72b7025666204c69c0b72
+    12153524c0895e81b2c28465
+    d609b1f056637a0d46df998d88e5222ab2c2846512153524c0895e8108000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340001
+    ""
+    ""
+    2f0bc5af409e06d609ea8b7d0fa5ea50;
+  e3c08a8f06c6e3ad95a70557b23f75483ce33021a9c72b7025666204c69c0b72
+    12153524c0895e81b2c28465
+    d609b1f056637a0d46df998d88e52e00b2c2846512153524c0895e81
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0002
+    e2006eb42f5277022d9b19925bc419d7a592666c925fe2ef718eb4e308efeaa7c5273b394118860a5be2a97f56ab7836
+    5ca597cdbb3edb8d1a1151ea0af7b436;
+  691d3ee909d7f54167fd1ca0b5d769081f2bde1aee655fdbab80bd5295ae6be7
+    f0761e8dcd3d000176d457ed
+    e20106d7cd0df0761e8dcd3d88e5400076d457ed08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a0003
+    ""
+    ""
+    35217c774bbc31b63166bcf9d4abed07;
+  691d3ee909d7f54167fd1ca0b5d769081f2bde1aee655fdbab80bd5295ae6be7
+    f0761e8dcd3d000176d457ed
+    e20106d7cd0df0761e8dcd3d88e54c2a76d457ed
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f30313233340004
+    c1623f55730c93533097addad25664966125352b43adacbd61c5ef3ac90b5bee929ce4630ea79f6ce519
+    12af39c2d1fdc2051f8b7b3c9d397ef2;
+  83c093b58de7ffe1c0da926ac43fb3609ac1c80fee1b624497ef942e2f79a823
+    7cfde9f9e33724c68932d612
+    84c5d513d2aaf6e5bbd2727788e523008932d6127cfde9f9e33724c608000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f0005
+    ""
+    ""
+    6ee160e8faeca4b36c86b234920ca975;
+  83c093b58de7ffe1c0da926ac43fb3609ac1c80fee1b624497ef942e2f79a823
+    7cfde9f9e33724c68932d612
+    84c5d513d2aaf6e5bbd2727788e52f008932d6127cfde9f9e33724c6
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b0006
+    110222ff8050cbece66a813ad09a73ed7a9a089c106b959389168ed6e8698ea902eb1277dbec2e68e473155a15a7daeed4
+    a10f4e05139c23df00b3aadc71f0596a;
+  4c973dbc7364621674f8b5b89e5c15511fced9216490fb1c1a2caa0ffe0407e5
+    7ae8e2ca4ec500012e58495c
+    68f2e77696ce7ae8e2ca4ec588e541002e58495c08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d0007
+    ""
+    ""
+    00bda1b7e87608bcbf470f12157f4c07;
+  4c973dbc7364621674f8b5b89e5c15511fced9216490fb1c1a2caa0ffe0407e5
+    7ae8e2ca4ec500012e58495c
+    68f2e77696ce7ae8e2ca4ec588e54d002e58495c
+    08000f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748490008
+    ba8ae31bc506486d6873e4fce460e7dc57591ff00611f31c3834fe1c04ad80b66803afcf5b27e6333fa67c99da47c2f0ced68d531bd741a943cff7a6713bd0
+    2611cd7daa01d61c5c886dc1a8170107;
+
+  ## From `The Galois/Counter Mode of Operation' by David McGrew and John
+  ## Viega.  Some of these were duplicated in the NIST examples above, and so
+  ## are omitted here.
+  00000000000000000000000000000000
+    000000000000000000000000
+    ""
+    ""
+    ""
+    58e2fccefa7e3061367f1d57a4e7455a;
+  00000000000000000000000000000000
+    000000000000000000000000
+    ""
+    00000000000000000000000000000000
+    0388dace60b6a392f328c2b971b2fe78
+    ab6e47d42cec13bdf53a67b21257bddf;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091
+    5bc94fbc3221a5db94fae95ae7121a47;
+  feffe9928665731c6d6a8f9467308308
+    cafebabefacedbad
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598
+    3612d2e79e3b0785561be14aaca2fccb;
+  feffe9928665731c6d6a8f9467308308
+    9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5
+    619cc5aefffe0bfa462af43c1699d050;
+
+  000000000000000000000000000000000000000000000000
+    000000000000000000000000
+    ""
+    ""
+    ""
+    cd33b28ac773f74ba00ed1f312572435;
+  000000000000000000000000000000000000000000000000
+    000000000000000000000000
+    ""
+    00000000000000000000000000000000
+    98e7247c07f0fe411c267e4384b0f600
+    2ff58d80033927ab8ef4d4587514f0fb;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbaddecaf888
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710
+    2519498e80f1478f37ba55bd6d27618c;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    cafebabefacedbad
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7
+    65dcc57fcf623a24094fcca40d3533f8;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c
+    9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b
+    dcf566ff291c25bbb8568fc3d376a6d9;
+
+  0000000000000000000000000000000000000000000000000000000000000000
+    000000000000000000000000
+    ""
+    ""
+    ""
+    530f8afbc74536b9a963b4f1c4cb738b;
+  0000000000000000000000000000000000000000000000000000000000000000
+    000000000000000000000000
+    ""
+    00000000000000000000000000000000
+    cea7403d4d606b6e074ec5d3baf39d18
+    d0d1c8a799996bf0265b98b5d48ab919;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbaddecaf888
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662
+    76fc6ece0f4e1768cddf8853bb2d551b;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    cafebabefacedbad
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f
+    3a337dbf46a792c45e454913fe2ea8f2;
+  feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308
+    9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b
+    feedfacedeadbeeffeedfacedeadbeefabaddad2
+    d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39
+    5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f
+    a44a8266ee1c8eb0c8b5d4cf5ae9f19a;
+
+  ## Further home-made tests, made using the toy Python implementation.
+  60d7bcda163547d348b7551195e77022
+    ""
+    ""
+    ""
+    ""
+    58b01ea630bccf61f3b34c172d152383;
+  907dd1dff7dac5c9941d26d0c6eb14ad
+    56
+    ""
+    ""
+    ""
+    4728c593444566c1f955bbf6b3d38240;
+  8f86edd1dc9268eeee533285a6ed810c
+    ""
+    9b
+    ""
+    ""
+    d13020f394c38a8e22c46ccd91d10d77;
+  689daaa9060d2d4b6003062365b0a543
+    ""
+    ""
+    64
+    bc
+    4daa100a72a49783462b47a93ae6bf16;
+  c76c160f11896c4794846ecfa14a7130
+    c9f137120634c9519848a877ff77bf79
+    192a5b50ade5d9cd739a3d1f337f29549e6b0d27a4ba234085406a6136512061f7080cc07df0591d8fa21f2dd88374d8
+    cde8e160ad10997a21635c6d62c9269029df3e6057acc87638f508046733d9ff61cdbda3b3e9878731ebfedd4705e505
+    382909981d309ca85ad62f43d0ed0d416f8040e3517772510ff95e50d9e411319e636647904a1c7ac2d857ed1996414b
+    06ba36bc635adcbd1854fcef36614528;
+  da1435dceaa7b1cc49ae1d50c38201a8
+    94476b3f102b752eb9529533
+    966f27043eb621b7f65b000961040ef2f9b2fc
+    5fa450727a9b542cde52ebfda19d0ccc520f215eb57bb3a4f3ebbbb18ac6c95a97a48030370c33d090c54215abd6b3ad54efc9a38378c5b93b
+    7629cb94f9f709fd7c0988e50e935c3f95dc15a4f49207d62b3ba01fe62f0733842b97e72753292de7f4b3d0518ec30933d80bb3c93c5f2165
+    f894c92668f0264a7f663568f38c3d71;
+  f4f2aad2605faee2b03fb648e27fff63
+    102758fe2b69ac26afa3349829b945
+    86306fed54154f8f28523c03d4de1600157846b710ee72807a2219bfb474fd71d891f24bb65d1563259f9e
+    b53b571ea629c54d57dd2d42f70800df9fcbaca48b77dba189196d1ebba10b0467cb9fc2712a199e533fa9156308cdec3f768281e0
+    08bcec80c6486cc37d15f4da0dd221864d01b6bf9726ea9de673625a80e07e1250da4071099ffc8b50dc5cd1bfaaac50abef3d1b5a
+    9456d186568dd1aca2e61c96d2ae9998;
+  40a9b9a222bd689aef66f5306ceb0c6b08ac8b0a
+    ""
+    ""
+    ""
+    ""
+    d18fdc91e2ace4c8f4d66cf473fb42db;
+  22260c571b4a42bb8fdb233bfa6a5cfb0bad7d95
+    21
+    ""
+    ""
+    ""
+    93bcc629e1dc644f4f002440da2c9cca;
+  4ade49cb3b6f5fe8368131115c037ba323fe1dc8
+    ""
+    15
+    ""
+    ""
+    e87f107bb704c288cc68519cec9fa3d8;
+  1784873f0eb5b647da6794c18b5337685a96ed65
+    ""
+    ""
+    b9
+    c1
+    c59a50c109f521ba596b3bfdff74fe9d;
+  aca338527ef19b09c063c46f88de9fd41e72d7b9
+    7e23e6eabdff3bcd211499268878dbf3
+    0f1dad89d4b9b12012e4713df46795630e7952d22bb02d7100b8b649377d20a8f083455b663e4ee1315f3c8f2aebfa92
+    1451dcd1af5813b70d30ce2f1fef6ef315d0798391805da08da3aefc5f8584b7c5e617669c0f16e39815d4e9cfce3ed1
+    8068670d29a2a061b8375eb1e34259255991e9fadde3c5662930c9d29fe66fa5d513bfd6f2201e1503974444c827154b
+    67f81d876969b8f8af546599fb81b929;
+  ecdf3d264a7f16cb16c2e815f422cdf0c8e30308
+    be3c31e6bc58c0b7cadcb658
+    b970e47479a684b5aefa69a4cd52147ed12ca9
+    86981a874498ad0abef8bc4fcb70e27e98ef1f0446b42fb144d44b6d00f06dc188d472a784e0c6f21195a3b9f4ae985511265febd11c164720
+    23d16173096538a850efd193113ce4664d122a0e5ef73a70b50b57304b62704f65b9b1b1167d3e9a3cc66f95b873a856a05de800a91c2d43bc
+    c2a7ef96a5228db104f6a11034e50f8a;
+  eef9eb1c8dd0b00951f284649016ed0045633185
+    4bc78bf43966eb0cfa9138ddc39908
+    445608fe95e81c2533e31c9c1a9851bc2810d858cbbc8424d126b807e6daa089c3f9099c5ffb824173d763
+    4c04226f30cbb7f0e4a973a8cd190107314717a77456f3ff669c732b58db8f48af65f7cc9e3fb90e1721b730374ffc9bc597f56ccb
+    9ef6b1732748b5f4fee62e025d4fa736336574ede8e760c680d546ecd9c51a03b3bfea4f3eff602cacdf9822717325ffff92196aa2
+    1279f19bf183b1499da8da81e174d2b8;
+  b2f294b38766fc69f6a9f2c0945ffd505003cc0cae9ce021a5f1fa4f
+    ""
+    ""
+    ""
+    ""
+    565ff4cb468ce9c2c53451df7cc70651;
+  fa91544485f1a1258b2b9b8f0911e32d65cc1770a18cbfe6effd1ff6
+    77
+    ""
+    ""
+    ""
+    e5f4f21a54e3788920c3fda8e47a561a;
+  8554acf1270485b203a3c1c4c967c0a458cb948bdd409b687fa3a682
+    ""
+    7b
+    ""
+    ""
+    fea5e7d3d32a547d19d029133e417f4c;
+  480aa3a4c84cef64f6c9b53bf8f957f4b03cf43e89957f9a3e8128f8
+    ""
+    ""
+    74
+    2c
+    a0b8a9979dfb02faac0cfd7798f31e6f;
+  3d16687b7bb8deb9bd205b70e04c091d205cdad9e9a79b1abf91b085
+    1e5ca605ac8451399587011677508a15
+    dde524af3e2bee0646541a42c2ecccb44d65bad397abfaf529ee41cf9a05c7efedef3401539c51d2a90bbf7f1bfc338a
+    b0ef5746ea8fdcccd213e33f7e8a5718fd25014107c8e7d715a92add9589d1f5c054b2d983514605ec590294a319b980
+    c5c15ee7953a0b74712d9cfe36c7270a94c265f1af75b48e9147b54bf3509bea55e58c6ef3d7e60db1270d6f5f56d37b
+    94d5625b8c1c2dc0eb7914e717dd640f;
+  2068a9f891bc5ba5afabf8c3122d12d7ff3c41122d70d17d4569eaff
+    59a332ba58d5d5589bfe0797
+    53ee1a957eb6d6699e6b7ea2725cb2dac07ecd
+    e95759ac46fee6dda7abc8ad68daac90cfe22d2f1f2968cc42fa8b669ed3bb3542a9cf44bbc8c6254d980398bd94e66eb4563d405e51881e99
+    43f463f1b21cd0f9246af63db9eacb644edaa029de296e1e70d30a6d944e65ed2690d1a0abee3fc608b816f6b80cb15f044ea37d146f92f4c5
+    3b78d38c982a0c529ad66d6243694de8;
+  027b8ab9aea3ccf860b0009740763d96836c5f87b95460938de1288c
+    69d80ea12ff4bb5f069b8a2e86041c
+    1b9fc214e9ca2186ddf1f6a7a3aa7e740da967828e3604b35b15ffaa6c36800d9645563a308ba600768175
+    23bd2abf1261b089d8f23a9c2835076a23faac2cdd67771cc667a8331f0a170b66283e4f834a06148f302c3973accd56f6f24e3395
+    d76bde841be1e0f1c79d55aba162df14df0d8d27a79006ae86206959988ee72bdc2f865964dfb9f9367c28ff87aefdd0ffa01d9d97
+    aaa345866f4b3dbee0f6213cac96bd7b;
+  8b8c2e2352fd61e4fa8fec81
+    ""
+    ""
+    ""
+    ""
+    059b6263146de5fb545a936fc848b0b4;
+  6ac861a8b33779f09e7a10fc
+    02
+    ""
+    ""
+    ""
+    58624b8c9053c43796880707b3d67f20;
+  a8f48afa3080ee119a52a9a8
+    ""
+    17
+    ""
+    ""
+    687f0761db05bcdb0388336d76fd22e7;
+  e4f2b94b0820cab383a8cffe
+    ""
+    ""
+    ea
+    18
+    767802f12d42935d7b001884afc02a9c;
+  7c486315799dc875fba578c8
+    ec4837898a92142b5b0677da1ac27311
+    7b45bcfff5d5f8b6fde2893232a9f81d14517ffae475f6b94a43a67b3d380d2f9aaafe2dd721c0095c88088476892114
+    50ba8095ffab1eaadf66fd22ac1976063e113ab61f813e28a1397a7974a1d7f4220c785fe426a5a0e80f678d40414784
+    f32ff4b45a2e730c569689c1778053d0a0d98ff6ca284a29d5dec2d196cabe0b2ff7cccd2d76677cfa6f7f3f327e95dc
+    6a8c65bf4d69020ca3653fe92b8a0750;
+  2941feeffdc2eb44dc8c0d5e
+    8f444f7f4e0c893959b74dc2
+    3a7bb40e7e0013e5150686d2301b43a15a84e8
+    1d7f5cedaa49e2414ebf47970e560475cff206877de69146acc3ab6cf8556b7aa776945948d1b8834df2196c92ec1718dcdeee0d52d9539726
+    c4af011456e8d101166565373ad9e8f158794f83fd254b98c7c8b0fc4bf23d0c2dd3158db30946c967d9eab008d6a526e6c2bf28b0a615fd76
+    81383ad066041311a2eb1ab37d6c14eb;
+  d2810391b3f9d10c39b07ae8
+    f08ce7cee4758a386a9943e97dedfb
+    e61e737882cd09c2b9a80f34c0fde11c2481b11fc76bfa4dbf710a9e544e0c536ca1e040f9ad5b04140d98
+    edabe08485290a4d87d13b07398a1458c2c6b61dbdbc1cccada8c1a0a9aabb6c4e3c3554f8fb1ef61614c270295dfc0ca6551ca4bd
+    502ab4639cc0336813c1e56e627ca9fd05ae8a04bb2b5a5dd7c03a5a4fc64ec1b9222fb965ee6c675f52bf3815a88d8a0ab837ad7b
+    66578408dd93abb230ea3124f859308d;
+}