1

このコードが何をするのか、どうすれば最も簡単な方法で 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()});

これは、openssl を使用して Mozilla 製品の update.rdf に署名するmexumgen、Perl ライブラリの一部です。

4

2 に答える 2

1

この特定の例は、次のように変換できます。

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

ここで、「308191300b06092a864886f70d01010d03818100」は、BIT STRING フィールド (BIT STRING のサイズを含む) までの ASN 式から作成されたプレフィックスであり、pack("H") はバイナリ データを 16 進数表現に変換し、unpack("H") は 16 進数の文字列をバイナリに変換します。 .

しかし、より一般的な ASN コンバーターには、標準ライブラリとして ruby​​ に付属している OpenSSL::ASN1 を使用する方が適切です。それは完全に文書化されていませんが、何人かの人々はなんとかそれを使用しました

于 2008-12-25T15:52:07.633 に答える
0

Net::ASN1を見たことがありますか?

于 2008-12-24T10:55:14.973 に答える