首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用锈蚀中的预编码DER部件创建DER编码的ASN.1

用锈蚀中的预编码DER部件创建DER编码的ASN.1
EN

Stack Overflow用户
提问于 2022-06-20 15:15:18
回答 1查看 98关注 0票数 0

我想在Rust中编码以下ASN.1结构:

代码语言:javascript
复制
issuerAndSubject ::= SEQUENCE {
    issuer     Name,
    subject    Name
}

Name structure is defined in RFC5280和情结。我不想用“铁锈”来重新定义这个词。

我已经在锈蚀-openssl中创建了一个issuersubject

代码语言:javascript
复制
let issuer: &X509NameRef = get_issuer();
let subject: &X509NameRef = get_subject();

我可以很容易地获得这些对象的更多编码:

代码语言:javascript
复制
let issuer_der = issuer.to_der().unwrap();
let subject_der = subject.to_der().unwrap();

但我需要将它们插入到SEQUENCE中。我的首选是使用Rust的asn1机箱,它允许创建SEQUENCE

代码语言:javascript
复制
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?
        }));
    });

有办法用编码的数据创建序列吗?

EN

回答 1

Stack Overflow用户

发布于 2022-06-21 09:19:23

您只需使用dervice宏并使用一个简单的结构:

代码语言:javascript
复制
#[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);
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72689302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档