1#![no_std]
30#![warn(elided_lifetimes_in_paths, unreachable_pub, clippy::use_self)]
31#![deny(missing_docs, clippy::as_conversions)]
32#![allow(
33 clippy::len_without_is_empty,
34 clippy::manual_let_else,
35 clippy::new_without_default,
36 clippy::single_match,
37 clippy::single_match_else,
38 clippy::type_complexity,
39 clippy::upper_case_acronyms
40)]
41#![cfg_attr(docsrs, feature(doc_cfg, doc_auto_cfg))]
43
44#[cfg(any(feature = "std", test))]
45extern crate std;
46
47#[cfg(any(test, feature = "alloc"))]
48#[cfg_attr(test, macro_use)]
49extern crate alloc;
50
51#[macro_use]
52mod der;
53
54#[cfg(feature = "aws-lc-rs")]
55mod aws_lc_rs_algs;
56mod cert;
57mod end_entity;
58mod error;
59#[cfg(feature = "ring")]
60mod ring_algs;
61mod rpk_entity;
62mod signed_data;
63mod subject_name;
64mod time;
65mod trust_anchor;
66
67mod crl;
68mod verify_cert;
69mod x509;
70
71#[cfg(test)]
72pub(crate) mod test_utils;
73
74pub use {
75 cert::Cert,
76 crl::{
77 BorrowedCertRevocationList, BorrowedRevokedCert, CertRevocationList, ExpirationPolicy,
78 RevocationCheckDepth, RevocationOptions, RevocationOptionsBuilder, RevocationReason,
79 UnknownStatusPolicy,
80 },
81 end_entity::EndEntityCert,
82 error::{
83 DerTypeId, Error, InvalidNameContext, UnsupportedSignatureAlgorithmContext,
84 UnsupportedSignatureAlgorithmForPublicKeyContext,
85 },
86 rpk_entity::RawPublicKeyEntity,
87 trust_anchor::anchor_from_trusted_cert,
88 verify_cert::{KeyUsage, RequiredEkuNotFoundContext, VerifiedPath},
89};
90
91#[cfg(feature = "alloc")]
92pub use crl::{OwnedCertRevocationList, OwnedRevokedCert};
93
94#[cfg(feature = "ring")]
95pub mod ring {
97 pub use super::ring_algs::{
98 ECDSA_P256_SHA256, ECDSA_P256_SHA384, ECDSA_P384_SHA256, ECDSA_P384_SHA384, ED25519,
99 };
100
101 #[cfg(feature = "alloc")]
102 pub use super::ring_algs::{
103 RSA_PKCS1_2048_8192_SHA256, RSA_PKCS1_2048_8192_SHA256_ABSENT_PARAMS,
104 RSA_PKCS1_2048_8192_SHA384, RSA_PKCS1_2048_8192_SHA384_ABSENT_PARAMS,
105 RSA_PKCS1_2048_8192_SHA512, RSA_PKCS1_2048_8192_SHA512_ABSENT_PARAMS,
106 RSA_PKCS1_3072_8192_SHA384, RSA_PSS_2048_8192_SHA256_LEGACY_KEY,
107 RSA_PSS_2048_8192_SHA384_LEGACY_KEY, RSA_PSS_2048_8192_SHA512_LEGACY_KEY,
108 };
109}
110
111#[cfg(feature = "aws-lc-rs")]
112pub mod aws_lc_rs {
114 pub use super::aws_lc_rs_algs::{
115 ECDSA_P256_SHA256, ECDSA_P256_SHA384, ECDSA_P384_SHA256, ECDSA_P384_SHA384,
116 ECDSA_P521_SHA256, ECDSA_P521_SHA384, ECDSA_P521_SHA512, ED25519,
117 RSA_PKCS1_2048_8192_SHA256, RSA_PKCS1_2048_8192_SHA256_ABSENT_PARAMS,
118 RSA_PKCS1_2048_8192_SHA384, RSA_PKCS1_2048_8192_SHA384_ABSENT_PARAMS,
119 RSA_PKCS1_2048_8192_SHA512, RSA_PKCS1_2048_8192_SHA512_ABSENT_PARAMS,
120 RSA_PKCS1_3072_8192_SHA384, RSA_PSS_2048_8192_SHA256_LEGACY_KEY,
121 RSA_PSS_2048_8192_SHA384_LEGACY_KEY, RSA_PSS_2048_8192_SHA512_LEGACY_KEY,
122 };
123 #[cfg(all(feature = "aws-lc-rs-unstable", not(feature = "aws-lc-rs-fips")))]
124 pub use super::aws_lc_rs_algs::{ML_DSA_44, ML_DSA_65, ML_DSA_87};
125}
126
127pub static ALL_VERIFICATION_ALGS: &[&dyn pki_types::SignatureVerificationAlgorithm] = &[
131 #[cfg(feature = "ring")]
132 ring::ECDSA_P256_SHA256,
133 #[cfg(feature = "ring")]
134 ring::ECDSA_P256_SHA384,
135 #[cfg(feature = "ring")]
136 ring::ECDSA_P384_SHA256,
137 #[cfg(feature = "ring")]
138 ring::ECDSA_P384_SHA384,
139 #[cfg(feature = "ring")]
140 ring::ED25519,
141 #[cfg(all(feature = "ring", feature = "alloc"))]
142 ring::RSA_PKCS1_2048_8192_SHA256,
143 #[cfg(all(feature = "ring", feature = "alloc"))]
144 ring::RSA_PKCS1_2048_8192_SHA384,
145 #[cfg(all(feature = "ring", feature = "alloc"))]
146 ring::RSA_PKCS1_2048_8192_SHA512,
147 #[cfg(all(feature = "ring", feature = "alloc"))]
148 ring::RSA_PKCS1_2048_8192_SHA256_ABSENT_PARAMS,
149 #[cfg(all(feature = "ring", feature = "alloc"))]
150 ring::RSA_PKCS1_2048_8192_SHA384_ABSENT_PARAMS,
151 #[cfg(all(feature = "ring", feature = "alloc"))]
152 ring::RSA_PKCS1_2048_8192_SHA512_ABSENT_PARAMS,
153 #[cfg(all(feature = "ring", feature = "alloc"))]
154 ring::RSA_PKCS1_3072_8192_SHA384,
155 #[cfg(all(feature = "ring", feature = "alloc"))]
156 ring::RSA_PSS_2048_8192_SHA256_LEGACY_KEY,
157 #[cfg(all(feature = "ring", feature = "alloc"))]
158 ring::RSA_PSS_2048_8192_SHA384_LEGACY_KEY,
159 #[cfg(all(feature = "ring", feature = "alloc"))]
160 ring::RSA_PSS_2048_8192_SHA512_LEGACY_KEY,
161 #[cfg(feature = "aws-lc-rs")]
162 aws_lc_rs::ECDSA_P256_SHA256,
163 #[cfg(feature = "aws-lc-rs")]
164 aws_lc_rs::ECDSA_P256_SHA384,
165 #[cfg(feature = "aws-lc-rs")]
166 aws_lc_rs::ECDSA_P384_SHA256,
167 #[cfg(feature = "aws-lc-rs")]
168 aws_lc_rs::ECDSA_P384_SHA384,
169 #[cfg(feature = "aws-lc-rs")]
170 aws_lc_rs::ECDSA_P521_SHA256,
171 #[cfg(feature = "aws-lc-rs")]
172 aws_lc_rs::ECDSA_P521_SHA384,
173 #[cfg(feature = "aws-lc-rs")]
174 aws_lc_rs::ECDSA_P521_SHA512,
175 #[cfg(feature = "aws-lc-rs")]
176 aws_lc_rs::ED25519,
177 #[cfg(feature = "aws-lc-rs")]
178 aws_lc_rs::RSA_PKCS1_2048_8192_SHA256,
179 #[cfg(feature = "aws-lc-rs")]
180 aws_lc_rs::RSA_PKCS1_2048_8192_SHA384,
181 #[cfg(feature = "aws-lc-rs")]
182 aws_lc_rs::RSA_PKCS1_2048_8192_SHA512,
183 #[cfg(feature = "aws-lc-rs")]
184 aws_lc_rs::RSA_PKCS1_2048_8192_SHA256_ABSENT_PARAMS,
185 #[cfg(feature = "aws-lc-rs")]
186 aws_lc_rs::RSA_PKCS1_2048_8192_SHA384_ABSENT_PARAMS,
187 #[cfg(feature = "aws-lc-rs")]
188 aws_lc_rs::RSA_PKCS1_2048_8192_SHA512_ABSENT_PARAMS,
189 #[cfg(feature = "aws-lc-rs")]
190 aws_lc_rs::RSA_PKCS1_3072_8192_SHA384,
191 #[cfg(feature = "aws-lc-rs")]
192 aws_lc_rs::RSA_PSS_2048_8192_SHA256_LEGACY_KEY,
193 #[cfg(feature = "aws-lc-rs")]
194 aws_lc_rs::RSA_PSS_2048_8192_SHA384_LEGACY_KEY,
195 #[cfg(feature = "aws-lc-rs")]
196 aws_lc_rs::RSA_PSS_2048_8192_SHA512_LEGACY_KEY,
197 #[cfg(all(feature = "aws-lc-rs-unstable", not(feature = "aws-lc-rs-fips")))]
198 aws_lc_rs::ML_DSA_44,
199 #[cfg(all(feature = "aws-lc-rs-unstable", not(feature = "aws-lc-rs-fips")))]
200 aws_lc_rs::ML_DSA_65,
201 #[cfg(all(feature = "aws-lc-rs-unstable", not(feature = "aws-lc-rs-fips")))]
202 aws_lc_rs::ML_DSA_87,
203];
204
205fn public_values_eq(a: untrusted::Input<'_>, b: untrusted::Input<'_>) -> bool {
206 a.as_slice_less_safe() == b.as_slice_less_safe()
207}