Skip to content

Commit f96f753

Browse files
committed
Forbid empty integer in DER encoder
1 parent 4eab8e2 commit f96f753

File tree

2 files changed

+13
-8
lines changed

2 files changed

+13
-8
lines changed

src/crypto/der.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,14 +45,16 @@ fn write_tag_and_length(out: &mut Vec<u8>, tag: u8, len: usize) -> Result<()> {
4545
}
4646

4747
pub fn integer(val: &[u8]) -> Result<Vec<u8>> {
48+
if val.is_empty() {
49+
return Err(CryptoError::MalformedInput);
50+
}
4851
// trim leading zeros, leaving a single zero if the input is the zero vector.
4952
let mut val = val;
5053
while val.len() > 1 && val[0] == 0 {
5154
val = &val[1..];
5255
}
53-
5456
let mut out = Vec::with_capacity(MAX_TAG_AND_LENGTH_BYTES + 1 + val.len());
55-
if !val.is_empty() && val[0] & 0x80 != 0 {
57+
if val[0] & 0x80 != 0 {
5658
// needs zero prefix
5759
write_tag_and_length(&mut out, TAG_INTEGER, 1 + val.len())?;
5860
out.push(0x00);

src/crypto/mod.rs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -724,9 +724,9 @@ impl COSEEC2Key {
724724
der::sequence(&[
725725
// algorithm: AlgorithmIdentifier
726726
&der::sequence(&[
727-
/* algorithm */
727+
// algorithm
728728
&der::object_id(der::OID_EC_PUBLIC_KEY_BYTES)?,
729-
/* parameters */
729+
// parameters
730730
&der::object_id(der::OID_SECP256R1_BYTES)?,
731731
])?,
732732
// subjectPublicKey
@@ -759,9 +759,10 @@ impl COSEOKPKey {
759759
der::sequence(&[
760760
// algorithm: AlgorithmIdentifier
761761
&der::sequence(&[
762-
/* algorithm */
762+
// algorithm
763763
&der::object_id(der::OID_ED25519_BYTES)?,
764-
/* parameters (absent as per RFC 8410) */
764+
// parameters
765+
// (absent as per RFC 8410)
765766
])?,
766767
// subjectPublicKey
767768
&der::bit_string(
@@ -787,8 +788,10 @@ impl COSERSAKey {
787788
der::sequence(&[
788789
// algorithm: AlgorithmIdentifier
789790
&der::sequence(&[
790-
/* algorithm */ &der::object_id(der::OID_RS256_BYTES)?,
791-
/* parameters */ &der::null()?,
791+
// algorithm
792+
&der::object_id(der::OID_RS256_BYTES)?,
793+
// parameters
794+
&der::null()?,
792795
])?,
793796
// subjectPublicKey
794797
&der::bit_string(

0 commit comments

Comments
 (0)