From d4ac17598acdf437a256a3a469ab4ca85597cf84 Mon Sep 17 00:00:00 2001 From: Marco Neumann Date: Mon, 13 Jul 2020 15:21:02 +0200 Subject: [PATCH 1/3] use a machine-readable license key See https://doc.rust-lang.org/cargo/reference/manifest.html#the-license-and-license-file-fields : > If a package is using a nonstandard license, then the license-file field may be specified in lieu of the license > field. `simple_asn1` however uses a standard license (ISC, as per LICENSE). Note that this is also a somewhat commonly used way by many projects (see for example Cargo or serde). Using the machine-readable SPX specifier instead of a text file helps automatic tooling like [cargo-lichking](https://github.com/Nemo157/cargo-lichking) to check licenses of projects and dependencies. --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index a419fe6..b5ed60f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -5,7 +5,7 @@ authors = ["Adam Wick "] description = "A simple DER/ASN.1 encoding/decoding library." categories = ["encoding"] keywords = ["ASN1","encoding","DER"] -license-file = "LICENSE" +license = "ISC" repository = "https://github.com/acw/simple_asn1" [dependencies] From 7b6e48d8fb7acf6bd612e9672e3619d00972c785 Mon Sep 17 00:00:00 2001 From: Adam Wick Date: Wed, 15 Jul 2020 08:20:25 -0700 Subject: [PATCH 2/3] Bump minor version, to address license change. --- Cargo.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cargo.toml b/Cargo.toml index b5ed60f..1d0db22 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "simple_asn1" -version = "0.4.0" +version = "0.4.1" authors = ["Adam Wick "] description = "A simple DER/ASN.1 encoding/decoding library." categories = ["encoding"] From 7db7a487f498858ef330310dfa458b8f0713e4e7 Mon Sep 17 00:00:00 2001 From: Caio Date: Sat, 17 Oct 2020 22:59:31 -0300 Subject: [PATCH 3/3] Update dependencies --- Cargo.toml | 10 ++++----- src/lib.rs | 64 +++++++++++++++++++++++++++++------------------------- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 1d0db22..63e8ce5 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,10 +9,10 @@ license = "ISC" repository = "https://github.com/acw/simple_asn1" [dependencies] -chrono = "^0.4.0" -num-bigint = "^0.2.0" -num-traits = "^0.2.0" +chrono = { default-features = false, features = ["alloc"], version = "0.4" } +num-bigint = { default-features = false, version = "0.3" } +num-traits = { default-features = false, version = "0.2" } [dev-dependencies] -quickcheck = "^0.7.1" -rand = "0.5.5" +quickcheck = "0.9" +rand = "0.7" diff --git a/src/lib.rs b/src/lib.rs index ca5fb9c..cfade32 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -399,13 +399,7 @@ pub enum ASN1EncodeErr { ObjectIdentVal2TooLarge, } -impl fmt::Display for ASN1EncodeErr { - fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { - f.write_str(self.description()) - } -} - -impl Error for ASN1EncodeErr { +impl ASN1EncodeErr { fn description(&self) -> &str { match self { ASN1EncodeErr::ObjectIdentHasTooFewFields => @@ -416,6 +410,18 @@ impl Error for ASN1EncodeErr { "Second value in ASN1 OID is too big." } } +} + +impl fmt::Display for ASN1EncodeErr { + fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { + f.write_str(self.description()) + } +} + +impl Error for ASN1EncodeErr { + fn description(&self) -> &str { + self.description() + } fn cause(&self) -> Option<&dyn Error> { None @@ -1175,7 +1181,7 @@ mod tests { use super::*; use chrono::offset::LocalResult; use quickcheck::{Arbitrary, Gen}; - use rand::{distributions::Standard, Rng}; + use rand::{distributions::Standard, prelude::SliceRandom, Rng}; use std::fs::File; use std::io::Read; @@ -1281,7 +1287,7 @@ mod tests { impl Arbitrary for OID { fn arbitrary(g: &mut G) -> OID { - let count = g.gen_range::(0, 40); + let count = g.gen_range::(0, 40); let val1 = g.gen::() % 3; let v2mod = if val1 == 2 { 176 } else { 40 }; let val2 = g.gen::() % v2mod; @@ -1304,7 +1310,7 @@ mod tests { } fn arb_seq(g: &mut G, d: usize) -> ASN1Block { - let count = g.gen_range::(1, 64); + let count = g.gen_range::(1, 64); let mut items = Vec::new(); for _ in 0..count { @@ -1315,7 +1321,7 @@ mod tests { } fn arb_set(g: &mut G, d: usize) -> ASN1Block { - let count = g.gen_range::(1, 64); + let count = g.gen_range::(1, 64); let mut items = Vec::new(); for _ in 0..count { @@ -1326,11 +1332,11 @@ mod tests { } fn arb_print(g: &mut G, _d: usize) -> ASN1Block { - let count = g.gen_range::(0, 384); + let count = g.gen_range::(0, 384); let mut items = Vec::new(); for _ in 0..count { - let v = g.choose(PRINTABLE_CHARS.as_bytes()).unwrap(); + let v = PRINTABLE_CHARS.as_bytes().choose(g).unwrap(); items.push(*v as char); } @@ -1338,7 +1344,7 @@ mod tests { } fn arb_ia5(g: &mut G, _d: usize) -> ASN1Block { - let count = g.gen_range::(0, 384); + let count = g.gen_range::(0, 384); let mut items = Vec::new(); for _ in 0..count { @@ -1370,15 +1376,15 @@ mod tests { fn arb_utc(g: &mut G, _d: usize) -> ASN1Block { loop { - let y = g.gen_range::(1970, 2069); - let m = g.gen_range::(1, 13); - let d = g.gen_range::(1, 32); + let y = g.gen_range::(1970, 2069); + let m = g.gen_range::(1, 13); + let d = g.gen_range::(1, 32); match Utc.ymd_opt(y, m, d) { LocalResult::None => {} LocalResult::Single(d) => { - let h = g.gen_range::(0, 24); - let m = g.gen_range::(0, 60); - let s = g.gen_range::(0, 60); + let h = g.gen_range::(0, 24); + let m = g.gen_range::(0, 60); + let s = g.gen_range::(0, 60); let t = d.and_hms(h, m, s); return ASN1Block::UTCTime(0, t); } @@ -1389,16 +1395,16 @@ mod tests { fn arb_time(g: &mut G, _d: usize) -> ASN1Block { loop { - let y = g.gen_range::(0, 10000); - let m = g.gen_range::(1, 13); - let d = g.gen_range::(1, 32); + let y = g.gen_range::(0, 10000); + let m = g.gen_range::(1, 13); + let d = g.gen_range::(1, 32); match Utc.ymd_opt(y, m, d) { LocalResult::None => {} LocalResult::Single(d) => { - let h = g.gen_range::(0, 24); - let m = g.gen_range::(0, 60); - let s = g.gen_range::(0, 60); - let n = g.gen_range::(0, 1000000000); + let h = g.gen_range::(0, 24); + let m = g.gen_range::(0, 60); + let s = g.gen_range::(0, 60); + let n = g.gen_range::(0, 1000000000); let t = d.and_hms_nano(h, m, s, n); return ASN1Block::GeneralizedTime(0, t); } @@ -1422,7 +1428,7 @@ mod tests { fn arb_unknown(g: &mut G, _d: usize) -> ASN1Block { let class = ASN1Class::arbitrary(g); let tag = RandomUint::arbitrary(g); - let size = g.gen_range::(0, 128); + let size = g.gen_range::(0, 128); let items = g.sample_iter::(&Standard).take(size).collect(); ASN1Block::Unknown(class, false, 0, tag.x, items) @@ -1453,7 +1459,7 @@ mod tests { possibles.push(arb_explicit); } - match g.choose(&possibles[..]) { + match possibles[..].choose(g) { Some(f) => f(g, d), None => panic!("Couldn't generate arbitrary value."), }