我想在Rust中DER编码以下ASN.1结构:
issuerAndSubject ::= SEQUENCE {
issuer Name,
subject Name
}
Name
结构在RFC5280中定义,比较复杂。我不想在Rust中重新定义这个
我已经在rust-openssl中创建了issuer
和subject
:
let issuer: &X509NameRef = get_issuer();
let subject: &X509NameRef = get_subject();
我可以很容易地得到这些对象的DER编码:
let issuer_der = issuer.to_der().unwrap();
let subject_der = subject.to_der().unwrap();
,但我需要将它们插入SEQUENCE
。我更倾向于使用Rust的asn1 crate,它允许创建SEQUENCE
s:
let ias_der = asn1::write(|w| {
w.write_element(
&asn1::SequenceWriter::new(&|w| {
w.write_element(&issuer_der); // I know, this doesn't work, but
w.write_element(&subject_der); // how do I do it?
}));
});
是否有一种方法来创建一个序列与der编码的数据?
您可以使用device宏并使用一个简单的结构:
#[derive(asn1::Asn1Read, asn1::Asn1Write, Debug)]
struct Signature {
issuer: u64,
subject: u64,
}
fn main() {
let data = asn1::write_single(&Signature{issuer: 0, subject: 1});
let sig: Signature = asn1::parse_single::<Signature>(data.as_slice()).unwrap();
let data = asn1::write_single(&sig);
eprintln!("{:?}", sig);
eprintln!("{:?}", data);
}