NAME
TL::SMIME - S/MIMEの署名、検証、暗号化、復号化
SYNOPSIS
use TL::SMIME;
my $plain = <<'EOF';
From: alice@example.org
To: bob@example.com
Subject: TL::SMIME test
This is a test mail. Please ignore...
EOF
my $smime = TL::SMIME->new();
$smime->setPrivateKey($privkey, $crt);
# $smime->setPublicKey([$icacert]); # if needed.
my $signed = $smime->sign($plain);
print $signed;
DESCRIPTION
S/MIMEの署名、検証、暗号化、復号化を行うクラス。
cryptoライブラリ(http://www.openssl.org)が必要。
METHODS
- new
-
引数無し
- setPrivateKey
-
$smime->setPrivateKey($key, $crt); $smime->setPrivateKey($key, $crt, $password);
秘密鍵を設定する。ここで設定された秘密鍵は署名と復号化の際に用いられる。 ファイル名ではなく、鍵本体を渡す。
対応しているフォーマットは PEM のみ。鍵の読み込みに失敗した場合はdieする。
- setPublicKey
-
$smime->setPublicKey($crt); $smime->setPublicKey([$crt1, $crt2, ...]);
公開鍵を設定する。ここで設定された公開鍵は署名への添付、署名の検証、 そして暗号化の際に用いられる。
対応しているフォーマットは PEM のみ。鍵の読み込みに失敗した場合はdieする。
- sign
-
$signed_mime = $smime->sign($raw_mime);
署名を行い、MIMEメッセージを返す。可能な署名はクリア署名のみ。
Content-*
,MIME-*
及びSubject
を除いたヘッダは multipartのトップレベルにコピーされる。Subject
はS/MIMEを認識できないメーラのために, multipartの トップレベルと保護されるメッセージの両側に配置される。 - signonly
-
$sign = $smime->signonly($prepared_mime);
署名の計算を行う。
$sign
はBASE64でエンコードされて返る。$prepared_mime
には, "prepareSmimeMessage" で返される値を渡す。 - prepareSmimeMessage
-
($prepared_mime,$outer_header) = $smime->prepareSmimeMessage($source_mime);
署名用のメッセージを準備する。
$mime
には著名用に修正されたMIMEメッセージを返す。$header
は、S/MIMEの外側に付与するヘッダを返す。$prepared_mime
の本文は$source_mime
と同じ物となるが、 ヘッダに関してはContent-*
,MIME-*
,Subject
を除く全てが 取り除かれる。取り除かれたヘッダは$outer_header
に返される。 S/MIMEメッセージを構築する際にはこれをS/MIMEメッセージのヘッダに追加する。Subject
ヘッダのみは$prepared_mime
と$outer_header
の両方に 現れる点に注意。 - check
-
$source_mime = $smime->check($signed_mime);
検証を行う。検証に失敗した場合はその理由と共にdieする。
- encrypt
-
$encrypted_mime = $smime->encrypt($raw_mime);
暗号化を行う。
Content-*
,MIME-*
及びSubject
を除いたヘッダは multipartのトップレベルにコピーされる。Subject
はS/MIMEを認識できないメーラのために, multipartの トップレベルと保護されるメッセージの両側に配置される。 - decrypt
-
$decrypted_mime = $smime->decrypt($encrypted_mime);
復号化を行う。復号化に失敗した場合はその理由と共にdieする。
- isSigned
-
$is_signed = $smime->isSigned($mime);
渡されたMIMEメッセージがS/MIMEで署名されたものなら真を返す。 クリア署名かどうかは問わない。 署名後に暗号化したメッセージを渡した場合は、署名が直接見えない為、 偽を返す事に注意。
- isEncrypted
-
$is_encrypted = $smime->isEncrypted($mime);
渡されたMIMEメッセージがS/MIMEで暗号化されたものなら真を返す。 暗号化後に署名したメッセージを渡した場合は、暗号文が直接見えない為、 偽を返す事に注意。