Pergunta

Alguém pode aconselhar-me o que este código faz e como posso convertê-lo para Ruby no maneira mais simples?

    #!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()});

É uma peça de um mexumgen , biblioteca Perl que update.rdf sinal para Mozilla produtos com openssl.

Foi útil?

Solução

Este exemplo particular pode ser convertido como

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

onde "308191300b06092a864886f70d01010d03818100" é prefixo feita a partir de que a expressão de ADN-se a campo de bits de cadeia (incluindo tamanho de BIT STRING), bloco ( "H") converte os dados binários para representação do hex e de desempacotamento ( "H") converte cadeia em hexadecimal volta para binário.

Mas para converter mais geral ASN é melhor uso OpenSSL :: ASN1, que vem com Ruby como biblioteca padrão. É completamente indocumentados, mas algumas pessoas conseguiram ter algum uso dele

Outras dicas

Você já olhou para Net :: ASN1 ?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top