ex_openssl v0.1.1 ExOpenssl.Crypto.PKCS7

PKCS7 Handling. See ExOpenssl.Crypto.PKCS7 for IO.

Link to this section Summary

Link to this section Types

Link to this type flag()
flag() ::
  :text |
  :nocerts |
  :nosigs |
  :nochain |
  :nointern |
  :noverify |
  :detached |
  :binary |
  :noattr |
  :nosmimecap |
  :nooldmimetype |
  :crlfeol |
  :stream |
  :nocrl |
  :partial |
  :reuse_digest |
  :no_dual_content
Link to this type flags()
flags() :: [flag()]

Link to this section Functions

Link to this function decrypt(pkcs7, pkey, cert)
decrypt(pkcs7 :: pkcs7(), pkey :: ExOpenssl.PKey.key(), cert :: ExOpenssl.Crypto.X509.certificate()) ::
  {:ok, binary()} |
  {:error, [ExOpenssl.Errors.Error.t()]}

Decrypt pkcs7 pkcs7 using the recipients pkey and cert.

Examples

iex> [recipient] = ExOpenssl.Crypto.X509.from_pem!(File.read!("priv/test/cert.pem"))
iex> pkey = ExOpenssl.PKey.from_pem!(File.read!("priv/test/key.pem"))
iex> message = File.read!("priv/test/message_enc_foo.p7")
iex> {pkcs7, _} = ExOpenssl.Crypto.PKCS7.SMIME.read!(message)
iex> PKCS7.decrypt!(pkcs7, pkey, recipient)
"Foo"
Link to this function decrypt!(pkcs7, pkey, cert)
decrypt!(pkcs7 :: pkcs7(), pkey :: ExOpenssl.PKey.key(), cert :: ExOpenssl.Crypto.X509.certificate()) ::
  binary() |
  no_return()

See decrypt/3

Link to this function encrypt(certs, input, cipher, flags \\ [:stream])
encrypt(certs :: [ExOpenssl.Crypto.X509.certificate()], input :: binary(), cipher :: ExOpenssl.Symm.Cipher.cipher(), flags :: flags()) ::
  {:ok, pkcs7()} |
  {:error, [ExOpenssl.Errors.Error.t()]}

Encrypt binary input for the recipients certs.

Examples

iex> recipients = ExOpenssl.Crypto.X509.from_pem!(File.read!("priv/test/cert.pem"))
iex> cleartext = "Foo"
iex> {:ok, pkcs7} = PKCS7.encrypt(recipients, cleartext, :des_ede3_cbc)
iex> ExOpenssl.Crypto.PKCS7.SMIME.write!(pkcs7, cleartext)
"MIME-Version: 1.0...."
Link to this function encrypt!(certs, input, cipher, flags \\ [:stream])
encrypt!(certs :: [ExOpenssl.Crypto.X509.certificate()], input :: binary(), cipher :: ExOpenssl.Symm.Cipher.cipher(), flags :: flags()) ::
  pkcs7() |
  no_return()

See encrypt/4

Link to this function sign(signcert, pkey, certs \\ [], input, flags \\ [:stream])
sign(signcert :: ExOpenssl.Crypto.X509.certificate(), pkey :: ExOpenssl.PKey.key(), certs :: [ExOpenssl.Crypto.X509.certificate()], input :: binary(), flags :: flags()) ::
  {:ok, pkcs7()} |
  {:error, [ExOpenssl.Errors.Error.t()]}

Sign binary input.

Examples

iex> [signcert] = ExOpenssl.Crypto.X509.from_pem!(File.read!("priv/test/cert.pem"))
iex> cleartext = "Foo"
iex> pkey = ExOpenssl.PKey.from_pem!(File.read!("priv/test/key.pem"))
iex> {:ok, pkcs7} = PKCS7.sign(signcert, pkey, cleartext)
iex> ExOpenssl.Crypto.PKCS7.SMIME.write!(pkcs7, cleartext)
"MIME-Version: 1.0...."
Link to this function sign!(signcert, pkey, certs \\ [], input, flags \\ [:stream])
sign!(signcert :: ExOpenssl.Crypto.X509.certificate(), pkey :: ExOpenssl.PKey.key(), certs :: [ExOpenssl.Crypto.X509.certificate()], input :: binary(), flags :: flags()) ::
  pkcs7() |
  no_return()

See sign/5

Link to this function verify(pkcs7, certs, store, indata \\ nil, flags \\ [:stream])
verify(pkcs7 :: pkcs7(), certs :: [ExOpenssl.Crypto.X509.certificate()], store :: [ExOpenssl.Crypto.X509.certificate()], indata :: nil | binary(), flags :: flags()) ::
  {:ok, {true, binary()}} |
  {:error, [ExOpenssl.Errors.Error.t()]}

Verify Signature

Examples

iex> certs = ExOpenssl.Crypto.X509.from_pem!(File.read!("priv/test/cert.pem"))
iex> store = ExOpenssl.Crypto.X509.from_pem!(File.read!("priv/test/root-ca.pem"))
iex> message = File.read!("priv/test/message_sig_clear.p7")
iex> {pkcs7, bcount} = ExOpenssl.Crypto.PKCS7.SMIME.read!(message)
iex> PKCS7.verify(pkcs7, certs, store, bcount)
{:ok, {true, "Foo"}}
Link to this function verify!(pkcs7, certs, store, indata \\ nil, flags \\ [:stream])
verify!(pkcs7 :: pkcs7(), certs :: [ExOpenssl.Crypto.X509.certificate()], store :: [ExOpenssl.Crypto.X509.certificate()], indata :: nil | binary(), flags :: flags()) ::
  {true, binary()} |
  no_return()

See verify/5