Skip to content

Commit 3b30897

Browse files
committed
Handle initial_serial_number fields w/o the leading bit set.
1 parent 9b9ccf1 commit 3b30897

File tree

1 file changed

+11
-13
lines changed

1 file changed

+11
-13
lines changed

src/config.rs

Lines changed: 11 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,16 @@ impl TryFrom<&KeySpec> for OksKeySpec {
199199
type Error = anyhow::Error;
200200

201201
fn try_from(spec: &KeySpec) -> Result<Self, Self::Error> {
202+
let sn_bytes = spec.initial_serial_number.to_bytes_be();
203+
if sn_bytes.len() > 20 {
204+
return Err(anyhow::anyhow!(
205+
"initial serial number is greater than 20 bytes"
206+
));
207+
}
208+
209+
let mut initial_serial_number = [0u8; 20];
210+
initial_serial_number[..sn_bytes.len()].copy_from_slice(&sn_bytes);
211+
202212
Ok(OksKeySpec {
203213
common_name: spec.common_name.clone(),
204214
id: spec.id,
@@ -208,19 +218,7 @@ impl TryFrom<&KeySpec> for OksKeySpec {
208218
hash: spec.hash,
209219
label: spec.label.clone().try_into()?,
210220
purpose: spec.purpose,
211-
initial_serial_number: match spec
212-
.initial_serial_number
213-
.to_bytes_be()
214-
.try_into()
215-
{
216-
Ok(sn) => sn,
217-
Err(v) => {
218-
return Err(anyhow::anyhow!(
219-
"Expected array of 20 bytes, got {}",
220-
v.len()
221-
));
222-
}
223-
},
221+
initial_serial_number,
224222
self_signed: spec.self_signed,
225223
})
226224
}

0 commit comments

Comments
 (0)