From 3b73c6e3ae2fd6444d1b9ea17c46bd26a7286acf Mon Sep 17 00:00:00 2001 From: Jacob Barthelmeh Date: Tue, 19 Oct 2021 16:52:08 -0600 Subject: [PATCH] handle multiple permitted name constraints --- certs/test/cert-ext-mnc.der | Bin 0 -> 1086 bytes certs/test/gen-ext-certs.sh | 29 +++++++ tests/api.c | 161 +++++++++++++++++++++++++++++++++++- wolfcrypt/src/asn.c | 13 +++ 4 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 certs/test/cert-ext-mnc.der diff --git a/certs/test/cert-ext-mnc.der b/certs/test/cert-ext-mnc.der new file mode 100644 index 0000000000000000000000000000000000000000..b7df09abb97d680921cdbd83b8612f117ef4a6b1 GIT binary patch literal 1086 zcmXqLVzDx4Vpdwf%*4pV#K|xvNJoCQSb~HBFB_*;n@8JsUPeZ4RtAG=Lv903Hs(+k zHen{mP(xt@K@f+7hbyo&H8rm|CowO@P|$!MB*@Og;Z&4aoRpZCYA9kL1QO!n;V#e5 zNed44QSi)5hKX|XaJ%NEXXd4*7G>t88%h|6fz&ed@RygD>w(l47w70D=jR&8iSrs6 z8X6c{8W|Z|8d*jGxh4kYhNe*Nz&fspQ3*M)7+D#Zn;7{S44N3Zn3@Z zsW5l@C09pv#?)i3>ptyKG1xKnoW9?+Z!#TwYUcl5kzW5VW=>$~_pVdy&rS9FAMUL_ zpkK2(Wrg^kQ?b>%9wb9C3#i-A0{UUc5|oLuXWzBR3^q` z^E!qF$w$A{b4O-W6ff(MSjm*T{;(vY-VTAs$Idux$z1GaoY|gtWViUT&oAz-E#6bD zuekMZS|HEfkj)Qs<7M_J7hmLL?i9HsuruYb)`f-By!Jf2A{Bjn!GVLx75pyd21e5w zjFhJ?EZ-%3X?pRaSk;qRyoW6lmTcLO>Ey)u@&?BqV};ETO3PQhKJxHcV)M~U)9&BA z;J@}d6Ehf>~u<=ug}In9we>I z0!#=E*cE^hldLc!<9`+o12!PV#K>U42NL54iLn6FaGQZ1h%X1?s~9LPP%z+YA(K3L@(8a3uJ#ros+wImBD3M<5F{OA?>QTBljlDT1`k> z9<=vfjfnoFxVW{lRXaVZE`ONYbD>31SWfiQx1N1B3dOhF{qAyITJ(J5!}FwKW*506J$r} z%oTSFT4M9y{1-t3p%Z@-)$`)}tNs>ctT1uzEWJ^~E)x3dYhV_4V3EIyKoT#5(Eb@+ UuE+lbw={pO-o?gJ^8C*!0C8o4c>n+a literal 0 HcmV?d00001 diff --git a/certs/test/gen-ext-certs.sh b/certs/test/gen-ext-certs.sh index 045942d71..f63e86e84 100755 --- a/certs/test/gen-ext-certs.sh +++ b/certs/test/gen-ext-certs.sh @@ -46,6 +46,35 @@ nsComment = "Testing name constraints" EOF gen_cert + +OUT=certs/test/cert-ext-mnc.der +KEYFILE=certs/test/cert-ext-mnc-key.der +CONFIG=certs/test/cert-ext-mnc.cfg +tee >$CONFIG <name, name->len, @@ -13522,6 +13526,10 @@ static int ConfirmNameConstraints(Signer* signer, DecodedCert* cert) if (name != NULL) needEmail = 1; + /* check if already found a matching permitted subtree */ + if (matchEmail == 1) + break; + while (name != NULL) { matchEmail = MatchBaseName(ASN_DNS_TYPE, name->name, name->len, @@ -13540,6 +13548,11 @@ static int ConfirmNameConstraints(Signer* signer, DecodedCert* cert) { /* allow permitted dirName smaller than actual subject */ needDir = 1; + + /* check if already found a matching permitted subtree */ + if (matchDir == 1) + break; + if (cert->subjectRaw != NULL && cert->subjectRawLen >= base->nameSz && XMEMCMP(cert->subjectRaw, base->name,