Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions boring/src/x509/tests/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::x509::verify::X509CheckFlags;
use crate::x509::{X509Extension, X509Name, X509Req, X509StoreContext, X509};
const TEST_CERT_DIGEST: &str = "585e3a58acfd3b4e5e2825659407244ddd93539c";

mod path_len;
mod trusted_first;

fn pkey() -> PKey<Private> {
Expand Down
90 changes: 90 additions & 0 deletions boring/src/x509/tests/path_len.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
//! See https://github.com/google/boringssl/commit/ed00cfde0 and the
//! `PathLenSelfIssuedNotCountedButStillVerified` test in `crypto/x509/x509_test.cc`.
//!
//! Fixtures are generated by `boring/test/generate-path-len-rollover-certs.sh`.

use crate::stack::Stack;
use crate::x509::store::X509StoreBuilder;
use crate::x509::verify::X509VerifyParamRef;
use crate::x509::{X509Ref, X509StoreContext, X509VerifyError, X509VerifyResult, X509};

#[test]
fn test_self_issued_rollover() {
let root = X509::from_pem(include_bytes!("../../../test/path-len-rollover-root.pem")).unwrap();
let int2 = X509::from_pem(include_bytes!("../../../test/path-len-rollover-int2.pem")).unwrap();
let int2_pathlen0 = X509::from_pem(include_bytes!(
"../../../test/path-len-rollover-int2-pathlen0.pem"
))
.unwrap();
let rollover = X509::from_pem(include_bytes!(
"../../../test/path-len-rollover-rollover.pem"
))
.unwrap();
let rollover_pathlen0 = X509::from_pem(include_bytes!(
"../../../test/path-len-rollover-rollover-pathlen0.pem"
))
.unwrap();
let int1 = X509::from_pem(include_bytes!("../../../test/path-len-rollover-int1.pem")).unwrap();
let leaf = X509::from_pem(include_bytes!("../../../test/path-len-rollover-leaf.pem")).unwrap();

// Leaf -- Int1 -- Rollover -- Int2 -- Root
//
// Rollover is self-issued: it has Int2's name and is signed by Int2's old key, but carries
// Int2's new key. It does not count towards the path length, so pathlen 1 on both Int2 and
// Rollover is enough to cover Int1.
assert_eq!(
Ok(()),
verify(&leaf, &[&root], &[&int1, &rollover, &int2], |_| {})
);

// Rollover's own pathlen is still enforced, and pathlen 0 does not allow Int1 below it.
// BoringSSL ignored this before ed00cfde0.
assert_eq!(
Err(X509VerifyError::PATH_LENGTH_EXCEEDED),
verify(&leaf, &[&root], &[&int1, &rollover_pathlen0, &int2], |_| {})
);

// Int1 still counts against Int2's pathlen, even with Rollover in between.
assert_eq!(
Err(X509VerifyError::PATH_LENGTH_EXCEEDED),
verify(&leaf, &[&root], &[&int1, &rollover, &int2_pathlen0], |_| {})
);
}

fn verify(
cert: &X509Ref,
trusted: &[&X509Ref],
untrusted: &[&X509Ref],
configure: impl FnOnce(&mut X509VerifyParamRef),
) -> X509VerifyResult {
let trusted = {
let mut builder = X509StoreBuilder::new().unwrap();

for cert in trusted {
builder.add_cert(cert).unwrap();
}

builder.build()
};

let untrusted = {
let mut stack = Stack::new().unwrap();

for cert in untrusted {
stack.push((**cert).to_owned()).unwrap();
}

stack
};

let mut store_ctx = X509StoreContext::new().unwrap();

store_ctx
.init(&trusted, cert, &untrusted, |ctx| {
configure(ctx.verify_param_mut());
ctx.verify_cert().unwrap();

Ok(ctx.verify_result())
})
.expect("failed to obtain X509VerifyResult")
}
101 changes: 101 additions & 0 deletions boring/test/generate-path-len-rollover-certs.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
#!/usr/bin/env bash
# Generates the certificates used by `boring/src/x509/tests/path_len.rs`.
#
# The chain models a CA key rollover, where Int2 re-keys itself by issuing a
# self-issued (same subject and issuer name, different key) certificate:
#
# Root
# └─ Int2 (old key, pathlen 1 or 0)
# └─ Rollover (Int2 name, new key, signed by old key, pathlen 1 or 0)
# └─ Int1
# └─ Leaf
#
# RFC 5280 says self-issued intermediates do not count towards the path length,
# but their own pathLenConstraint still applies. BoringSSL only enforces the
# latter since ed00cfde0.
#
# The *-pathlen0 variants are reissued from the same key and name as their
# pathlen 1 counterparts, so the rest of the chain is shared.
#
# CA keys are committed so the chain can be reissued (e.g. to extend validity)
# without changing key identifiers. Missing keys are generated. The leaf key is
# discarded.
set -euo pipefail

cd "$(dirname "$0")"
NAME=path-len-rollover
DAYS=7300

ROOT_SUBJ="/CN=Path Len Rollover Test Root"
INT2_SUBJ="/CN=Path Len Rollover Test Int2"
INT1_SUBJ="/CN=Path Len Rollover Test Int1"
LEAF_SUBJ="/CN=localhost"

for key in root int2 int2-new int1; do
if [[ ! -f "${NAME}-${key}.key" ]]; then
openssl genrsa -traditional -out "${NAME}-${key}.key" 2048
fi
done
openssl genrsa -out "${NAME}-leaf-key.pem" 2048

# issue OUT KEY SUBJECT CA_CERT CA_KEY EXTENSION...
issue() {
local out=$1 key=$2 subj=$3 ca_cert=$4 ca_key=$5
shift 5
openssl req -new -key "${key}" -subj "${subj}" -out "${NAME}.csr"
openssl x509 -req \
-in "${NAME}.csr" \
-CA "${ca_cert}" \
-CAkey "${ca_key}" \
-CAserial "${NAME}.srl" \
-CAcreateserial \
-out "${out}" \
-days "${DAYS}" \
-extfile <(printf '%s\n' "$@" \
'subjectKeyIdentifier=hash' \
'authorityKeyIdentifier=keyid:always')
}

CA_KEY_USAGE='keyUsage=critical,keyCertSign,cRLSign'

# Self-signed root.
openssl req -new -x509 \
-key "${NAME}-root.key" \
-out "${NAME}-root.pem" \
-days "${DAYS}" \
-subj "${ROOT_SUBJ}" \
-addext "basicConstraints=critical,CA:TRUE" \
-addext "${CA_KEY_USAGE}" \
-addext "subjectKeyIdentifier=hash" \
-addext "authorityKeyIdentifier=keyid:always"

# Int2 with its old key, issued by Root.
for pathlen in 1 0; do
suffix=$([[ ${pathlen} == 0 ]] && echo "-pathlen0" || true)
issue "${NAME}-int2${suffix}.pem" "${NAME}-int2.key" "${INT2_SUBJ}" \
"${NAME}-root.pem" "${NAME}-root.key" \
"basicConstraints=critical,CA:TRUE,pathlen:${pathlen}" "${CA_KEY_USAGE}"
done

# Rollover: Int2's name and new key, signed by Int2's old key.
for pathlen in 1 0; do
suffix=$([[ ${pathlen} == 0 ]] && echo "-pathlen0" || true)
issue "${NAME}-rollover${suffix}.pem" "${NAME}-int2-new.key" "${INT2_SUBJ}" \
"${NAME}-int2.pem" "${NAME}-int2.key" \
"basicConstraints=critical,CA:TRUE,pathlen:${pathlen}" "${CA_KEY_USAGE}"
done

# Int1, issued by Int2's new key (i.e. by Rollover).
issue "${NAME}-int1.pem" "${NAME}-int1.key" "${INT1_SUBJ}" \
"${NAME}-rollover.pem" "${NAME}-int2-new.key" \
"basicConstraints=critical,CA:TRUE" "${CA_KEY_USAGE}"

# Leaf, issued by Int1.
issue "${NAME}-leaf.pem" "${NAME}-leaf-key.pem" "${LEAF_SUBJ}" \
"${NAME}-int1.pem" "${NAME}-int1.key" \
"basicConstraints=critical,CA:FALSE" \
"keyUsage=critical,digitalSignature" \
"extendedKeyUsage=serverAuth" \
"subjectAltName=DNS:localhost"

rm -f "${NAME}.csr" "${NAME}.srl" "${NAME}-leaf-key.pem"
27 changes: 27 additions & 0 deletions boring/test/path-len-rollover-int1.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAohf4cV7gujHnSmqLa0n468DkUYFs6SNOVsawrPskqpXPUg0l
Ih18YVn2WO3YwRMPDcRj5DuvJVNX5zx4kYJhsTRrkeCKdvN2IMmfegqdgQMNdZ0F
O1gG+tTzP2ZS5U5q31/cUgq8Ttrx8WOc1BA4pbb26Q9u8i66wXgnNXmy0D0H02JL
Qbn54mQZkY+4HrtBIjDzgfCjhxgFI7OxqfGZ1xFXpu7lPSqkbJ3ybGU9RY9JSvbw
2CWOtkNa4x/7XjgrVRuE0jfpIi9HqdwpB6KjJBqNgTf1fS3adjLxA1wUjiy7aIKG
OERb1nwo4VS80ZbosnNyronrpWJ0HCRSbQnKHwIDAQABAoIBABT5lhgRh3IAoCXU
iKr+/PuAz+quHUpD29DF0DnqG7IJRbUf51S1TRGJ4yNZz8kYLsQAzE5N3NmvIbpV
7GIj5YFZP6w2SqSe14Pho0XXFs+JdhXoljM6LlkJ8lobYxGyJok2Ldvd8MUhdtpe
If6dBL+I4AWDjj8/hcIgSq6US2u/rTmmkFdipOGH8pP4p7gR7XeMlKdykz2t8uar
orTs1fakPbqnhJhXsILxYCoR8pFf37Ucx8NQaRYKx/wlLfkpPnv4QUQouABB3Dr4
tXug/8CxXuod8v1Eb0kDwz2bsQQFupYwJhR5Mv2mOk9KwdPGSo88QeSHU6dBY26C
CeS4AcUCgYEA1ei+TBWfEi67hpIW9Pztb4h9Gd7pTdS5fNZD1uZouYSBNukWKs63
UKj3XcsPF4gDTgd/pmSZ2yW4mZ3ILlB7SwrKcQH/9wcagE+bqSqsV8hO8pNmGhAr
0fZHrIX+mZ5og2vL35KPpwShGUqwWJtut5TjAwvpS+HlowAL8amr2WUCgYEAwf0f
EanNxP8lYO93M61Wp6QtC15v5X/cYRItzy9vu+M6QASz8B+Az2AoeLlcpgZnlrYd
vsI1IN9wgbMRQCk/INLMr4UdLiIWtgfEoP+G0VZbo4R8l01zKDKMbXzHT87itETl
+da0tRiTtyPmVMUeWx6oDa9riPCZwqsfJJANXzMCgYEArrS2p8GI9/q/IjuzEEh7
S/q34idTeUPicvk00xHAOrTkLArXFgNbaT93OV2dZ+SoflRVh3rmxjvat2xMkLce
271mdkHh4sokdOOQCOxXciKhiDGm1Gacw5FYHKobtS/RwHSMQH+dYBXB1bxQpy3b
kYjCmDxkQJuxSB3Do46mUpkCgYEApFRlZlQe4Lt3EZeptdgn6RlVoyTby2E18fEx
Zyp7D4HczXBucYJuXr3JawMzLd2NEQmzRu5DjVZaezSS73RBau/HvwQXhQYRkSAh
fHUZ4umx9WH9HTrZy3qOpQ0n1j6eozEeVDeCm0p3j5PUwYi+P1hH6lfo03dl+Zd2
aUWyXisCgYEAv3H+Js3XxZHIcOw9NeM/UwIHar0mjQED2Zg5iOo+G0sP6078abRY
/gmQAmV2/vAlSl6rd0HGJ+IHGHcCQ5r2QuGQ6+lM5EVm/RCB+6e51i+4YcYIeTkO
tszEh1HO8D3MzIEJ0a2eQLvMyZCORW0jKIlvmO5e/2C8bQetiA/dzOE=
-----END RSA PRIVATE KEY-----
20 changes: 20 additions & 0 deletions boring/test/path-len-rollover-int1.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDPTCCAiWgAwIBAgIUZ9Wex0ml6IMTL1w76kF31xMl8ZgwDQYJKoZIhvcNAQEL
BQAwJjEkMCIGA1UEAwwbUGF0aCBMZW4gUm9sbG92ZXIgVGVzdCBJbnQyMB4XDTI2
MTAxOTExMDcxMFoXDTQ2MTAxNDExMDcxMFowJjEkMCIGA1UEAwwbUGF0aCBMZW4g
Um9sbG92ZXIgVGVzdCBJbnQxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAohf4cV7gujHnSmqLa0n468DkUYFs6SNOVsawrPskqpXPUg0lIh18YVn2WO3Y
wRMPDcRj5DuvJVNX5zx4kYJhsTRrkeCKdvN2IMmfegqdgQMNdZ0FO1gG+tTzP2ZS
5U5q31/cUgq8Ttrx8WOc1BA4pbb26Q9u8i66wXgnNXmy0D0H02JLQbn54mQZkY+4
HrtBIjDzgfCjhxgFI7OxqfGZ1xFXpu7lPSqkbJ3ybGU9RY9JSvbw2CWOtkNa4x/7
XjgrVRuE0jfpIi9HqdwpB6KjJBqNgTf1fS3adjLxA1wUjiy7aIKGOERb1nwo4VS8
0ZbosnNyronrpWJ0HCRSbQnKHwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUs+T2WmxRCsDFYmuES8d6DD0YZA0wHwYD
VR0jBBgwFoAULDw80usaXk51h5y+YQpZOSf6bGUwDQYJKoZIhvcNAQELBQADggEB
AI8shqAF0rXAQ0uLKpBtX9VcSVOxkNpFrgl9au1pHFS/gXRwN6Q4meXgcdxiNQAE
Wp3nxPNLJGkJKeEpBeWfqZ5XY0xsRwGfKhp6YAygZU9Njl+oXD3M94KwnCvUBXl1
wONL0cVhLNnCbyD/Ec0g+3ch5mwgLp6rv47Zvjsd633NrJzfq31Yd8GX/sh7J3LG
22yR2Xd5keapdFXYrvj9zkzKOnXzd26Bo7k5omxOVM9Q0NBzRMPkscXNgJBo8VGE
f2rBLvnjYEx7IJQRzacRfLLdyxAlYLLPIXJaGcbqpP/CGIUL5sf9GXiOimurarDu
NyMgtrAVx02M/mGBCWcQLpI=
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions boring/test/path-len-rollover-int2-new.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEA1typ8Otnz6qOpnXyf+QVNe0wpRgAGcS8jVF6T7RN9KENnPhV
1OwTbO8maTvqVWe+Zt/xynWmaYHLyt9SIFQyqvI6pjenQUvjpTD3uJ8iS0t73qTJ
s4Pbsh0xwWP0fZnLWXsQGFzcJCTo6bwNY4uIOK+hiKWMw6UCXtJnowQaIgpt83ey
nNkbqN1j4ixqND5Wj1o8DqnYXeNrOvoDQ5c54RK5JE0GNixirhixd/hP+wSsRucf
H1d534YvmonQGGTDHtg+9HZPAa0N3oVEyhD0wbTpH5C/Ys3DSPvvYYgNQ4OmHCYg
T8E9RVmL0aJpJ8+l/aAf8iNeMNHqyz470pkgvQIDAQABAoIBABGYDyhltmH4Zub1
mI5laGE6k3WpYfS6OfBegCP/sTR7bahxY2HklPCiIqSSXe1xadN1uhBokuBn2v65
S7nO+zkpTaknvH/pzXHM8TQCf+Xnf/SqzMNw5DARGO5rl20jh1XD8Hz2OaaSCSp+
liAVIGn348PTPpQUsn1+QDNGljc8OfVd+FeG9mrkb45Wm295NwUXvHrf6ivBHF89
k45pj5RaVL/AoaGNQKF8prjEfZSvUDvBIrXDNl7ohRd3AOBdf0i8/gzJ/zR4Ov6Q
8WeNIehVKHVUGTNgAusQ85cyDn53eIF95mDRZS+E5ZDfL7uiOaQOQfC3+lIYBL3K
BcNmr7ECgYEA89EgVOY4L7ZBjwe+IFbrg1khUVYhysEb96v8BemdfVGaRSDYyBUv
E16XiVZ5ynz27u6PII/lkdgmto0et3LuFQtMGJ2ROTrE2kOxpERCdR24hCzGVZNG
lE19pF2ifXl7k4FBXuc/k4/x37E/2FJBeAEQ1pmdlm8DFA/+jOQcu+UCgYEA4Zkm
XWEtaSDQ/9IlgQeU3uJrT97XnsQAbVEHKIwhSHRhGPe5iZAet6BZJcX9NHW8Bxda
qt6i3hOvhOIxz+eujq0jmBk2UvtiQJb9UjfJOrX9pQO/GzJiFIb11INaYMzfHuP0
q7d3YfeEk5gbvsHbHK5Cb8WfwL3CxxgLBC5c8/kCgYEArS0LruG6ZMEqPYI9W9EB
BNFI5fGsnMuepsMEhdqR3xIX5iPXdf396t8T+Rtv9A/ggIL3LCSo5XdGwADqIVjD
nDTi/tTj8mc4rOLKCSfmoDLU/SSkVuH9jpafuCA9qqufx3xWRycvNAtYvA60j1yV
Xbw8DoEbul7tK9HUdpQLiLUCgYAKqgywOVnGMHDwxuRS9yLIbneYLPaQYL+Ma1ol
RoqEPEwivAMfR5rMH15XdMaFZlNfGnGExkV4rgGMDI1CQLd1syWNmROCVLPOTdTn
wA9ZISU+WbD8/iK4ybBxPUxWaxjZAvmb7G5OST8RIw2ctNlAv9QQKI1mtRGyC6bp
qa9nMQKBgQCX1WMQ2mAqlRkO/+h8fiidiVtr+xVb2wKmR3cv578qrhoGFgVXDWll
ysyhk0Dx4Ngs4UZ5D3wYVIo9j7euEay1J3KOtkHvYreaC1pw8ahA/5S4oIAGxAvT
pXMPx725Wb5qqQNvteGkQqKmawQthkWcvUHIhttoA+JgSoOu1RQYyw==
-----END RSA PRIVATE KEY-----
20 changes: 20 additions & 0 deletions boring/test/path-len-rollover-int2-pathlen0.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDQDCCAiigAwIBAgIUZ9Wex0ml6IMTL1w76kF31xMl8ZUwDQYJKoZIhvcNAQEL
BQAwJjEkMCIGA1UEAwwbUGF0aCBMZW4gUm9sbG92ZXIgVGVzdCBSb290MB4XDTI2
MTAxOTExMDcxMFoXDTQ2MTAxNDExMDcxMFowJjEkMCIGA1UEAwwbUGF0aCBMZW4g
Um9sbG92ZXIgVGVzdCBJbnQyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAtdNVtkOd0QZLoSO8+4BtBiokB9aCPFxNdpKisVDwKmvzeAM5p29m5Y4UFRgg
w3xMiTce3KueLW3YJo9RNgdr4+zotVsR9dZO90SyymaW4bYyAbZKaxVRM7BhWvDe
wSReKh5DGUke1Z4wl6wel+KtUoVz7rTL5mZJymVAoXsU++lODTP28doDGffgXyuh
9pL8k8gRyniEC6d/8GH5fRIT+09HDmMSuqsTO2W3+9ZxPQ4dr5SM4KdFT7YAxGrE
ekiubpcip1nHvbyw/yt1MOds6/f96eoiapR7zYNdOfnPtBX3VFRXXT/f9sfrR+e3
crtv98i5TX/EQNjxgFeoEuXhoQIDAQABo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEA
MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUf1yEQszXesMxJykfhvucWpRK8yEw
HwYDVR0jBBgwFoAURhVWdu0BKqHwx54NfD5eHYvL9/EwDQYJKoZIhvcNAQELBQAD
ggEBAHYoMX4K0DxoRH8rs6DJp/QmcFyZxcQxakRuwqgnfNl5QtqeUE2c2WmgjdZv
oDobtyV4mfo1Be3afOQeiEN6OG08mkswZ/ULLsxKkRCQhLcty5iDd4ILrF1j4h+M
uYKMFh/GNQAZFXipbV8mVspJxT/CIIO1q247B7YATlL4kYmFBVwzHQnH4ObEPt5L
H51Zq6y0Ft2AOCX4med1uD4dqtf+2yQEwWG7S+KPdtMPpHingxp29x5wSK7yzljP
UzjKQsQtIC7iYQwzcCrbqaOa/bR79myf9BMdmflvfPScg+Wj/JU5WyNKHYgoAEr4
WTerJ6JhG7FL54n/bY5hJLXLnv4=
-----END CERTIFICATE-----
27 changes: 27 additions & 0 deletions boring/test/path-len-rollover-int2.key
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAtdNVtkOd0QZLoSO8+4BtBiokB9aCPFxNdpKisVDwKmvzeAM5
p29m5Y4UFRggw3xMiTce3KueLW3YJo9RNgdr4+zotVsR9dZO90SyymaW4bYyAbZK
axVRM7BhWvDewSReKh5DGUke1Z4wl6wel+KtUoVz7rTL5mZJymVAoXsU++lODTP2
8doDGffgXyuh9pL8k8gRyniEC6d/8GH5fRIT+09HDmMSuqsTO2W3+9ZxPQ4dr5SM
4KdFT7YAxGrEekiubpcip1nHvbyw/yt1MOds6/f96eoiapR7zYNdOfnPtBX3VFRX
XT/f9sfrR+e3crtv98i5TX/EQNjxgFeoEuXhoQIDAQABAoIBAC8CCc1a8uC5B3GM
K048eDNZTsJl/3q6hF5s77n3Cnh1O1diQhQbNZeQoXmIqOPRbXomMYjsp7LoDLN/
ZwgYaBjfxZQpjN2pf/XmoXC5kDWfpJMTvW6s7rb12V2pG3YEwIGUHFXbtSiWQsrb
uXccKCJHFV94B6Uz+czlW43EI/syeSAk+rQ2M4P5oUJMJNHwcuzlPD4Rx1iH+JNg
kHTUaWddvWygde32h6ZPth9xeVK40pVF6GKhJC38bfUEyIyayH6oj32QqMGjx6a+
e2yb9VfMHsOu102dF4c5LZAbcb+fVWLUzbq8P7cCt/s8XDYJrqZdZHE6Zq5GdlPo
LxbFjx8CgYEA3ORsgquZwiMIaB9wSjTWTb8QQeQaXDJZZoQC46ngA15RDLxe92hT
tF/wuarXqmGA6i/NsM3zjeXC9gcG0xShlemuY4Fp3Q2F6Z2hYQ3DVOTpMPBvmFA5
cmnVT5MBWjfo7YDf/WF9WptlQF6UgVUqex9yTZeyG6wf35C2x8KUIJ8CgYEA0rlg
60NEtR7GmKLi529X6F5WFbLzkAss25l0ZilN0RFn8uy0QS2x5vY9aIP2z2/E35UD
P4M71jBlvEthqwNooi2y7v8iiOP8C6xq8aZGLErgEzY88pr1MSqtjOdfagI8uLAe
gEL4FU3ujBb07JqgF8TWtunhB5laCFvggB17lb8CgYEAtJPoQUqXgCWzkath2Mgp
CZXQbI1VH1npy+zPj94ny5knGQpFeGxJQYPM/3uyow7inJBHzuoO2UmjgA1uftC2
6B8I+T+qk5OijcDXVMgzjwszt1ZXZGTxEZ+DSnIbAO4D9WUNt84i9BdlRqILNU+y
UsT6ZIRGjmjABbwAMH3ZKnECgYBP2zjDb2amTNduGKxskGF8CeQNrRdoSxPg1LKr
1JNM24/NG67j1HFK2Z5D8V6jFfRB1rK4av9OGGE1jkuhB1WrwC3DLKTlw6BMvDZ7
BUwqlOV94lwOhHLPAyFp+HTMM7TXOMcWTEq/qBzysfB3idGJsGq+PrusqYzZBhh5
9LJU+QKBgQDYiwBXo/LElZVtJFa2WbI34q1xg/vaduZT0LskHkk2JrnFwnjKtCws
m98/3M/FIfgU+3ulX170CCCxPTmyRPrr/pESoKLkWWcZzJcYbeMx+ZFNp8NAibR5
CMAZOtrQIJ4//LXux7B31AAkPZ8o5zO3BJ4TriOQkolID7vWB52O4w==
-----END RSA PRIVATE KEY-----
20 changes: 20 additions & 0 deletions boring/test/path-len-rollover-int2.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDQDCCAiigAwIBAgIUZ9Wex0ml6IMTL1w76kF31xMl8ZQwDQYJKoZIhvcNAQEL
BQAwJjEkMCIGA1UEAwwbUGF0aCBMZW4gUm9sbG92ZXIgVGVzdCBSb290MB4XDTI2
MTAxOTExMDcxMFoXDTQ2MTAxNDExMDcxMFowJjEkMCIGA1UEAwwbUGF0aCBMZW4g
Um9sbG92ZXIgVGVzdCBJbnQyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEAtdNVtkOd0QZLoSO8+4BtBiokB9aCPFxNdpKisVDwKmvzeAM5p29m5Y4UFRgg
w3xMiTce3KueLW3YJo9RNgdr4+zotVsR9dZO90SyymaW4bYyAbZKaxVRM7BhWvDe
wSReKh5DGUke1Z4wl6wel+KtUoVz7rTL5mZJymVAoXsU++lODTP28doDGffgXyuh
9pL8k8gRyniEC6d/8GH5fRIT+09HDmMSuqsTO2W3+9ZxPQ4dr5SM4KdFT7YAxGrE
ekiubpcip1nHvbyw/yt1MOds6/f96eoiapR7zYNdOfnPtBX3VFRXXT/f9sfrR+e3
crtv98i5TX/EQNjxgFeoEuXhoQIDAQABo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEB
MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUf1yEQszXesMxJykfhvucWpRK8yEw
HwYDVR0jBBgwFoAURhVWdu0BKqHwx54NfD5eHYvL9/EwDQYJKoZIhvcNAQELBQAD
ggEBAGwJ4h6sNlTy5oSv/vmdZHxRi+7x2G6MaRFAL8IJ15lytwRSx0guMZgObZcp
RPnz4rAnuqwLO7a8+GGWOqWcTaPIphiXgQBn5zW/5Th1p1c8YDIB0Xm2ryQe/sAW
CFy156jZz43ksQBB6VvJnae3vyp3HKF/3mO3PKGma7lRNoOZ1XeylM2ghFZ194fv
i0kDsIoOvILcSOFagpvjt0lLfnSug2kKwmQ7fMi1xQ7a/L2yDUf3n5+DdRrV+o7H
8WPDKbg7iuQTm51F8CERHzZ4BlfbxgJ9Q81ik/+UWTyR82X7zPHGCLyveauadeg4
qttbbvD+zJXbY1OHZ3ZQtAq3rDQ=
-----END CERTIFICATE-----
20 changes: 20 additions & 0 deletions boring/test/path-len-rollover-leaf.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDVTCCAj2gAwIBAgIUZ9Wex0ml6IMTL1w76kF31xMl8ZkwDQYJKoZIhvcNAQEL
BQAwJjEkMCIGA1UEAwwbUGF0aCBMZW4gUm9sbG92ZXIgVGVzdCBJbnQxMB4XDTI2
MTAxOTExMDcxMFoXDTQ2MTAxNDExMDcxMFowFDESMBAGA1UEAwwJbG9jYWxob3N0
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqmzKhsq1d7ronEKCT0G8
dkNWD4POxzv/WGZK896//DdAYW6gXbwEWkbaS7vdytLCEAfxjjy50z5y6U5yoNJk
LCbHTGGlqQzS/FOM8O225B9rVg35F77x7dhqgd/KkejkshamePkkehAlLFgynSz5
WGMFfHCGUjXOhRgbR9ZN8Wb8AW+zT/KtmqMqBqVf9+9WWElP2jI0mMSBaTX4ARXU
tViJKlNP7bnWFuRuYxZoa7g9IBhlfBOZwBhGhPihnYK7DHpsrMst9KdTQbJa6woB
YWelijX/chwI6VNBnwYXikLVZA6iViTc1N9a4/wkw7y1OJpqfnbn0zfVTNuBAC2E
UwIDAQABo4GMMIGJMAwGA1UdEwEB/wQCMAAwDgYDVR0PAQH/BAQDAgeAMBMGA1Ud
JQQMMAoGCCsGAQUFBwMBMBQGA1UdEQQNMAuCCWxvY2FsaG9zdDAdBgNVHQ4EFgQU
uxKB8pUZMpQ4qQFhPOCD8brANbAwHwYDVR0jBBgwFoAUs+T2WmxRCsDFYmuES8d6
DD0YZA0wDQYJKoZIhvcNAQELBQADggEBAEyjdupp2+zB28YD01+g2v8wuqJE7lwn
b6+ldDktyyquonfQevbqOp3HfErw2LM61KwijFGudxOZHFkX+SZ+nx+SmwNbo+zK
HIioewXgX/Hi6uvkb2one97ZlaFNVQGCZMqy8LiNvYFsm6lzD3PivVelbuPOm3Qm
Kglo8mP0jf0Mj3CuCVd7tylBGqm4sCufsVuMvZUTc/MpFXQJVBrBrBfNVyp3O4fX
DRGZJRQR8isG4biA0h6RNToTAbu6CFTkEwLSUSTd8h+C5HTyPgnrQ+9HVVFlB2cS
omZOqkvgqrkH6IMzClzahYF2tpMZIq0dc2GSTkjXwOWVn+R0lxghf5w=
-----END CERTIFICATE-----
20 changes: 20 additions & 0 deletions boring/test/path-len-rollover-rollover-pathlen0.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
-----BEGIN CERTIFICATE-----
MIIDQDCCAiigAwIBAgIUZ9Wex0ml6IMTL1w76kF31xMl8ZcwDQYJKoZIhvcNAQEL
BQAwJjEkMCIGA1UEAwwbUGF0aCBMZW4gUm9sbG92ZXIgVGVzdCBJbnQyMB4XDTI2
MTAxOTExMDcxMFoXDTQ2MTAxNDExMDcxMFowJjEkMCIGA1UEAwwbUGF0aCBMZW4g
Um9sbG92ZXIgVGVzdCBJbnQyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
AQEA1typ8Otnz6qOpnXyf+QVNe0wpRgAGcS8jVF6T7RN9KENnPhV1OwTbO8maTvq
VWe+Zt/xynWmaYHLyt9SIFQyqvI6pjenQUvjpTD3uJ8iS0t73qTJs4Pbsh0xwWP0
fZnLWXsQGFzcJCTo6bwNY4uIOK+hiKWMw6UCXtJnowQaIgpt83eynNkbqN1j4ixq
ND5Wj1o8DqnYXeNrOvoDQ5c54RK5JE0GNixirhixd/hP+wSsRucfH1d534YvmonQ
GGTDHtg+9HZPAa0N3oVEyhD0wbTpH5C/Ys3DSPvvYYgNQ4OmHCYgT8E9RVmL0aJp
J8+l/aAf8iNeMNHqyz470pkgvQIDAQABo2YwZDASBgNVHRMBAf8ECDAGAQH/AgEA
MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULDw80usaXk51h5y+YQpZOSf6bGUw
HwYDVR0jBBgwFoAUf1yEQszXesMxJykfhvucWpRK8yEwDQYJKoZIhvcNAQELBQAD
ggEBAICoxPgo0UKRaqCkaSjBiBs4WKHIQKlxKt+5IRc2wpbkrntFtl0Jn5TeINQI
/7HK1XZoHZGlJaJFrlfjgftAWEGlaIugs1ZVZDIKbaLEdJt5mS54iAaRy95jjp/Y
yESJNB1+tkr/I3ln4OYdXRmaVc4fuyo7WMkbtHdusLYdSAY5MwzGP/sHaRd585UO
OtWaqA3HpheHtoqwYbmbY/M17yHyEDYK9lTnzvyNfHqb7vPpRkYW4Hi8nJA5pQh5
SODKqAlnTONhwAVPn3rBONOnotuJw/VHiSdiBaAmB7wJ6a/lzxG1YZA9cu4wD3K4
0F9aSjR6GM1/RN4qjkryigTrJK4=
-----END CERTIFICATE-----
Loading