diff --git a/build.zig b/build.zig index d1225f9..c7ef9e5 100644 --- a/build.zig +++ b/build.zig @@ -68,4 +68,16 @@ pub fn build(b: *std.Build) !void { const test_step = b.step("test", "Run tests"); test_step.dependOn(&run_test.step); } + const trust_probe = b.addExecutable(.{ + .name = "trust-probe", + .root_module = b.createModule(.{ + .root_source_file = b.path("examples/trust_probe.zig"), + .target = target, + .optimize = optimize, + .link_libc = true, + .imports = &.{.{ .name = "websocket", .module = websocket_module }}, + }), + }); + const run_trust_probe = b.addRunArtifact(trust_probe); + b.step("trust-probe", "Reject incident TLS hosts and accept a valid control").dependOn(&run_trust_probe.step); } diff --git a/build.zig.zon b/build.zig.zon index cb07ff7..3a0d86a 100644 --- a/build.zig.zon +++ b/build.zig.zon @@ -1,6 +1,6 @@ .{ .name = .websocket, - .version = "0.2.0-alpha.3", + .version = "0.2.0-alpha.4", .minimum_zig_version = "0.17.0", .dependencies = .{ .zlib = .{ @@ -14,5 +14,6 @@ "build.zig", "build.zig.zon", "src", + "examples", }, } diff --git a/examples/trust_probe.zig b/examples/trust_probe.zig new file mode 100644 index 0000000..08f3fe7 --- /dev/null +++ b/examples/trust_probe.zig @@ -0,0 +1,26 @@ +const std = @import("std"); +const Client = @import("websocket").Client; + +pub fn main(init: std.process.Init) !void { + var bundle: std.crypto.Certificate.Bundle = .empty; + defer bundle.deinit(init.gpa); + try bundle.rescan(init.gpa, init.io, .now(init.io, .real)); + const original_count = bundle.map.count(); + for ([_]?std.crypto.Certificate.Bundle{ null, bundle }) |supplied| { + for (hosts) |host| { + if (Client.init(init.io, init.gpa, .{ .host = host, .port = 443, .tls = true, .ca_bundle = supplied })) |result| { + var unexpected = result; + unexpected.deinit(); + return error.CompromisedChainAccepted; + } else |err| { + if (err != error.TlsCertificateNotVerified) return err; + std.debug.print("rejected {s} (shared={}): {s}\n", .{ host, supplied != null, @errorName(err) }); + } + if (bundle.map.count() != original_count) return error.SharedBundleMutated; + } + var control = try Client.init(init.io, init.gpa, .{ .host = "atproto.com", .port = 443, .tls = true, .ca_bundle = supplied }); + control.deinit(); + std.debug.print("control atproto.com (shared={}): TLS succeeded\n", .{supplied != null}); + } +} +const hosts = [_][]const u8{ "dv-g3b-emudhra.we-have-a-problem.com", "dv-g3b-aaa-emudhra.we-have-a-problem.com", "emudhra.divy.zone" }; diff --git a/readme.md b/readme.md index 63d6030..9c088c6 100644 --- a/readme.md +++ b/readme.md @@ -737,3 +737,16 @@ var client = try websocket.connect(allocator, "localhost", 9001, .{ This allows each client to have a reasonable `buffer_size` that can accomodate most messages, while having an efficient fallback for the occasional large message. When `max_size` is greater than the large buffer pool size (32K in the above example) or when all pooled buffers are used, a dynamic buffer is created. + +## TLS trust + +Version 0.2.0-alpha.4 removes the four roots and eight compromised intermediate +public keys from the [October 2026 eMudhra incident](https://emudhra.we-have-a-problem.com/) +from loaded CA bundles. This includes caller-supplied bundles. Chains anchored +only at those roots fail, including otherwise valid certificates. Keep the OS +trust store updated as well; Zig's macOS keychain loader does not apply native +revocation policy. + +`zig build test` verifies the original certificate fixtures offline. +`zig build trust-probe` checks both public bad-chain hosts, the AT Protocol +identity host, and an ordinary HTTPS control through the actual client. diff --git a/src/client/client.zig b/src/client/client.zig index 307b168..6ab7b7c 100644 --- a/src/client/client.zig +++ b/src/client/client.zig @@ -118,6 +118,7 @@ pub const Client = struct { const host_name = try net.HostName.init(config.host); // 0.16: connect requires mode option (stream vs datagram) const net_stream = try host_name.connect(io, config.port, .{ .mode = .stream }); + errdefer net_stream.close(io); var tls_client: ?*TLSClient = null; if (config.tls) { @@ -696,11 +697,18 @@ const TLSClient = struct { const bundle_ptr = try aa.create(Bundle); if (config.ca_bundle) |ca| { bundle_ptr.* = ca; + bundle_ptr.map = .empty; + var entries = ca.map.iterator(); + while (entries.next()) |entry| { + try bundle_ptr.map.putContext(aa, entry.key_ptr.*, entry.value_ptr.*, .{ .cb = bundle_ptr }); + } } else { bundle_ptr.* = .{ .map = .empty, .bytes = .empty }; try bundle_ptr.rescan(aa, io, Io.Timestamp.zero); } + @import("../trust.zig").distrust(bundle_ptr); + const rwlock = try aa.create(std.Io.RwLock); rwlock.* = std.Io.RwLock.init; diff --git a/src/trust-fixtures/README.md b/src/trust-fixtures/README.md new file mode 100644 index 0000000..441b0bd --- /dev/null +++ b/src/trust-fixtures/README.md @@ -0,0 +1 @@ +Public certificate fixtures from https://emudhra.we-have-a-problem.com/roots.json, impacted-intermediates.json and chains.zip, retrieved 2026-10-21. DER preserves the original signed certificate bytes. control.der is an unrelated self-signed RSA certificate; its private key is not retained. trust.zig blocks SHA-256 SubjectPublicKeyInfo digests so cross-signing cannot restore a blocked key. This intentionally distrusts all chains anchored solely at the four affected roots, including otherwise valid certificates. Zig does not consult native macOS revocation policy when loading keychain roots. diff --git a/src/trust-fixtures/control.der b/src/trust-fixtures/control.der new file mode 100644 index 0000000000000000000000000000000000000000..69e7d0ed09973fcd914d917df4321f6f86eb97dc GIT binary patch literal 811 zcmXnKVpcb3V&Y%G%*4pVBqC$1L5LY10jO**LY@JlekVGBR?r zG8iZuDjLYMF^94+^GK8wl@^yM6s4vYr4|=w=I1FS=jW9a<>wg4iSrtn85$TF8k!jy zn^;7N^BS8O8W>tYxx^XL#HfU9IU_3ra}y&!gFzD`7gG}>Bg4tr5z2E~j_LAxM}GV; z>6%}+u=vK57os=UncOo`I?2BFuS4sZ%^%M1$~^Mqyhq&s#j8){Ex(^6a_U*_!W+$# zMgG+GoSbF8SopZ^DUZc>*>)_{nH_j6NHb%``U#Djl9$B4JQ9?7ij}J-@8u6QoxdfI zyFSIo9K1@fXam zvPHZSUTQ~db1S=Q`^VvlKxF=(%-7!2ofj;4(>L!#@bs=vj5R$I>zR}tl(zOfu8)22 zYu)OZYS)}ap8u8LKg{t-KdHLgu>Nqdh3aDOAM?!r&l3K9j#D8+u|_s@cB+8sUnXWo z2FAs~27v~$Y|Npud@N!tB43ZNe_T)$X4$by+)$3mYf-VZx+*xjWR+PY48$6+E8qv| z7iMJq&%$cJ%*gm3IoP?u!44QBL%*3rOB3T$$qCCP17kvZB+mM4RsZ0fVyJ50=qB36 zVgCHD~ud#C{_WfNc?xynj^I3y4j{0?4|F<14i{K(-{X5ssd(CTAES_q#dyePLuA2a)FHC^| literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3b-aaa-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/dv-g3b-aaa-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..b82c1e482a9dbe0683a2741b0f3270e7b16dc587 GIT binary patch literal 580 zcmXnKVsbEOVm!8hnTe5!NhG*(L0`1}$4NE2X0DrfGsscaL;R}&7aNCGo5wj@7G@>` zdqZvmPB!LH7B*ofKOaM313?gni-#-Kw=^ZAC{e*F%uw1u5+umXBjoC<;1Z?~;uEak z?5Lot;BM?>AScdiWM*h!WME)qWMpC(CC+PPZeVI)Y+z($Zekc^U~Fh;pbycmky56c zZk(i>n3$-WnhQ2wuRK*ZBe5)1H&M5sC_gDDHCHb=Ki44AK$wjk>_#R=sAHKK*_oXf zSWewLe#crS*EltH^%d#EA19g}e5!i#mBK}ixy9S-To)ex7~y|baniyimrQ#9I4#OA zlTZP2*FfQOAaR92Xg@jnZb0fPY_h{q4&0mj12#NJ>a z4C1S@@PI-}n~jl`m7STwvSj1RFEEH-c7GHfndBMufA|f*; z99X}Edy9cQNLrai!a%G+kA|MBVgMo#ai8+J8AeG6$ zs+s3?wRUZ}L*tiqlK)dyeinOg_y6i1tB`kM7w(6sT;%G@_-ZGU zA;YXqIxY@uskR^etSq!AKiyT??z48MB8SAe7i+D&iu8i6y>n0X`|9UT>%Q;SM6(=wA2 zOHvhrQ;W(nlT(Wg@CB z3xg7K5(CTgc{dMuO)oxD92Y1kyCUk)-nf+2=H3ktb@nJ&ypi+gvu@Ns**Z@yef|W7~3|R zbGNo+EN)^nHE3cq1c!jEGK++PScAv{K`v#xX&>3&JX){$zG-Rw1%oA93}o4uLuL6` z#8^Zg$>~3rk+kFs^-emdpb~DX(xoZ_4sTh0M#ldvEX+)dYz9Ig<-#C7hXETS<9{Yb z28a==EMf*CY#iEbjI6Be%#3grlYt>fivo+5frbGG8(VrK4^#=y$JVu9HLlQyG_l9B=|ef{L39KGaxP(&vuf*AUaj*dtX3yW91 zy?WV|eOjgOP_v)%&EoV@slai&(M zPo|~pp3?jJLic(B)9^b9lGm%$Uo@$CoiEC{qFw8MMtHxsZ>^GV-J2g3Z#_Gx9gCdaRmr*IU%3psrHX;P2%>1|I2u z*4%#SE3V^pC(>cv){6hWCOa*!vPb%TYV31u4_{~(D(N$k!-=^iE|}H3OT5v1;@?C7 DSIjim literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..4f77f798dc0f64a30c28ecf9021ad2075504035f GIT binary patch literal 573 zcmXnKVzM-7V%)cYnTe5!NhCR>-lpnptVZai7vAaMCh8Ux7Ty*p98eu7CCr`ihe9u>is^nwv3UF)4gZL>K^B# zW}JQ!vjj}J7oFd@xN*5b;}QcNHs(-SVMfOPEKCLr27DkMKZpky3o{dYgMl!Jugby$ z3MFkeMpjmKW<~>jkf0!ohJjiWah{L`Y2afKV-fkWe)f;5YrH#hx3VqB+MM^@%ALK# zKprHm%pzeR)*$joPXD=#q$OXdchW%xm2gv)E>#hb<=`M-VP;~^WH3l$GGv%8?E3q^ zD#NdY&TShQbhbX%{F!_D@}x80(s>2H+ouPtkGpeZ(&QK6Ssd27VZXzhbD0bo9<7-; zb)o;nRVwRB9xB9>WUcR-;wnuxUAK$TiKS^l1?8>FD4ZfYVOKMNEn_{~V0M8z< A=Kufz literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..d200e0d704ca125e70f5b658898cdef407c93b6d GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!Nq}L=x@Q%ijFYw;c#^Qa=#z*67aNCGo5wj@7G`FHFhgzw zPB!LH7B*ofPd`Id17#40i$^Baw=^ZAC{ZCKH8~?MKPNvuGqqU3Co?y*BsIlQ!9WhA zjG0F~H8(gjJx?JhKfgpF#3xw6*-=4P!QI$EPMp`s)WF2pz|hpx#K0m-oY%y_z{JSH z(8Acjz#z)N9?4!mA46dSL6Cu5JX|n)ox%*I4J1K=%sfJ_z6vg3$mTm4lo<%Hv4g$A z#K^{~-N?eA#GJ&y@_gRS176dMj}*rR3d*jCIF>I&F0*#Eg6fO7^fLDF-|g&XJZbPRc4Ve5Ni;5Xti3g=Hp}Ekabszw*T#pbW)fQ zVjv4rz{euSBJxO1|GA8$C10p_(m@54a8s2oRS}4^DvOwb2pfks8zU<#J2NAk#bgi* z(yhP}W)Nav$;PeC#>m3h+^5LMz-XXlpaE0I#3&|{QBqQ1rLSLB1nDaC+;jV-;AhmncVpcG~VBO^k<~?6YT8hZtSF2V4iGX4)T>ei-CcjfzAT01sZK? zP*akNa*!<2w=c@iFDc0>PEJfW)=MtRG2jDfkK1mX*W_#6gojEw)8 z7#Wb0HFE}oK`N7hUN&2t-U^XJWs@Rh1dg8B#kXL;h*)Z-+#!W);U-4YlYX6F@Xqn` zImI2NO}p;~Y&gVZ$Z&M_>FJ_Ud-C?GuTl3h*b^i6%A`d{eL>4jc3;c)7It@{Uk2`J Rx;uI5r)W8ieHyn<0RZkv06zc# literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-2.der b/src/trust-fixtures/dv-g3b-emudhra.we-have-a-problem.com-2.der new file mode 100644 index 0000000000000000000000000000000000000000..76baf7160f57e167399b56a31de806559275cf44 GIT binary patch literal 888 zcmXnKVlFXgV*0s&nTe5!Nq}LRl-+OP$nd-i4y;=;yrK=b*f_M>JkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>v8=T}G7sOsxkSN$i;Y98&EuRc3p0~} zgCVy8CmVAp3!5-gXt1G(fe?tp#lxNITbhzll&IjDmux6)APEv><`HuBRd5MY2=NJ4 zaCTJCRd6?UHjoqNH8L|aFfuSOGBPqTj1uQHGB+?aFg7qUGB+`dGB7qYG|-1=*GMVT zO*c-~O-xMGP0a^S5+;APE^8bg4 z+82cs+wR^;`aLCS?xdvl*M}E3t~O{~VZg)294af!$oQXy$$-It55(gK@mK(3W@2wJ z5C-v8S$IG}rOn33%F52nXkZKy6lBpc&}t&yBeEb(d@N!tB7Zop7(aM)bxx1AW1FM+ z`+eU`4(&IP2T3clNEnDUh^(sZ#JP4yxB z-!mC9%&W;R+Hn1?&I@(vg^Sl(NJvywD|oAHm^<^#zLopCnX7j$7XEK#V9dd1xIfb1 HrR5F)Z2P~^ literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3c-aaa-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/dv-g3c-aaa-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..a14835558fe1ad95291e69bd8454185e67e80f04 GIT binary patch literal 979 zcmXnKVm@!s#I$_@GZP~dlOV&y&+Z?WZofP;X=fbYlSeZz8t}4lYPET^edlFl=LuD%K`VG1EW!60YoD!3av8i~#3_M(4~v!G59ED+>Uwwv~m{mrBGn(v#I)?YAKvc*7_jX6}7 zk420{WL=#=jE&~BgDc$CStCC_u)Xq>>oYjOW%(Hy|Ff_#GcmG(13*?7#OE+zV`Ti# z#K-_KLX}0#K!lA$n~jl`m7SRp&SEk!1lgd#qGh0Az`@3r-pIqq#Av|F#;wi9$imp% zr^v{F%4JG1a0Y3SXR$G`GO$=+w!oy#D5IpLz)D{~xhO|3IUf|$$%!C_zN4cfQq004 zRxi0I$G`;U21Z5}4Ffd;6&T-uu}uPMUVd_M0mz*ElzfPRXvq^W<|al)hV|Qi8OxUX zG$n)^zJ1~Nb47AkmBy+Cr(S;WtDk(@uJ8BCXJt$y-RmzE?%5mTiwqQyzJhV$Lc+ww*0%i zsc(@{F8Aed36YnME$-->$Lnhz>AzvQn6!&?d)W7^C(k|ItlPLlICQ$L%J@&+(-(DGl9~Ih=bMwN Iu~~U303;+#MF0Q* literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3c-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/dv-g3c-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..86e6a209a46890d6051180199fd982524e046e62 GIT binary patch literal 572 zcmXnKVzMx3V%)!gnTe5!NhCM>?LlR)zg#bF=e}oJv-y7RzYqZfE;bIWHji_*EX+&> z4u;$YoNUaYENsF|p}~eC20|bX7Y}!;Z)r+KQKEupUb3OIfh0(jnMcUgSHUGrA;c$G z!P!wkSHa!b*+5R5*T~G!z{tSBz|_*%EJ~c$$lSoxz}Udhz{J=r%0S;x*FYPhT_vSV zH{Cc{H#HY*wqALvZbo8Rs&1lgK~a8EPHL`Ra(=Esq=7ISJJ^9tj8K;{GqN)~F|f=j z5z#bt?&CbR;ANwz=y6_G#khdZl3R*D?|rzxF!`jYuF2D!SKyEnmnn8Ebvj*q-boLb+g!Cu(MCFvTxK2`!3^K6p^JOx~*nCvZ yoZ;Tp+FPxcwoUWNV)0@$y2`F{x5lr?YjftQYn;=U9D9~Li)#*xK!c*B4Icms39-Qd literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/dv-g3c-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/dv-g3c-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..8fe252037d13cf433becf937b74f68930dd6e273 GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!i9e!S&qjO4*@bpeLY%73iUwS499nH2=WJP+nGM1WxeYkk zm_u3Egqb}33{?%3K^!g~nN;7>l#HT8g^<+bjJ*7u{PfJ!Vg;Yf+{}{H6hj3AIgm1D z9`V%N;LP+qg`oWW5`_?-U+&C<6y1dqaZ_MGS;M26FLm!|e6UOE#1?kOYY`^9Z^6D!7CpTi|R^W+1@E4)zBV zBO9xBBMXBPa}ooKRaHgOi6g#7zIQX3tBV~|P6_mTShU3W zaWX&CUWo?tn@>gN&n~|`Wl`h(8P)o)I=V~t{_DTxBQWz_&cdl_|Li_I{kCCNXwI4L zrL2kfrL|mS85cJ(PBUm?oMa%+#vCfE%pzeR)*$lGYPDj`$H%@Q>#h`S|Jxnuq%a}G zKo+Eck420{WL=#=jE&~BgDc$CStCC_u)Xq>>oY`Jl|{@zgpEU+jggg=otY8NVls#Y z=~iF~GYB!TWaHLmV`O1$?o(uBU^LJ&(1599Vic3fC@Cqh($_CaEyypnKOU}8Plw!ca#+Kg5!^p&FPzp1Gk&z|SAl*O(#y4PWlYknTpIls^n~ZFn zJzN!2n=w=sU|22IPfjf=Db{!ObqNdc33hgLH+I%5Fi$ox2l+~##lS$%Kxcv00*y8` zs42-sIY<`i+ZW~Mmz3lbCnu&G>m?WE81R8K@-s62XJKJxVq^m+7g=EtpTmHSk?}th zBLi}}X3k(RNM$l)ILLdWv}fV5cae9tme;JkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>XF|jh>V&l+i^EhYA!pvk~ zZ^&)H$;KSY!Y0h*=VK^rAPC}c@o=U3mZoGBB`P?D8A=;Sf&`g)gj{_UT*DMXe1a96 z9TjvH+>Mzm8a@vB$lP>Ch8Ux7h5*$DEsZ*P(22@2o4CuM__S#`RrM=>0WAvUWzx?&X(NnD#8Ry_2*h@JXZ9 z>wK-y?N&u4w>=dS+hToK7B{XoXk1~y!^RvcE6m9FpM}YQ!GI6M;|K8oV_{}uZ!i!B z@l{!PKp~~g#>mRb&dg|F3=$M%(J|0!BHkmiAWeKMVk{!Aj>+M3eC|i<9C-Rj{qCH* z(^B?NGmr;KE3-%#h&71V-BGyN={BRiy50Upqx+^9(Hrh;AP0bhfrXigIfKCa;NO%{!e4PI9<0Q{fH;?0ZsSq+X_WoqG$JO1W)1%t9NPNeC+smR zq~#Z-7)lvPfJC@>1fBD9^HcH_oE;T>GIKLaQd0~S4dg*`%sdi~j*be>sYNB3X_?81 zC8-L*sYPX($*IK#a^k#3rUs^lCI(;-CC+PPVQ6G*Xk=_^X=)i|V2|WDKOaM313{39 zTs&NZrVroH;>k9zHeGuf5BkM76Vx}=1^Ha z7BLnPyE_UuJKbiqSGU{WXmsBcBYMM~4IJLG{EUqMSy-5v7}*SjK+1(dd=3LPM#le4 zj0_MXR9VCfMA$gA*%(<_*_j#PEG7d3kQN0NO#^iUb~e`ZMjl2+170?6Z8k<0#^ydn zMg~+aQ-y&uNQXR&je(Vc#R9VhCT&I;B_#z``ufR5IeN+YpmWHY-f<~~#m+e!)SkWXo*HLN)*Z literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ev-g3b-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/ev-g3b-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..28c4fef550c3e880b1009d4cfc49324e5a71e64b GIT binary patch literal 571 zcmXnKVlp>qV%)cYnTe5!NyPSdqP6o42{x|HHv=AVl`6dCTc2#e#m1r4=5fxJg_+5~ z-jLgXlZ`o)g-w{r&&N>MKoG>?;^9j5EltTNN>p$PGn6)v1PL0iSrtn8<-jx8yFgx7@I{I=o{)9XhXECq?YNX z8zQH7zc4j9AmT&%t z0?fPm55)iSIrLW6EI!Ow>NWR`|3?lTZ^-*rm|DEBZkvne`sH^%#qwHADE|BJ=q{~- zIkTrlKGTy}Fzv7n%i_l628~M$c-WXjWrZ0T|FbX|Fc|QGc!2SPcr46J>c$`@Q({wNeL{R52NZ9aLOA yE1Gq!*o6mQXHD4WofD~FdFfqNZEg;igqXS7e&He>jR@TZmD`SO%bEFy+Y^w0nj4&%o~IC$pI@R7;uEak?5Lot;BIUnC(dhRYG7h)U}$DwY-|`M&TC>|U}9up zXklz%U=U?sk7Tc(kD;)EAjm*29xj-@PGN@929h8_W*#9|Uj^4NWb>U2$_xb9*umal zVq|00Ze(FlVoqXUQN6t)D&_L@TigOcFJFb^c~rlDHD~VJj0Hzu-TC*vblL2!*Zwem z(f)lZZwvR?lmlgTX8$k5PG2E>bQMp|RDUFBPcJz?*MJvED^rC5I~!|yBM&2^K`G1xMn;xQgLDHG7~g=gO#*6SesXbvZW6L- z_Hb29ZN^YlfMK;)KRLCiq*&k8*EKA}C)nB1-PlR5z&zQ&9ONl^76Su41Dyq03pCo) zpr#}jhYUWG^gES^XhA*@Be!nGU>9kOsOY?B;Bd+Wciz4-V9G4##&foFy;@@_a*gG1g z7Yrc8QsoU}VXVR%za|PNq@q|C$B{XGsf8*4OM=N&R Ssxr8L{)bFkm5NW3%s~KD+YH$N literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ev-g3b-emudhra.we-have-a-problem.com-2.der b/src/trust-fixtures/ev-g3b-emudhra.we-have-a-problem.com-2.der new file mode 100644 index 0000000000000000000000000000000000000000..76baf7160f57e167399b56a31de806559275cf44 GIT binary patch literal 888 zcmXnKVlFXgV*0s&nTe5!Nq}LRl-+OP$nd-i4y;=;yrK=b*f_M>JkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>y@YKW+axS>L%(I6y+!7q~_`+=jR$k8VIwogB{7l2z4zpBRjJb z14~oDQr=yLuG{-8UM2|888^|fq48N9$+lYOzaH? z!XUmX3lAu$wAmP0S=pHx4U9p8f-E`)T1~`zL>8opk420{Wa^f*=dVSDuW9K7K5Ju+ z^Ig5pB-211B(2OMVIbBZvP?CuVWsc(&(mt8k59ZmY0o?F*YO|+fP;aBnTa`_!61dn zK;iAaXodCR&s|vJU9F^#UuchQoD*X5{*vl$^OEG0lMxzkL(7ux70>B7FL>rs&(?`d z1`6>PCT}vjFKDV?9%ZkRxOEBFEv|)Lua0lru4;bF_0gQ}2Y3B`vVQ)1^yMw3FAK_U F0s!L(zGwgd literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ev-g3c-aaa-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/ev-g3c-aaa-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..533cbaf527692f25ed869666af4c3dd6886fd8ed GIT binary patch literal 977 zcmXnKVm@oo#I$t*GZP~dlK|_7ic;M-&lm1)oqCyBtgz64myJ`a&7$-PqZn%s_yRU8~LGoGlY08>@CB z3xg7K5(A5F*bB{NznhMExlO;BuzsrCg!FY2f2v(}X1nFFV%6)4%x%l+a@C#kSe#Zd zZ_bnKxc|*8(C^`S_OH9V?LRF@b6rBZm+ow%iqmBU7B`O>|9AhS6ctX z4@c@xEpB2oF=%2m00)7rGK++PScAv{K`v#xX&>3&JX){$zG-Rw1%oA93}o4uLuL6` z#8^a@sm3*|^xgh>T8;GaiT5Y%dFTB)9vtAZ{EUqMSy-5v7}>x9AS(>wa~QBOGX7^` zWPli<$|7bU!p5P^#>mRb&ddmBF&P+uY*1j)G*CBSXJbuo-^XXJg#J(%)Ha6-gkBZG)71&k`UpS#uDMNdB@rMT(U`PWm`E&Lh-#ouOi z)UjQwiI%r*ywUUV;B381Q|BH$z;C6E z4vP0#%2ICXGj2M(=g)U_&$RPn*5g?E3R#tGgr-ivFC!*ej9s_&t-1P{2k)Xe07qgXvLGcp-R?y5z|t(mR*hX z5c?FcWbw4k|4-QP7tUV3fLo1&L6>7StKN_9Y|YL44s}$jG)qebozyA|(aD%Kv3c?d E06YOamjD0& literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ev-g3c-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/ev-g3c-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..053ff83c2db022d562653792eb39abc367ea9925 GIT binary patch literal 573 zcmXnKVzM-7V%)!gnTe5!NyPGurFrWyJ%#!^*#|FAJGmoE(pJ`hi;Y98&EuRc3p0~} zgCVy8CmVAp3!5-gXt1G(fe?tp#lxNITbhzll&IjDmux6)APEv><`HuBRd5Yc2=NJ4 zaCTJCRd6?UHjoqNH8L|aFfuSOFts!`j}qrKGB+?aFg7qWFflfdGSD~FHPD7=S4l0? zO*c-~P0aL6u-oi=UM*C_c4nk{|W3^JJ)S#x#Iqo&3;=;J>)MmzjA)@z$JEr z_p z!UGB>Z8k<$R(57a1AUO7Ad7~9S`%@ekOgVrV-aH!SuMWr-I9IA!bM$8k*(a^PY$vi zUTq)`l2&GsFc51HS*9A-u+n$?=V>+4$0y#OwCA1o>v)jm;2>aOW@64@Fi2%G;Qp}D zqf7tbvDNpE)_#ze(SM@no~fdG>2BOXuXFszd6h~HUcBuvva+r(!E3;>78 Bx>NuF literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ev-g3c-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/ev-g3c-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..09cff5669815c8c71d8164eeb910b9b328868a9e GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!Nr0h&b5d7|KpEqD)?fOPA2|)U*f_M>JkHs&Ff$v38FCwN zvN4CUun9AH`WdPkD1$g$JTj@ir70Oji3%a9$r*Y1Ir-_Csl^IDnYo!IsVRmE267-} z%sk?$xxty~c?v=K`6UV=KEVpkjtaU8?#2dk;=D$t1}4S^hNi}r#)eViye0+)CPo&9 z7RCk!22lnMNcM&X8;TeRfehs0;fC4knU`!RZ6FB}W#$ob^;K{UL$<)#pv*vkjUDU{ zCPp?^?M4;`CFUds7TvHHn#+DS9rJRVelubHRJjT1>n8qGyX?$%%VWi=*A*KEck8?#9k~1?I^H<{(eWvltlY8R#s~TAJkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>F>I&F0*#Eg6fO7^fLDF-|g&XJZbPRc4Ve5Ni;5Xti3g=Hp}Ekabszw*T#pbW)fQ zVjv4rz{euSBJxO1|GA8$C10p_(m@54a8s2oRS}4^DvOwb2pfks8zU<#J2NAk#bgi* z(yhP}W)Nav$;PeC#>m3h+^5LMz-XXlpaE0I#3&|{QBqQ1rLSLB1nDaC+;jV-;AhmncVpcG~VBO^k<~?6YT8hZtSF2V4iGX4)T>ei-CcjfzAT01sZK? zP*akNa*!<2w=c@iFDc0>PEJfW)=MtRG2jDfkK1mX*W_#6gojEw)8 z7#Wb0HFE}oK`N7hUN&2t-U^XJWs@Rh1dg8B#kXL;h*)Z-+#!W);U-4YlYX6F@Xqn` zImI2NO}p;~Y&gVZ$Z&M_>FJ_Ud-C?GuTl3h*b^i6%A`d{eL>4jc3;c)7It@{Uk2`J Rx;uI5r)W8ieHyn<0RZkv06zc# literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-1.der b/src/trust-fixtures/intermediate-1.der new file mode 100644 index 0000000000000000000000000000000000000000..48a42fa4dfab49e69e45fc7ad33ac8cc3ae2f897 GIT binary patch literal 978 zcmXnKVm@ck#I$VzGZP~dlOV$amA_whrNvalJXxUNVG*(2fR~L^tIebBJ1-+6H!Fid zwIR0wCmVAp3!5;LyOW``fh35-!6W2el$uzQTBP8cn3tT9T3nJ^WGG<32a;sxVGmBs zNy{%vF_bcp0Euw%2s-EI=BMNn0X`|9UT>%Q;SM6(=wA2 zOHvhrQ;W(nlT(Wg@CB z3xg7K5(CTgc{dMuO)oxD92Y1kyCUk)-nf+2=H3ktb@nJ&ypi+gvu@Ns**Z@yef|W7~3|R zbGNo+EN)^nHE3cq1c!jEGK++PScAv{K`v#xX&>3&JX){$zG-Rw1%oA93}o4uLuL6` z#8^Zg$>~3rk+kFs^-emdpb~DX(xoZ_4sTh0M#ldvEX+)dYz9Ig<-#C7hXETS<9{Yb z28a==EMf*CY#iEbjI6Be%#3grlYt>fivo+5frbGG8(VrK4^#=y$JVu9HLlQyG_l9B=|ef{L39KGaxP(&vuf*AUaj*dtX3yW91 zy?WV|eOjgOP_v)%&EoV@slai&(M zPo|~pp3?jJLic(B)9^b9lGm%$Uo@$CoiEC{qFw8MMtHxsZ>^GV-J2g3Z#_Gx9gCdaRmr*IU%3psrHX;P2%>1|I2u z*4%#SE3V^pC(>cv){6hWCOa*!vPb%TYV31u4_{~(D(N$k!-=^iE|}H3OT5v1;@?C7 DSIjim literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-10.der b/src/trust-fixtures/intermediate-10.der new file mode 100644 index 0000000000000000000000000000000000000000..09cff5669815c8c71d8164eeb910b9b328868a9e GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!Nr0h&b5d7|KpEqD)?fOPA2|)U*f_M>JkHs&Ff$v38FCwN zvN4CUun9AH`WdPkD1$g$JTj@ir70Oji3%a9$r*Y1Ir-_Csl^IDnYo!IsVRmE267-} z%sk?$xxty~c?v=K`6UV=KEVpkjtaU8?#2dk;=D$t1}4S^hNi}r#)eViye0+)CPo&9 z7RCk!22lnMNcM&X8;TeRfehs0;fC4knU`!RZ6FB}W#$ob^;K{UL$<)#pv*vkjUDU{ zCPp?^?M4;`CFUds7TvHHn#+DS9rJRVelubHRJjT1>n8qGyX?$%%VWi=*A*KEck8?#9k~1?I^H<{(eWvltlY8R#s~TA$-PqZn%s_yRU8~LGoGlY08>@CB z3xg7K5(A5F*bB{NznhMExlO;BuzsrCg!FY2f2v(}X1nFFV%6)4%x%l+a@C#kSe#Zd zZ_bnKxc|*8(C^`S_OH9V?LRF@b6rBZm+ow%iqmBU7B`O>|9AhS6ctX z4@c@xEpB2oF=%2m00)7rGK++PScAv{K`v#xX&>3&JX){$zG-Rw1%oA93}o4uLuL6` z#8^a@sm3*|^xgh>T8;GaiT5Y%dFTB)9vtAZ{EUqMSy-5v7}>x9AS(>wa~QBOGX7^` zWPli<$|7bU!p5P^#>mRb&ddmBF&P+uY*1j)G*CBSXJbuo-^XXJg#J(%)Ha6-gkBZG)71&k`UpS#uDMNdB@rMT(U`PWm`E&Lh-#ouOi z)UjQwiI%r*ywUUV;B381Q|BH$z;C6E z4vP0#%2ICXGj2M(=g)U_&$RPn*5g?E3R#tGgr-ivFC!*ej9s_&t-1P{2k)Xe07qgXvLGcp-R?y5z|t(mR*hX z5c?FcWbw4k|4-QP7tUV3fLo1&L6>7StKN_9Y|YL44s}$jG)qebozyA|(aD%Kv3c?d E06YOamjD0& literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-12.der b/src/trust-fixtures/intermediate-12.der new file mode 100644 index 0000000000000000000000000000000000000000..e5bd32bda3f264fab5afe29278f74de856dac850 GIT binary patch literal 863 zcmXnKVvaUwVtTNEnTe5!iN8W(vVDK+mc&`wroUI%av5;3acH%9oU>(NW;O^lut(hI9W8<=7?#R-2az7nRueb=@uB z$dK}B_0tCdi<=m`4VoC+4dmIFLuHj&Bn-qFL^4X4f3%+J4G9RB6?<^vo-6O_v%28$ zk>z6%V-czR_2SL>+q|W{OCqk#-}d%Sjpw~*2Eriysw_O9xX@-}WMyS%W;Tce2`aFJ z8-yBIvTB zYDjWX4w60k_C@*mCCSCfiRs3A$wfH^d?0=NjEw(TSeTg@*$jk0d|?ou!+?#E@jnwI z11R*siGYQfnK_feAdSh8VgI?k<_V768!oLn>+OE?s%v*clty^by8XYT!#$$rb1_Ef z9L|6DC}vY$D|3c^GT$dALx#PwHYvN$>6+HZ&M00hzpd%U?foiem3{wp^-j=V^r7>- V^;d<^NoiBP)6_oAIdt7>GXVC<22KC~ literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-13.der b/src/trust-fixtures/intermediate-13.der new file mode 100644 index 0000000000000000000000000000000000000000..8c3565fe4cfd3b4f189e4edfd58d4714f06bae7b GIT binary patch literal 967 zcmXnKVm@rp#I$+=GZP~dlYrx6?cy~Ou{jT}dvLG$;g@N^%f_kI=F#?@mywa1mBFCe zklTQhjX9KsO_<5u$xzxr62#%)5ppj|O)N<*Qt(a8OU_6wE=esi6foceNwV{>2PfvF z1r70Oji3(0(Fefnc2)g?%$yt+oZs1^D^P068pZcyX6}hQa-JI z`XFF&6Qhnn6Qc$=0A!U}Bn-qFL>35gDceo^$o}Thdd>GuOY1KfEZJfp%f=ik%f}+d zB2xM5#hdfDc}shjL|mJ{?d_c!&wJ0n!7aFXyK<>)2ngQ7P%5ya4UbaX_D zPFQT}B^Tuwn7|yt$jG8$pk|-~;~OxxNkGlZPcAM1nUkNA4>1reO#;T;#K_2?B+GX; zTb8vW;{BVAHaROc3jN#Z();?ec6qHl+bg}MbFQH&=7kd6EuG5)J;WKzZ1Y|(h!R$- zwY_uFFZjyA@YI5(98J%jr9b%9wd|j!NW{!?X7z7U-{fz+-}mazt9_n7uAe;dWLNBV z=iPdGWe;2S-%)et;oqFf_j*lLWE_jFTviREi-lPEEGgrtIZ+bF)Cv#iOnYvp_lAq> z;?BOXMQaNTGeYkC{QYpRZ^Owl(Z0B(u4b!=i-Wl?{J3@I%5Q_jSCfkW-qq>}nVT@P z{*`G?#MTGO(>_Mc<#9Bv|K}^?-1jg?pm_fq=~rHpIEs8l1l%8;6RtUPD@=F0s?gGe I=^o}^01@UwSO5S3 literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-14.der b/src/trust-fixtures/intermediate-14.der new file mode 100644 index 0000000000000000000000000000000000000000..73d39b2879870e00ba9c258118a4b5499fd0428d GIT binary patch literal 863 zcmXnKVvaUwVtTlMnTe5!i9f`(NW;O^lUiEDTD_NenDIKRifwXIeIA*{ZuPHh+_jNY7rfiBl!BwzA}Trj$_r&aB^dCWro7 zAN|tICa)HIXlaX?NwIPui`k}rmd|a<$!wJkj{@wNf^}2fl%on$7ey|7@0njB9e?k6 zMG?o79lzc$Zer{VgAE zmXAe@MdV$6v1V`n{^gsc4^K7uCK~2ak+$7H7^Gj7g$EQF+H8!htnAFp25}%k1(tAw zPy`3s zz2y8{13oq$xK^e{4+9Q1w)93GMixec5||l`j4T-jX$C4Vz5!#K1k}v@xi~p7-B>TVD93;gq>rDG@jnX-GZP~lIEly#gZLZbTmnHU*B zp$AR`EX>Tz84L!gOoj}fl^=XM`PNG4LwJg~`lKTnOI9xa{#>}auhDF-_TKw^GK;%b zeNpOn3wt7*w7@@?cQTVfLe&G!86rDAuU}N9Yd%%#<@Neld%h*NPdt{meQg7)HFI#y Ti@C)%Q=NrX-G3D`MCbwlTQ>T= literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-15.der b/src/trust-fixtures/intermediate-15.der new file mode 100644 index 0000000000000000000000000000000000000000..b991e83c61164df69553ae5d46279803576ad137 GIT binary patch literal 969 zcmXnKVm@ln#I$w+GZP~dlOV&jrSB81E%}Y!&$(|hzg)x7fR~L^tIebBJ1-+6H!Fid zwIR0wCmVAp3!5;LyOW``fh35-!6W2el$uzQTBP8cn3tT9T3nJ^WGG<32a;sxVGmBs zNy{%vF_bcp0Euw%2s-EI=BMNn0X`|9UT>%Q;SM6(=wA2 zOHvhrQ;W(nlT(WgQ*aIjxk6XL-PqZn%s_yRU8~LGoGlY08>@CB z3xg7K5(CT54-b;vnU>92w(72n&EKRW(zBOr;#A43tt@$-DJ7J@GwZjV$)Ug2N53?) z$*aX4TH0b}Qmh=vVz#ND<#U^IGFxTCqX0XmVBJ(V<*35cMUe~Nd*+u&$KQKiQN;0N z$FKK`n;3Nrniw^}At0;FB4HrbAhJM^OWAJPNA@?5)@#0RT3Ua>V96E(SvKZSSw0pq z7Lj-P#hShO`m4(NEi;Y8@jggg=otfFd2qdV$qHUmQz`@3r-pIqq!f3$D#;wi9$imp%r^v{_ zXu!wD1Lra|dKfr^^vJW=7+4utEHGPO(q@!VQc_^0ub*6$qnDfyir?f!5JTV5(Ge*= zVbQ6VT$E#A0&@f-Ba4QCnt=+8Z@}0l0W~i_xwrsiPJT*0#6Yw}2^ez|BO^nCD>G4fkcIR#`-^^PspKBTC;!?AwxIlacH%9oU>(NW;O^jUiEDTD_NenE-omC57+x$J%E##p8>%;0J4;8i7_r5FdI{8jFcZdBN4W2mGMa)2ijYFG_k(HI5nGw!nGKdA~ zR$vJ;2r;l^_Pc|?I`AVL}z(CJHXMxrNjW#u? zDal1SNEYea7v<-dl;jjAC#Dt_{;{wc5Bo5M6`d!`<{ zbNfu8V*go-OH2lF%WQ8eFFLkr)<>SGMRVBX^fz>0_gHzMf0oU;jgF6+CjDG4)7x_I PgU$C`j$6C_?A;9jIavo; literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-3.der b/src/trust-fixtures/intermediate-3.der new file mode 100644 index 0000000000000000000000000000000000000000..b3da3b9bd2d6eb2955f9ec195597895d5467b2a9 GIT binary patch literal 978 zcmXnKVm@ck#I$VzGZP~dlOV%OC*{2_^(Xp8?Oe0^?;3Lf170>xtu~Lg@4SqR+^h@+ z)rQ;#oNUaYENsF|?oNi%29h8S2ak|@QEFmIYLS9(VqS7aYH>+wk)ePAA4rm&hdnqk zCoR7y#ZbyX0wlu4Bj}u;o1c=e;Owa2lbM@YlA2Ui zEDTD_NenE-omC57+x$J%E##p8>%;0J4;8i7_r5FdI{8jFcZdBN4W2mG+&&c?ng@u`kk z$N(`yl|{@zgpEU+jggg=otY8NVlprUX;EO&GSD#KU}H;f$7)@Ea5VQlVG zWMp7O;WFhJID@pvv)C9|8CWbZTVT>=lu=SrV5P60T$H1ioDYiVt$)3N3Cb zUR!_8lc(*$dA&_{FYoBS`S-9x;d`y?5n_kWgzO1pF#q9Z!NvD!)-9&H!sk?@qhgD1 z{$4Ns*-zohiGTM#Op>!*YVtLqsF&}o5}*2~p5~BRgAFMiYi{SbI7m*s*W1g^CMNrS z5r^sIn)AyJnyx4dyclup@S+WSmfNzbEQ(v;vU}O(JbQ7|R1SsvbG_HB^ZGY~{XEl$ z|DpS(+a_4|cE>GyYIiG1)=T2&l%4s^Y?*EKo0jIx+10!8l7HINJKxF{+0GMKl>Fqf H!sCemV@5)! literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-4.der b/src/trust-fixtures/intermediate-4.der new file mode 100644 index 0000000000000000000000000000000000000000..77d8e3e9f689b534287d0857e5a29eaf4096f982 GIT binary patch literal 876 zcmXnKV$LvVVtTuPnTe5!Nr2(_5xIYpZm52UTh}7x)pXE+i;Y98&EuRc3p2Apm?5_T zCmVAp3!5;Lr=Ov!fij50#UqpITbhzll&BDrnw*iBpOc@SnOdyilbM@YlA2^w0nj4&%o~IC$pI@R7;uEak?5Lot;BIUnC(dhRYG7h)U}$DwY-|`M&TC>|U}9up zXklz%U=U?sk7Tc(kD;)EAjm*29xj-@PGN@929h8_W*#9|Uj^4NWb>U2$_xb9*umal zVq|00Ze(FlVoqXUQN6t)D&_L@TigOcFJFb^c~rlDHD~VJj0Hzu-TC*vblL2!*Zwem z(f)lZZwvR?lmlgTX8$k5PG2E>bQMp|RDUFBPcJz?*MJvED^rC5I~!|yBM&2^K`G1xMn;xQgLDHG7~g=gO#*6SesXbvZW6L- z_Hb29ZN^YlfMK;)KRLCiq*&k8*EKA}C)nB1-PlR5z&zQ&9ONl^76Su41Dyq03pCo) zpr#}jhYUWG^gES^XhA*@Be!nGU>9kOsOY?B;Bd+Wciz4-V9G4##&foFy;@@_a*gG1g z7Yrc8QsoU}VXVR%za|PNq@q|C$B{XGsf8*4OM=N&R Ssxr8L{)bFkm5NW3%s~KD+YH$N literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-5.der b/src/trust-fixtures/intermediate-5.der new file mode 100644 index 0000000000000000000000000000000000000000..72065df22133f45343d9cfb99a05da6dae883bb7 GIT binary patch literal 977 zcmXnKVm@oo#I$t*GZP~dlOV&59~p7}+Ba{gFs+D^k=t%)z{|#|)#lOmotKf3o0Y+! z+K}6TlZ`o)g-w{r-N{heKoZ2^;1O~!N=+mR zq~#Z-7)lvPfJC@>1fBD9^HcH_oE;T>GIKLaQd0~S4dg*`%sdi~j*be>sYNB3X_?81 zC8-L*sYPX($*IK#a^k#3rUs^lCI(;-CC+PPVQ6G*Xk=_^X=)i|V2|WDKOaM313{39 zTs&NZrVroH;>k9zHeGuf5BkM76Vx}=1^Ha z7BLnPyE_UuJKbiqSGU{WXmsBcBYMM~4IJLG{EUqMSy-5v7}*SjK+1(dd=3LPM#le4 zj0_MXR9VCfMA$gA*%(<_*_j#PEG7d3kQN0NO#^iUb~e`ZMjl2+170?6Z8k<0#^ydn zMg~+aQ-y&uNQXR&je(Vc#R9VhCT&I;B_#z``ufR5IeN+YpmWHY-f<~~#m+e!)SkWXo*HLN)*Z literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-6.der b/src/trust-fixtures/intermediate-6.der new file mode 100644 index 0000000000000000000000000000000000000000..8fe252037d13cf433becf937b74f68930dd6e273 GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!i9e!S&qjO4*@bpeLY%73iUwS499nH2=WJP+nGM1WxeYkk zm_u3Egqb}33{?%3K^!g~nN;7>l#HT8g^<+bjJ*7u{PfJ!Vg;Yf+{}{H6hj3AIgm1D z9`V%N;LP+qg`oWW5`_?-U+&C<6y1dqaZ_MGS;M26FLm!|e6UOE#1?kOYY`^9Z^6D!7CpTi|R^W+1@E4)zBV zBO9xBBMXBPa}ooKRaHgOi6g#7zIQX3tBV~|P6_mTShU3W zaWX&CUWo?tn@>gN&n~|`Wl`h(8P)o)I=V~t{_DTxBQWz_&cdl_|Li_I{kCCNXwI4L zrL2kfrL|mS85cJ(PBUm?oMa%+#vCfE%pzeR)*$lGYPDj`$H%@Q>#h`S|Jxnuq%a}G zKo+Eck420{WL=#=jE&~BgDc$CStCC_u)Xq>>oY`Jl|{@zgpEU+jggg=otY8NVls#Y z=~iF~GYB!TWaHLmV`O1$?o(uBU^LJ&(1599Vic3fC@Cqh($_CaEyypnKOU}8Plw!ca#+Kg5!^p&FPzp1Gk&z|SAl*O(#y4PWlYknTpIls^n~ZFn zJzN!2n=w=sU|22IPfjf=Db{!ObqNdc33hgLH+I%5Fi$ox2l+~##lS$%Kxcv00*y8` zs42-sIY<`i+ZW~Mmz3lbCnu&G>m?WE81R8K@-s62XJKJxVq^m+7g=EtpTmHSk?}th zBLi}}X3k(RNM$l)ILLdWv}fV5cae9tme;=LuD%K`VG1EW!60YoD!3av8i~#3_M(4~v!G59ED+>Uwwv~m{mrBGn(v#I)?YAKvc*7_jX6}7 zk420{WL=#=jE&~BgDc$CStCC_u)Xq>>oYjOW%(Hy|Ff_#GcmG(13*?7#OE+zV`Ti# z#K-_KLX}0#K!lA$n~jl`m7SRp&SEk!1lgd#qGh0Az`@3r-pIqq#Av|F#;wi9$imp% zr^v{F%4JG1a0Y3SXR$G`GO$=+w!oy#D5IpLz)D{~xhO|3IUf|$$%!C_zN4cfQq004 zRxi0I$G`;U21Z5}4Ffd;6&T-uu}uPMUVd_M0mz*ElzfPRXvq^W<|al)hV|Qi8OxUX zG$n)^zJ1~Nb47AkmBy+Cr(S;WtDk(@uJ8BCXJt$y-RmzE?%5mTiwqQyzJhV$Lc+ww*0%i zsc(@{F8Aed36YnME$-->$Lnhz>AzvQn6!&?d)W7^C(k|ItlPLlICQ$L%J@&+(-(DGl9~Ih=bMwN Iu~~U303;+#MF0Q* literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-8.der b/src/trust-fixtures/intermediate-8.der new file mode 100644 index 0000000000000000000000000000000000000000..3e4312b3ef824470da901205e6a4065ed9153ce1 GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!iC;5Q?U4H7g+a-aHcn|;%3{F9#-Y{ban6>7nb{!BklTQh zjX9KsO_<5k&rsDs8N}h@kxBI}P01)qR0v5;&dAHp$xqKrEmrW!%*`xGO)*q3kOL`W z<`GZL4bDu@QwYk>FHs2b3081+RM1s$H#U$H=QT1lFfleTG&MFiF^m%DH8C(SF|shU zFg7qSh%#_MvNtr?P{cq8WFQw0H_TqoyktXZ14)o5Gmns~uY!LVvIWitWd;Il>|lQ| zF|x60H?lA&F()yw2sZ_u4O%m4#=#S-Zk8L#zMlS^b1%2gf;CHHPpl2R^JlJT=fcQ3 zt3ZW^@2?pivy(7Ab?VWK%w>9FhA$R1Hm(j!%smo2v1+WxmY(n(=L zh=D9f0UwJPi-^gqS3Ivza^3oQ;pn5cvnx)v&y&u9NUO4l8HliPXtOc0va&NX!dXlP zu^`>z2>lB`n4_#N)H>{QW S`)JGTZy#43opWz0cOn3C;0J2} literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/intermediate-9.der b/src/trust-fixtures/intermediate-9.der new file mode 100644 index 0000000000000000000000000000000000000000..8aecb89764df6901169db5aa07e4d46727ffd836 GIT binary patch literal 979 zcmXnKVm@!s#I$_@GZP~dlORKHl!xHtd0*VG7Yd%e*)r>;0WTY;R+~rLcV0$DZdL|^ zYC~=VPB!LH7B*ofcPB$>14$5vgGb1{C^fMpwMfA?F)ukIwYVg;$WXw54Sa%}>c!aCTJi$;{0xNlh_SG>`|$G4n_`Iyx#irxulDre!84 zmZT~KrxulECZ`q~$cghBnHrcHnizmVlsK=Eg`ttLp^>qvrKx3Z{-%rV!#240499g1fP^L79O78@pDU$2nUjMmARM zMivGo<|GCd;ikZ|L2D+>ICx^!&2l5z*VCVK?&bDbux4rOiM4@u{>&BaTo_qr6{zs= z{WZg5b`qwiPCc5DxlB*Y@WrCW#?@hoxkq9rcJ1N(yqYihe5KZsJ8z5I_nGfrni(=* zhG|p5+w{dvjHU)njE3MKkX2@pFc51HSs=)zY&Y#A`y0Jg-l3-THaq=%cr@D^9l0lgbTm znHU)$MyRrg8HliPXtOc0va&NX!dXlPh9DahShNf@3^>@>(i?dgnV1ZC*|@dY7+Dyb z`xF@&7*V)Pc?QlPE%Gcj237_Z3(OXnv>9cTloVL$>n9iG=q2ZaVmdhy#L#zibVQ0- zSj6fj7v&h3z}&#d$f9AOW}pJ&8!)y>K+VffE-nC>lb@0gF%T_z0><3L$jBfU_AqV6 z!wDZ593%W?r5$+}zUtBz<&eVlMf=igzmm|o}0b0=Gy{$eb-f=_V|R^wH*$&ef*}l%Gw|&>0Om^KNCHdQf@lhSo2+r;b-V>>o_H=pFlMD7 zjgxc}6BBh)bHT>zm8a@vB$lP>Ch8UxMPxuQ%a$uHq$b_sczL1+sqj6C-USAO5N?o3L}{>e9wd8V}~R z@V<<(WHEmJi>*TTfykr{iyK!PG_Ek7Pu`n~SHy8+m z_^K>CppepLV`ODzXJ#}o1_=tX=on}<5$_RMkS0DBF&2?E7wqOO@DZMt?{e_yv?uy= z-Z<61FpvjHE3-%#h&71JzL6TZ{`qqq^R*oBG9_>BH*Zxtu~Lg@4SqR+^h@+ z)rQ;#oNUaYENsF|?oNi%29h8S2ak|@QEFmIYLS9(VqS7aYH>+wk)ePAA4rm&hdnqk zCoR7y#ZbyX0wlu4Bj}u;o1c=e;Owa2lbM@YlA2Ui zEDTD_NenE-omC57+x$J%E##p8>%;0J4;8i7_r5FdI{8jFcZdBN4W2mG+&&c?ng@u`kk z$N(`yl|{@zgpEU+jggg=otY8NVlprUX;EO&GSD#KU}H;f$7)@Ea5VQlVG zWMp7O;WFhJID@pvv)C9|8CWbZTVT>=lu=SrV5P60T$H1ioDYiVt$)3N3Cb zUR!_8lc(*$dA&_{FYoBS`S-9x;d`y?5n_kWgzO1pF#q9Z!NvD!)-9&H!sk?@qhgD1 z{$4Ns*-zohiGTM#Op>!*YVtLqsF&}o5}*2~p5~BRgAFMiYi{SbI7m*s*W1g^CMNrS z5r^sIn)AyJnyx4dyclup@S+WSmfNzbEQ(v;vU}O(JbQ7|R1SsvbG_HB^ZGY~{XEl$ z|DpS(+a_4|cE>GyYIiG1)=T2&l%4s^Y?*EKo0jIx+10!8l7HINJKxF{+0GMKl>Fqf H!sCemV@5)! literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-0.der b/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-0.der new file mode 100644 index 0000000000000000000000000000000000000000..54bff9ecd9b1ecc6c422bd3be6b196e2ec1114b7 GIT binary patch literal 572 zcmXnKVzMx3V%)cYnTe5!NyN6|(D$9zc~98WcU4viT=~dcv{uf5i;Y98&EuRc3p0~} zy&<;&CmVAp3!5;LpO2xifgp&(#lw~ATbhzll&IhoW+-hS2@+)H5pwla@DEc6@d;LN zc2v++a5r``kQ3)MGBY$VGB7YOwKO)566ZBCH!w9YHZU|WF*c7f&^OdI(1vJN$uHAQ zH%`(`%>^5+SDvbykyw_ho2Xk*l%JH7nyZ(bpKB0lAk4-Nb{`WX)S=9b?95IKEWC*s z_IsajMo)I-ecA2I@hhw9%lkynmbOEpOZPvVCoRnu_~pdzL=WFio!W}i91~Qla~Ga} z$(yjZs);FjL1)a~#f{4i8kZRGurY_q3NtePXJIm6FyI66_yGg)SeTjE8w`X&d{q`6 zP$+4$F|x97>kHVySc^YTr;`4ZPMP_vpDn;ubCMd z$b+PnStJa^8boH_NDW;7{JD<#T8?*_k~jC8x2)p=Sq=^Y7G@^q3NmHSuVLxn$k0uHTvH6%F+uKiY(Y(?#N^iCzCNf zOuV^e`n`kO7k$5OaOL<7_SyaiufI#46?f%O@kI;UGxIo`1@grgUG{hGi=77m!7#GW literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..ded8f517c2001ceb868112089213ab5f314f1dbd GIT binary patch literal 874 zcmXnKVooz?VtTuPnTe5!i9cuU;`HA#0t_8Oe2bW_W*Bg>acH%9oU>(NW;O^jUiEDTD_NenE-omC57+x$J%E##p8>%;0J4;8i7_r5FdI{8jFcZdBN4W2mGMa)2ijYFG_k(HI5nGw!nGKdA~ zR$vJ;2r;l^_Pc|?I`AVL}z(CJHXMxrNjW#u? zDal1SNEYea7v<-dl;jjAC#Dt_{;{wc5Bo5M6`d!`<{ zbNfu8V*go-OH2lF%WQ8eFFLkr)<>SGMRVBX^fz>0_gHzMf0oU;jgF6+CjDG4)7x_I PgU$C`j$6C_?A;9jIavo; literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-2.der b/src/trust-fixtures/ov-g3b-emudhra.we-have-a-problem.com-2.der new file mode 100644 index 0000000000000000000000000000000000000000..76baf7160f57e167399b56a31de806559275cf44 GIT binary patch literal 888 zcmXnKVlFXgV*0s&nTe5!Nq}LRl-+OP$nd-i4y;=;yrK=b*f_M>JkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>z(skhRAi;Y98&EuRc3p0~} zgCVy8CmVAp3!5-gXt1G(fe?tp#lxNITbhzll&IjDmux6)APEv><`HuBRqzi}2=NJ4 zaCTJCRd6?UHjoqNH8L|aFfuSOGBPqTiW28FGB+?aFg7qUGB+`bGB7qYG|-1=*T^r^ zO*c-~O-xMGP0adap*UjA5rQs3s{*z@b|S}bl{ZP2*FfQOAaR92Xg@jnZb0fPY_h{q4&0mj12#NJ>a z4C1S@@PL9!n~jl`m7STwvSj1RFtQW|*w2?PGiH^ zGP|?qE*i*#q?K7D48$5lOkTa>d3}=W*3Sz^AHAJjak71$bPmV?;9y{3W@64@Fi2%G zWcb^6Aidelux@ZJ#$}S@nen4%3E@ROZJBaRv++hVQ%tH|I-x9 zWFT!R@`SPAXB&r+^rGF%of*$px~5F~HvQA{(wW)YE`_md{^O8!=W$1N>TEBiwX#<) F0suTazW)FK literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3c-aaa-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/ov-g3c-aaa-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..8aecb89764df6901169db5aa07e4d46727ffd836 GIT binary patch literal 979 zcmXnKVm@!s#I$_@GZP~dlORKHl!xHtd0*VG7Yd%e*)r>;0WTY;R+~rLcV0$DZdL|^ zYC~=VPB!LH7B*ofcPB$>14$5vgGb1{C^fMpwMfA?F)ukIwYVg;$WXw54Sa%}>c!aCTJi$;{0xNlh_SG>`|$G4n_`Iyx#irxulDre!84 zmZT~KrxulECZ`q~$cghBnHrcHnizmVlsK=Eg`ttLp^>qvrKx3Z{-%rV!#240499g1fP^L79O78@pDU$2nUjMmARM zMivGo<|GCd;ikZ|L2D+>ICx^!&2l5z*VCVK?&bDbux4rOiM4@u{>&BaTo_qr6{zs= z{WZg5b`qwiPCc5DxlB*Y@WrCW#?@hoxkq9rcJ1N(yqYihe5KZsJ8z5I_nGfrni(=* zhG|p5+w{dvjHU)njE3MKkX2@pFc51HSs=)zY&Y#A`y0Jg-l3-THaq=%cr@D^9l0lgbTm znHU)$MyRrg8HliPXtOc0va&NX!dXlPh9DahShNf@3^>@>(i?dgnV1ZC*|@dY7+Dyb z`xF@&7*V)Pc?QlPE%Gcj237_Z3(OXnv>9cTloVL$>n9iG=q2ZaVmdhy#L#zibVQ0- zSj6fj7v&h3z}&#d$f9AOW}pJ&8!)y>K+VffE-nC>lb@0gF%T_z0><3L$jBfU_AqV6 z!wDZ593%W?r5$+}zUtBz<&eVlMf=igzmm|o}0b0=Gy{$eb-f=_V|R^wH*$&ef*}l%Gw|&>0Om^KNCHdQf@lhSo2+r;b-V>>o_H=pFl z4u;$YoNUaYENsF|p}~eC20|bX7Y}!;Z)r+KQKEupUb3OIfh0(jnMcUgSHV9_A;c$G z!P!wkSHa!b*+5R5*T~G!z{tSBz|_*%JW8C`$lSoxz}Udhz{J=*%0S;x*FYPhT_wLv zH{Cc{H#HY*wqALvZbo8Rs&1lgK~a8EPHL`Ra(=Esq=7ISJJ^9tj8K;{GqN)~F|eE# z`r=;JeCOi)jD1{7ld`ycimx!uk$n}Qd8vD=^x8}39txe1IT5|&>Fb6y+Loc;I8@S1 z|LNaKSs^dOn-6Xa)ZVt20U!cp|Zk^jQ?4f3>XafKs`Aq&#L$0EievR>OU|5f47eKoxQ=RW)VM{3Ho z-+v6`LDI@B5(Z)oA||h1@w`6Cb?fJaqmSOst~l8~PdW!=IXDPdn3#I?38E#i?I`vI;(V3p*$6EJ$7zT>&O0sKaGGu6d zYdqnJ+N@0*&w4JA0su}= By3YUr literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3c-emudhra.we-have-a-problem.com-1.der b/src/trust-fixtures/ov-g3c-emudhra.we-have-a-problem.com-1.der new file mode 100644 index 0000000000000000000000000000000000000000..3e4312b3ef824470da901205e6a4065ed9153ce1 GIT binary patch literal 876 zcmXnKV$LvVVtTiLnTe5!iC;5Q?U4H7g+a-aHcn|;%3{F9#-Y{ban6>7nb{!BklTQh zjX9KsO_<5k&rsDs8N}h@kxBI}P01)qR0v5;&dAHp$xqKrEmrW!%*`xGO)*q3kOL`W z<`GZL4bDu@QwYk>FHs2b3081+RM1s$H#U$H=QT1lFfleTG&MFiF^m%DH8C(SF|shU zFg7qSh%#_MvNtr?P{cq8WFQw0H_TqoyktXZ14)o5Gmns~uY!LVvIWitWd;Il>|lQ| zF|x60H?lA&F()yw2sZ_u4O%m4#=#S-Zk8L#zMlS^b1%2gf;CHHPpl2R^JlJT=fcQ3 zt3ZW^@2?pivy(7Ab?VWK%w>9FhA$R1Hm(j!%smo2v1+WxmY(n(=L zh=D9f0UwJPi-^gqS3Ivza^3oQ;pn5cvnx)v&y&u9NUO4l8HliPXtOc0va&NX!dXlP zu^`>z2>lB`n4_#N)H>{QW S`)JGTZy#43opWz0cOn3C;0J2} literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/ov-g3c-emudhra.we-have-a-problem.com-2.der b/src/trust-fixtures/ov-g3c-emudhra.we-have-a-problem.com-2.der new file mode 100644 index 0000000000000000000000000000000000000000..76baf7160f57e167399b56a31de806559275cf44 GIT binary patch literal 888 zcmXnKVlFXgV*0s&nTe5!Nq}LRl-+OP$nd-i4y;=;yrK=b*f_M>JkHs&Ff$uu8*&?P zvN4CUun9AH`WXrv2!c4=!d$7j!I|lK3IX1phN=e2AVDr+nN;7>l#HT8g^<+bjJ*7u z{PfJ!Vg;Yf+{}{H6hj3AIgm1DVR5KlS7&F1p#1z21!qSET?Kbz137VCBNGF2LqkJT z6JukuC~;n6O9OKQOG67|0|SF7gD_Ob!0hEA&R!mvy6fes#Fmk$ufyH?zqvnDFTR0>-#D^V@dzEQVhsD_ZoobovWe`Kv{| zzj(03=(@upZ;?NHl{mQqPc46-@o14(Y5UZRI+AZT3!KyGt``!q>}y+RwtpjIfzC4d z5AMz}Jd2wcOAVSB3k~Gim_uciStJa^8boShnOcOeoavg~curhKPg8D=N3xTFEJy(# zix`W@L#x$_H6I`QhOE0%wEb^)q?5vg5QwxYiv4grVQRC0ssRkE>H5j3MJ2`hkQCwS>~k(>--b{xHjxzeLTg0i;Y98&EuRc3p2Apm?5_T zCmVAp3!5;Lr=Ov!fij50#UqpITbhzll&BDrnw*iBpOc@SnOdyilbM@YlA2^w0nj4&%o~IC$pI@R7;uEak?5Lot;BIUnC(dhRVqj!oVPIisX>1fF&TC?6U}Rtp z<>IM~O40Ve z-H}cT6G9C5K+^n-jQ?3!n3)*a4ERBOVGy6yfSHl;KXSYa15a4_q1+uw_ionIOI?t>y%e^2u}noZ+-= literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/root-1.der b/src/trust-fixtures/root-1.der new file mode 100644 index 0000000000000000000000000000000000000000..a031adf4bf37081669d3f755a1a318cf6ba8e8ce GIT binary patch literal 556 zcmXnKV$v{ZVqCj`nTe5!Nr18c+)4F=VqfRXth>W=R!`f2i;Y98&EuRc3p2Aps3Erj zCmVAp3!5;Lr=Ov!fij50#UqpITbhzll&BDrnw*iBpOc@SnOdyilbM@YlA2;DZy*a& z#>^v@nj4&%o~IC$pI@Tj9IW8%sGzIhZfqbY&TC|1U}RunU}0=*Xc8sPYhr0&WMB^E z(#qO00|7R6u-}*%*;ut3Ss0X=5r69Du{tm^;( literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/root-2.der b/src/trust-fixtures/root-2.der new file mode 100644 index 0000000000000000000000000000000000000000..5c715faed85eae3569262d7f3dd3fa93a62dff60 GIT binary patch literal 1078 zcmXnKVlgskVwPIK%*4pV#K>sC%f_kI=F#?@mywZ`mBFCeklTQhjX9KsO_<5u$xzxr z62#%)5ppj|O)N<*Qt(a8OU_6wE=esi6foceNwV{>2PfvF<)-L1g>e9E*?L;%%+=E*GB;@;^F#YILcofN$J4gHu1I1I`_LsN{K{~#+=7{ZExvtI zH;Tw-|C+tyw}|%o?W@jQOO7w@xy3qjg~f`~;uU6rYhKR#QeoA5p8uxPqZvG__2=_3 z-g`fPrsqf9`)f*krDtq)Kl)Vj;?D^Z$CKvlYd)@4ZP%rG{J`D0&rCA}6z2BdxOeGr z%N*Xg7y2iem>C%u7dIX-XxwWc%f=ik%f}+dBCV96G6 zvXSLyWc<&l3!KdVT)(@zDMwJ4@QO>DFeSx%AoXuKuwHS%(jsFzeJ# zyBl?gZ#mb@gRI@FdGtTWSe?%?59MsX7wnJ|@&3=Y)v0+b-=y!@JctrKHt*)gNDl+W zROXyFFBOa5%w}Hrz-%)y+DmQUl>F#xl1|f=EC$DbkCx5z Lr@l0sHX{!Jzo?y~ literal 0 HcmV?d00001 diff --git a/src/trust-fixtures/root-3.der b/src/trust-fixtures/root-3.der new file mode 100644 index 0000000000000000000000000000000000000000..235e1868581921cf51a8c6a0ef2eb6b70e80804b GIT binary patch literal 594 zcmXnKV)8R+V!XV7nTe5!iOc32`^t<0zFXZb23%|$T5TTZY+0C@4YCcn4LI4DLs{5_ znLParg$)Ej9ByH*)ZF0A^gM+CZ%;#217(mPm#|E#Z)r+KQKCXfYH~(ieolURW@@p5 zPiAgrNotCrf`J@J8MClBRIjVEvqDgQeu;v!qk^u2yRm_sIIp3Ffsvtwp@p%5fkBiw zuZb}dm%ffEGZ0{72ZsX_BO9xBBMXBPa}ooK@=~51xw;p6h12(5AfK?P?#tJJf1!jVleQ68Q%bGa*w(*_cCR`B=nQL~3H0T7<8h>6+bm zPFzM$Q*Mq&vXcQHNSdFK@jnX-GZQ150Y8W@4C1pIFf%g#M~*?}Oa_BACPRjOpA*kB z3CN~QW#1u@*U`$V-^?LC;go!r&kJ7Zs*P)}HgdYZw_d}+QWG