use {der, error};
use untrusted;
pub fn unwrap_key<'a>(input: untrusted::Input<'a>, alg_id: &[u8])
-> Result<untrusted::Input<'a>, error::Unspecified> {
input.read_all(error::Unspecified, |input| {
der::nested(input, der::Tag::Sequence, error::Unspecified, |input| {
let version = try!(der::small_nonnegative_integer(input));
if version != 0 {
return Err(error::Unspecified);
}
let actual_alg_id =
try!(der::expect_tag_and_get_value(input, der::Tag::Sequence));
if actual_alg_id != alg_id {
return Err(error::Unspecified);
}
let private_key =
try!(der::expect_tag_and_get_value(input, der::Tag::OctetString));
if input.peek(der::Tag::ContextSpecificConstructed0 as u8) {
let _ = try!(der::expect_tag_and_get_value(input,
der::Tag::ContextSpecificConstructed0));
}
Ok(private_key)
})
})
}