Merge branch 'lukechampine/crypto-tests' (#2222)

* lukechampine/crypto-tests:
  test: add bip32 vectors
  test: add scrypt vectors
  test: add hmac vectors
  test: add ed25519 vectors
  test: add expect arm
  test: add AES SIV mode vectors
  zuse: split sivb keys at correct offset
  test: add AES-CMAC vectors
  test: add AES CTR mode vectors
  test: add AES CBC mode vectors
  test: add AES ECB mode vectors
This commit is contained in:
Jared Tobin 2020-02-29 19:39:35 +04:00
commit 9c1d3090c9
No known key found for this signature in database
GPG Key ID: 0E4647D58F8A69E4
9 changed files with 1339 additions and 5 deletions

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:684effe62df5848c6af7d148ca7d2e88ede02d534f1e30fa255e11bfbc12c4e1
size 9658892
oid sha256:f887b67ad8c784c7d56c724207e4beb6940bf2b18b70a2af39f10f2739d2a388
size 9702258

View File

@ -212,5 +212,5 @@
::
++ hash160
|= d=@
(ripemd-160:ripemd:crypto 256 (sha-256:sha d))
(ripemd-160:ripemd:crypto 32 (sha-256:sha d))
--

View File

@ -25,6 +25,11 @@
(~(dunk ut p.expected) %expected)
== ==
result
:: +expect: compares :actual to %.y and pretty-prints anything else
::
++ expect
|= actual=vase
(expect-eq !>(%.y) actual)
:: +expect-fail: kicks a trap, expecting crash. pretty-prints if succeeds
::
++ expect-fail

View File

@ -3357,7 +3357,7 @@
~/ %en
|= txt/@
^- (trel @uxH @ud @ux)
=+ [k1=(rsh 5 3 key) k2=(end 5 3 key)]
=+ [k1=(rsh 6 3 key) k2=(end 6 3 key)]
=+ iv=(s2vb k1 (weld vec (limo ~[txt])))
=* hib (dis iv 0xffff.ffff.ffff.ffff.7fff.ffff.7fff.ffff)
=+ len=(met 3 txt)
@ -3369,7 +3369,7 @@
~/ %de
|= {iv/@H len/@ txt/@}
^- (unit @ux)
=+ [k1=(rsh 5 3 key) k2=(end 5 3 key)]
=+ [k1=(rsh 6 3 key) k2=(end 6 3 key)]
=* hib (dis iv 0xffff.ffff.ffff.ffff.7fff.ffff.7fff.ffff)
=+ ^= pln
(~(de ctrb k2 7 len hib) txt)

View File

@ -0,0 +1,168 @@
:: tests for the bip32 lib
::
:: Test vectors from:
:: https://en.bitcoin.it/wiki/BIP_0032_TestVectors
::
/+ *test, bip32
=, bip32
::
|%
+$ vector [mk=byts dp=tape id=@ux sk=@ux pk=@ux cc=@ux]
::
++ test-vectors
^- tang
|^ ;: weld
%+ category "identity"
(zing (turn vectors check-id))
%+ category "public-key"
(zing (turn vectors check-pk))
%+ category "private-key"
(zing (turn vectors check-sk))
%+ category "chaincode"
(zing (turn vectors check-cc))
==
::
++ check-id
|= vector
%+ expect-eq
!> id
!> `@ux`identity:(derive-path:(from-seed mk) dp)
::
++ check-pk
|= vector
%+ expect-eq
!> pk
!> `@ux`public-key:(derive-path:(from-seed mk) dp)
::
++ check-sk
|= vector
%+ expect-eq
!> sk
!> `@ux`private-key:(derive-path:(from-seed mk) dp)
::
++ check-cc
|= vector
%+ expect-eq
!> cc
!> `@ux`chain-code:(derive-path:(from-seed mk) dp)
::
++ vectors
^- (list vector)
:~
:*
16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
"m/0'"
0x5c1b.d648.ed23.aa5f.d50b.a52b.2457.c11e.9e80.a6a7
0xedb2.e14f.9ee7.7d26.dd93.b4ec.ede8.d16e.d408.ce14.9b6c.d80b.0715.a2d9.11a0.afea
0x3.5a78.4662.a4a2.0a65.bf6a.ab9a.e98a.6c06.8a81.c52e.4b03.2c0f.b540.0c70.6cfc.cc56
0x47fd.acbd.0f10.9704.3b78.c63c.20c3.4ef4.ed9a.111d.9800.47ad.1628.2c7a.e623.6141
==
::
:*
16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
"m/0'/1"
0xbef5.a2f9.a56a.94aa.b124.59f7.2ad9.cf8c.f19c.7bbe
0x3c6c.b8d0.f6a2.64c9.1ea8.b503.0fad.aa8e.538b.020f.0a38.7421.a12d.e931.9dc9.3368
0x3.501e.454b.f007.51f2.4b1b.489a.a925.215d.66af.2234.e389.1c3b.21a5.2bed.b3cd.711c
0x2a78.5763.1386.ba23.daca.c341.80dd.1983.734e.444f.dbf7.7404.1578.e9b6.adb3.7c19
==
::
:*
16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
"m/0'/1/2'"
0xee7a.b90c.de56.a8c0.e2bb.086a.c497.48b8.db9d.ce72
0xcbce.0d71.9ecf.7431.d88e.6a89.fa14.83e0.2e35.092a.f60c.042b.1df2.ff59.fa42.4dca
0x3.57bf.e1e3.41d0.1c69.fe56.5430.9956.cbea.5168.22fb.a8a6.0174.3a01.2a78.96ee.8dc2
0x446.6b9c.c8e1.61e9.6640.9ca5.2986.c584.f07e.9dc8.1f73.5db6.83c3.ff6e.c7b1.503f
==
::
:*
16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
"m/0'/1/2'/2"
0xd880.d7d8.9384.8509.a62d.8fb7.4e32.148d.ac68.412f
0xf47.9245.fb19.a38a.1954.c5c7.c0eb.ab2f.9bdf.d96a.1756.3ef2.8a6a.4b1a.2a76.4ef4
0x2.e844.5082.a72f.29b7.5ca4.8748.a914.df60.622a.609c.acfc.e8ed.0e35.8045.6074.1d29
0xcfb7.1883.f016.76f5.87d0.23cc.53a3.5bc7.f88f.724b.1f8c.2892.ac12.75ac.822a.3edd
==
::
:*
16^0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
"m/0'/1/2'/2/1000000000"
0xd69a.a102.255f.ed74.3782.78c7.8127.01ea.641f.df32
0x471b.76e3.89e5.28d6.de6d.8168.57e0.12c5.4550.51ca.d666.0850.e583.72a6.c3e6.e7c8
0x2.2a47.1424.da5e.6574.99d1.ff51.cb43.c474.81a0.3b1e.77f9.51fe.64ce.c9f5.a48f.7011
0xc783.e67b.921d.2beb.8f6b.389c.c646.d726.3b41.4570.1dad.d216.1548.a8b0.78e6.5e9e
==
::
:*
64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2.
cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.
9f9c.9996.9390.8d8a.8784.817e.7b78.7572.
6f6c.6966.6360.5d5a.5754.514e.4b48.4542
"m/0"
0x5a61.ff8e.b7aa.ca30.10db.97eb.da76.1216.10b7.8096
0xabe7.4a98.f6c7.eabe.e042.8f53.798f.0ab8.
aa1b.d378.7399.9041.703c.742f.15ac.7e1e
0x2.fc9e.5af0.ac8d.9b3c.ecfe.2a88.8e21.17ba.
3d08.9d85.8588.6c9c.826b.6b22.a98d.12ea
0xf090.9aff.aa7e.e7ab.e5dd.4e10.0598.d4dc.53cd.709d.5a5c.2cac.40e7.412f.232f.7c9c
==
::
:*
64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2.
cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.
9f9c.9996.9390.8d8a.8784.817e.7b78.7572.
6f6c.6966.6360.5d5a.5754.514e.4b48.4542
"m/0/2147483647'"
0xd8ab.4937.36da.02f1.1ed6.82f8.8339.e720.fb03.79d1
0x877c.779a.d968.7164.e9c2.f4f0.f4ff.0340.
8143.9233.0693.ce95.a58f.e18f.d52e.6e93
0x3.c01e.7425.647b.defa.82b1.2d9b.ad5e.3e68.
65be.e050.2694.b94c.a58b.666a.bc0a.5c3b
0xbe17.a268.474a.6bb9.c61e.1d72.0cf6.215e.2a88.c540.6c4a.ee7b.3854.7f58.5c9a.37d9
==
::
:*
64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2.
cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.
9f9c.9996.9390.8d8a.8784.817e.7b78.7572.
6f6c.6966.6360.5d5a.5754.514e.4b48.4542
"m/0/2147483647'/1"
0x7841.2e3a.2296.a40d.e124.307b.6485.bd19.833e.2e34
0x704a.ddf5.44a0.6e5e.e4be.a370.9846.3c23.
613d.a320.20d6.0450.6da8.c051.8e1d.a4b7
0x3.a7d1.d856.deb7.4c50.8e05.031f.9895.dab5.
4626.251b.3806.e16b.4bd1.2e78.1a7d.f5b9
0xf366.f48f.1ea9.f2d1.d3fe.958c.95ca.84ea.18e4.c4dd.b936.6c33.6c92.7eb2.46fb.38cb
==
::
:*
64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2.
cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.
9f9c.9996.9390.8d8a.8784.817e.7b78.7572.
6f6c.6966.6360.5d5a.5754.514e.4b48.4542
"m/0/2147483647'/1/2147483646'"
0x31a5.07b8.1559.3dfc.51ff.c724.5ae7.e5ae.e304.246e
0xf1c7.c871.a54a.804a.fe32.8b4c.83a1.c33b.
8e5f.f48f.5087.273f.04ef.a83b.247d.6a2d
0x2.d2b3.6900.396c.9282.fa14.6285.6658.2f20.
6a5d.d0bc.c8d5.e892.6118.06ca.fb03.01f0
0x6378.0703.0d55.d01f.9a0c.b3a7.8395.15d7.96bd.0770.6386.a6ed.df06.cc29.a65a.0e29
==
::
:*
64^0xfffc.f9f6.f3f0.edea.e7e4.e1de.dbd8.d5d2.
cfcc.c9c6.c3c0.bdba.b7b4.b1ae.aba8.a5a2.
9f9c.9996.9390.8d8a.8784.817e.7b78.7572.
6f6c.6966.6360.5d5a.5754.514e.4b48.4542
"m/0/2147483647'/1/2147483646'/2"
0x2613.2fdb.e7bf.89cb.c64c.f8da.fa3f.9f88.b866.6220
0xbb7d.39bd.b83e.cf58.f2fd.82b6.d918.341c.
bef4.2866.1ef0.1ab9.7c28.a484.2125.ac23
0x2.4d90.2e1a.2fc7.a875.5ab5.b694.c575.fce7.
42c4.8d9f.f192.e63d.f519.3e4c.7afe.1f9c
0x9452.b549.be8c.ea3e.cb7a.84be.c10d.cfd9.4afe.4d12.9ebf.d3b3.cb58.eedf.394e.d271
==
==
--
--

View File

@ -0,0 +1,670 @@
:: tests for the aes block cipher
::
/+ *test
=, aes:crypto
::
|%
::
:: ECB mode. Test vectors from Appendix C of FIPS-197:
:: https://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
::
+$ vector-ecb [key=@ux in=@ux out=@ux]
::
++ do-test-vectors-ecb
|* [ecbx=_ecba ves=(list vector-ecb)]
^- tang
|^ %+ weld
%+ category "encrypting"
(zing (turn ves enc))
%+ category "decrypting"
(zing (turn ves dec))
::
++ enc
|= vector-ecb
%+ expect-eq
!> out
!> `@ux`(~(en ecbx key) in)
::
++ dec
|= vector-ecb
%+ expect-eq
!> in
!> `@ux`(~(de ecbx key) out)
--
::
++ test-aes-ecba
%+ do-test-vectors-ecb ecba
:~
:+ 0x0
0x0
0x66e9.4bd4.ef8a.2c3b.884c.fa59.ca34.2b2e
::
:+ 0x0
0x1
0x58e2.fcce.fa7e.3061.367f.1d57.a4e7.455a
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
0x11.2233.4455.6677.8899.aabb.ccdd.eeff
0x69c4.e0d8.6a7b.0430.d8cd.b780.70b4.c55a
==
::
++ test-aes-ecbb
%+ do-test-vectors-ecb ecbb
:~
:+ 0x0
0x0
0xaae0.6992.acbf.52a3.e8f4.a96e.c930.0bd7
::
:+ 0x0
0x1
0xcd33.b28a.c773.f74b.a00e.d1f3.1257.2435
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f.
1011.1213.1415.1617
0x11.2233.4455.6677.8899.aabb.ccdd.eeff
0xdda9.7ca4.864c.dfe0.6eaf.70a0.ec0d.7191
==
::
++ test-aes-ecbc
%+ do-test-vectors-ecb ecbc
:~
:+ 0x0
0x0
0xdc95.c078.a240.8989.ad48.a214.9284.2087
::
:+ 0x0
0x1
0x530f.8afb.c745.36b9.a963.b4f1.c4cb.738b
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f.
1011.1213.1415.1617.1819.1a1b.1c1d.1e1f
0x11.2233.4455.6677.8899.aabb.ccdd.eeff
0x8ea2.b7ca.5167.45bf.eafc.4990.4b49.6089
==
::
:: CBC mode. Test vectors from Appendix F of NIST SP 800-38A:
:: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf
::
+$ vector-cbc [key=@ux iv=@ux in=@ux out=@ux]
::
++ do-test-vectors-cbc
|* [cbcx=_cbca ves=(list vector-cbc)]
^- tang
|^ %+ weld
%+ category "encrypting"
(zing (turn ves enc))
%+ category "decrypting"
(zing (turn ves dec))
::
++ enc
|= vector-cbc
%+ expect-eq
!> out
!> `@ux`(~(en cbcx key iv) in)
::
++ dec
|= vector-cbc
%+ expect-eq
!> in
!> `@ux`(~(de cbcx key iv) out)
--
::
++ test-aes-cbca
%+ do-test-vectors-cbc cbca
:~
:^ 0x0
0x1
0x2
0xf795.aaab.494b.5923.f7fd.89ff.948b.c1e0
::
:^ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x7649.abac.8119.b246.cee9.8e9b.12e9.197d.
5086.cb9b.5072.19ee.95db.113a.9176.78b2.
73be.d6b8.e3c1.743b.7116.e69e.2222.9516.
3ff1.caa1.681f.ac09.120e.ca30.7586.e1a7
==
++ test-aes-cbcb
%+ do-test-vectors-cbc cbcb
:~
:^ 0x0
0x1
0x2
0x2a34.93e6.6235.ee67.deec.cd2f.3b39.3bd8
::
:^ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x4f02.1db2.43bc.633d.7178.183a.9fa0.71e8.
b4d9.ada9.ad7d.edf4.e5e7.3876.3f69.145a.
571b.2420.12fb.7ae0.7fa9.baac.3df1.02e0.
08b0.e279.8859.8881.d920.a9e6.4f56.15cd
==
++ test-aes-cbcc
%+ do-test-vectors-cbc cbcc
:~
:^ 0x0
0x1
0x2
0x7260.03ca.37a6.2a74.d1a2.f58e.7506.358e
::
:^ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0xf58c.4c04.d6e5.f1ba.779e.abfb.5f7b.fbd6.
9cfc.4e96.7edb.808d.679f.777b.c670.2c7d.
39f2.3369.a9d9.bacf.a530.e263.0423.1461.
b2eb.05e2.c39b.e9fc.da6c.1907.8c6a.9d1b
==
::
:: CTR mode. Test vectors from Appendix F of NIST SP 800-38A:
:: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38a.pdf
::
+$ vector-ctr [key=@ux iv=@ux in=@ux out=@ux]
::
++ do-test-vectors-ctr
|* [ctrx=_ctra ves=(list vector-ctr)]
^- tang
|^ %+ weld
%+ category "encrypting"
(zing (turn ves enc))
%+ category "decrypting"
(zing (turn ves dec))
::
++ enc
|= vector-ctr
%+ expect-eq
!> out
!> `@ux`(~(en ctrx key 7 (met 3 out) iv) in)
::
++ dec
|= vector-ctr
%+ expect-eq
!> in
!> `@ux`(~(de ctrx key 7 (met 3 out) iv) out)
--
::
++ test-aes-ctra
%+ do-test-vectors-ctr ctra
:~
:^ 0x0
0x1
0x2
0x58e2.fcce.fa7e.3061.367f.1d57.a4e7.4558
::
:^ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0xf0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x874d.6191.b620.e326.1bef.6864.990d.b6ce.
9806.f66b.7970.fdff.8617.187b.b9ff.fdff.
5ae4.df3e.dbd5.d35e.5b4f.0902.0db0.3eab.
1e03.1dda.2fbe.03d1.7921.70a0.f300.9cee
==
++ test-aes-ctrb
%+ do-test-vectors-ctr ctrb
:~
:^ 0x0
0x1
0x2
0xcd33.b28a.c773.f74b.a00e.d1f3.1257.2437
::
:^ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0xf0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x1abc.9324.1752.1ca2.4f2b.0459.fe7e.6e0b.
0903.39ec.0aa6.faef.d5cc.c2c6.f4ce.8e94.
1e36.b26b.d1eb.c670.d1bd.1d66.5620.abf7.
4f78.a7f6.d298.0958.5a97.daec.58c6.b050
==
++ test-aes-ctrc
%+ do-test-vectors-ctr ctrc
:~
:^ 0x0
0x1
0x2
0x530f.8afb.c745.36b9.a963.b4f1.c4cb.7389
::
:^ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0xf0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x601e.c313.7757.89a5.b7a7.f504.bbf3.d228.
f443.e3ca.4d62.b59a.ca84.e990.caca.f5c5.
2b09.30da.a23d.e94c.e870.17ba.2d84.988d.
dfc9.c58d.b67a.ada6.13c2.dd08.4579.41a6
==
::
:: AES-CMAC. Test vectors from Section D of NIST SP 800-38B:
:: https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38b.pdf
::
+$ vector-mac [key=@ux in=@ux out=@ux]
::
++ do-test-vectors-mac
|* [macx=_maca ves=(list vector-mac)]
^- tang
|^ (zing (turn ves case))
::
++ case
|= vector-mac
%+ expect-eq
!> out
!> `@ux`(macx key ~ in)
--
::
++ test-aes-maca
%+ do-test-vectors-mac maca
:~
:+ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0x0
0xbb1d.6929.e959.3728.7fa3.7d12.9b75.6746
::
:+ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a
0x70a.16b4.6b4d.4144.f79b.dd9d.d04a.287c
::
:+ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411
0xdfa6.6747.de9a.e630.30ca.3261.1497.c827
::
:+ 0x2b7e.1516.28ae.d2a6.abf7.1588.09cf.4f3c
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0x51f0.bebf.7e3b.9d92.fc49.7417.7936.3cfe
==
++ test-aes-macb
%+ do-test-vectors-mac macb
:~
:+ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0x0
0xd17d.df46.adaa.cde5.31ca.c483.de7a.9367
::
:+ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a
0x9e99.a7bf.31e7.1090.0662.f65e.617c.5184
::
:+ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411
0x8a1d.e5be.2eb3.1aad.089a.82e6.ee90.8b0e
::
:+ 0x8e73.b0f7.da0e.6452.c810.f32b.8090.79e5.
62f8.ead2.522c.6b7b
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0xa1d5.df0e.ed79.0f79.4d77.5896.59f3.9a11
==
++ test-aes-macc
%+ do-test-vectors-mac macc
:~
:+ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0x0
0x289.62f6.1b7b.f89e.fc6b.551f.4667.d983
::
:+ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a
0x28a7.023f.452e.8f82.bd4b.f28d.8c37.c35c
::
:+ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411
0xaaf3.d8f1.de56.40c2.32f5.b169.b9c9.11e6
::
:+ 0x603d.eb10.15ca.71be.2b73.aef0.857d.7781.
1f35.2c07.3b61.08d7.2d98.10a3.0914.dff4
0x6bc1.bee2.2e40.9f96.e93d.7e11.7393.172a.
ae2d.8a57.1e03.ac9c.9eb7.6fac.45af.8e51.
30c8.1c46.a35c.e411.e5fb.c119.1a0a.52ef.
f69f.2445.df4f.9b17.ad2b.417b.e66c.3710
0xe199.2190.549f.6ed5.696a.2c05.6c31.5410
==
::
:: SIV mode. Test vectors from Project Wycheproof:
:: https://github.com/google/wycheproof/blob/master/testvectors/aes_siv_cmac_test.json
::
:: Additional test vector from Appendix A of RFC 5297:
:: https://tools.ietf.org/html/rfc5297#appendix-A
::
+$ vector-siv [key=@ux ad=(list @ux) in=@ux out=(trel @ux @ud @ux)]
::
++ do-test-vectors-siv
|* [sivx=_siva ves=(list vector-siv)]
^- tang
|^ %+ weld
%+ category "encrypting"
(zing (turn ves enc))
%+ category "decrypting"
(zing (turn ves dec))
::
++ enc
|= vector-siv
%+ expect-eq
!> out
!> (~(en sivx key ad) in)
::
++ dec
|= vector-siv
%+ expect-eq
!> `in
!> (~(de sivx key ad) p.out q.out r.out)
--
::
++ test-aes-siva
%+ do-test-vectors-siv siva
^- (list vector-siv)
:~
::
:: from RFC 5297
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0x8563.2d07.c6e8.f37f.950a.cd32.0a2e.cc93
14
0x40c0.2b96.90c4.dc04.daef.7f6a.fe5c
::
:: same as above, sans AD
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
~
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0xf1c5.fdea.c1f1.5a26.779c.1501.f9fb.7588
14
0x27e9.46c6.6908.8ab0.6da5.8c5c.831c
::
:: same as above, sans message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x0
:+
0xb9d5.cc97.054d.cd3f.6dfd.a629.d4f4.d313
0
0x0
::
:: same as above, sans AD and message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff
~
0x0
:+
0xf200.7a5b.eb2b.8900.c588.a7ad.f599.f172
0
0x0
::
:: all subsequent vectors from Wycheproof
::
:^ 0x612e.8378.43ce.ae7f.61d4.9625.faa7.e749.
4f92.53e2.0cb3.adce.a686.512b.0439.36cd
:~ 0x865d.39ae.9b5e.9ff8.d630.8e00.2087.45bc
==
0xcc37.fae1.5f74.5a2f.40e2.c8b1.92f2.b38d
:+
0xc79c.86cd.7509.e60a.16ca.8cec.6bca.a1c5
16
0x8fbd.6099.7189.91fe.775b.f5a6.59d3.0a24
::
:^ 0x71a7.adc7.222f.471c.28f6.82c1.2d45.feed.
4555.6000.a986.0359.2292.4ad1.54ba.5fa5
:~ 0x46a6.5672.d269.9267.ab27.da82
==
0x227e.714e.3efa.84e4.8049.142e.daa3.11da.
b285.407f.9b62.8b14.6f1d.6132.c250.0ca2.
8497.fbd6.e386.679c
:+
0xb30e.c3b9.c854.02c3.5672.8391.acf0.4fcc
40
0xd02.ba85.b6a9.e90c.f846.155d.4ab3.1589.
52bd.1791.8853.70bf.23ba.26d8.d233.5963.
7b6e.24e8.763e.d107
==
::
++ test-aes-sivb
%+ do-test-vectors-siv sivb
^- (list vector-siv)
:~
::
:: from RFC 5297, with extended key
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0x89e8.69b9.3256.7851.54f0.9639.62fe.0740
14
0xf313.e667.b564.78a0.32b9.913e.923c
::
:: same as above, sans AD
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
~
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0xefc5.3765.c5a5.b1e0.69df.8927.3c57.4dc3
14
0x1a67.edd1.8a33.6b1f.5eb2.5a95.4844
::
:: same as above, sans message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x0
:+
0xad71.1b68.568c.e7dd.3669.8e4d.f947.8942
0
0x0
::
:: same as above, sans AD and message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
~
0x0
:+
0x21ce.0f18.1d86.120b.0bf0.7cb6.1c5a.ac0d
0
0x0
::
:: all subsequent vectors from Wycheproof
::
:^ 0xca9d.b622.14c3.afab.385b.9086.f1cb.90d1.
7195.d495.ef47.642d.bad0.6f4e.7d0b.ab13.
6c77.8850.29ad.442b.30c3.4c8b.5290.e7d0
:~ 0xd4db.fdce.11f1.147e.29dd.062e.a3bb.bd17
==
0xded5.a13d.7599.03ec.d36c.b238.5277.76c6
:+
0xa4e0.8bdd.8ab8.cbef.46e0.fdb8.a7ca.1097
16
0xa8f9.63e4.5e55.4a58.8249.6270.f9fd.6de8
::
:^ 0x5f6b.fe19.987d.5bf6.471d.d9e4.3609.4f7f.
e33f.8acc.a3b8.a41e.2778.61e2.02bd.7262.
fc2b.0bd3.df9b.35fa.2fc3.c579.620f.00eb
:~ 0xb96c.8682.cd3c.e676.b0d7.9865
==
0x1485.126d.0476.bb4b.86d0.87d1.8926.32b5.3cb4.f8a2
:+
0x8fd1.214e.8078.2d7c.1400.7d03.7feb.1ab1
20
0x81fd.cb20.9858.87b5.ee8d.4acf.5589.924b.
e644.947d
::
:^ 0x25b0.b404.bb1f.7844.6d0e.5cde.012e.e583.
2cb4.0339.8a3e.66e9.b5a2.44b5.9d89.94ee.
1018.4a57.76f3.578f.aab8.30e8.65f8.133c
:~ 0x7fe4.97ba.cf30.af3a.8566.2aa1
==
0xb1b1.97cd.7ff6.8b62.e274.f5d1.046f.42f9.
8171.63f0.a105.a0fb.7736.fa9e.5e8f.7694.
4a22.282a.f480.ee79
:+
0xb440.39f1.e5ba.808c.a055.aea6.bc2d.819d
40
0x388e.3c27.1cd9.7c04.6061.e572.23bb.c2a1.
7aa9.b368.d5cf.281d.e46f.48b3.4d17.9c16.
cc9e.9d46.00a8.7af4
==
::
++ test-aes-sivc
%+ do-test-vectors-siv sivc
^- (list vector-siv)
:~
::
:: from RFC 5297, with extended key
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0x724d.fb2e.af94.dbb1.9b0b.a3a2.99a0.801e
14
0x1206.291a.35ad.3db0.2127.7344.0fd0
::
:: same as above, sans AD
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
~
0x1122.3344.5566.7788.99aa.bbcc.ddee
:+
0x1dc0.45af.2d4d.9793.b874.09c2.501a.9412
14
0x7942.c766.bc8b.0e92.c859.9a38.d4d9
::
:: same as above, sans message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
:~ 0x1011.1213.1415.1617.1819.1a1b.1c1d.1e1f.
2021.2223.2425.2627
==
0x0
:+
0xe99d.58c2.c500.7b5f.99a0.99b5.f68f.a556
0
0x0
::
:: same as above, sans AD and message
::
:^ 0xfffe.fdfc.fbfa.f9f8.f7f6.f5f4.f3f2.f1f0.
f0f1.f2f3.f4f5.f6f7.f8f9.fafb.fcfd.feff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff.
0011.2233.4455.6677.8899.aabb.ccdd.eeff
~
0x0
:+
0x99c6.6f27.246f.a973.0dcf.370b.e03c.a7a3
0
0x0
::
:: all subsequent vectors from Wycheproof
::
:^ 0x27fa.f97f.b303.aa4f.2f36.4edd.2399.7f4c.
77b8.e51e.bb82.93c5.9dfb.1d24.f0fb.629f.
6c82.0fc2.d91b.f48f.0035.eeec.347e.37ec.
4fb0.cb36.102b.cdc5.a248.c47a.2f97.eab9
:~ 0xcc94.f64e.14df.9026.5f7f.12a8.a038.6d0a
==
0x6b1d.b0f5.a433.7688.5002.dc98.bd55.6f1d.
ac9b.66b6.6213.a9fa.6069.df99.5a12.3384
:+
0xd001.6d67.5b49.f11e.a873.7074.12d4.5709
32
0xb770.3a02.8a0c.fc31.2cf6.1cbe.22b9.1e3c.
f20b.7d4c.9308.ee15.f18b.4eba.0088.9284
::
:^ 0x3ab0.62db.dd38.b951.a9fb.0d8b.b185.959a.
93da.b349.6b85.0a30.62b9.3003.036c.8bd2.
aabb.f37d.5d3f.6a39.9d4c.edef.b70c.1b8a.
7b45.639f.e118.c10e.39f3.6fa5.8618.a84d
:~ 0xe860.5f13.db8c.482d.48bd.ba2d
==
0x5c6f
:+
0xfdde.a9ac.778b.978a.9680.33ce.52ec.6116
2
0x2588
::
:^ 0xcd86.89f8.2181.7f59.bfaa.7551.31f2.5651.
61c7.f448.9f89.b657.ac9f.a127.a976.8535.
a702.d001.b9b9.9cc1.1c39.7646.7b1b.4586.
5ff4.17dc.256e.bb50.79b7.f1b3.e083.07b5
:~ 0xb3ed.ffbb.89b3.73fe.04da.244b
==
0xebcf.b2ff.b681.cc5d.fa0c.5c52.4c1b.1cc8.
7cc6.b2bf.a35d.c36d.15e8.0505.118b.84a0.
72a7.8a15.7b4d.1837
:+
0x1ac7.8aae.2ede.04eb.4792.4d8f.9f99.fe75
40
0xdeb6.1bf6.93da.7f3a.2147.c05f.6d29.d173.
9235.6fe0.0f82.b24c.dbce.774f.d864.5615.
48f3.3dd3.192d.806f
==
--

View File

@ -0,0 +1,156 @@
:: tests for the ed25519 signature algorithm
::
/+ *test
=, ed:crypto
::
|%
::
:: Test vectors from Section 7.1 of RFC 8032:
:: https://tools.ietf.org/html/rfc8032#section-7.1
::
+$ vector [seed=@ux pk=@ux msg=@ux sig=@ux]
::
++ test-vectors
^- tang
|^ ;: weld
%+ category "puck"
(zing (turn vectors check-puck))
%+ category "sign"
(zing (turn vectors check-sign))
%+ category "veri"
(zing (turn vectors check-veri))
==
::
++ check-puck
|= vector
%+ expect-eq
!> pk
!> `@ux`(puck seed)
::
++ check-sign
|= vector
%+ expect-eq
!> sig
!> `@ux`(sign msg seed)
::
++ check-veri
|= vector
%- expect
!> (veri sig msg pk)
::
++ vectors
^~ (turn vectors-raw swp-vec)
++ swp-vec
|= vector
:^ (swp 3 seed)
(swp 3 pk)
(swp 3 msg)
(swp 3 sig)
++ vectors-raw
:~
:^ 0x9d61.b19d.effd.5a60.ba84.4af4.92ec.2cc4.
4449.c569.7b32.6919.703b.ac03.1cae.7f60
0xd75a.9801.82b1.0ab7.d54b.fed3.c964.073a.
0ee1.72f3.daa6.2325.af02.1a68.f707.511a
0x0
0xe556.4300.c360.ac72.9086.e2cc.806e.828a.
8487.7f1e.b8e5.d974.d873.e065.2249.0155.
5fb8.8215.90a3.3bac.c61e.3970.1cf9.b46b.
d25b.f5f0.595b.be24.6551.4143.8e7a.100b
::
:^ 0x4ccd.089b.28ff.96da.9db6.c346.ec11.4e0f.
5b8a.319f.35ab.a624.da8c.f6ed.4fb8.a6fb
0x3d40.17c3.e843.895a.92b7.0aa7.4d1b.7ebc.
9c98.2ccf.2ec4.968c.c0cd.55f1.2af4.660c
0x72
0x92a0.09a9.f0d4.cab8.720e.820b.5f64.2540.
a2b2.7b54.1650.3f8f.b376.2223.ebdb.69da.
085a.c1e4.3e15.996e.458f.3613.d0f1.1d8c.
387b.2eae.b430.2aee.b00d.2916.12bb.0c00
::
:^ 0xc5aa.8df4.3f9f.837b.edb7.442f.31dc.b7b1.
66d3.8535.076f.094b.85ce.3a2e.0b44.58f7
0xfc51.cd8e.6218.a1a3.8da4.7ed0.0230.f058.
0816.ed13.ba33.03ac.5deb.9115.4890.8025
0xaf82
0x6291.d657.deec.2402.4827.e69c.3abe.01a3.
0ce5.48a2.8474.3a44.5e36.80d7.db5a.c3ac.
18ff.9b53.8d16.f290.ae67.f760.984d.c659.
4a7c.15e9.716e.d28d.c027.bece.ea1e.c40a
::
:^ 0xf5e5.767c.f153.3195.1763.0f22.6876.b86c.
8160.cc58.3bc0.1374.4c6b.f255.f5cc.0ee5
0x2781.17fc.144c.7234.0f67.d0f2.316e.8386.
ceff.bf2b.2428.c9c5.1fef.7c59.7f1d.426e
0x8.b8b2.b733.4242.4376.0fe4.26a4.b549.
0863.2110.a66c.2f65.91ea.bd33.45e3.e4eb.
98fa.6e26.4bf0.9efe.12ee.50f8.f54e.9f77.
b1e3.55f6.c505.44e2.3fb1.433d.df73.be84.
d879.de7c.0046.dc49.96d9.e773.f4bc.9efe.
5738.829a.db26.c81b.37c9.3a1b.270b.2032.
9d65.8675.fc6e.a534.e081.0a44.3282.6bf5.
8c94.1efb.65d5.7a33.8bbd.2e26.640f.89ff.
bc1a.858e.fcb8.550e.e3a5.e199.8bd1.77e9.
3a73.63c3.44fe.6b19.9ee5.d02e.82d5.22c4.
feba.1545.2f80.288a.821a.5791.16ec.6dad.
2b3b.310d.a903.401a.a621.00ab.5d1a.3655.
3e06.203b.3389.0cc9.b832.f79e.f805.60cc.
b9a3.9ce7.6796.7ed6.28c6.ad57.3cb1.16db.
efef.d754.99da.96bd.68a8.a97b.928a.8bbc.
103b.6621.fcde.2bec.a123.1d20.6be6.cd9e.
c7af.f6f6.c94f.cd72.04ed.3455.c68c.83f4.
a41d.a4af.2b74.ef5c.53f1.d8ac.70bd.cb7e.
d185.ce81.bd84.359d.4425.4d95.629e.9855.
a94a.7c19.58d1.f8ad.a5d0.532e.d8a5.aa3f.
b2d1.7ba7.0eb6.248e.594e.1a22.97ac.bbb3.
9d50.2f1a.8c6e.b6f1.ce22.b3de.1a1f.40cc.
2455.4119.a831.a9aa.d607.9cad.8842.5de6.
bde1.a918.7ebb.6092.cf67.bf2b.13fd.65f2.
7088.d78b.7e88.3c87.59d2.c4f5.c65a.db75.
5387.8ad5.75f9.fad8.78e8.0a0c.9ba6.3bcb.
cc27.32e6.9485.bbc9.c90b.fbd6.2481.d908.
9bec.cf80.cfe2.df16.a2cf.65bd.92dd.597b.
0707.e091.7af4.8bbb.75fe.d413.d238.f555.
5a7a.569d.80c3.414a.8d08.59dc.65a4.6128.
bab2.7af8.7a71.314f.318c.782b.23eb.fe80.
8b82.b0ce.2640.1d2e.22f0.4d83.d125.5dc5.
1add.d3b7.5a2b.1ae0.7845.04df.543a.f896.
9be3.ea70.82ff.7fc9.888c.144d.a2af.5842.
9ec9.6031.dbca.d3da.d9af.0dcb.aaaf.268c.
b8fc.ffea.d94f.3c7c.a495.e056.a9b4.7acd.
b751.fb73.e666.c6c6.55ad.e829.7297.d07a.
d1ba.5e43.f1bc.a323.0165.1339.e229.04cc.
8c42.f58c.30c0.4aaf.db03.8dda.0847.dd98.
8dcd.a6f3.bfd1.5c4b.4c45.2500.4aa0.6eef.
f8ca.6178.3aac.ec57.fb3d.1f92.b0fe.2fd1.
a85f.6724.517b.65e6.14ad.6808.d6f6.ee34.
dff7.310f.dc82.aebf.d904.b01e.1dc5.4b29.
2709.4b2d.b68d.6f90.3b68.401a.debf.5a7e.
08d7.8ff4.ef5d.6365.3a65.040c.f9bf.d4ac.
a798.4a74.d371.4598.6780.fc0b.16ac.4516.
49de.6188.a7db.df19.1f64.b5fc.5e2a.b47b.
57f7.f727.6cd4.19c1.7a3c.a8e1.b939.ae49.
e488.acba.6b96.5610.b548.0109.c8b1.7b80.
e1b7.b750.dfc7.598d.5d50.11fd.2dcc.5600.
a32e.f5b5.2a1e.cc82.0e30.8aa3.4272.1aac.
0943.bf66.86b6.4b25.7937.6504.ccc4.93d9.
7e6a.ed3f.b0f9.cd71.a43d.d497.f01f.17c0.
e2cb.3797.aa2a.2f25.6656.168e.6c49.6afc.
5fb9.3246.f6b1.1163.98a3.46f1.a641.f3b0.
41e9.89f7.914f.90cc.2c7f.ff35.7876.e506.
b50d.334b.a77c.225b.c307.ba53.7152.f3f1.
610e.4eaf.e595.f6d9.d90d.11fa.a933.a15e.
f136.9546.868a.7f3a.45a9.6768.d40f.d9d0.
3412.c091.c631.5cf4.fde7.cb68.6069.3738.
0db2.eaaa.707b.4c41.85c3.2edd.cdd3.0670.
5e4d.c1ff.c872.eeee.475a.64df.ac86.aba4.
1c06.1898.3f87.41c5.ef68.d3a1.01e8.a3b8.
cac6.0c90.5c15.fc91.0840.b94c.00a0.b9d0
::
0xaab.4c90.0501.b3e2.4d7c.df46.6332.6a3a.
87df.5e48.43b2.cbdb.67cb.f6e4.60fe.c350.
aa53.71b1.508f.9f45.28ec.ea23.c436.d94b.
5e8f.cd4f.681e.30a6.ac00.a970.4a18.8a03
==
--
--

View File

@ -0,0 +1,265 @@
:: tests for the hmac construction
::
/+ *test
=, hmac:crypto
::
|%
+$ vector [key=@ux in=@ux out=@ux]
::
++ do-test-vectors
|* [hmac=_hmac-sha1 ves=(list vector)]
^- tang
|^ (zing (turn ves case))
::
++ case
|= vector
%+ expect-eq
!> out
!> `@ux`(hmac key in)
--
::
:: HMAC-SHA-1. Test vectors from section 3 of RFC 2202:
:: https://tools.ietf.org/html/rfc2202#section-3
::
++ test-hmac-sha1
%+ do-test-vectors hmac-sha1
:~
::
:+ 0xb0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.
0b0b.0b0b
0x4869.2054.6865.7265
0xb617.3186.5505.7264.e28b.c0b6.fb37.8c8e.
f146.be00
::
:+ 0x4a65.6665
0x7768.6174.2064.6f20.7961.2077.616e.7420.
666f.7220.6e6f.7468.696e.673f
0xeffc.df6a.e5eb.2fa2.d274.16d5.f184.df9c.
259a.7c79
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0xdddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd
0x125d.7342.b9ac.11cd.91a3.9af4.8aa1.7b4f.
63f1.75d3
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f.
1011.1213.1415.1617.1819
0xcdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd
0x4c90.07f4.0262.50c6.bc84.14f9.bf50.c86c.
2d72.35da
::
:+ 0xc0c.0c0c.0c0c.0c0c.0c0c.0c0c.0c0c.0c0c.
0c0c.0c0c
0x5465.7374.2057.6974.6820.5472.756e.6361.
7469.6f6e
0x4c1a.0342.4b55.e07f.e7f2.7be1.d58b.b932.
4a9a.5a04
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa
0x5465.7374.2055.7369.6e67.204c.6172.6765.
7220.5468.616e.2042.6c6f.636b.2d53.697a.
6520.4b65.7920.2d20.4861.7368.204b.6579.
2046.6972.7374
0xaa4a.e5e1.5272.d00e.9570.5637.ce8a.3b55.
ed40.2112
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa
0x5465.7374.2055.7369.6e67.204c.6172.6765.
7220.5468.616e.2042.6c6f.636b.2d53.697a.
6520.4b65.7920.2d20.4861.7368.204b.6579.
2046.6972.7374
0xaa4a.e5e1.5272.d00e.9570.5637.ce8a.3b55.
ed40.2112
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa
0x54.6573.7420.5573.696e.6720.4c61.7267.
6572.2054.6861.6e20.426c.6f63.6b2d.5369.
7a65.204b.6579.2061.6e64.204c.6172.6765.
7220.5468.616e.204f.6e65.2042.6c6f.636b.
2d53.697a.6520.4461.7461
0xe8e9.9d0f.4523.7d78.6d6b.baa7.965c.7808.
bbff.1a91
==
::
:: HMAC-SHA-256. Test vectors from section 4 of RFC 4231:
:: https://tools.ietf.org/html/rfc4231#section-4
::
++ test-hmac-sha256
%+ do-test-vectors hmac-sha256
:~
:+ 0xb0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.
0b0b.0b0b
0x4869.2054.6865.7265
0xb034.4c61.d8db.3853.5ca8.afce.af0b.f12b.
881d.c200.c983.3da7.26e9.376c.2e32.cff7
::
:+ 0x4a65.6665
0x7768.6174.2064.6f20.7961.2077.616e.7420.
666f.7220.6e6f.7468.696e.673f
0x5bdc.c146.bf60.754e.6a04.2426.0895.75c7.
5a00.3f08.9d27.3983.9dec.58b9.64ec.3843
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0xdddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd
0x773e.a91e.3680.0e46.854d.b8eb.d091.81a7.
2959.098b.3ef8.c122.d963.5514.ced5.65fe
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f.
1011.1213.1415.1617.1819
0xcdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd
0x8255.8a38.9a44.3c0e.a4cc.8198.99f2.083a.
85f0.faa3.e578.f807.7a2e.3ff4.6729.665b
::
:+ 0xaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0x5465.7374.2055.7369.6e67.204c.6172.6765.
7220.5468.616e.2042.6c6f.636b.2d53.697a.
6520.4b65.7920.2d20.4861.7368.204b.6579.
2046.6972.7374
0x60e4.3159.1ee0.b67f.0d8a.26aa.cbf5.b77f.
8e0b.c621.3728.c514.0546.040f.0ee3.7f54
::
:+ 0xaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0x5468.6973.2069.7320.6120.7465.7374.2075.
7369.6e67.2061.206c.6172.6765.7220.7468.
616e.2062.6c6f.636b.2d73.697a.6520.6b65.
7920.616e.6420.6120.6c61.7267.6572.2074.
6861.6e20.626c.6f63.6b2d.7369.7a65.2064.
6174.612e.2054.6865.206b.6579.206e.6565.
6473.2074.6f20.6265.2068.6173.6865.6420.
6265.666f.7265.2062.6569.6e67.2075.7365.
6420.6279.2074.6865.2048.4d41.4320.616c.
676f.7269.7468.6d2e
0x9b09.ffa7.1b94.2fcb.2763.5fbc.d5b0.e944.
bfdc.6364.4f07.1393.8a7f.5153.5c3a.35e2
==
::
:: HMAC-SHA-512. Test vectors from section 4 of RFC 4231:
:: https://tools.ietf.org/html/rfc4231#section-4
::
++ test-hmac-sha512
%+ do-test-vectors hmac-sha512
:~
::
:+ 0xb0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.0b0b.
0b0b.0b0b
0x4869.2054.6865.7265
0x87aa.7cde.a5ef.619d.4ff0.b424.1a1d.6cb0.
2379.f4e2.ce4e.c278.7ad0.b305.45e1.7cde.
daa8.33b7.d6b8.a702.038b.274e.aea3.f4e4.
be9d.914e.eb61.f170.2e69.6c20.3a12.6854
::
:+ 0x4a65.6665
0x7768.6174.2064.6f20.7961.2077.616e.7420.
666f.7220.6e6f.7468.696e.673f
0x164b.7a7b.fcf8.19e2.e395.fbe7.3b56.e0a3.
87bd.6422.2e83.1fd6.1027.0cd7.ea25.0554.
9758.bf75.c05a.994a.6d03.4f65.f8f0.e6fd.
caea.b1a3.4d4a.6b4b.636e.070a.38bc.e737
::
:+ 0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0xdddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd.dddd.dddd.dddd.dddd.dddd.dddd.dddd.
dddd
0xfa73.b008.9d56.a284.efb0.f075.6c89.0be9.
b1b5.dbdd.8ee8.1a36.55f8.3e33.b227.9d39.
bf3e.8482.79a7.22c8.06b4.85a4.7e67.c807.
b946.a337.bee8.9426.7427.8859.e132.92fb
::
:+ 0x1.0203.0405.0607.0809.0a0b.0c0d.0e0f.
1011.1213.1415.1617.1819
0xcdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.cdcd.
cdcd
0xb0ba.4656.3745.8c69.90e5.a8c5.f61d.4af7.
e576.d97f.f94b.872d.e76f.8050.361e.e3db.
a91c.a5c1.1aa2.5eb4.d679.275c.c578.8063.
a5f1.9741.120c.4f2d.e2ad.ebeb.10a2.98dd
::
:+ 0xaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0x5465.7374.2055.7369.6e67.204c.6172.6765.
7220.5468.616e.2042.6c6f.636b.2d53.697a.
6520.4b65.7920.2d20.4861.7368.204b.6579.
2046.6972.7374
0x80b2.4263.c7c1.a3eb.b714.93c1.dd7b.e8b4.
9b46.d1f4.1b4a.eec1.121b.0137.83f8.f352.
6b56.d037.e05f.2598.bd0f.d221.5d6a.1e52.
95e6.4f73.f63f.0aec.8b91.5a98.5d78.6598
::
:+ 0xaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.
aaaa.aaaa
0x5468.6973.2069.7320.6120.7465.7374.2075.
7369.6e67.2061.206c.6172.6765.7220.7468.
616e.2062.6c6f.636b.2d73.697a.6520.6b65.
7920.616e.6420.6120.6c61.7267.6572.2074.
6861.6e20.626c.6f63.6b2d.7369.7a65.2064.
6174.612e.2054.6865.206b.6579.206e.6565.
6473.2074.6f20.6265.2068.6173.6865.6420.
6265.666f.7265.2062.6569.6e67.2075.7365.
6420.6279.2074.6865.2048.4d41.4320.616c.
676f.7269.7468.6d2e
0xe37b.6a77.5dc8.7dba.a4df.a9f9.6e5e.3ffd.
debd.71f8.8672.8986.5df5.a32d.20cd.c944.
b602.2cac.3c49.82b1.0d5e.eb55.c3e4.de15.
1346.76fb.6de0.4460.65c9.7440.fa8c.6a58
==
--

View File

@ -0,0 +1,70 @@
:: tests for the scrypt key derivation algorithm
::
/+ *test
=, scr:crypto
::
|%
::
:: Test vectors from Section 12 of RFC 7914:
:: https://tools.ietf.org/html/rfc7914.html#section-12
::
+$ vector [pw=@ux salt=@ux n=@ud r=@ud p=@ud out=@ux]
::
++ test-vectors
^- tang
|^ (zing (turn vectors case))
::
++ case
|= vector
%+ expect-eq
!> (swp 3 out)
!> `@ux`(hsh pw salt n r p 64)
::
++ vectors
:: TODO: until scrypt has been jetted, we can only test the
:: first vector; the others do not finish in a reasonable
:: amount of time.
%+ scag 1 ^- (list vector)
:~
:*
0x0
0x0
16 1 1
0x77d6.5762.3865.7b20.3b19.ca42.c18a.0497.
f16b.4844.e307.4ae8.dfdf.fa3f.ede2.1442.
fcd0.069d.ed09.48f8.326a.753a.0fc8.1f17.
e8d3.e0fb.2e0d.3628.cf35.e20c.38d1.8906
==
::
:*
0x7061.7373.776f.7264
0x4e61.436c
1.024 8 16
0xfdba.be1c.9d34.7200.7856.e719.0d01.e9fe.
7c6a.d7cb.c823.7830.e773.7663.4b37.3162.
2eaf.30d9.2e22.a388.6ff1.0927.9d98.30da.
c727.afb9.4a83.ee6d.8360.cbdf.a2cc.0640
==
::
:*
0x70.6c65.6173.656c.6574.6d65.696e
0x536f.6469.756d.4368.6c6f.7269.6465
16.384 8 1
0x7023.bdcb.3afd.7348.461c.06cd.81fd.38eb.
fda8.fbba.904f.8e3e.a9b5.43f6.545d.a1f2.
d543.2955.613f.0fcf.62d4.9705.242a.9af9.
e61e.85dc.0d65.1e40.dfcf.017b.4557.5887
==
::
:*
0x70.6c65.6173.656c.6574.6d65.696e
0x536f.6469.756d.4368.6c6f.7269.6465
1.048.576 8 1
0x2101.cb9b.6a51.1aae.addb.be09.cf70.f881.
ec56.8d57.4a2f.fd4d.abe5.ee98.20ad.aa47.
8e56.fd8f.4ba5.d09f.fa1c.6d92.7c40.f4c3.
3730.4049.e8a9.52fb.cbf4.5c6f.a77a.41a4
==
==
--
--