我想在Rust中编码以下ASN.1结构:
issuerAndSubject ::= SEQUENCE {
issuer Name,
subject Name
}Name structure is defined in RFC5280和情结。我不想用“铁锈”来重新定义这个词。
我已经在锈蚀-openssl中创建了一个issuer和subject:
let issuer: &X509NameRef = get_issuer();
let subject: &X509NameRef = get_subject();我可以很容易地获得这些对象的更多编码:
let issuer_der = issuer.to_der().unwrap();
let subject_der = subject.to_der().unwrap();但我需要将它们插入到SEQUENCE中。我的首选是使用Rust的asn1机箱,它允许创建SEQUENCE:
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?
}));
});有办法用编码的数据创建序列吗?
发布于 2022-06-21 09:19:23
您只需使用dervice宏并使用一个简单的结构:
#[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);
}https://stackoverflow.com/questions/72689302
复制相似问题