From 52107281df9a812a8a5118b77b95817d8d086749 Mon Sep 17 00:00:00 2001 From: str4d Date: Wed, 20 Oct 2021 02:38:38 +1300 Subject: [PATCH] nom 7 (#322) --- Cargo.lock | 104 +++++++++------------------------------------ Cargo.toml | 6 +-- cli/Cargo.toml | 2 +- src/certificate.rs | 18 +++----- 4 files changed, 31 insertions(+), 99 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 6bec76c..8a2eb06 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -11,12 +11,6 @@ dependencies = [ "memchr", ] -[[package]] -name = "arrayvec" -version = "0.5.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "23b62fc65de8e4e7f52534fb52b0f3ed04746ae267519eef2a83941e8085068b" - [[package]] name = "atty" version = "0.2.14" @@ -58,18 +52,6 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" -[[package]] -name = "bitvec" -version = "0.19.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8942c8d352ae1838c9dda0b0ca2ab657696ef2232a20147cf1b30ae1a9cb4321" -dependencies = [ - "funty", - "radium", - "tap", - "wyz", -] - [[package]] name = "block-buffer" version = "0.9.0" @@ -174,11 +156,10 @@ dependencies = [ [[package]] name = "der-oid-macro" -version = "0.4.0" +version = "0.5.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a4cccf60bb98c0fca115a581f894aed0e43fa55bf289fdac5599bec440bb4fd6" +checksum = "c73af209b6a5dc8ca7cbaba720732304792cddc933cfea3d74509c2b1ef2f436" dependencies = [ - "nom", "num-bigint", "num-traits", "syn", @@ -186,9 +167,9 @@ dependencies = [ [[package]] name = "der-parser" -version = "5.1.2" +version = "6.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2d7ededb7525bb4114bc209685ce7894edc2965f4914312a1ea578a645a237f0" +checksum = "9807efb310ce4ea172924f3a69d82f9fd6c9c3a19336344591153e665b31c43e" dependencies = [ "der-oid-macro", "nom", @@ -268,12 +249,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "funty" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fed34cd105917e91daa4da6b3728c47b068749d6a62c59811f06ed2ac71d9da7" - [[package]] name = "generic-array" version = "0.14.4" @@ -360,19 +335,6 @@ dependencies = [ "spin", ] -[[package]] -name = "lexical-core" -version = "0.7.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6607c62aa161d23d17a9072cc5da0be67cdfc89d3afb1e8d9c842bebc2525ffe" -dependencies = [ - "arrayvec", - "bitflags", - "cfg-if", - "ryu", - "static_assertions", -] - [[package]] name = "libc" version = "0.2.104" @@ -401,15 +363,19 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ee1c47aaa256ecabcaea351eae4a9b01ef39ed810004e298d2511ed284b1525" [[package]] -name = "nom" -version = "6.2.1" +name = "minimal-lexical" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9c5c51b9083a3c620fa67a2a635d1ce7d95b897e957d6b28ff9a5da960a103a6" +checksum = "9c64630dcdd71f1a64c435f54885086a0de5d6a12d104d69b165fb7d5286d677" + +[[package]] +name = "nom" +version = "7.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7ffd9d26838a953b4af82cbeb9f1592c6798916983959be223a7124e992742c1" dependencies = [ - "bitvec", - "funty", - "lexical-core", "memchr", + "minimal-lexical", "version_check", ] @@ -476,9 +442,9 @@ dependencies = [ [[package]] name = "oid-registry" -version = "0.1.5" +version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f6aae73e474f83beacd8ae2179e328e03d63d9223949d97e1b7c108059a34715" +checksum = "fe554cb2393bc784fd678c82c84cc0599c31ceadc7f03a594911f822cb8d1815" dependencies = [ "der-parser", ] @@ -600,12 +566,6 @@ dependencies = [ "proc-macro2", ] -[[package]] -name = "radium" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "941ba9d78d8e2f7ce474c015eea4d9c6d25b6a3327f9832ee29a4de27f91bbb8" - [[package]] name = "rand" version = "0.8.4" @@ -685,19 +645,13 @@ dependencies = [ [[package]] name = "rusticata-macros" -version = "3.2.0" +version = "4.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fbbee512c633ecabd4481c40111b6ded03ddd9ab10ba6caa5a74e14c889921ad" +checksum = "65c52377bb2288aa522a0c8208947fada1e0c76397f108cc08f57efe6077b50d" dependencies = [ "nom", ] -[[package]] -name = "ryu" -version = "1.0.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e" - [[package]] name = "secrecy" version = "0.8.0" @@ -770,12 +724,6 @@ dependencies = [ "der", ] -[[package]] -name = "static_assertions" -version = "1.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" - [[package]] name = "subtle" version = "2.4.1" @@ -814,12 +762,6 @@ dependencies = [ "unicode-xid", ] -[[package]] -name = "tap" -version = "1.0.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" - [[package]] name = "termcolor" version = "1.1.2" @@ -923,12 +865,6 @@ version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -[[package]] -name = "wyz" -version = "0.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85e60b0d1b5f99db2556934e21937020776a5d31520bf169e851ac44e6420214" - [[package]] name = "x509" version = "0.2.0" @@ -941,9 +877,9 @@ dependencies = [ [[package]] name = "x509-parser" -version = "0.11.0" +version = "0.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d2ce30cd4a10592affdced3f5c95e03e8f23599d282e727fc44035c21250d552" +checksum = "ffc90836a84cb72e6934137b1504d0cae304ef5d83904beb0c8d773bbfe256ed" dependencies = [ "base64", "chrono", diff --git a/Cargo.toml b/Cargo.toml index e3ba8ed..be22bee 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -21,12 +21,12 @@ members = [".", "cli"] [dependencies] chrono = "0.4" cookie-factory = "0.3" -der-parser = "5" +der-parser = "6" des = "0.7" elliptic-curve = "0.10" hmac = "0.11" log = "0.4" -nom = "6" +nom = "7" num-bigint-dig = { version = "0.7", features = ["rand"] } num-traits = "0.2" num-integer = "0.1" @@ -43,7 +43,7 @@ subtle = "2" subtle-encoding = "0.5" uuid = { version = "0.8", features = ["v4"] } x509 = "0.2" -x509-parser = "0.11" +x509-parser = "0.12" zeroize = "1" [dev-dependencies] diff --git a/cli/Cargo.toml b/cli/Cargo.toml index 8ba0180..7b93822 100644 --- a/cli/Cargo.toml +++ b/cli/Cargo.toml @@ -21,5 +21,5 @@ log = "0.4" sha2 = "0.9" subtle-encoding = "0.5" termcolor = "1" -x509-parser = "0.11" +x509-parser = "0.12" yubikey = { version = "0.4", path = ".." } diff --git a/src/certificate.rs b/src/certificate.rs index 756b78a..a9985bc 100644 --- a/src/certificate.rs +++ b/src/certificate.rs @@ -589,11 +589,10 @@ pub(crate) fn write_certificate( mod read_pki { use der_parser::{ ber::BerObjectContent, - der::{parse_der_integer, DerObject}, + der::{parse_der_integer, parse_der_sequence_defined_g, DerObject}, error::BerError, - *, }; - use nom::{combinator, IResult}; + use nom::{combinator, sequence::pair, IResult}; use rsa::{BigUint, RsaPublicKey}; use super::{OID_NIST_P256, OID_NIST_P384}; @@ -607,20 +606,17 @@ mod read_pki { /// } /// ``` pub(super) fn rsa_pubkey(encoded: &[u8]) -> Result { - fn parse_rsa_pubkey(i: &[u8]) -> IResult<&[u8], DerObject<'_>, BerError> { - parse_der_sequence_defined!(i, parse_der_integer >> parse_der_integer) + fn parse_rsa_pubkey(i: &[u8]) -> IResult<&[u8], (DerObject<'_>, DerObject<'_>), BerError> { + parse_der_sequence_defined_g(|i, _| pair(parse_der_integer, parse_der_integer)(i))(i) } fn rsa_pubkey_parts(i: &[u8]) -> IResult<&[u8], (BigUint, BigUint), BerError> { - combinator::map(parse_rsa_pubkey, |object| { - let seq = object.as_sequence().expect("is DER sequence"); - assert_eq!(seq.len(), 2); - - let n = match seq[0].content { + combinator::map(parse_rsa_pubkey, |(modulus, public_exponent)| { + let n = match modulus.content { BerObjectContent::Integer(s) => BigUint::from_bytes_be(s), _ => panic!("expected DER integer"), }; - let e = match seq[1].content { + let e = match public_exponent.content { BerObjectContent::Integer(s) => BigUint::from_bytes_be(s), _ => panic!("expected DER integer"), };