diff --git a/Cargo.lock b/Cargo.lock
index 35d9fc0..665cd19 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -132,12 +132,6 @@ version = "1.0.15"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
-[[package]]
-name = "lazy_static"
-version = "1.5.0"
-source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
-
[[package]]
name = "libc"
version = "0.2.172"
@@ -467,7 +461,6 @@ dependencies = [
"asn1-rs",
"data-encoding",
"hex-literal",
- "lazy_static",
"nom",
"oid-registry",
"ring",
diff --git a/Cargo.toml b/Cargo.toml
index e64d832..2017961 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -10,7 +10,7 @@ repository = "https://github.com/rusticata/x509-parser.git"
categories = ["parser-implementations", "cryptography"]
readme = "README.md"
edition = "2018"
-rust-version = "1.67.1"
+rust-version = "1.80.0"
include = [
"CHANGELOG.md",
@@ -44,7 +44,6 @@ validate = []
[dependencies]
asn1-rs = { version = "0.8.0-beta.1", features=["bigint", "datetime"] }
data-encoding = "2.2.1"
-lazy_static = "1.4"
nom = "8.0"
oid-registry = { version="0.9.0-beta.1", features=["crypto", "x509", "x962"] }
rusticata-macros = "5.0"
diff --git a/src/cri_attributes.rs b/src/cri_attributes.rs
index e87a02b..ed3deae 100644
--- a/src/cri_attributes.rs
+++ b/src/cri_attributes.rs
@@ -120,33 +120,32 @@ pub enum ParsedCriAttribute<'a> {
}
pub(crate) mod parser {
+ use std::sync::LazyLock;
+
use crate::cri_attributes::*;
use crate::x509::DirectoryString;
use asn1_rs::{DerParser, Input};
- use lazy_static::lazy_static;
use nom::combinator::map;
type AttrParser =
for<'a> fn(Input<'a>) -> IResult, ParsedCriAttribute<'a>, X509Error>;
- lazy_static! {
- static ref ATTRIBUTE_PARSERS: HashMap, AttrParser> = {
- macro_rules! add {
- ($m:ident, $oid:ident, $p:ident) => {
- $m.insert($oid, $p as AttrParser);
- };
- }
-
- let mut m = HashMap::new();
- add!(m, OID_PKCS9_EXTENSION_REQUEST, parse_extension_request_attr);
- add!(
- m,
- OID_PKCS9_CHALLENGE_PASSWORD,
- parse_challenge_password_attr
- );
- m
- };
- }
+ static ATTRIBUTE_PARSERS: LazyLock, AttrParser>> = LazyLock::new(|| {
+ macro_rules! add {
+ ($m:ident, $oid:ident, $p:ident) => {
+ $m.insert($oid, $p as AttrParser);
+ };
+ }
+
+ let mut m = HashMap::new();
+ add!(m, OID_PKCS9_EXTENSION_REQUEST, parse_extension_request_attr);
+ add!(
+ m,
+ OID_PKCS9_CHALLENGE_PASSWORD,
+ parse_challenge_password_attr
+ );
+ m
+ });
/// Look into the parser map if the extension is known, and parse it,
/// otherwise leave it as UnsupportedExtension
diff --git a/src/extensions/mod.rs b/src/extensions/mod.rs
index da74142..89a4cae 100644
--- a/src/extensions/mod.rs
+++ b/src/extensions/mod.rs
@@ -331,94 +331,93 @@ impl ParsedExtension<'_> {
}
pub(crate) mod parser {
+ use std::sync::LazyLock;
+
use crate::extensions::*;
use asn1_rs::{GeneralizedTime, Integer};
- use lazy_static::lazy_static;
type ExtParser = fn(Input) -> IResult;
- lazy_static! {
- static ref EXTENSION_PARSERS: HashMap, ExtParser> = {
- macro_rules! add {
- ($m:ident, $oid:ident, $p:ident) => {
- $m.insert($oid, $p as ExtParser);
- };
- }
+ static EXTENSION_PARSERS: LazyLock, ExtParser>> = LazyLock::new(|| {
+ macro_rules! add {
+ ($m:ident, $oid:ident, $p:ident) => {
+ $m.insert($oid, $p as ExtParser);
+ };
+ }
- let mut m = HashMap::new();
- add!(
- m,
- OID_X509_EXT_SUBJECT_KEY_IDENTIFIER,
- parse_keyidentifier_ext
- );
- add!(m, OID_X509_EXT_KEY_USAGE, parse_keyusage_ext);
- add!(
- m,
- OID_X509_EXT_SUBJECT_ALT_NAME,
- parse_subjectalternativename_ext
- );
- add!(
- m,
- OID_X509_EXT_ISSUER_ALT_NAME,
- parse_issueralternativename_ext
- );
- add!(
- m,
- OID_X509_EXT_BASIC_CONSTRAINTS,
- parse_basicconstraints_ext
- );
- add!(m, OID_X509_EXT_NAME_CONSTRAINTS, parse_nameconstraints_ext);
- add!(
- m,
- OID_X509_EXT_CERTIFICATE_POLICIES,
- parse_certificatepolicies_ext
- );
- add!(m, OID_X509_EXT_POLICY_MAPPINGS, parse_policymappings_ext);
- add!(
- m,
- OID_X509_EXT_POLICY_CONSTRAINTS,
- parse_policyconstraints_ext
- );
- add!(
- m,
- OID_X509_EXT_EXTENDED_KEY_USAGE,
- parse_extendedkeyusage_ext
- );
- add!(
- m,
- OID_X509_EXT_CRL_DISTRIBUTION_POINTS,
- parse_crldistributionpoints_ext
- );
- add!(
- m,
- OID_X509_EXT_INHIBIT_ANY_POLICY,
- parse_inhibitanypolicy_ext
- );
- add!(
- m,
- OID_PKIX_AUTHORITY_INFO_ACCESS,
- parse_authorityinfoaccess_ext
- );
- add!(m, OID_PKIX_SUBJECT_INFO_ACCESS, parse_subjectinfoaccess_ext);
- add!(
- m,
- OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER,
- parse_authoritykeyidentifier_ext
- );
- add!(m, OID_CT_LIST_SCT, parse_sct_ext);
- add!(m, OID_X509_EXT_CERT_TYPE, parse_nscerttype_ext);
- add!(m, OID_X509_EXT_CERT_COMMENT, parse_nscomment_ext);
- add!(m, OID_X509_EXT_CRL_NUMBER, parse_crl_number);
- add!(m, OID_X509_EXT_REASON_CODE, parse_reason_code);
- add!(m, OID_X509_EXT_INVALIDITY_DATE, parse_invalidity_date);
- add!(
- m,
- OID_X509_EXT_ISSUER_DISTRIBUTION_POINT,
- parse_issuingdistributionpoint_ext
- );
- m
- };
- }
+ let mut m = HashMap::new();
+ add!(
+ m,
+ OID_X509_EXT_SUBJECT_KEY_IDENTIFIER,
+ parse_keyidentifier_ext
+ );
+ add!(m, OID_X509_EXT_KEY_USAGE, parse_keyusage_ext);
+ add!(
+ m,
+ OID_X509_EXT_SUBJECT_ALT_NAME,
+ parse_subjectalternativename_ext
+ );
+ add!(
+ m,
+ OID_X509_EXT_ISSUER_ALT_NAME,
+ parse_issueralternativename_ext
+ );
+ add!(
+ m,
+ OID_X509_EXT_BASIC_CONSTRAINTS,
+ parse_basicconstraints_ext
+ );
+ add!(m, OID_X509_EXT_NAME_CONSTRAINTS, parse_nameconstraints_ext);
+ add!(
+ m,
+ OID_X509_EXT_CERTIFICATE_POLICIES,
+ parse_certificatepolicies_ext
+ );
+ add!(m, OID_X509_EXT_POLICY_MAPPINGS, parse_policymappings_ext);
+ add!(
+ m,
+ OID_X509_EXT_POLICY_CONSTRAINTS,
+ parse_policyconstraints_ext
+ );
+ add!(
+ m,
+ OID_X509_EXT_EXTENDED_KEY_USAGE,
+ parse_extendedkeyusage_ext
+ );
+ add!(
+ m,
+ OID_X509_EXT_CRL_DISTRIBUTION_POINTS,
+ parse_crldistributionpoints_ext
+ );
+ add!(
+ m,
+ OID_X509_EXT_INHIBIT_ANY_POLICY,
+ parse_inhibitanypolicy_ext
+ );
+ add!(
+ m,
+ OID_PKIX_AUTHORITY_INFO_ACCESS,
+ parse_authorityinfoaccess_ext
+ );
+ add!(m, OID_PKIX_SUBJECT_INFO_ACCESS, parse_subjectinfoaccess_ext);
+ add!(
+ m,
+ OID_X509_EXT_AUTHORITY_KEY_IDENTIFIER,
+ parse_authoritykeyidentifier_ext
+ );
+ add!(m, OID_CT_LIST_SCT, parse_sct_ext);
+ add!(m, OID_X509_EXT_CERT_TYPE, parse_nscerttype_ext);
+ add!(m, OID_X509_EXT_CERT_COMMENT, parse_nscomment_ext);
+ add!(m, OID_X509_EXT_CRL_NUMBER, parse_crl_number);
+ add!(m, OID_X509_EXT_REASON_CODE, parse_reason_code);
+ add!(m, OID_X509_EXT_INVALIDITY_DATE, parse_invalidity_date);
+ add!(
+ m,
+ OID_X509_EXT_ISSUER_DISTRIBUTION_POINT,
+ parse_issuingdistributionpoint_ext
+ );
+ m
+ });
// look into the parser map if the extension is known, and parse it
// otherwise, leave it as UnsupportedExtension
diff --git a/src/objects.rs b/src/objects.rs
index bc35594..3da6962 100644
--- a/src/objects.rs
+++ b/src/objects.rs
@@ -20,31 +20,28 @@
use crate::error::NidError;
use asn1_rs::oid;
-use lazy_static::lazy_static;
use oid_registry::*;
-use std::collections::HashMap;
+use std::{collections::HashMap, sync::LazyLock};
-lazy_static! {
- static ref OID_REGISTRY: OidRegistry<'static> = {
- let mut reg = OidRegistry::default().with_all_crypto().with_x509();
- // OIDs not in the default registry can be added here
- let entry = OidEntry::new("id-mgf1", "Mask Generator Function 1 (MGF1)");
- reg.insert(oid! {1.2.840.113549.1.1.8}, entry);
- reg
- };
- static ref ABBREV_MAP: HashMap, &'static str> = {
- let mut m = HashMap::new();
- m.insert(OID_X509_COMMON_NAME, "CN");
- m.insert(OID_X509_COUNTRY_NAME, "C");
- m.insert(OID_X509_LOCALITY_NAME, "L");
- m.insert(OID_X509_STATE_OR_PROVINCE_NAME, "ST");
- m.insert(OID_X509_ORGANIZATION_NAME, "O");
- m.insert(OID_X509_ORGANIZATIONAL_UNIT, "OU");
- m.insert(OID_DOMAIN_COMPONENT, "DC");
- m.insert(OID_PKCS9_EMAIL_ADDRESS, "Email");
- m
- };
-}
+static OID_REGISTRY: LazyLock> = LazyLock::new(|| {
+ let mut reg = OidRegistry::default().with_all_crypto().with_x509();
+ // OIDs not in the default registry can be added here
+ let entry = OidEntry::new("id-mgf1", "Mask Generator Function 1 (MGF1)");
+ reg.insert(oid! {1.2.840.113549.1.1.8}, entry);
+ reg
+});
+static ABBREV_MAP: LazyLock, &'static str>> = LazyLock::new(|| {
+ let mut m = HashMap::new();
+ m.insert(OID_X509_COMMON_NAME, "CN");
+ m.insert(OID_X509_COUNTRY_NAME, "C");
+ m.insert(OID_X509_LOCALITY_NAME, "L");
+ m.insert(OID_X509_STATE_OR_PROVINCE_NAME, "ST");
+ m.insert(OID_X509_ORGANIZATION_NAME, "O");
+ m.insert(OID_X509_ORGANIZATIONAL_UNIT, "OU");
+ m.insert(OID_DOMAIN_COMPONENT, "DC");
+ m.insert(OID_PKCS9_EMAIL_ADDRESS, "Email");
+ m
+});
/// Return the abbreviation (for ex. CN for Common Name), or if not found, the OID short name
pub fn oid2abbrev<'a>(oid: &'a Oid, registry: &'a OidRegistry) -> Result<&'a str, NidError> {