如何将Perl的Convert :: ASN1翻译成Ruby代码?

时间:2008-12-24 10:45:12

标签: ruby perl openssl asn.1 nss

有人可以告诉我这段代码的作用以及如何以最简单的方式将其转换为Ruby?

    #!perl

    use Convert::ASN1;

    my $asn1 = Convert::ASN1->new(encoding => 'DER');
    $asn1->prepare(q<
        Algorithm ::= SEQUENCE {
            oid OBJECT IDENTIFIER,
            opt ANY OPTIONAL
        }
        Signature ::= SEQUENCE {
            alg Algorithm,
            sig BIT STRING
        }
    >);

   my $data = $asn1->encode(sig => $body,
        alg => {oid => sha512WithRSAEncryption()});

这是一个mexumgen Perl库的一部分,它使用openssl为Mozilla产品签署update.rdf。

2 个答案:

答案 0 :(得分:1)

此特定示例可以转换为

data = ["308191300b06092a864886f70d01010d03818100" + body.unpack("H*")].pack("H*")

其中“308191300b06092a864886f70d01010d03818100”是从该ASN表达式到BIT STRING字段(包括BIT STRING的大小)的前缀,pack(“H”)将二进制数据转换为十六进制表示,解包(“H”)转换为十六进制的字符串回到二进制。

但是对于更一般的ASN转换器,最好使用OpenSSL :: ASN1,它带有ruby作为标准库。它完全没有记录,但有些人设法have some use of it

答案 1 :(得分:0)

你看过Net::ASN1吗?