Encoding::BER::DER
DER表記されたASN.1オブジェクトをエンコード/デコードする。
Math::BigIntがインストール済みであれば、多バイト長整数のエンコード/デコードも可能。
use Encoding::BER::DER;
パッケージをロードする。
使い方:
my $coder = Encoding::BER::DER->new( );
// エンコード
my $der =
$coder->encode($object);
// デコード
my $object =
$coder->decode($der);
注意事項:
perlの整数は(64bit環境では)64bitだが、ASN.1のINTEGERは大きさに制限がない。場合によっては、use
bigint; を宣言しないと正しくデコードできない場合がある(例えば、X.509証明書のシリアル番号)。
ASN.1構造の例:
data ::= SEQUENCE {
x INTEGER,
y INTEGER
}
上記のASN.1に対応する$objectの構造:
$object = \%object;
%object = (
type => 'sequence',
value => \@data
);
@data = (\%x, \%y);
%x = (
type => 'integer',
value => $x
);
%y = (
type =>
'integer',
value => $y
);
$y
にアクセスするには、$object->{'value'}->[1]->{'value'}
type(DER表記上のタグ)は、下記のものが使用可能(抜粋)。
sequenceとsetはperl上はリスト(リスト参照)で表現され、他のタグはスカラー型(多バイト整数はMath::BigIntオブジェクト)で表現される。
float general_string generalized_time
int int32 integer
integer32 null numeric_string
object_descriptor object_identifier
octet_string oid
printable_string real
sequence sequence_of set
set_of
string uint uint32 universal_string universal_time
unsigned_int unsigned_int32 unsigned_integer
utf8_string
visible_string