]> git.proxmox.com Git - rustc.git/blob - vendor/spki/tests/spki.rs
New upstream version 1.70.0+dfsg2
[rustc.git] / vendor / spki / tests / spki.rs
1 //! `SubjectPublicKeyInfo` tests.
2
3 use hex_literal::hex;
4 use spki::SubjectPublicKeyInfo;
5
6 #[cfg(feature = "alloc")]
7 use der::Encode;
8
9 #[cfg(feature = "pem")]
10 use der::{pem::LineEnding, EncodePem};
11
12 /// Elliptic Curve (P-256) `SubjectPublicKeyInfo` encoded as ASN.1 DER
13 const EC_P256_DER_EXAMPLE: &[u8] = include_bytes!("examples/p256-pub.der");
14
15 /// Ed25519 `SubjectPublicKeyInfo` encoded as ASN.1 DER
16 #[cfg(any(feature = "alloc", feature = "fingerprint"))]
17 const ED25519_DER_EXAMPLE: &[u8] = include_bytes!("examples/ed25519-pub.der");
18
19 /// RSA-2048 `SubjectPublicKeyInfo` encoded as ASN.1 DER
20 const RSA_2048_DER_EXAMPLE: &[u8] = include_bytes!("examples/rsa2048-pub.der");
21
22 /// Elliptic Curve (P-256) public key encoded as PEM
23 #[cfg(feature = "pem")]
24 const EC_P256_PEM_EXAMPLE: &str = include_str!("examples/p256-pub.pem");
25
26 /// Ed25519 public key encoded as PEM
27 #[cfg(feature = "pem")]
28 const ED25519_PEM_EXAMPLE: &str = include_str!("examples/ed25519-pub.pem");
29
30 /// RSA-2048 PKCS#8 public key encoded as PEM
31 #[cfg(feature = "pem")]
32 const RSA_2048_PEM_EXAMPLE: &str = include_str!("examples/rsa2048-pub.pem");
33
34 /// The SPKI fingerprint for `ED25519_SPKI_FINGERPRINT` as a Base64 string
35 ///
36 /// Generated using `cat ed25519-pub.der | openssl dgst -binary -sha256 | base64`
37 #[cfg(all(feature = "fingerprint", feature = "alloc"))]
38 const ED25519_SPKI_FINGERPRINT_BASE64: &str = "Vd1MdLDkhTTi9OFzzs61DfjyenrCqomRzHrpFOAwvO0=";
39
40 /// The SPKI fingerprint for `ED25519_SPKI_FINGERPRINT` as straight hash bytes
41 ///
42 /// Generated using `cat ed25519-pub.der | openssl dgst -sha256`
43 #[cfg(all(feature = "fingerprint"))]
44 const ED25519_SPKI_FINGERPRINT: &[u8] =
45 &hex!("55dd4c74b0e48534e2f4e173ceceb50df8f27a7ac2aa8991cc7ae914e030bced");
46
47 #[test]
48 fn decode_ec_p256_der() {
49 let spki = SubjectPublicKeyInfo::try_from(EC_P256_DER_EXAMPLE).unwrap();
50
51 assert_eq!(spki.algorithm.oid, "1.2.840.10045.2.1".parse().unwrap());
52
53 assert_eq!(
54 spki.algorithm.parameters.unwrap().oid().unwrap(),
55 "1.2.840.10045.3.1.7".parse().unwrap()
56 );
57
58 assert_eq!(spki.subject_public_key, &hex!("041CACFFB55F2F2CEFD89D89EB374B2681152452802DEEA09916068137D839CF7FC481A44492304D7EF66AC117BEFE83A8D08F155F2B52F9F618DD447029048E0F")[..]);
59 }
60
61 #[test]
62 #[cfg(feature = "fingerprint")]
63 fn decode_ed25519_and_fingerprint_spki() {
64 // Repeat the decode test from the pkcs8 crate
65 let spki = SubjectPublicKeyInfo::try_from(ED25519_DER_EXAMPLE).unwrap();
66
67 assert_eq!(spki.algorithm.oid, "1.3.101.112".parse().unwrap());
68 assert_eq!(spki.algorithm.parameters, None);
69 assert_eq!(
70 spki.subject_public_key,
71 &hex!("4D29167F3F1912A6F7ADFA293A051A15C05EC67B8F17267B1C5550DCE853BD0D")[..]
72 );
73
74 // Check the fingerprint
75 assert_eq!(
76 spki.fingerprint_bytes().unwrap().as_slice(),
77 ED25519_SPKI_FINGERPRINT
78 );
79 }
80
81 #[test]
82 #[cfg(all(feature = "fingerprint", feature = "alloc"))]
83 fn decode_ed25519_and_fingerprint_base64() {
84 // Repeat the decode test from the pkcs8 crate
85 let spki = SubjectPublicKeyInfo::try_from(ED25519_DER_EXAMPLE).unwrap();
86
87 assert_eq!(spki.algorithm.oid, "1.3.101.112".parse().unwrap());
88 assert_eq!(spki.algorithm.parameters, None);
89 assert_eq!(
90 spki.subject_public_key,
91 &hex!("4D29167F3F1912A6F7ADFA293A051A15C05EC67B8F17267B1C5550DCE853BD0D")[..]
92 );
93
94 // Check the fingerprint
95 assert_eq!(
96 spki.fingerprint_base64().unwrap(),
97 ED25519_SPKI_FINGERPRINT_BASE64
98 );
99 }
100
101 #[test]
102 fn decode_rsa_2048_der() {
103 let spki = SubjectPublicKeyInfo::try_from(RSA_2048_DER_EXAMPLE).unwrap();
104
105 assert_eq!(spki.algorithm.oid, "1.2.840.113549.1.1.1".parse().unwrap());
106 assert!(spki.algorithm.parameters.unwrap().is_null());
107 assert_eq!(spki.subject_public_key, &hex!("3082010A0282010100B6C42C515F10A6AAF282C63EDBE24243A170F3FA2633BD4833637F47CA4F6F36E03A5D29EFC3191AC80F390D874B39E30F414FCEC1FCA0ED81E547EDC2CD382C76F61C9018973DB9FA537972A7C701F6B77E0982DFC15FC01927EE5E7CD94B4F599FF07013A7C8281BDF22DCBC9AD7CABB7C4311C982F58EDB7213AD4558B332266D743AED8192D1884CADB8B14739A8DADA66DC970806D9C7AC450CB13D0D7C575FB198534FC61BC41BC0F0574E0E0130C7BBBFBDFDC9F6A6E2E3E2AFF1CBEAC89BA57884528D55CFB08327A1E8C89F4E003CF2888E933241D9D695BCBBACDC90B44E3E095FA37058EA25B13F5E295CBEAC6DE838AB8C50AF61E298975B872F0203010001")[..]);
108 }
109
110 #[test]
111 #[cfg(feature = "alloc")]
112 fn encode_ec_p256_der() {
113 let pk = SubjectPublicKeyInfo::try_from(EC_P256_DER_EXAMPLE).unwrap();
114 let pk_encoded = pk.to_vec().unwrap();
115 assert_eq!(EC_P256_DER_EXAMPLE, pk_encoded.as_slice());
116 }
117
118 #[test]
119 #[cfg(feature = "alloc")]
120 fn encode_ed25519_der() {
121 let pk = SubjectPublicKeyInfo::try_from(ED25519_DER_EXAMPLE).unwrap();
122 let pk_encoded = pk.to_vec().unwrap();
123 assert_eq!(ED25519_DER_EXAMPLE, pk_encoded.as_slice());
124 }
125
126 #[test]
127 #[cfg(feature = "alloc")]
128 fn encode_rsa_2048_der() {
129 let pk = SubjectPublicKeyInfo::try_from(RSA_2048_DER_EXAMPLE).unwrap();
130 let pk_encoded = pk.to_vec().unwrap();
131 assert_eq!(RSA_2048_DER_EXAMPLE, pk_encoded.as_slice());
132 }
133
134 #[test]
135 #[cfg(feature = "pem")]
136 fn encode_ec_p256_pem() {
137 let pk = SubjectPublicKeyInfo::try_from(EC_P256_DER_EXAMPLE).unwrap();
138 let pk_encoded = pk.to_pem(LineEnding::LF).unwrap();
139 assert_eq!(EC_P256_PEM_EXAMPLE, pk_encoded);
140 }
141
142 #[test]
143 #[cfg(feature = "pem")]
144 fn encode_ed25519_pem() {
145 let pk = SubjectPublicKeyInfo::try_from(ED25519_DER_EXAMPLE).unwrap();
146 let pk_encoded = pk.to_pem(LineEnding::LF).unwrap();
147 assert_eq!(ED25519_PEM_EXAMPLE, pk_encoded);
148 }
149
150 #[test]
151 #[cfg(feature = "pem")]
152 fn encode_rsa_2048_pem() {
153 let pk = SubjectPublicKeyInfo::try_from(RSA_2048_DER_EXAMPLE).unwrap();
154 let pk_encoded = pk.to_pem(LineEnding::LF).unwrap();
155 assert_eq!(RSA_2048_PEM_EXAMPLE, pk_encoded);
156 }