Skip to content

Commit 7192b84

Browse files
committed
Fix tests and add test that proves multiple DC can be set
1 parent 949736f commit 7192b84

File tree

2 files changed

+68
-8
lines changed

2 files changed

+68
-8
lines changed

rcgen/tests/generic.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -374,11 +374,12 @@ mod test_parse_ia5string_subject {
374374
let params_from_cert = CertificateParams::from_ca_cert_der(cert_der).unwrap();
375375

376376
// We should find the expected distinguished name in the reconstituted params.
377-
let expected_names = &[(&email_address_dn_type, &email_address_dn_value)];
377+
let expected_names = &[(email_address_dn_type, email_address_dn_value)];
378378
let names = params_from_cert
379379
.distinguished_name
380-
.iter()
380+
.into_iter()
381381
.collect::<Vec<(_, _)>>();
382+
382383
assert_eq!(names, expected_names);
383384
}
384385
}

rcgen/tests/openssl.rs

Lines changed: 65 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
11
#![cfg(feature = "pem")]
22

3-
use std::cell::RefCell;
4-
use std::io::{Error, ErrorKind, Read, Result as ioResult, Write};
5-
use std::rc::Rc;
6-
73
use openssl::asn1::{Asn1Integer, Asn1Time};
84
use openssl::bn::BigNum;
95
use openssl::pkey::PKey;
106
use openssl::ssl::{HandshakeError, SslAcceptor, SslConnector, SslMethod};
117
use openssl::stack::Stack;
128
use openssl::x509::store::{X509Store, X509StoreBuilder};
139
use openssl::x509::{CrlStatus, X509Crl, X509Req, X509StoreContext, X509};
10+
use std::cell::RefCell;
11+
use std::io::{Error, ErrorKind, Read, Result as ioResult, Write};
12+
use std::rc::Rc;
13+
use std::str::FromStr;
1414

1515
use rcgen::{
16-
BasicConstraints, Certificate, CertificateParams, DnType, DnValue, GeneralSubtree, IsCa,
17-
KeyPair, NameConstraints,
16+
BasicConstraints, Certificate, CertificateParams, DnType, DnValue, GeneralSubtree, Ia5String,
17+
IsCa, KeyPair, NameConstraints,
1818
};
1919

2020
mod util;
@@ -540,3 +540,62 @@ fn test_openssl_pkcs1_and_sec1_keys() {
540540
let pkcs8_ec_key_der = PrivateKeyDer::try_from(ec_key.private_key_to_pkcs8().unwrap()).unwrap();
541541
KeyPair::try_from(&pkcs8_ec_key_der).unwrap();
542542
}
543+
544+
/// Command used to generate:
545+
/// `openssl req -x509 -newkey rsa:4096 -nodes -out mycert.pem -keyout mykey.pem -days 365 -subj "/C=US/ST=California/L=San Francisco/O=Example Company/OU=IT Department/CN=www.example.com/DC=example/DC=com"`
546+
/// Contains two distinct "DC" entries.
547+
const CERT_WITH_MULTI_DC: &str = r#"-----BEGIN CERTIFICATE-----
548+
MIIGSzCCBDOgAwIBAgIUECjoFzATY6rTCtu7HKjBtfXnB/owDQYJKoZIhvcNAQEL
549+
BQAwgbQxCzAJBgNVBAYTAlVTMRMwEQYDVQQIDApDYWxpZm9ybmlhMRYwFAYDVQQH
550+
DA1TYW4gRnJhbmNpc2NvMRgwFgYDVQQKDA9FeGFtcGxlIENvbXBhbnkxFjAUBgNV
551+
BAsMDUlUIERlcGFydG1lbnQxGDAWBgNVBAMMD3d3dy5leGFtcGxlLmNvbTEXMBUG
552+
CgmSJomT8ixkARkWB2V4YW1wbGUxEzARBgoJkiaJk/IsZAEZFgNjb20wHhcNMjQx
553+
MTIxMDkxNTE2WhcNMjUxMTIxMDkxNTE2WjCBtDELMAkGA1UEBhMCVVMxEzARBgNV
554+
BAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xGDAWBgNVBAoM
555+
D0V4YW1wbGUgQ29tcGFueTEWMBQGA1UECwwNSVQgRGVwYXJ0bWVudDEYMBYGA1UE
556+
AwwPd3d3LmV4YW1wbGUuY29tMRcwFQYKCZImiZPyLGQBGRYHZXhhbXBsZTETMBEG
557+
CgmSJomT8ixkARkWA2NvbTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
558+
ANla4cBCTS+6JdEw6kVQHskanjtHbw7F25TZ2tZWC1f/UJuQnpF/JJqADdV6R3ta
559+
xjcGj2ubJnKS1npcdiVN6A95jYggbQqjfZV+Z0cxjL8L4dQ+UPDsNyP8W0+S6UnK
560+
+W813DG/QGXxEFrT8nZIfhyD4qZEtOSFGgp/ZA2f687Svx1+SKiutHeRovEf/OTb
561+
fK4NHhewa1IxiV7shYNy7hhJmDqcsRIhVfuiWn4TU++qB6JTiPATYmzFRALli7B6
562+
g5m8KhvWcdAssgb2+bNpbs3fTcytrqwiNnNYtZ5a7DV0WWH4+wfor7KlomPMviPg
563+
jiFwWWKW/N5dQ+f9vpo7SDOT9Jl26BWj0vJYTceLgkOGwYMXsg7pbWmPH4sL+GNv
564+
WpRG7fDmual98y4DFwD8vHp4Mvax2OWKxfxe6xPqdn7or7D3ZSSyBu//ZlhQ6yMd
565+
F6tLTl2/5VcWdJy0W+FDEnZIHnPm3zyCiplEP4bxY2Blpdnqf5Cx80mz8YSQhddn
566+
gVNrM7iaNnIvRLjFS88w4KMOKbYSPbxEt2eWO4ggVcn1akcifDFTpyInRKQxQkXa
567+
SXH/iu2dm7kuyGwSwrIW1l41vUkT+Lsm/9TFQ3a+UWWzut4oux9oGmcuUP5EiUZb
568+
rWw2GIP2DaluKsZNUh8QIWVccBmX6AaKw3+K0r/tFqShAgMBAAGjUzBRMB0GA1Ud
569+
DgQWBBTru/FFL1lBGB6d1a1xe3Tn3wV/RzAfBgNVHSMEGDAWgBTru/FFL1lBGB6d
570+
1a1xe3Tn3wV/RzAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBCwUAA4ICAQCY
571+
dKu+CYxHb7drJqDhfMXUq2ogZiYI0fYyPEf+rpNpM5A8C0PyG9Um7WZwKAfp38IE
572+
a/McBidxI7TuNq9ojruIyY79LCThz64Z1Nc5rb3sthcygZLd1t98Zh8vaG07kk7s
573+
n2/BMLgHPvm47cUJ1VaQpLwx2tSBaFB+Osroq0ZXMqyO6s7Gyk+hrI+l6b+gqryA
574+
b8kHzbeslxPK6QkDz9Kt+qPkZVRgfKgyqyd0YGoe1LaAwctMdrTPZRzkFRDLYDls
575+
JK/PFi027oljJJzFZ07k9c8WJBeM3xiIHFlxIJ5XehVpLLFEhxX1ypnvku7GeINq
576+
I9356ueSmMPn1BIsLonTOYR3k1hue+giO5AiD6J3yl8OhJStouG3FOZbB5dDRae+
577+
9bdhU4npsmKTmBX/CDUFYJl4yqavEGfvw40p77gaqIOShEBB54ASKDaSyuLSeYbi
578+
3TQsa+JyWmJ5iNmqVsAy8YfioKveNmyl023hRTjtqJgKQY1UzY6M0bnHa0IlgZq/
579+
l4A7hDDsvi3rDFiqvKg/WTEZd5G87E9hwIcHF/bJPc+0+MjelRoxFTSty2bpbniR
580+
p3mmtsYxi+XCHdwUwRLhbBrdu93z5Iy3AWIb7vGeTKznnnDweJzYpfHCXuWZdr/d
581+
z6cbmudPzN1l99Op5eH9i1JikA+DQ8BQv1OgkNBw2A==
582+
-----END CERTIFICATE-----
583+
"#;
584+
585+
#[test]
586+
#[cfg(feature = "x509-parser")]
587+
fn test_parse_certificate_with_multiple_domain_components() {
588+
let param = CertificateParams::from_ca_cert_pem(CERT_WITH_MULTI_DC).unwrap();
589+
590+
let domain_component_values = param.distinguished_name.get(&DnType::CustomDnType(vec![
591+
0, 9, 2342, 19200300, 100, 1, 25,
592+
]));
593+
594+
assert_eq!(
595+
domain_component_values,
596+
vec![
597+
&DnValue::Ia5String(Ia5String::from_str("com").unwrap()),
598+
&DnValue::Ia5String(Ia5String::from_str("example").unwrap()),
599+
]
600+
)
601+
}

0 commit comments

Comments
 (0)