- new()
-
my $smime = Crypt::SMIME->new();
引数無し
- setPrivateKey()
-
$smime->setPrivateKey($key, $crt);
$smime->setPrivateKey($key, $crt, $password);
秘密鍵を設定する。ここで設定された秘密鍵は署名と復号の際に用いられる。
ファイル名ではなく、鍵本体を渡す。
対応しているフォーマットは
PEM
のみ。鍵の読み込みに失敗した場合はdieする。
- setPrivateKeyPkcs12()
-
$smime->setPrivateKeyPkcs12($key, $pkcs12);
$smime->setPrivateKeyPkcs12($key, $pkcs12, $password);
秘密鍵およびその
X.509 証明書を PKCS#12
から読み込んで設定する。秘密鍵は署名と復号の際に用いられる。
読み込みに失敗した場合は
die する。
- setPublicKey()
-
$smime->setPublicKey($crt);
$smime->setPublicKey([$crt1, $crt2, ...]);
公開鍵を設定する。ここで設定された公開鍵は署名への添付、署名の検証、
そして暗号化の際に用いられる。
対応しているフォーマットは
PEM
のみ。鍵の読み込みに失敗した場合はdieする。
- setPublicKeyStore()
-
$smime->setPublicKeyStore($path, ...);
信頼している証明書
(複数可)
が入ったファイルやディレクトリのパス
(複数可)
を設定する。ここで設定された証明書ストアは、署名の検証の際に用いられる。
証明書ストアの読み込みに失敗した場合はdieする。
- sign()
-
$signed_mime = $smime->sign($raw_mime);
署名を行い、MIMEメッセージを返す。可能な署名はクリア署名のみ。
"Content-*",
"MIME-*" 及び
"Subject"
を除いたヘッダは
multipartのトップレベルに移される。
"Subject"
はS/MIMEを認識できないメーラのために,
multipartの
トップレベルと保護されるメッセージの両側に配置される。
元の MIME
メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている
(tainted)
ならば、署名されたメッセージも汚染される。
- signonly()
-
$sign = $smime->signonly($prepared_mime);
署名の計算を行う。
$sign
はBASE64でエンコードされて返る。
$prepared_mime には,
"prepareSmimeMessage"
で返される値を渡す。
元の MIME
メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている
(tainted)
ならば、生成された署名も汚染される。
- prepareSmimeMessage()
-
($prepared_mime, $outer_header)
= $smime->prepareSmimeMessage($source_mime);
署名用のメッセージを準備する。
$prepared_mime
には署名用に修正されたMIMEメッセージを返す。
$outer_header
は、S/MIMEの外側に付与するヘッダを返す。
$prepared_mime
の本文は$source_mimeと同じ物となるが、
ヘッダに関しては"Content-*",
"MIME-*",
"Subject"
を除く全てが
取り除かれる。取り除かれたヘッダは
$outer_header
に返される。
S/MIMEメッセージを構築する際にはこれをS/MIMEメッセージのヘッダに追加する。
"Subject"
ヘッダのみは
$prepared_mime と
$outer_header の両方に
現れる点に注意。
- check()
-
use Crypt::SMIME qw(:constants);
$source_mime = $smime->check($signed_mime);
$source_mime = $smime->check($signed_mime, $flags);
検証を行う。検証に失敗した場合はその理由と共にdieする。
$flags として
"Crypt::SMIME::NO_CHECK_CERTIFICATE"
オプションを指定した場合には、署名者の証明書チェーンを検証しない。
$flags
のデフォルト値は
0
であり、この場合には全ての整合性についての検証を行う。
元の S/MIME
メッセージ,
$flags, 検証時刻
("setAtTime"), または
公開鍵の少なくとも一つが汚染されている(tainted)
ならば、検証されたメッセージも汚染される。
- encrypt()
-
$encrypted_mime = $smime->encrypt($raw_mime);
暗号化を行う。
"Content-*",
"MIME-*" 及び
"Subject"
を除いたヘッダは
multipartのトップレベルにコピーされる。
"Subject"
はS/MIMEを認識できないメーラのために,
multipartの
トップレベルと保護されるメッセージの両側に配置される。
元の MIME
メッセージ、または公開鍵の少なくとも一つが汚染されている
(tainted)
ならば、暗号化されたメッセージも汚染される。
- decrypt()
-
$decrypted_mime = $smime->decrypt($encrypted_mime);
復号を行う。復号に失敗した場合はその理由と共にdieする。
元の S/MIME
メッセージ、秘密鍵、またはその証明書のいずれかが汚染されている
(tainted)
ならば、復号されたメッセージも汚染される。
- isSigned()
-
$is_signed = $smime->isSigned($mime);
渡されたMIMEメッセージがS/MIMEで署名されたものなら真を返す。
クリア署名かどうかは問わない。
署名後に暗号化したメッセージを渡した場合は、署名が直接見えない為、
偽を返す事に注意。
- isEncrypted()
-
$is_encrypted = $smime->isEncrypted($mime);
渡されたMIMEメッセージがS/MIMEで暗号化されたものなら真を返す。
暗号化後に署名したメッセージを渡した場合は、暗号文が直接見えない為、
偽を返す事に注意。
- setAtTime()
-
$yesterday = time - (60*60*24);
$smime->setAtTime($yesterday);
検証時に用いる時刻を設定する。デフォルトは現在時刻。
UNIX epoch
形式でなければならない。