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*k(^BS2Lm>ZfxxdZFCCPpRXz+z-&U~XdMXE11Dr)N}fN*S^Vg?5UamdqsNvznD3JrQf?wu|GG}?|-Xa4Ye@?|#?|Pv4v`8;sukFUv;#+H^gLlT;Uzg-n^?#V09N5jBV!zgT$5NRX zlg;ZG79=12R?i)oQBl0CM`9&Y?)t-$jCwl+9v?g7uqAV`n{j4)-jUtn%RaxjyS8{w zwZ7ukziELydqXxq%#D}Xqg;HEletsmlEBWC!&(;>PV?IH@QPIQ@dXDCCRgygm>U>P zYcNuty0Cng@TKX+k789%X7L`jOjxpIL#C4x=gS)$dyEw}M<^{{_4>%eXNk>6FHO6D z^Me1{>rBjy42+8#4;VD=HIQXv4wdC&5n~bAENFCc(u|fzCx2Y9&SQ2uCC}GqV;~Qb zR%Vef5Np7$0F;&&|N-kWEe{_For^io~8K=x8C;e%E;Z*C(yod-a&NM% z)r7R=L3{7ji0Ds>i(4yOwbP^O@`t%S7g`jB)CgsP<+eX?=IJ+Mb9@rJfG@U zb6G#Iv0`(Az})l7UnZ+M1b%*@sQo3>-;DYC19fXNrH@9e>}{Sx1>27s?Kq_IVx@*< z;p6w-m(TglT3KQqf(i=7GBB8&&24-;w7Wu0PB=Ir` Y?Vr)*di+mtOY_I-U2H5R&;OhP0C8o4c>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,