names=sign
visibility=public
kind=defined

--- sign(cert, key, data, certs = [], flags = 0) -> OpenSSL::PKCS7
data に証明書と秘密鍵で署名します。

cert に署名に使う証明書を、key にその証明書に対応する秘密鍵を
渡します。certs に [[c:OpenSSL::X509::Certificate]] オブジェクトの配列 を
渡すと [[c:OpenSSL::PKCS7]] オブジェクトにそれらの証明書が追加で保持されます。
例えば中間 CA 証明書などを渡します。
flags は以下の値の OR を渡します。
  * [[m:OpenSSL::PKCS7::TEXT]] 
      text/plain 用の MIME ヘッダをデータに付け加える。
  * [[m:OpenSSL::PKCS7::NOCERTS]]
      署名者の証明書を署名に含めません。送り先がすでに証明書をもっている場合
      など、他の方法で証明書を手に入れることができる場合に
      データ量を減らすために用います。
  * [[m:OpenSSL::PKCS7::DETACHED]]
      クリア署名(multipart/signed)をする。
  * [[m:OpenSSL::PKCS7::BINARY]]
      data に MIME 正規化を施さない。
  * [[m:OpenSSL::PKCS7::NOATTR]]
      PKCS#7 autenticatedAttributes (署名時刻など)をオブジェクトに含めない。
  * [[m:OpenSSL::PKCS7::NOSMIMECAP]]
      署名者が使用可能な暗号アルゴリズムの情報など(SMIMECapabilities)を省略する。


返り値は署名結果を含む [[c:OpenSSL::PKCS7]] オブジェクトを返します。

@param cert 署名に用いる証明書([[c:OpenSSL::X509::Certificate]] オブジェクト)
@param key 署名に用いる秘密鍵([[c:OpenSSL::PKey::PKey]] のサブクラスのオブジェクト)
@param data 署名対象のデータ文字列
@param certs 添付する証明書群([[c:OpenSSL::X509::Certificate]] オブジェクトの配列)
@param flags フラグ(整数値)
@raise OpenSSL::PKCS7::PKCS7Error 署名に失敗した場合に発生します

