Как я могу перевести Perl's Convert :: ASN1 в код Ruby? - PullRequest
1 голос
/ 24 декабря 2008

Может кто-нибудь посоветовать мне, что делает этот код и как я могу преобразовать его в 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, которая подписывает update.rdf для продуктов Mozilla с openssl.

Ответы [ 2 ]

1 голос
/ 25 декабря 2008

Этот конкретный пример может быть преобразован как

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

, где «308191300b06092a864886f70d01010d03818100» - это префикс, созданный из этого выражения ASN до поля BIT STRING (включая размер BIT STRING), pack ("H") преобразует двоичные данные в шестнадцатеричное представление, а unpack ("H") преобразует строку в шестнадцатеричное обратно в двоичный файл.

Но для более общего конвертера ASN лучше использовать OpenSSL :: ASN1, который поставляется с ruby ​​в качестве стандартной библиотеки. Это совершенно недокументировано, но некоторым людям удалось использовать его

0 голосов
/ 24 декабря 2008

Вы смотрели на Net :: ASN1 ?

...