Como posso traduzir Convert :: ASN1 do Perl para o código Ruby?
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.
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 ?