Skip to content

Commit e93ab39

Browse files
committed
add test for SBGP extension
Signed-off-by: Markus Theil <[email protected]>
1 parent d27ac33 commit e93ab39

File tree

2 files changed

+78
-1
lines changed

2 files changed

+78
-1
lines changed

openssl/src/x509/tests.rs

+47-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
use std::cmp::Ordering;
2+
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr};
3+
use std::str::FromStr;
24

35
use crate::asn1::{Asn1Object, Asn1OctetString, Asn1Time};
46
use crate::bn::{BigNum, MsbOption};
@@ -11,7 +13,7 @@ use crate::ssl::SslFiletype;
1113
use crate::stack::Stack;
1214
use crate::x509::extension::{
1315
AuthorityKeyIdentifier, BasicConstraints, ExtendedKeyUsage, KeyUsage, SubjectAlternativeName,
14-
SubjectKeyIdentifier,
16+
SubjectKeyIdentifier, SbgpAsIdentifier, SbgpIpAddressIdentifier
1517
};
1618
#[cfg(not(boringssl))]
1719
use crate::x509::store::X509Lookup;
@@ -27,6 +29,7 @@ use crate::x509::{CrlReason, X509Builder};
2729
use crate::x509::{
2830
CrlStatus, X509Crl, X509Extension, X509Name, X509Req, X509StoreContext, X509VerifyResult, X509,
2931
};
32+
use crate::x509::sbgp::ExtractSBGPInfo;
3033

3134
#[cfg(ossl110)]
3235
use foreign_types::ForeignType;
@@ -1177,3 +1180,46 @@ fn test_dist_point_null() {
11771180
let cert = X509::from_pem(cert).unwrap();
11781181
assert!(cert.crl_distribution_points().is_none());
11791182
}
1183+
1184+
#[test]
1185+
fn test_sbgp_extensions_parsing() {
1186+
let cert = include_bytes!("../../test/rfc3779.pem");
1187+
let cert = X509::from_pem(cert).unwrap();
1188+
1189+
let asn_ranges = cert.asn().unwrap().ranges().unwrap();
1190+
assert_eq!(asn_ranges[0], (10,18));
1191+
assert_eq!(asn_ranges[1], (20,20));
1192+
1193+
let families = cert.ip_addresses().unwrap();
1194+
for family in families {
1195+
let ranges = family.range().unwrap();
1196+
for (ip_min, ip_max) in ranges {
1197+
if let (IpAddr::V6(a_v6_min), IpAddr::V6(a_v6_max)) = (ip_min, ip_max) {
1198+
assert_eq!(a_v6_min, Ipv6Addr::from_str("fd00::").unwrap());
1199+
assert_eq!(a_v6_max, Ipv6Addr::from_str("fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap());
1200+
}
1201+
if let (IpAddr::V4(a_v4_min), IpAddr::V4(a_v4_max)) = (ip_min, ip_max) {
1202+
assert_eq!(a_v4_min, Ipv4Addr::from_str("10.0.0.0").unwrap());
1203+
assert_eq!(a_v4_max, Ipv4Addr::from_str("10.0.0.255").unwrap());
1204+
}
1205+
}
1206+
}
1207+
}
1208+
1209+
#[test]
1210+
fn test_sbgp_extensions_builder() {
1211+
let mut builder = X509Builder::new().unwrap();
1212+
let asn_ext = SbgpAsIdentifier::new()
1213+
.critical()
1214+
.add_asn(32)
1215+
.add_asn_range(10,20)
1216+
.build(&builder.x509v3_context(None, None)).unwrap();
1217+
builder.append_extension(asn_ext).unwrap();
1218+
1219+
let mut ip_addr_ext = SbgpIpAddressIdentifier::new();
1220+
ip_addr_ext.critical();
1221+
ip_addr_ext.add_ipv6_addr_range(Ipv6Addr::from_str("fd00::").unwrap(), Ipv6Addr::from_str("fdff:ffff:ffff:ffff:ffff:ffff:ffff:ffff").unwrap());
1222+
ip_addr_ext.add_ipv4_addr_range(Ipv4Addr::from_str("10.0.0.0").unwrap(), Ipv4Addr::from_str("10.0.0.255").unwrap());
1223+
let build_ext = ip_addr_ext.build(&builder.x509v3_context(None, None)).unwrap();
1224+
builder.append_extension(build_ext).unwrap();
1225+
}

openssl/test/rfc3779.pem

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIFYDCCA0igAwIBAgIUdvq+8DcTNlDrHkAryL2UdkvghPcwDQYJKoZIhvcNAQEL
3+
BQAwFzEVMBMGA1UEAwwMUkZDMzc3OS1UZXN0MB4XDTIzMDgxMTEyMTkyN1oXDTMz
4+
MDgwODEyMTkyN1owFzEVMBMGA1UEAwwMUkZDMzc3OS1UZXN0MIICIjANBgkqhkiG
5+
9w0BAQEFAAOCAg8AMIICCgKCAgEAxkHmL2WyQn/wd0xh05YfBvZt93h9LcijUNPR
6+
9ALora5Z72yJcN2mf0umufJLhNi6oneJPpBx7kd07kksiqffjTu5DobnxwKt9yKh
7+
b3JqYFVhxkdqlTmf7G4k0aVAD2COgv9oEwTgrClU55cOLUEAZ1WZRjeeZvFYKQdP
8+
oT0Fp2aWH+NTqjPC/GUggnBTs+oUd5S2xyqhajSQNdF7rHspXcvW5a8e8Za8pJ51
9+
3wwSLGYatK8KJQrvPsW+RYxtTCKHps9TVFJxNm4IPiIdbKwvFETqmx0TDPpbE+Uj
10+
izBnNYGo94HVWuzHrfWyh95fXwo11YDYoQvLghXgv0xC0nWNFtnZkQunnyhhTZMk
11+
K+2N3NN8kMqD6B05LDeGOd5tT2t5iVot4b8Umem0G3XhqWdwKc2/uso86ld4v1wM
12+
Ce4VADl9dilJsmJzmoDuHxB1YH8bZk3/ugo31fRnaTlJ7OPK8+jpzHgMFEan6igh
13+
ZJI/FKjdzujXShdD6UsVh4UV34g0Uyv2PwCf3ProLojpaNfl+KRZ+axdwnhhdYNr
14+
Zh7npYZlePSzwZmwuLKBBFtSsxo6Ru9JamDmV/NnQQ2tuuv/AByzGsprlDC9NRIq
15+
aABHueqqMxccqpaqrmPKD4qhFZRUX4hDCWbXyqsADrKQXjont2Vta9vaVAlXa/xF
16+
I5AlRzUCAwEAAaOBozCBoDAdBgNVHQ4EFgQUzQnLoR8Fe8Nh7dtLa5M+IVNcnScw
17+
HwYDVR0jBBgwFoAUzQnLoR8Fe8Nh7dtLa5M+IVNcnScwDwYDVR0TAQH/BAUwAwEB
18+
/zArBggrBgEFBQcBBwEB/wQcMBowDAQCAAEwBgMEAAoAADAKBAIAAjAEAwIA/TAg
19+
BggrBgEFBQcBCAEB/wQRMA+gDTALMAYCAQoCARICARQwDQYJKoZIhvcNAQELBQAD
20+
ggIBAKz3jRS9Dq1pfW/lY2ChAG+tPaNH79f2pzsc+SieTVJ3tbCaAA///V7nzgyZ
21+
Yi3QjJVg8P+Ek0KnM3ScRLuiarWM/Vp9uXVdXZGMWJw+G5OJTFhDEXees6WxO/+8
22+
6u9OHp/nIai/w/FFjjw51mVAFcKm9W/izfDKT2HuZNQhCSDBXaVmqjfbBYHBopEn
23+
LUqUb6s3S0SM74NaSstff3W836n+iX3dy1SmmVnaA6tu7oIZKmwBTO6yZYc6FOX8
24+
BUSJzgoCWZLwTlV13G1WtpIG8ap4lEEMilSjU8LwOcfC/3GrWtXIiQp3+1iYaKmO
25+
zfU1axY+Vj2KerXbNOcTUQRazctKMvmd87Y2zuTnaQgwzs52257GlmVQj/K01w62
26+
UT4g84RZ+DvT74f534HK4Ik7lhQbgJO+HlmuED+2I/VPg0k1lpSkvY4zhne62P+l
27+
VAYFq7tOzZSFllZVdAi9UFZkt7s9zPkpU2ed9wNz34DExLWJFXWkgjPWZzRchlUj
28+
t69fpUcqe4is1wNEeOfVnKjyDfkVXBNqSvwkU/WMwazPjx+xV3qdi8rReDQmNx5L
29+
gbv30P1MGeCftOaab2rFvUDlcUE1iClWT8THAUj6E2kaHtP5VA2PKuJHhqsPLIG/
30+
a2o0h6q0lNq4WHZhNzHBa+wc0uPtNRdBgClD/fsgoRK/pAZQ
31+
-----END CERTIFICATE-----

0 commit comments

Comments
 (0)