Crypt::PK::ECC
楕円曲線暗号を行なう。
楕円曲線暗号関連のパッケージは他にも色々あるが、使えそうなのは、このモジュールだけ。
Crypt::OpenSSL::ECDSA … 入出力パラメターが
Crpt::OpenSSL::ECオブジェクトで恐ろしく複雑怪奇で使いづらい。
Crypt::Perl::ECDSA …
バグがある模様で、正しくない署名を生成する。
use Crypt::PK::ECC;
パッケージをロードする。
my $pk = Crypt::PK::ECC->new();
空のオブジェクトを生成する。後で鍵を生成するか、インポートする事を想定した方法。newオブジェクトで鍵をインポートする事も出来るが、後でインポートする方が多くの形式をサポートしている。
my $pk = Crypt::PK::ECC->new($priv_or_pub_key_filename);
my $pk =
Crypt::PK::ECC->new(\$buffer_containing_priv_or_pub_key);
my $pk =
Crypt::PK::ECC->new($priv_pem_key_filename, $password);
my $pk =
Crypt::PK::ECC->new(\$buffer_containing_priv_pem_key, $password);
ASN.1表記された鍵ファイル、または、変数上のASN.1表記された鍵を読み込んでオブジェクトを生成する。暗号化された秘密鍵ファイルは読めない。暗号化されて PEMファイルの場合は、復号しつつ DERに変換して入力する。
my $derKey;
open(FHI, "openssl ec -in $caKey -outform der |");
# openSSLがパスフレーズを要求して復号してくれる
binmode(FHI);
read(FHI, $derKey,
5000);
close(FHI);
my $ecdsa = Crypt::PK::ECC->new(\$derKey);
$pk->generate_key($curve_name);
楕円曲線名を指定して鍵を生成する。曲線名は、secpXXXX,
primeXXXX, NIST曲線名は nistpXXXと表記する。ドメインパラメータを直接指定する事も可能。
$pk->import_key($filename);
$pk->import_key(\$buffer_containing_key);
$pk->import_key($filename,
$password);
$pk->import_key(\$buffer_containing_key, $password);
ASN.1表記された鍵ファイル、または、変数上のASN.1表記された鍵をインポートする。
$pk->import_key($hashref);
楕円曲線名と鍵値を直接指定したハッシュから鍵をインポートする。色々出来るが、典型的な例は:
{
curve_name => "secp160r1",
k =>
"B0EE84A749FE95DF997E33B8F333E12101E824C3",
pub_x =>
"5AE1ACE3ED0AEA9707CE5C0BCE014F6A2F15023A",
pub_y =>
"895D57E992D0A15F88D6680B27B701F615FCDC0F"
}
my $private_der = $pk->export_key_der('private');
my $public_der =
$pk->export_key_der('public');
my $private_pem =
$pk->export_key_pem('private');
my $public_pem =
$pk->export_key_pem('public');
鍵を DER形式ファイル、または、PEM形式ファイルにエクスポートする。
my $signature = $priv->sign_message($message, $hash_name);
my $valid
= $pub->verify_message($signature, $message, $hash_name);
署名/署名検証を行なう。$hash_nameは、SHA256, sha256, SHA-256, 256など Digest::SHAが認識する名称で指定する。
my $rv = $pk->is_private;
秘密鍵を保持しているか否か。
my $size = $pk->size;
鍵サイズ(バイト)。