Provided by: libcrypt-smime-perl_0.16-1build1_amd64 bug

NAME

       Crypt::SMIME::JA - S/MIMEの署名、検証、暗号化、復号

概要

         use Crypt::SMIME;

         my $plain = <<'EOF';
         From: alice@example.org
         To: bob@example.com
         Subject: Crypt::SMIME test

         This is a test mail. Please ignore...
         EOF

         my $smime = Crypt::SMIME->new();
         $smime->setPrivateKey($privkey, $crt);
         # $smime->setPublicKey([$icacert]); # if need be.

         my $signed = $smime->sign($plain);
         print $signed;

説明

       S/MIMEの署名、検証、暗号化、復号を行うクラス。 libcrypto (<http://www.openssl.org>)
       が必要。

エクスポート

       既定でエクスポートされるシンボルは無いが、次のシンボルはエクスポート可能である。

       "NO_CHECK_CERTIFICATE"
           "check()" を参照。

       "FORMAT_SMIME"
       "FORMAT_ASN1"
       "FORMAT_PEM"
           "extractCertificates()" を参照。

       ":constants"
           上記のもの全てをエクスポートする。

メソッド

       new()
             my $smime = Crypt::SMIME->new();

           引数無し

       setPrivateKey()
             $smime->setPrivateKey($key, $crt);
             $smime->setPrivateKey($key, $crt, $password);

           秘密鍵を設定する。ここで設定された秘密鍵は署名と復号の際に用いられる。
           ファイル名ではなく、鍵本体を渡す。

           対応しているフォーマットは PEM のみ。鍵の読み込みに失敗した場合は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, または公開鍵の少なくとも一つが汚染されている (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で暗号化されたものなら真を返す。
           暗号化後に署名したメッセージを渡した場合は、暗号文が直接見えない為、
           偽を返す事に注意。

関数

       extractCertificates()
             use Crypt::SMIME qw(:constants);

             @certs = @{Crypt::SMIME::extractCertificates($data)};
             @certs = @{Crypt::SMIME::extractCertificates($data, FORMAT_SMIME)};

           <S/MIMEメッセージまたはPKCS#7オブジェクトに含まれるX.509証明書 (や証明書失効リスト)
           をすべて取得する。 オプションの $type パラメータでデータの種類を指定できる。
           "Crypt::SMIME::FORMAT_SMIME" (初期値) はS/MIMEメッセージ、
           "Crypt::SMIME::FORMAT_ASN1"はバイナリ形式、 "Crypt::SMIME::FORMAT_PEM"はPEM形式。

       getSigners()
             @certs = @{Crypt::SMIME::getSigners($data)};
             @certs = @{Crypt::SMIME::getSigners($data, $type)};

           S/MIMEメッセージまたはPKCS#7オブジェクトに含まれる、署名者の
           X.509証明書を取得する。オプションの$typeパラメータでデータの種類を指定できる。

           この関数が返す公開鍵は検証されていないことに注意。
           公開鍵が有効であることを確かめるにはcheck()を実行すること。

著者

       Copyright 2006-2014 YMIRLINK Inc. All Rights Reserved.

       This library is free software; you can redistribute it and/or modify it under the same
       terms as Perl itself

       Bug reports and comments to: tl@tripletail.jp