From 7e2d163d1d80c09b4c3a3759bb8a1216df0fbde1 Mon Sep 17 00:00:00 2001 From: Steffen Jaeckel Date: Tue, 19 Dec 2017 01:01:18 +0100 Subject: [PATCH] add testvectors from [1] [1] https://misc.daniel-marschall.de/asn.1/oid_facts.html --- tests/asn1/0x00.crt | Bin 0 -> 3298 bytes tests/asn1/0x80.crt | Bin 0 -> 3298 bytes tests/asn1/0xff.crt | Bin 0 -> 3298 bytes tests/asn1/illegal_padding1.crt | Bin 0 -> 17651 bytes tests/asn1/illegal_padding2.crt | Bin 0 -> 17651 bytes tests/asn1/illegal_padding3.crt | Bin 0 -> 17651 bytes tests/asn1/oid_overflow_test.der | Bin 0 -> 3127 bytes tests/asn1/oid_size_test.der | Bin 0 -> 20533 bytes tests/asn1/private.der | Bin 0 -> 18477 bytes tests/asn1/root-ca.der | Bin 0 -> 8476 bytes tests/asn1/type0x08.crt | Bin 0 -> 3298 bytes tests/der_test.c | 68 ++++++++++++++++++++++++++ tests/rsa/rsa_size_1024_bits.der | Bin 0 -> 1293 bytes tests/rsa/rsa_size_16384_bits.der | Bin 0 -> 5141 bytes tests/rsa/rsa_size_1999_bits.der | Bin 0 -> 1539 bytes tests/rsa/rsa_size_2048_bits.der | Bin 0 -> 1554 bytes tests/rsa/rsa_size_4096_bits.der | Bin 0 -> 2066 bytes tests/rsa/rsa_size_512_bits.der | Bin 0 -> 1157 bytes tests/rsa/rsa_size_8192_bits.der | Bin 0 -> 3090 bytes tests/rsa_test.c | 76 ++++++++++++++++++++++++++++++ 20 files changed, 144 insertions(+) create mode 100644 tests/asn1/0x00.crt create mode 100644 tests/asn1/0x80.crt create mode 100644 tests/asn1/0xff.crt create mode 100644 tests/asn1/illegal_padding1.crt create mode 100644 tests/asn1/illegal_padding2.crt create mode 100644 tests/asn1/illegal_padding3.crt create mode 100644 tests/asn1/oid_overflow_test.der create mode 100644 tests/asn1/oid_size_test.der create mode 100644 tests/asn1/private.der create mode 100644 tests/asn1/root-ca.der create mode 100644 tests/asn1/type0x08.crt create mode 100644 tests/rsa/rsa_size_1024_bits.der create mode 100644 tests/rsa/rsa_size_16384_bits.der create mode 100644 tests/rsa/rsa_size_1999_bits.der create mode 100644 tests/rsa/rsa_size_2048_bits.der create mode 100644 tests/rsa/rsa_size_4096_bits.der create mode 100644 tests/rsa/rsa_size_512_bits.der create mode 100644 tests/rsa/rsa_size_8192_bits.der diff --git a/tests/asn1/0x00.crt b/tests/asn1/0x00.crt new file mode 100644 index 0000000000000000000000000000000000000000..d7eec225c7e10f2f5c0b1cdc47bab557e150daa7 GIT binary patch literal 3298 zcmXqL;<;zg#M8mV$*^d8dioRTmpcu3**LY@JlekVGBUEVG8iN=V`C7O@+-~B(FH2f!T^Ty2C{7I9p?T2 z|NpNS7BV(caLO!E@b&Zy4OTEz0BSK5HxLCWn9$JBz#zf}RREHZGmwEvFp3C5B?5fl z8bQwE=`e2unhXZ@!u)0?VBG~D;zGC*91NgNBU3ZD&RBzJHXkJWap)pi7-+nyAtVSv4r^R# z(724PaVj=H5N#%n6fy|&7#bKs;sfN?CPrI>CPquPCPpHIl1A5H-mu(lOw~X{6oGf|NDPS zKRI>cffx7MN5L;te}tyja+*3^-YF^b;>g{)Q+e|}O5aUwm@t!JVa~ZteCM{^)6Y9` zz9`xAOYcJ_W<~}^WV3;t4`xROu8bcV-zJ<`vg*`zG3C++x<0Qql{IxPxOBK|{)`{z oJNz=DZ)l$JlishPS(El}KRaKN=V`~tWGN`aH&;=^e!T^Ty2C{7I9p?T2 z|NpNS7BV(caLO!E@b&Zy4OTEz0BSK5HxLCWn9$JBz#zf}RREHZGmwEvFp3C5B?5fl z8bQwE=`e2unhXZ@!u)0?VBG~D;zGC*91NgNBU3ZD&RBzJHXkJWap)pi7-+nyAtVSv4r^R# z(724PaVj=H5N#%n6fy|&7#bKs;sfN?CPrI>CPquPCPpHIl1A5H-mu(lOw~X{6oGf|NDPS zKRI>cffx7MN5L;te}tyja+*3^-YF^b;>g{)Q+e|}O5aUwm@t!JVa~ZteCM{^)6Y9` zz9`xAOYcJ_W<~}^WV3;t4`xROu8bcV-zJ<`vg*`zG3C++x<0Qql{IxPxOBK|{)`{z oJNz=DZ)l$JlishPS(El}KRaKN=WBV^GWl)iprVCW0g#irZ4P@EaJIwq4 z|NmbvEM#n?;FMXS;OprZ8mwTb0MueAZXgO$FrlHLfkA`|ssJP*XCMQUU=$IAN(A`8 zHG-VS(_!8SG#L!)h55})z{YFn8ft>gmNAe5DQNz-3)Bo$*hD+bTVS$q znn9S`(8vO86iA(gff<`R#D#DrI2b^kMy6(Pov{YdY(7Z#1268ikAh#Q{s>L4WYwwbV#=itbbVfJDr@RoaOrT_{24#a oclc#Q-_ShcC%s=ovnK7|es;cyO#xO@l>e-HGI64IQAXuq07T!WAOHXW literal 0 HcmV?d00001 diff --git a/tests/asn1/illegal_padding1.crt b/tests/asn1/illegal_padding1.crt new file mode 100644 index 0000000000000000000000000000000000000000..5e1315ae9b17147f06b78c81cbdbd9890fbc624a GIT binary patch literal 17651 zcmeHPdu$X%7~fa7y}P}GvXqw;7O_;sUT3cN=n>Jj6s1y-&=$)>^k}c#X=x32Qj`GQ zEtC?dJc5(}MiAs75HZ9DQPfBx8c_r-i1J4hAc}(0#3Je+ID6OIyKCCGO}M))&i>PH zX1|&5yWdP^=a>0SfmHZAkP6Fp(iBNisl?Z#8g7<K4pg6=XNcs z@W5=4C0Eh>m`G3IiK4=+67NfHq15g33lrUo{N5^Wh0E^_GzbOPk%NRvSB=+Qowd-l z$XDTURafUN_PYFXL?4Q1u5?2Ij9{rI2R{V$DJXqbM07b4q_fFnz5J};2b7nW3jhka zKrqXX;CK`c25D?^lVbyNAb5R_MJVw4-YS0y-T*DRN+P+y&SnNP zR9t#6P)m!=uC#m#%wdZo;`h)>bv5eV2Ez!62Y|Sj6<_J@H>mD2Mver}L0}1vhYYqv zP5=_=WF=B1lrhSy&vc6bv;b>(7E087AW`#JiMo?Bs?WfI6O9Q1XqH)lGrVGDf(&*@ zlY{K`;dRCCngxE3V0A(}u*!>Kw|-qKm39s%tOn1rb5*wM+K;L-ukTC}=GvgR0f^1) zide=|k(82>#io&zxQLYOP}~Q^J%R6tiXRhimvE*|r=~LvW10g1l&FDdx$cj?cefKf z`{F%dI9?P29B&9MNN7KV=0zHs7pdqoPT+YF1=Rnp5IHeyV8mb}guss04yP4bb7u#N z4gfogm#$o#rrZSiZ_8RUmc$f$F8a&(} z;Rs+JnD8OcXadnZP<$=&1dvQ3Xt9|9;u=a6i8t?ERXs~AurJ)%a{0)%qK{8a%C9^0 z$I8*on@-Q)J9NStx^&;g$Fi<&-ulAYwzF?o51rkY-vYlqd85Pp>bhI~kGE~iXsrDH z=E2pAEm`e#?Z=KS_~-4{ceEZcofG}v_Xp$gzOPSk&l-Ys~_UN*76Elbzn6rM#$aS;N*nYTn@w?QVbK}o1 zoB9!uOk-q+(TrqDM}?vF-Ma0PjMw%^#-HyBe%s_&j}9ZzIcMi-<%x~kc`3X}r%x`-QcNjd(Z+i_MZjf*UFuzUs5NI@kD1Iw- zqj;5ttLZ#R-e!^jjs5_WT+vUiV310d1rk>z*JQ{w5{HC@oRdu%$0B`fGEFKLrC79L zF^ZMK>QM`ZlpGY97GV!kY(45LMrWFAhsFHM&2HTUuxeVAW;Z(AH=mP%Bf3RK^3U#Q(hD)>z>2`=9rX&(5x^t21}G z{g%DF>;1TFm#@YQvunMTPgl7r{64eCzpy$Oa6lXbN`}AX-zYGWp&dwu>wuA|3c5oW zA}c{NaOEy+l8AOi-KPtd!?lulH7!{k%fD5|l zN=?TsMlD>}PXz)5y8heaWwzj=rRpOE=EauF08vadn;Mi86~x?kFO;@^(aN7l-g5d3_n>>}j29oj)Rr>W_vPBsE3H?4 NJUpy@(~~us{{ls4N#Xzi literal 0 HcmV?d00001 diff --git a/tests/asn1/illegal_padding2.crt b/tests/asn1/illegal_padding2.crt new file mode 100644 index 0000000000000000000000000000000000000000..e5fbb6a5e59ad2c9ce8797740a12963c29dbc8ed GIT binary patch literal 17651 zcmeHPdu$X%7~fa7y}P}GvXqw;7O_;sUT3cN=n>JjmPn-_p)Hn&=+R!e)6yF5q$mMy z7bqoAc?2l|j3CHEAYzCQqNtHXG@=Mv5ao|1KokX~iAB^u>g-)_@2+X%)^K-=&i>Px z*>C3i?l+U!`DK1zfmHk}kcumJ(iBNi>BN_#R@|(7&m6c^@$OyCZAG5|BdfcwaZ=;& zMv_cPA%JAO3=KfX(iIHLQ^gZu2H@q2p66zGUF9Bc-7{tNHGY^5`pL}(K5e?&=XNcu z^1xh>BRA3fm}pDkv6AAPGVcp+q1^5B3lF;&`n@&YDwp3K>=1UYBL@l9t~#%~HfMor zp|8s0s;wW@+1a_A zACPAeioAYdO3BoUG6Bkwz`-CxHrNmd1PET=Wgx#80fvWPkbHXAi)p1w$5CJ;%QZPf zG;;7+&iAuhgTvpO1IGr(9u9`dCK4Ju_#g*eCbEMu;2t)k$+0s0R{2Zt2589-4kg>= z13Q}?icm4>rGR=`Y<8vR6JR!58s)#2UaFhX@HQBNP!3Ey0K~nl_)<^5LG_q%G9-8o z0!wH<>-B$5B=1^<6>2 zd>a%u0I``}9#4NNf>J`V*fbIn7Zs8niu-`LC-@yv@naHg5{cC5)O4f~O!EMM5;YKQ z*ZtA=t~1H2FVPc*{ly@_@rLk*gw8`~U1Xqjk&Zs&1YQ?0K>hD3(F?-{MhrGW2<&L@ za9W`?e^#*S0I;iyc_2FfU>+Dc1Y#Z-m&33o2gN*4lhg7a3kvhV1ROsiR0i|FKEoXW z5A(o2gNHjL9RbV(lRgC+4Iq{Wimyc90Fo&LEjANCTtkT>@%r7XYG;Z?_60jzE+5%e z^5Ln8g$;*(TRFOU)9HD8hfY{Sm+!myNY2>c2CocJ?*vp|kr6Tj19xZ*-VnUU#ei z@wSawjn&`YJh*z1C8xci{n)Yjf4%wYj@BclbE5yN!uO{iDShA_R$TV+{*x~T&i~QT z@#&5myU!oBJ+zJ8cC=wv!KpHeCJA!4l)W8D*)8Z|kFLlxF@uz{fTfN22`Ltfsy*crSQe@lDr~0$0it&isA|<`d}W?V7j-5( z08XodO^wFIVJW6Y&xZ*M3oQYxx=a|_8g&HfWh#-*ctDN#j|py#MIOKZS>O2F+=hk* zbGPib+-2SK<8ocTIy20z_f|hyD0Hi%|;~wo`!sfzp3_O=b&iTB<%$U~YW53=qX+vk6iIF>v9{T-Br`)=0ad zacJYDF}F$Va?qYPc^NR6-)L`Q5*<;rdJz5p5E{t_SI?f@f3j|=>4cryJkzjf@lX4W z2aGpevuciCJy+53py0j!L&1g_UzjJ9z4g)I>)Bh@k1xpDb*b)+UuLZEtXs0xc2Ixo z=M|>Z`sST2g^QP_T&Ub=-@dANVihsx?F;3tpSAKQQn#Ew!`<&*GX42SFSVu3@qNCw R{7UPU?+*`a-}HE0_TQ6AMTP(X literal 0 HcmV?d00001 diff --git a/tests/asn1/illegal_padding3.crt b/tests/asn1/illegal_padding3.crt new file mode 100644 index 0000000000000000000000000000000000000000..1a9b098e152b713e933ac7c2b851e39a5a38bfc3 GIT binary patch literal 17651 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 KH+)(H&#l4gaX=mb literal 0 HcmV?d00001 diff --git a/tests/asn1/type0x08.crt b/tests/asn1/type0x08.crt new file mode 100644 index 0000000000000000000000000000000000000000..35b516ca882c18888bb8145ca1671f2dfe157aeb GIT binary patch literal 3298 zcmXqL;<;zg#M8mV$*^d8dioRTmpcu3**LY@JlekVGBUEVG8iN=<6vYGmJF#ZNL4VfP|$FV2yqSabM(>F zf&fE#16elq4)gy1|Nqwu3mF?JIAxY7_G~D;zGC*91NgNBU3ZD&RBzJHXkJWap)pi z7-+nyAtVSv4r^R#(724PaVj=H5N#%n6fy|&7#bKs;sfN?CPrI>CPquPCPpHIl1A5H-mu( zlOw~X{6oGf|NDPSKRI>cffx7MN5L;te}tyja+*3^-YF^b;>g{)Q+e|}O5aUwm@t!J zVa~ZteCM{^)6Y9`z9`xAOYcJ_W<~}^WV3;t4`xROu8bcV-zJ<`vg*`zG3C++x<0Qq zl{IxPxOBK|{)`{zJNz=DZ)l$JlishPS(El}KRaK +#include +#include + static const unsigned char _der_tests_stinky_root_cert[] = "MIIFETCCA/mgAwIBAgIQbv53JNmv518t5lkCHE272jANBgkqhkiG9w0BAQUFADCB" "lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug" @@ -1306,6 +1310,68 @@ static void der_Xcode_test(void) mp_clear(mpinteger); } +static off_t fsize(const char *filename) +{ + struct stat st; + + if (stat(filename, &st) == 0) return st.st_size; + + return -1; +} + +static void der_asn1_test(void) +{ + DIR *d = opendir("tests/asn1"); + struct dirent *de; + char fname[PATH_MAX]; + void* buf = NULL; + FILE *f = NULL; + off_t fsz; + unsigned long sz; + ltc_asn1_list *list; + int err; + if (d == NULL) + return; + while((de = readdir(d)) != NULL) { + fname[0] = '\0'; + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) + continue; + strcat(fname, "tests/asn1/"); + strcat(fname, de->d_name); + fsz = fsize(fname); + if (fsz == -1) + break; +#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 + fprintf(stderr, "Try to decode %s\n", fname); +#endif + f = fopen(fname, "rb"); + sz = fsz; + buf = XMALLOC(fsz); + if (fread(buf, 1, sz, f) != sz) + break; + + if ((err = der_decode_sequence_flexi(buf, &sz, &list)) == CRYPT_OK) { +#ifdef LTC_DER_TESTS_PRINT_FLEXI + fprintf(stderr, "\n\n"); + _der_tests_print_flexi(list, 0); + fprintf(stderr, "\n\n"); +#endif + der_sequence_free(list); + } else { +#if defined(LTC_TEST_DBG) + fprintf(stderr, "Could not decode %s: %s\n\n", fname, error_to_string(err)); +#endif + } + XFREE(buf); + buf = NULL; + fclose(f); + f = NULL; + } + if (buf != NULL) XFREE(buf); + if (f != NULL) fclose(f); + closedir(d); +} + static void _der_regression_test(void) { @@ -1463,6 +1529,8 @@ int der_test(void) der_Xcode_test(); + der_asn1_test(); + der_custom_test(); _der_regression_test(); diff --git a/tests/rsa/rsa_size_1024_bits.der b/tests/rsa/rsa_size_1024_bits.der new file mode 100644 index 0000000000000000000000000000000000000000..63d057324dc955270369448ea92485c2e07218da GIT binary patch literal 1293 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 WoQnDTT~gB*T=Qu8@Vxn#pD_ScIv_p( literal 0 HcmV?d00001 diff --git a/tests/rsa/rsa_size_2048_bits.der b/tests/rsa/rsa_size_2048_bits.der new file mode 100644 index 0000000000000000000000000000000000000000..7aaf80501de74153ccb22d8e2d7d96f01bae9edb GIT binary patch literal 1554 zcmXqLV&gMtV)?d!nTe5!Ns!^3V)M6%-Fgj=Lw88`K5)8jz{|#|)#lOmotKf3m6gGu zaj7A<0Vf-CC<~h~lZ&gNsDUtu!zIiUmYEomk(rkroS#-=C}_YB66O}>2udwZO)N^z zFtj$X1PL(<8zHMy2nu%84bH4eRR~EfE>Un!Eh@=O%S=uzNmbA=GBB}FNXjfJ)-=>N z(1p8$lTl0|B{45EHAgo$v8XsXBQYn(p)5181Y~O z<0vTC49Xoc{%B%ULXHAPRtDxKMt%l^CPpr%CPqev`-g=6a}N7w?OAHG5K(>dc2Lb+oz~FuD46Gj$Jw^#CUK^+D8xdnLAG3>O4C8b(Q3!rSm#` zbl3G4$C?z|MtT|8iA`_TW^Fn6&1}(WuKE6t=N;a$?I@4#>^;>^pY==rPH~Oa$@g@v z^IccVlHsDff1B3R{WtcAs)wmhR6AM~uQQ3aPNM(y8nwoH{a3HFOO4ESyVh>LJ7Mxy zh2k=w%5PKWOuZ`_ZSQP1Cn11|Z{ZeE+ej6+_{NNzR@)DFDt%niW9+*|rS9(i83*^B zJ2CH>bq8ySl9gMUnD(0RdwR=MC;zPZAGOO}bl3TQ_L)VB_lzsLraUhD!2i!jfS@8BbQ2k?}tZs{u2RGT;LV@PhlR zOfD(b%P7gs>0s(Ghgd2^XG>8_H(=IcWSDZPwRG;XsAc!^j@-N*!CET*?yY2Uq5ZAK zu=%SpGZbe(zHf6czhe5k_fFGuC;Eh)I+7z&Uns4Y7+qWV?Uzc|j!)|fukzW=e0C=9 z)!UZe0`J4irIp>qYK7va3txNbIoa{@&*xvZg`Tl0sr?tSVa-4D46!HW-T_`y9u%8j z*p%YCA;#_ADh`)lCZ8(oon}eMM=TRd;t$<=Z5_1kYP@7yit`1%QT oXxvplzN)iyea`AFFYW8k^e^zO?~iMpYA?a97AAc0hRCMX0Kcd*9smFU literal 0 HcmV?d00001 diff --git a/tests/rsa/rsa_size_4096_bits.der b/tests/rsa/rsa_size_4096_bits.der new file mode 100644 index 0000000000000000000000000000000000000000..2e3cc16421df6253451025dfc9fd824dcb484331 GIT binary patch literal 2066 zcmXqL;@~rAV*R#&nTe5!Ns!^3V)M6%-Fgj=Lw88`K5)8jz{|#|)#lOmotKf3m6gGu zaj7A<0Vf-CC<~h~lZ&gNsDUtu!zIiUmYEomk(rkroS#-=C}_YB66O}>2udwZO)N^z zFtj$X1PL(<8zHMy2nu%84bH4eRR~EfE>Un!Eh@=O%S=uzNmbA=F|agKNXjfJ)-=>N z(1p8$lTl0|B{45EHAgo$v8XsXBQYn(p)5181Y~O zlPDX`ps&vi@uPNu>{;bs7XRJ}#c8Z(!ZORb+ut_$%x104X8c$9C?* zs@=lo3S!S&FIE?3h+J43K2Ls&sO!4}d0E$Oe!keAoH(`DBwx;GX7C)l$qgp^SU3Ln zd8_R9SL(srxh~rtU3>H~y3lX7{+ZVf+MB9kUw>wl%h}y(`}Fj@)YoP=J|(Sq_-&h1}!IikZEa`zhun+fFgZMv__ zW+1}Gq0I&?*w~pF;VdSDVvq_!mK=kuMuH_xn^Q(fNkOrdzJ7UmxgJ_Eq+f?#Q0XTY z=jj>h=VzwGrzIwr6zgS_&zlq`F7;ZSsa~tN+Y6@xMTG+MU$O3Fludn3Pen_-u-U zrum`VZQHlbQEoD7m~PQudr&pHQ8+EY?#%}61*WmK_Pu>CvZ5V7@vg~cUc8qdh6ccq^~MhAG?mDq<* z+@5Twec;K%%KI-|oo>gSwTfpde)gqPy7uP=m!LD8kIrscyH%Ro(%0hFi*K9-dObQh z>~9yH4(!WtZ20``Vz;tN!1*<=T+@3OafEH-F|)qy`BM00UD^5_?>TBNKY!8P*0XJg z`^Ouv)qi_7-)-sqvR(DklVc@sR!1Drk&3yr-uKjr*u|_e=~FY+!`2GDS5R2QxH|Z0 zM)TgP-Q7J_0q+lf*mIaO$bYVUukfFn%O0^#Z*4y=*tXCw=;^h4%jJ1~8a>$e?OLP! z(mip$$7MF_v~$l2ocy*|_il_gtJ=wVb93*0ZEs_GpY(V0^Lgw-@e++3d)7>0F7;7j He6|1ps%0(A literal 0 HcmV?d00001 diff --git a/tests/rsa/rsa_size_512_bits.der b/tests/rsa/rsa_size_512_bits.der new file mode 100644 index 0000000000000000000000000000000000000000..1fe69549f5940b1f8a22a5134d851f4ec171c3b2 GIT binary patch literal 1157 zcmXqLVrevJV$oi}%*4pVB*<`1vH4rXZoP)bp*y5|A2?k%;AP{~YV&CO&dbQi%F1BS zxWtg#fRl|ml!Z;0$;H)B)Ib=-;S%Nv%S;T($jr+Q&QB{b6g1!m33Cf`1f>?ICKe@U z7+M)vfP|QZ4UttU1O+?l24_~KDukpKmnb-=7L{bCWhN(5H-mu(lOw}12^P0C$LB5W3)=VfyUo^n{|>FMt!Zk!@y)#G z-pK;Cq`e3_S9jx%V{xHO%!~|-i<_8C44Rk> z3}k`vBFo1j#v&5H{Y9v__l@_I1?T?lT-oaM-tKUpLE}S^yfRDUO@qd34OrDIY+SXZ zarqDl)g~;d9F$sRg&7(Dv#=U411SSOkN`hOfCZQ{*bEdvd{q!%%s_;VLz@kl8`zl{ z;VdSDVvq_!mK=kuMuO?H%_*a#q@dVJU%$M(Tn{br>erzsZ~esLJUv7G{LGa2w8Z3+ zV!e!#+?)=k4s(d5LUgtiwMbxgWT=qez4Q42=WLaa%`Z=C|69z#^+>(s?R&dD3Q_iJ ppZ*u^oYb+$27*xBD%(fdAw3jp|BbsYcz literal 0 HcmV?d00001 diff --git a/tests/rsa/rsa_size_8192_bits.der b/tests/rsa/rsa_size_8192_bits.der new file mode 100644 index 0000000000000000000000000000000000000000..faba635d554905ce8279823999951bfdeebba6de GIT binary patch literal 3090 zcmdUwc{J4PAIHsNEZJqa)~QJL?^tH+D#lns)r`Q`lXx##}wx##@;`<-+DdYz=&K7h)xRRjTp zz+geP!6R3;oLf~B<{g_Q=(DGP1$bdxipgflUwAehm(=URgfK&ri{O1ac$I~@z(uBZzOd*H%=9Mw>k+OulQ0qwl4EcMfPmE7< z_)kLm8jh`XetsKhka+u-rL3093mxF|7E-(dOU5^=3zpiti;b&G<>!W8Otjga@@C#f zyS6!E^Ai;d<9-pl9cEkc>E=ehw(@jx|LxZzdyD~l?iWm}@lbBW>~PRb)BW-7L#<@R z?Xj`wm&9rKPSn@v@|Ke|5)GVc+-L(kHKj(8g zcDoSo-o8>REQ{XyK1L6nF1l~zbTg~_gl4N00byy^EdNv_{QU+jox2!oW|1a*G}b%s zzU&2U2-}f+I|Ww%o6uaE!(3i$JJ8Fy@dMnr7TTD+0%s|uDs!ZR#*m}@d-5#7c_hZBa* z-`i}^ty4s!c__bDhFNkpIk?tGY6;5~+5N<5!1MWKj+Q}-$C@w*1s8{B(l!3aGuH_E zRc;~V_`$JsyCv`iUbsm|5(Z6OPj^qL2$E9AIkJ{_^MGLv>oCP%$ACFk}+cIY+p?U-u|K$-pl`xwAShteb&An*qtgCn@^?M0?vX% z__j)gP#Jm-%VVpU-B)itKn-7Kf=lB}1PJ?+LAUCt6Bq+${!OX)54Q|sr97_QUqGaP zbxwj|p60*DTt@pp7ioI!j3A!dr=8&=`~9R2J+I**3k3ScuBsZ{OidImSz z5GP%=S}nh@xziWqSgs&*B5?7t^tUR~ht{qw1CoZCdL>-e;mP^UzP)KM1jGg^p@Ovl zDi{e!{g|*)d{8*_ut|quDBBEZ#*G_r0N?H z6i5Tp(ElkF`ahTcH{E}r1;j@C+0&&*Ek*v0v_#@&9G`e)z9|pbOMIlpQha2;wrYaS zV6Vxr!*w;JgTKY9h!K+X`CT@G!(^B?@+SY<$^enVT@9}f(y@au|3yx%;*`YB-NCI} zBA$IH%ZO5FwAz`(wqE>-lAj*1#ax)L>^84uzr1^WcdQDo9_N{-O#NKvFQfU1?&Z-c z^>8FDz*%M3qCopmmSe-=pA8wke1Rn*%{S8LA58vQ*yxqHG1MZf@(SG4lOw~r`38g2 zpZ@$MIq5{6)^j7J-7AfEStmN>lBVQb(9aAIMtn9a~T z#s)bLn2FKaVXCZ`FiV#%yAt%Xul}Yv^)LTZ5E#7YhLrjqBU;ktv(Vi4`4$DE+46xg zrzNE_GQv{}u0JV3=WzdO4c@vXY9i|EA)8mx^+i$_?ru+lfKcEm{an{GA{$15&2HB) z;zn6k3X7X3(6;bPJhUv_d1sa9tHtB9eb?@GDuyu0&E}2?R=290UgMhkCEm`pa+**o z1~a$9c6oEO=#l3Zn=XY3eAstHGPctF%7&~hE!Vr7n`&B=b8`-T zj|(PLK0e=dtsc6fI^=i5yrzoPSzqsM(bKiV5cy!Z%DGZJ-eiC=OHp{d{ylf!u{-Re zgHMng7S(mJzG*@K-i&G68JcQhkG*BQGPSRAz}Te~-oy2&mu0M98ze1hk6<~S7BWH$ zigoG$8jV+_--7uu$jpe4qNj?7-ar(sJR~A>d#aqft6WaZ|$A^N%+9rS6ruF7AGA7RH zPwJSAjV=fb2xW|01(uw%82UIS&cU^~C$mZZmarcY5V-%P;`Lf(mFY#LrrPdJ=k|4T zY%BX9Y8eGQcfH%XO3^Ck{u;9}|9YhSLX85#w_gCsLUlLpWKo<=FD@q()ahbECB;_m zECn#r&P@n6R;!?o@7xN`cUqc_o7~fk)9;JaSTMldDq}v^{_7Wbv I-}!d$-=F<7XaE2J literal 0 HcmV?d00001 diff --git a/tests/rsa_test.c b/tests/rsa_test.c index e6fa8eca..4f0254b7 100644 --- a/tests/rsa_test.c +++ b/tests/rsa_test.c @@ -10,6 +10,10 @@ #if defined(LTC_MRSA) +#include +#include +#include + #define RSA_MSGSIZE 78 /* These are test keys [see file test.key] that I use to test my import/export against */ @@ -343,6 +347,76 @@ static int _rsa_issue_301(int prng_idx) return CRYPT_OK; } +static off_t fsize(const char *filename) +{ + struct stat st; + + if (stat(filename, &st) == 0) return st.st_size; + + return -1; +} + +static int _rsa_size_test(void) +{ + DIR *d = opendir("tests/rsa"); + struct dirent *de; + char fname[PATH_MAX]; + void* buf = NULL; + FILE *f = NULL; + off_t fsz; + unsigned long sz; + int err = CRYPT_FILE_NOTFOUND; + rsa_key k; + if (d == NULL) + return CRYPT_FILE_NOTFOUND; + while((de = readdir(d)) != NULL) { + fname[0] = '\0'; + if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0) + continue; + strcat(fname, "tests/rsa/"); + strcat(fname, de->d_name); + fsz = fsize(fname); + if (fsz == -1) + break; + /* here we use the filesize as indicator for the rsa size + * that would fail to import for tfm because it's fixed-size + */ + if ((strcmp(ltc_mp.name, "TomsFastMath") == 0) && (fsz > 2048)) { +#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 + fprintf(stderr, "TomsFastMath skip: %s\n", fname); +#endif + continue; + } +#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1 + fprintf(stderr, "Try to import %s\n", fname); +#endif + f = fopen(fname, "rb"); + sz = fsz; + buf = XMALLOC(fsz); + if (fread(buf, 1, sz, f) != sz) { + err = CRYPT_ERROR; + break; + } + + if ((err = rsa_import_x509(buf, sz, &k)) == CRYPT_OK) { + rsa_free(&k); + } else { +#if defined(LTC_TEST_DBG) + fprintf(stderr, "Could not import RSA key of %s: %s\n\n", fname, error_to_string(err)); +#endif + break; + } + XFREE(buf); + buf = NULL; + fclose(f); + f = NULL; + } + if (buf != NULL) XFREE(buf); + if (f != NULL) fclose(f); + closedir(d); + return err; +} + int rsa_test(void) { unsigned char in[1024], out[1024], tmp[3072]; @@ -368,6 +442,8 @@ int rsa_test(void) return 1; } + DO(_rsa_size_test()); + DO(_rsa_issue_301(prng_idx)); /* make 10 random key */