Skip to content

Commit 1d8691d

Browse files
authored
Merge branch 'master' into dishmaker/der_clarify
2 parents 79ef9d2 + bd84063 commit 1d8691d

File tree

19 files changed

+143
-66
lines changed

19 files changed

+143
-66
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

base64ct/benches/mod.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ extern crate test;
66
use base64ct::{Base64Unpadded, Encoding};
77
use test::Bencher;
88

9-
const B64_LEN: usize = 100_002;
9+
const B64_LEN: usize = 100_000;
1010
const RAW_LEN: usize = (3 * B64_LEN) / 4;
1111

1212
#[inline(never)]
@@ -32,19 +32,19 @@ fn decode_bench(b: &mut Bencher) {
3232
let b64_data = get_b64_data();
3333
let mut buf = get_raw_data();
3434
b.iter(|| {
35-
let out = Base64Unpadded::decode(&b64_data, &mut buf).unwrap();
35+
let out = Base64Unpadded::decode(test::black_box(&b64_data), &mut buf).unwrap();
3636
test::black_box(out);
3737
});
3838
b.bytes = RAW_LEN as u64;
3939
}
4040

4141
#[bench]
4242
fn decode_in_place_bench(b: &mut Bencher) {
43-
let mut b64_data = get_b64_data().into_bytes();
43+
let b64_data = get_b64_data().into_bytes();
44+
let mut buf = b64_data.clone();
4445
b.iter(|| {
45-
// since it works on the same buffer over and over,
46-
// almost always `out` will be an error
47-
let out = Base64Unpadded::decode_in_place(&mut b64_data);
46+
buf.copy_from_slice(&b64_data[..]);
47+
let out = Base64Unpadded::decode_in_place(&mut buf);
4848
let _ = test::black_box(out);
4949
});
5050
b.bytes = RAW_LEN as u64;
@@ -55,7 +55,7 @@ fn encode_bench(b: &mut Bencher) {
5555
let mut buf = get_b64_data().into_bytes();
5656
let raw_data = get_raw_data();
5757
b.iter(|| {
58-
let out = Base64Unpadded::encode(&raw_data, &mut buf).unwrap();
58+
let out = Base64Unpadded::encode(test::black_box(&raw_data), &mut buf).unwrap();
5959
test::black_box(out);
6060
});
6161
b.bytes = RAW_LEN as u64;

cms/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ rust-version = "1.85"
1616

1717
[dependencies]
1818
const-oid = { version = "0.10", features = ["db"] }
19-
der = { version = "0.8.0-rc.7", features = ["alloc", "derive", "oid"] }
19+
der = { version = "0.8.0-rc.7", features = ["ber", "derive", "oid"] }
2020
spki = "0.8.0-rc.4"
2121
x509-cert = { version = "0.3.0-rc.0", default-features = false }
2222

der/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ derive = ["dep:der_derive"]
4242
oid = ["dep:const-oid"]
4343
pem = ["dep:pem-rfc7468", "alloc", "zeroize"]
4444
real = []
45+
ber = ["alloc"]
4546
clarify = ["dep:tynm", "std", "pem", "derive", "oid"]
4647

4748
[package.metadata.docs.rs]

der/src/asn1/any.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,6 @@ use crate::{
88
};
99
use core::cmp::Ordering;
1010

11-
#[cfg(feature = "alloc")]
12-
use crate::SliceWriter;
13-
1411
/// ASN.1 `ANY`: represents any explicitly tagged ASN.1 value.
1512
///
1613
/// This is a zero-copy reference type which borrows from the input data.
@@ -180,7 +177,7 @@ pub use self::allocating::Any;
180177
#[cfg(feature = "alloc")]
181178
mod allocating {
182179
use super::*;
183-
use crate::{BytesOwned, reader::read_value, referenced::*};
180+
use crate::{BytesOwned, encode::encode_value_to_slice, reader::read_value, referenced::*};
184181
use alloc::boxed::Box;
185182

186183
/// ASN.1 `ANY`: represents any explicitly tagged ASN.1 value.
@@ -243,9 +240,7 @@ mod allocating {
243240
{
244241
let encoded_len = usize::try_from(msg.value_len()?)?;
245242
let mut buf = vec![0u8; encoded_len];
246-
let mut writer = SliceWriter::new(&mut buf);
247-
msg.encode_value(&mut writer)?;
248-
writer.finish()?;
243+
encode_value_to_slice(&mut buf, msg)?;
249244
Any::new(msg.tag(), buf)
250245
}
251246

der/src/asn1/integer.rs

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ pub(super) mod uint;
55

66
use core::{cmp::Ordering, mem::size_of};
77

8-
use crate::{EncodeValue, Result, SliceWriter};
8+
use crate::{EncodeValue, Result, encode::encode_value_to_slice};
99

1010
/// Is the highest bit of the first byte in the slice set to `1`? (if present)
1111
#[inline]
@@ -25,14 +25,12 @@ where
2525
debug_assert!(size_of::<T>() <= MAX_INT_SIZE);
2626

2727
let mut buf1 = [0u8; MAX_INT_SIZE];
28-
let mut encoder1 = SliceWriter::new(&mut buf1);
29-
a.encode_value(&mut encoder1)?;
30-
3128
let mut buf2 = [0u8; MAX_INT_SIZE];
32-
let mut encoder2 = SliceWriter::new(&mut buf2);
33-
b.encode_value(&mut encoder2)?;
3429

35-
Ok(encoder1.finish()?.cmp(encoder2.finish()?))
30+
let buf1 = encode_value_to_slice(&mut buf1, &a)?;
31+
let buf2 = encode_value_to_slice(&mut buf2, &b)?;
32+
33+
Ok(buf1.cmp(buf2))
3634
}
3735

3836
#[cfg(test)]

der/src/asn1/integer/int.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -311,9 +311,7 @@ mod allocating {
311311

312312
fn try_from(value: $int) -> $crate::Result<Self> {
313313
let mut buf = [0u8; 16];
314-
let mut writer = $crate::SliceWriter::new(&mut buf[..]);
315-
value.encode_value(&mut writer)?;
316-
let buf = writer.finish()?;
314+
let buf = $crate::encode::encode_value_to_slice(&mut buf, &value)?;
317315
Int::new(buf)
318316
}
319317
}

der/src/asn1/integer/uint.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,9 +284,7 @@ mod allocating {
284284

285285
fn try_from(value: $uint) -> $crate::Result<Self> {
286286
let mut buf = [0u8; 17];
287-
let mut writer = $crate::SliceWriter::new(&mut buf[..]);
288-
value.encode_value(&mut writer)?;
289-
let buf = writer.finish()?;
287+
let buf = $crate::encode::encode_value_to_slice(&mut buf, &value)?;
290288
Uint::new(buf)
291289
}
292290
}

der/src/asn1/octet_string.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -374,7 +374,7 @@ mod tests {
374374
}
375375

376376
#[test]
377-
#[cfg(feature = "alloc")]
377+
#[cfg(feature = "ber")]
378378
fn decode_ber() {
379379
use crate::{Decode, asn1::OctetString};
380380
use hex_literal::hex;
@@ -391,7 +391,7 @@ mod tests {
391391
}
392392

393393
#[test]
394-
#[cfg(feature = "alloc")]
394+
#[cfg(feature = "ber")]
395395
fn decode_context_specific_ber_explicit() {
396396
use crate::{
397397
EncodingRules, SliceReader, TagNumber,
@@ -422,7 +422,7 @@ mod tests {
422422
}
423423

424424
#[test]
425-
#[cfg(feature = "alloc")]
425+
#[cfg(feature = "ber")]
426426
fn decode_context_specific_ber_implicit() {
427427
use crate::{
428428
EncodingRules, SliceReader, TagNumber,

der/src/bytes.rs

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,13 @@ impl<'a> arbitrary::Arbitrary<'a> for &'a BytesRef {
117117
#[cfg(feature = "alloc")]
118118
pub(crate) mod allocating {
119119
use super::BytesRef;
120+
#[cfg(feature = "ber")]
121+
use crate::{EncodingRules, length::indefinite::read_constructed_vec};
122+
120123
use crate::{
121-
DecodeValue, DerOrd, EncodeValue, EncodingRules, Error, Header, Length, Reader, Result,
122-
Tag, Writer, length::indefinite::read_constructed_vec,
124+
DecodeValue, DerOrd, EncodeValue, Error, Header, Length, Reader, Result, Tag, Writer,
123125
};
126+
124127
use alloc::{borrow::ToOwned, boxed::Box, vec::Vec};
125128
use core::{borrow::Borrow, cmp::Ordering, ops::Deref};
126129

@@ -152,13 +155,17 @@ pub(crate) mod allocating {
152155
inner_tag: Tag,
153156
) -> Result<Self> {
154157
// Reassemble indefinite length string types
158+
#[cfg(feature = "ber")]
155159
if reader.encoding_rules() == EncodingRules::Ber
156160
&& header.length.is_indefinite()
157161
&& !inner_tag.is_constructed()
158162
{
159163
return Self::new(read_constructed_vec(reader, header.length, inner_tag)?);
160164
}
161165

166+
#[cfg(not(feature = "ber"))]
167+
let _ = inner_tag;
168+
162169
Self::decode_value(reader, header)
163170
}
164171
}

0 commit comments

Comments
 (0)