¿Cómo puedo traducir de Perl Convert :: ASN1 de código Ruby?
Pregunta
Puede alguien aconsejarme lo que hace este código y cómo puedo convertir a Rubí en la mayor parte de forma sencilla?
#!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()});
Es una pieza de un mexumgen , biblioteca Perl, que update.rdf señal para Mozilla productos con OpenSSL.
Solución
Este ejemplo particular se puede convertir como
data = ["308191300b06092a864886f70d01010d03818100" + body.unpack("H*")].pack("H*")
donde "308191300b06092a864886f70d01010d03818100" es prefijo hecho de que la expresión de ASN hasta campo BIT STRING (incluyendo el tamaño de BIT STRING), paquete ( "H") convierte los datos binarios a la representación hexadecimal y desempaquetar ( "H") convierte cadena en hex de nuevo a binario.
Sin embargo, para el convertidor más general ASN es mejor usar OpenSSL :: ASN1, que viene con el rubí como biblioteca estándar. Está completamente indocumentado pero algunas personas logró tener algún uso de ella
Otros consejos
¿Has mirado en Net :: ASN1 ?