From f10d4c2c9de45c1fe2563f5d4c50c6a470c33730 Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Sat, 27 Feb 2021 08:44:53 +0000 Subject: [PATCH 1/4] Add Wycheproof HMAC test vectors Created from: https://github.com/google/wycheproof/blob/2196000605e45d91097147c9c71f26b72af58003/testvectors/ Files: - hmac_sha1_test.json - hmac_sha256_test.json - hmac_sha384_test.json - hmac_sha512_test.json --- Cargo.lock | 14 ++++++++++++++ hmac/Cargo.toml | 1 + hmac/tests/data/wycheproof-sha1.blb | Bin 0 -> 4875 bytes hmac/tests/data/wycheproof-sha256.blb | Bin 0 -> 6153 bytes hmac/tests/data/wycheproof-sha384.blb | Bin 0 -> 7857 bytes hmac/tests/data/wycheproof-sha512.blb | Bin 0 -> 9648 bytes hmac/tests/lib.rs | 19 ++++++++++++++++++- 7 files changed, 33 insertions(+), 1 deletion(-) create mode 100644 hmac/tests/data/wycheproof-sha1.blb create mode 100644 hmac/tests/data/wycheproof-sha256.blb create mode 100644 hmac/tests/data/wycheproof-sha384.blb create mode 100644 hmac/tests/data/wycheproof-sha512.blb diff --git a/Cargo.lock b/Cargo.lock index e5a77a5..cde38e5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -162,6 +162,7 @@ dependencies = [ "crypto-mac", "digest", "md-5", + "sha-1", "sha2", "streebog", ] @@ -216,6 +217,19 @@ version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" +[[package]] +name = "sha-1" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dfebf75d25bd900fd1e7d11501efab59bc846dbc76196839663e6637bba9f25f" +dependencies = [ + "block-buffer", + "cfg-if", + "cpuid-bool 0.1.2", + "digest", + "opaque-debug", +] + [[package]] name = "sha2" version = "0.9.3" diff --git a/hmac/Cargo.toml b/hmac/Cargo.toml index 65620d0..61463a6 100644 --- a/hmac/Cargo.toml +++ b/hmac/Cargo.toml @@ -18,6 +18,7 @@ digest = "0.9" [dev-dependencies] crypto-mac = { version = "0.11.0-pre", features = ["dev"] } md-5 = { version = "0.9", default-features = false } +sha-1 = { version = "0.9", default-features = false } sha2 = { version = "0.9", default-features = false } streebog = { version = "0.9", default-features = false } diff --git a/hmac/tests/data/wycheproof-sha1.blb b/hmac/tests/data/wycheproof-sha1.blb new file mode 100644 index 0000000000000000000000000000000000000000..a4f8f43632d11124cbf16144fd039242070185f0 GIT binary patch literal 4875 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 literal 0 HcmV?d00001 diff --git a/hmac/tests/data/wycheproof-sha256.blb b/hmac/tests/data/wycheproof-sha256.blb new file mode 100644 index 0000000000000000000000000000000000000000..62f1d3570d4f3ae76580e79070534a08575f8275 GIT binary patch literal 6153 zcmV+k820A?KprAouek#`yP>i`cGMtjK6%4cfL(qAMb+vto>TI?K z`!i$mQ;NNFq`(VG6NZpmtbmXN&lxj7fm!_(6Fk{u$)=V}lMBq~Y1dvpVC#(j^zuHGQBp zdNDZ&%mN){KlS`u*UKYjkpDjeN}LkZ7pjf=X-#wm`Qi9q=s>rVi4gS|@iGO< z6q3ei02&nkkvxjDpxiZN=RuBXR=;vYFciD z@{yr4k;def#XuXmm;X)ZrK6GFTnM8(!pFji9!ITPoMRCIlJ|?4{&);#egR$g{6Ge^ z*u^;`Bd7wrT-^&iQgl?PbJ=AaHi$Orq^+1MrA9z9{q3Wln6&glY%MCl3box!`nzcJ z5kzuU?QK0eQL$7GL1U@+enIs>8vz4ypGd-YE3q=J`Rmr*YOl!@UG~+*6tXk!lJ80Y zKqEd+-scOjp3K8k z6s~3)65geR(Bh#=)%`$-ydr|-{N#Sd*@;t?%}4+F8VuZ6nvd0OjWk9UQ#w6B(8}>e zYQ^GJ`fB}Qr=7^h7WFlXDT+{naW+5U|Clvl6c{EQ$Oe%-Q$}V$_IU7t*gWwjt!vdR zE&tbsAx}}9M@1`zsdQM-!3;j-K!aPzBp%oob6&~Q(Bj`r7e3_O?MjaDz)F_Hj}d|d zV-_a(2tJfctnf~nO+et}Y}e7JTRjjcliFn7^ln8{2zDPGkcWn1jHm7*pzA;dUzN#5 z8wd$kUd-R6&Cp_X@?9{ITu!*#K;f*@t96kWzqi()jk={GUor@XK<8~-j0Xy9JV+$z z^FrJ(R^~VvP@Wy{n6-tjx(#EB06^pqdOo;~-o(Z zm`WOd{E(d z&WZ1YA9;x$Dt7X$+Rj4bw|R0&Mv*K)0w(Sg%mv~!0X4JqvU;7Np3;7vcp_>vOrEr0a+`gWOhJ}b%Zs?(X@%uXqx?m&Z_QszqudT zIUPV4ZX}A>B;o6mGMazf)n&HJPOm?OxeJj8cM^?^Q;jD;lJB4OFGlRlemJ@A8T~Ee zvv(%Q=FXlQmfKz0Ofh)^KtI9PJ=Ca$j32|;#G~^*)vXM0ApkfzN?8KSCjKaMNI)os zTz>q8GT9|(FbOlv9HP)zZ&lpM@KpTDF9jt}zkgnw2_S#)=H-IRH%Hv5RLM<6z+RK_ z=JFAF&kiND&favjN1ZbD7HKueZv;V*SY<$Xj0K4R54Z5O)gKj>M=QzfK{O$xJ^60q zD+0CBb^qf)j#Lb@43vXv;-!@jHC;$5a0230AbynnqxbI`36K+@VAfC%mEjU%;|RY! z^xsQ`Uo+@eRy{>S@s(qm3Kz6O>z~}gHhnJcb;$Sya|?+n4?sC-esIooAL}#T+y-9r`o@o0yZW?B#<<-lu9xM(C>EG-K4;jFg~JzBe&N2}iN$Fx741S+b9Si`}Y?AKj|-Nk-fm zuKPfIoW^I$;dS&#`l)6|F_ts3)P*rOI_J|C#7*6cpJ~s4ev&i6*E>m!Q3n5rl^zGV zWh}7Wu5<@C>>ym2cF>fUi~N*-eaSZwpVp~46|tLQSy-o{BV(#6!#}ub?H02GGitX$ zph=1?_G)FB+HnAsNE&-oOW9Sn`EfP6Msq+NvfC6&ZYXd;)6Z3BtQDc9u{DP*Lq5@qOs-l{~oz3iWJoPe6h(MLV;h^c<9;RPbGII`xMA6$UK&Dw+KnVb| z=2KlX`3@{IS9R!X^N#1^(r>m5+0FJj>ok_ROhC~UtjVS}ky1fG=p4G)+H^V@=cX>BA{-i1G)DD;N@^f$J)(X}wBM_wtNv#9`D>CX5-8HKmg9v3c; zL!8YT(dZ<9+?cN$0Lh+6d1nl(1vK#}IDN zuqq!&uaS|<`weQ9JAMQ*eg2G-cbv6!x}3UKT>)oKgJK$>#q@(6%|yh<;B3ZG5RqR0)I9k=szdKd%OVVbW!(}Kp8 zHlV!QlN`Q4g83a+c?Pn*iO z)bQU7yRW>5a~qGFe9{(Va_H{70ze=QzzuR2yRYcii}_&~n~%~!>N^2z-8g;LO@n-K zXgCP-HQU@%S&B}m#raZ4Kd-M}1ZDvs|0!!WjXUsJ%t&Z2X-UkgKy%b^mN$icud8a< zvaqEa22w{C{@)M+mSj(S{i@-BTL$sd03a;_y&NU6{!+2(&~tRw=z~Dj$QwDGObr!- zp*^K-=F;3nrfz#j!b-6jE+lQqVcmBKD&{=DAWfc&-TAknA%h9kn2MpW*+3;BAU~kp z-&xoFk8ui^>E^$uQ-y9r{V>kI`#Z(g0zzkSG$J3?G)jNWdlBts!hhP_H3 zwL5{d6d77ODKC?{{|YQ1aq~Z5A=wC6%G(oD*Zb(#K(bk-Rn$w0AjL?YFE}|Z+NQpq zHMxU3XW_N|_RBs@Y!iLWF9T=uW410e6H| zzd)<2fn8DGDfd9+;s>9%nBWyCHs-5W(Nk*ZlAcn)Znzro1&u)}5KdFrAh}w9AQR27 z1qG8h@bZo=jNz|c3P3$wp|6AYD0EoA_ornZrP$kYC6oa(KWl;sX_no7uNfSw%r=)V z7%*3npY?l5;UK-4K13+Xz~Xh}*b8q`17kqJo8K`^Z1zKeLR4q;D(|6u9LY6{;cVj@ z9U(|r&W5TUT?T5B!vN{F-PSsM6RtBLhRO8Z;Idbz1v+~J$52EGKw&O}ctg&ve__;? zCHkl5Nl%hf;taE`&ZdS@D+D<<%^=J-`r%)6S}#E2$gz_0vyC9RYs$*{!vK`=ip2w- zdp1@;b0Kf9&;l(DZsKv6vL_{Y`i}(NpF~D~yJR=2MPwWIBGn{&k8D2Nzp>Sk(LT;2 z()A#2S$s@5VWWV+XjHUD{3?e)1Sh8sC3PtCt8iosx*A>KEc1w6)X3t5`@2>Cvr?3$ zFcXu1g+%m1aL^HTpb__H4wL$8r|$wYZXowDs`BtaBi14D1eG*Kd7wa+;pB;LvdsnY zGp3;cyjBUPtURXJ7a{2)+TCfb2dI)jk)eJ~{KFP%8r>%U4tx>?Zi;13D5l;d^tyAL z>swnGAeAIOv8mKZ7fR&(&q`D4{y;$>6=%LqZlG=ADPPd$=%?6XyH_z7l=UUpt?Ij^ zqvT##$j3X~KQ#=OM|c+Mf%6dy1O@g$WS%!ZXdd-0JP@oVRD^X2GO3Y|DEop>e6*;k2~7a$cD81BUN z1M{{!Q=QI#Yc874t>|eI@4dP9C;6bMagOXp%Pl}cOlu-wZ_Eiw=r6_7%jAR?Od=7p?00~X%EL;IIH6L2e%WvE zV&X{-jto@AsJNbmvRY=@J$x&Zz5e({w+%RFCq|^Xh|rG}rNt-8Pb`4tKYVJyQX9p7 zzBnL}fXn$b;JfQs&$c~v+GMXm(466PuNao}B_fdz&eL9?06;F4{W{00ZC(m%Q#%NG zyhdOdv!&*-ZcEYXY~RVu!PfBbAnm6K#{icU!*bBprak@SX+Ra#Q^?vwJyXrc@lc1S z14+uOSF?Gf2Z<=oo0%{!F{Xh4*1*L(bN5fQCawL!L)Q(r_o(>oGNStLCOrA85p_4V zxzTcq(Etn|D3EMy=B*)yEBZ}noEnb4IB2<&35$Q28!Gh}nrhzP^*U^D$TpMp$ksSo znu<-z0en{$tW8^&WyQ)WwfTmA0(nuGz`0U>2hfW3ExfrL>phD>Dk~%cAdI0vEBO2) zL@L4td+8;(C_w+^Sw@NwG2gS!(&K^WOIRVJZJNJdE?J3Mf83z@R-l4@BZ!%(N<8sW z0-^iwM?v8;`y{{#pv{AYOl=)}l4jJy>i%sV{21{#Ma-4C^z@D-KqBWB1l_Ur(d9B)y%~sM@1R5s4k5V~ex{(~^rFdm<)?4Gm z-*PV4g98EvU+dqLM-?fGAG>`JwvBzFzlf70F-+wifn0yT1F8yxSg-S_ZnvX9nn@#O z4YLG(c{}T{#*vRhmDB(@7bE?yC^Ext{Ejw?X!8$aQNz5HEY)Bjs4%k=^pkDsR->-{ zYCgVwAfrjF3ZI{JO10g(R4F5-m$sprT z7011SnK1sHX5hhQ<{SVZ9d=r|;+T^6zw9Y>txLk(AmE;=T0dS^(s|YApfhv!>LBk< zt2Y=Qm_j~N=||@U56~db!Jfc*0_=QjygzWjcK|^3zqvqGAGF(Z>$*w5E=ZHR49a1OakuRDtfPW4;b-cA0w{OuxF3Ks zPtXMxGjvA9&sx-@qT!b&o?8mhh@Ji`OA4xIZ>&|bY~!!|e-M(ZiN!K=s5iY^$xRxa zo?8Oxg>N9bM2)zQ6;F3iDE;jD=5;MV7Le^hfMh6{;NH3HB5*fOiwa0W7xkus#UwFq z$|0L%fC3>GjwZY)|H6C*_hPyk3Sw||g>8JM{;PScV-%Yg5^gm8o>h?G=?biX9q^R} z*sm?nqHsGkELS?o(#r-pC-SdAeP11GnKV+dwK_v}b`21s4Mw1=p2L(s#ISlS=QZas zK;=TLipcY1y5zUoi+Trl-!%^a9pvcGqS@~Y6#5QA!Ypf{IWN-D70*sUmMPD`Uv>zxOKkLRTQcfn~V4 zeX+`3B!;6aIddL>0&)nizRzDDG=h(qw;4fBCL$Y zZymqX4l6?k@hLp-@o6sU4UCYr{rOX?0i{4gwKD>?1lAMgEwBOvN=Jg#a;%TNJkadv b8$-NO;f|OfFYNwB*ONKLecifft2FiT1!u{8 literal 0 HcmV?d00001 diff --git a/hmac/tests/data/wycheproof-sha384.blb b/hmac/tests/data/wycheproof-sha384.blb new file mode 100644 index 0000000000000000000000000000000000000000..69a787437553300cf439bce35bc32175172fd0d1 GIT binary patch literal 7857 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 P4}u4Sjq{2(aC&1f8tN<= literal 0 HcmV?d00001 diff --git a/hmac/tests/data/wycheproof-sha512.blb b/hmac/tests/data/wycheproof-sha512.blb new file mode 100644 index 0000000000000000000000000000000000000000..e061fd554b2d1498f59912cfbe7b86b16af051d1 GIT binary patch literal 9648 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%0AMDm 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 @@ -16,3 +16,20 @@ new_test!(hmac_sha512, "sha512", Hmac); // https://tc26.ru/standard/rs/Р 50.1.113-2016.pdf new_test!(hmac_streebog256, "streebog256", Hmac); new_test!(hmac_streebog512, "streebog512", Hmac); +// Test vectors from Wycheproof; these may include truncated tags. +new_trunc_test!(hmac_sha1_wycheproof, "wycheproof-sha1", Hmac); +new_trunc_test!( + hmac_sha256_wycheproof, + "wycheproof-sha256", + Hmac +); +new_trunc_test!( + hmac_sha384_wycheproof, + "wycheproof-sha384", + Hmac +); +new_trunc_test!( + hmac_sha512_wycheproof, + "wycheproof-sha512", + Hmac +); From 67c7241c5196089490cb1c8757227b456f40b82a Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Sun, 28 Feb 2021 09:10:48 +0000 Subject: [PATCH 2/4] temp: use local copy of new_trunc_test macro --- hmac/tests/lib.rs | 63 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 62 insertions(+), 1 deletion(-) diff --git a/hmac/tests/lib.rs b/hmac/tests/lib.rs index de23881..f280c89 100644 --- a/hmac/tests/lib.rs +++ b/hmac/tests/lib.rs @@ -4,7 +4,7 @@ #![no_std] -use crypto_mac::{new_test, new_trunc_test}; +use crypto_mac::new_test; use hmac::Hmac; new_test!(hmac_md5, "md5", Hmac); @@ -16,6 +16,67 @@ new_test!(hmac_sha512, "sha512", Hmac); // https://tc26.ru/standard/rs/Р 50.1.113-2016.pdf new_test!(hmac_streebog256, "streebog256", Hmac); new_test!(hmac_streebog512, "streebog512", Hmac); + +// TODO: use macro from crypto-mac crate +// use crypto_mac::new_trunc_test; + +macro_rules! new_trunc_test { + ($name:ident, $test_name:expr, $mac:ty) => { + #[test] + fn $name() { + use crypto_mac::dev::blobby::Blob3Iterator; + use crypto_mac::generic_array::typenum::Unsigned; + use crypto_mac::{Mac, NewMac}; + + fn run_test(key: &[u8], input: &[u8], tag: &[u8]) -> Option<&'static str> { + let mut mac = <$mac as NewMac>::new_from_slice(key).unwrap(); + mac.update(input); + let result = mac.finalize_reset(); + let mut len = <$mac as Mac>::OutputSize::to_usize(); + if tag.len() < len { + len = tag.len(); + } + if &result.into_bytes()[..len] != tag { + return Some("whole message"); + } + // test if reset worked correctly + mac.update(input); + let result = mac.finalize(); + if &result.into_bytes()[..len] != tag { + return Some("after reset"); + } + + let mut mac = <$mac as NewMac>::new_from_slice(key).unwrap(); + // test reading byte by byte + for i in 0..input.len() { + mac.update(&input[i..i + 1]); + } + let result = mac.finalize(); + if &result.into_bytes()[..len] != tag { + return Some("message byte-by-byte"); + } + None + } + + let data = include_bytes!(concat!("data/", $test_name, ".blb")); + + for (i, row) in Blob3Iterator::new(data).unwrap().enumerate() { + let [key, input, tag] = row.unwrap(); + if let Some(desc) = run_test(key, input, tag) { + panic!( + "\n\ + Failed test №{}: {}\n\ + key:\t{:?}\n\ + input:\t{:?}\n\ + tag:\t{:?}\n", + i, desc, key, input, tag, + ); + } + } + } + }; +} + // Test vectors from Wycheproof; these may include truncated tags. new_trunc_test!(hmac_sha1_wycheproof, "wycheproof-sha1", Hmac); new_trunc_test!( From b300e1c2257c5e75ea654c8f8f147900f3bb5357 Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Sat, 27 Feb 2021 09:22:12 +0000 Subject: [PATCH 3/4] Add Wycheproof AES-CMAC test vectors Created from: https://github.com/google/wycheproof/blob/2196000605e45d91097147c9c71f26b72af58003/testvectors/aes_cmac_test.json --- cmac/tests/data/wycheproof-aes128.blb | Bin 0 -> 910 bytes cmac/tests/data/wycheproof-aes192.blb | Bin 0 -> 1070 bytes cmac/tests/data/wycheproof-aes256.blb | Bin 0 -> 1230 bytes cmac/tests/wycheproof.rs | 10 ++++++++++ 4 files changed, 10 insertions(+) create mode 100644 cmac/tests/data/wycheproof-aes128.blb create mode 100644 cmac/tests/data/wycheproof-aes192.blb create mode 100644 cmac/tests/data/wycheproof-aes256.blb create mode 100644 cmac/tests/wycheproof.rs diff --git a/cmac/tests/data/wycheproof-aes128.blb b/cmac/tests/data/wycheproof-aes128.blb new file mode 100644 index 0000000000000000000000000000000000000000..dfde593767f3e79ac14ac1c1f601377ba27eb2df GIT binary patch literal 910 zcmV;919AKSAmdLJ$Gw4>F#erp;K63*8~`BHdiTpJ*l+rlthxAj5C*UvhVT;vMe5dtBfel@i;g+lpen{|PgQ`Fv{DF2KFMCYkJ5$qc zGG}u#AV~1gK0(Y?#I=ueds@xvG7$8kGpcP_g`glG9MCd+0_M;FhLKq}-C@}v9F>Sk z^BI=1i8;rXx>>ze$F41f$zC@l3fOuTPj)@?zeNi-W3sZ&_jZx|nZhZL|e8&9ACBhFp zgSA$CAT7nnjPtk(w!j&mK)#SlydX~1XH(v9b)YiqtI9m$d2t#Hj1N{B+4$O1IVci^ zAnLR>ZI|hq2vG2MGMdm>z#zW5P{}s7mcd>n1a1GaI%FJz9;j0CJQ)*o`vAR#5@AmE;=T0dS^(s|YApfhv!>LBkQA|_xvw{6g%7zdHW?M*uchzB636ikaG z@~TJK!C=qys}~j^RGZR*?jf|-!?DmVKH?7dFxX4?JYMX*I7Ckxb5(9Hqa{B~RMwGY zMIe6ESg+tON>M*qaa(3f8@?c$(~vIEnQVreS0ZxfZ#aoSr@9%`p5f{O@R+KOFvmdH klcYs#%qc)XNKV+G3RU?&AVmlw7{btA?=mER>k%{1qwD^xz5oCK literal 0 HcmV?d00001 diff --git a/cmac/tests/data/wycheproof-aes192.blb b/cmac/tests/data/wycheproof-aes192.blb new file mode 100644 index 0000000000000000000000000000000000000000..cb216246ec49d71ea3de12aa4e9c59d090ab5704 GIT binary patch literal 1070 zcmV+}1kw8dFg4@WP0?CbES2 z`!X9uN@W+b&Dt7yomKt+1P^{72JeJ_U!A`Lr1FE>j6eb)Fl$xh)ct5js0wTQ4a^Fu zKcCl^{9I5eE(SC8Fd*F%P*bFQsPclsndm!=SHv(LvKpS5T8>4@=N`+}{$X1_0~i2& zWVS>II;T8HARd$d_(qdTZt4Yf?#mAjA24waEnP~V3&-ULmStW9Y8cE{Y1ei`RoV)E zOlb;;AOUSn@N8(Nr--TQ1uh#^4KUcio}>VGn`7s6y{yp7dtKJ|Hp(N_D$fk*QUZXN zJ0O5CuAi9o(hOjU_OZQ(!k#dWXX&7ZJ5|2a2!?MQyahFSzCWFL^ak<{NPx5wD0&MZ zysuDrUj{0VxZOM~OzP6%FeupCXMki7FU0!?+;x zI%3N6m-(;vALJ=Px#{I^FS$Q>t(JUGSx<&Fxgj3IwBjGW{{H~s>LOZojg)DD=fLNR2CPGs6b1lPUPfL zEFff{;I?&h39DGwPjbT$I`HLipe90pYGZuA@VK8wLo_H1$^PQT*pS|K@i$uau!ASZ_}k8u1oUkYT9c=XpRN`w^pH$#-dy*FA1Q(034`F!aBrs!tD1V$XAI(w3Y< z)qwrEFDFyJ+aL}jpCgwAvVzVc0RAA}5oI8&Ag0e?hc;!g)|s0H$N9!E&(rpZbJ!Xu z(!b7!Y)V;!<#kKkxFvXn>X@Sh4z8zH={CI)p(lGO%Y!a#HCm^A@ zVsfs3n(tO}ad}@M(bF)U5v#%cvPh&hS&nI2;Ve8Z*$NoC3Dzt?s!@W<;;8!uj0-=q ozCKs3Qauyj{Th@-hj4r=XGDKLAcdFNpiLYn9bwcj0DD7GbwqymBLDyZ literal 0 HcmV?d00001 diff --git a/cmac/tests/data/wycheproof-aes256.blb b/cmac/tests/data/wycheproof-aes256.blb new file mode 100644 index 0000000000000000000000000000000000000000..1502473e88f01ebfca86faae8f5c754d7696c9da GIT binary patch literal 1230 zcmV;<1Tp&nKzsS+HnwUZTp}Ys;@YZoI*E&#%b$1x-f*-IJ#ItqmjEDhYa+c?Pn*iO)bQU7yRW>5a~qGFe9{(Va_H{70ze?0M@TF!l2W?P zL#JAUHMqDy>N^2z-8g;LO@n-KXgCP-HQU@%S&B}m#raZ4Kd-M}1ZDvs$HY!C#AY)| zlGgd&Ja-l}Ky%b^mN$icud8aFk8ui^>E^$uQ-y9r{V>kI`#Z( zg0zzkSG$J3?G)jNWdlBts!hhP_H3wL5{d6d77ODKC?{{|YQ1ZlQAJ#M1h}b;@8Z<#l>u zK(bk-Rn$w0AjL?YFE}|Z+NQpqHMxU3XW_N|_RBs@Y!9%nBWyCHs-5W(Nk*ZlAcn) zZnzro1&u)}5KdFrAh}w9ARnSkW+kBb;rus(ddN*Y#6Ue=p|6AYD0EoA_ornZrP$kY zC6oa(KWl;sX_no7uNfSw%r=)V7%*3npY?l5;UI>GWvKdUsF>aC4?!d8mcBs2o8K`^ zZ1zKeLR4q;D(|6u9LY6{;cVj@9U(|r&W5TUT?T5B!vN{F-PSsM6RtBLxo8--tgnZh zdVhj(H(F^FKw&O}ctg&ve__;?CHkl5Nl%hf;taE`&ZdS@D+D<<%^=J-`r%)6S}#E2 z$gz_0vyC82h~bj}3|dPg>0Ey+CQ}PQb0Kf9&;l(DZsKv6vL_{Y`i}(NpF~D~yJR=2 zMPwWIBGn{&k8D2Nzp>Sk(LT;2()A#QksN)c9l(M;Zj;n04I0!y1Sh8sC3PtCt8ios zx*A>KEc1w6)X3t5`@2>Cvr?3$FcXu1g+%m1aL^HTpb__H4wL$8r|$wYZXnFE#T)zL zS&xwk{BZ3D@asU9;pB;LvdsnYGp3;cyjBUPtURXJ7a{2)+TCfb2dI)jk)eJ~{KFP% s8r>%U4tx>?Zi;13D5l;d^tyAL>swnGAd+7feTC{Ne(_5nKjaDdtGU}vy#N3J literal 0 HcmV?d00001 diff --git a/cmac/tests/wycheproof.rs b/cmac/tests/wycheproof.rs new file mode 100644 index 0000000..6107bbb --- /dev/null +++ b/cmac/tests/wycheproof.rs @@ -0,0 +1,10 @@ +//! Tests from Project Wycheproof: +//! https://github.com/google/wycheproof +#![no_std] +use aes::{Aes128, Aes192, Aes256}; +use cmac::Cmac; +use crypto_mac::new_trunc_test; + +new_trunc_test!(wycheproof_cmac_aes128, "wycheproof-aes128", Cmac); +new_trunc_test!(wycheproof_cmac_aes192, "wycheproof-aes192", Cmac); +new_trunc_test!(wycheproof_cmac_aes256, "wycheproof-aes256", Cmac); From 854cf727f8a7d052219f3334b85fd26eed24f8cc Mon Sep 17 00:00:00 2001 From: David Drysdale Date: Sun, 28 Feb 2021 09:07:38 +0000 Subject: [PATCH 4/4] temp: use local copy of new_trunc_test macro --- cmac/tests/wycheproof.rs | 60 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 59 insertions(+), 1 deletion(-) diff --git a/cmac/tests/wycheproof.rs b/cmac/tests/wycheproof.rs index 6107bbb..778d746 100644 --- a/cmac/tests/wycheproof.rs +++ b/cmac/tests/wycheproof.rs @@ -3,7 +3,65 @@ #![no_std] use aes::{Aes128, Aes192, Aes256}; use cmac::Cmac; -use crypto_mac::new_trunc_test; +// TODO: use macro from crypto-mac crate +// use crypto_mac::new_trunc_test; + +macro_rules! new_trunc_test { + ($name:ident, $test_name:expr, $mac:ty) => { + #[test] + fn $name() { + use crypto_mac::dev::blobby::Blob3Iterator; + use crypto_mac::generic_array::typenum::Unsigned; + use crypto_mac::{Mac, NewMac}; + + fn run_test(key: &[u8], input: &[u8], tag: &[u8]) -> Option<&'static str> { + let mut mac = <$mac as NewMac>::new_from_slice(key).unwrap(); + mac.update(input); + let result = mac.finalize_reset(); + let mut len = <$mac as Mac>::OutputSize::to_usize(); + if tag.len() < len { + len = tag.len(); + } + if &result.into_bytes()[..len] != tag { + return Some("whole message"); + } + // test if reset worked correctly + mac.update(input); + let result = mac.finalize(); + if &result.into_bytes()[..len] != tag { + return Some("after reset"); + } + + let mut mac = <$mac as NewMac>::new_from_slice(key).unwrap(); + // test reading byte by byte + for i in 0..input.len() { + mac.update(&input[i..i + 1]); + } + let result = mac.finalize(); + if &result.into_bytes()[..len] != tag { + return Some("message byte-by-byte"); + } + None + } + + let data = include_bytes!(concat!("data/", $test_name, ".blb")); + + for (i, row) in Blob3Iterator::new(data).unwrap().enumerate() { + let [key, input, tag] = row.unwrap(); + if let Some(desc) = run_test(key, input, tag) { + panic!( + "\n\ + Failed test №{}: {}\n\ + key:\t{:?}\n\ + input:\t{:?}\n\ + tag:\t{:?}\n", + i, desc, key, input, tag, + ); + } + } + } + }; +} new_trunc_test!(wycheproof_cmac_aes128, "wycheproof-aes128", Cmac); new_trunc_test!(wycheproof_cmac_aes192, "wycheproof-aes192", Cmac);