class method
OpenSSL::PKCS7.encrypt
(::OpenSSL::X509::Certificate certs, ::String data, ?::OpenSSL::Cipher cipher, ?::Integer flags) -> instance
PKCS7.encrypt(certs, data, cipher, flags = 0) => pkcs7
ext/openssl/ossl_pkcs7.c
View on GitHub ↗
static VALUE
ossl_pkcs7_s_encrypt(int argc, VALUE *argv, VALUE klass)
{
VALUE certs, data, cipher, flags, cipher_holder;
STACK_OF(X509) *x509s;
BIO *in;
const EVP_CIPHER *ciph;
int flg, status = 0;
VALUE ret;
PKCS7 *p7;
rb_scan_args(argc, argv, "22", &certs, &data, &cipher, &flags);
if (NIL_P(cipher)) {
rb_raise(rb_eArgError,
"cipher must be specified. Before version 3.3, " \
"the default cipher was RC2-40-CBC.");
}
ciph = ossl_evp_cipher_fetch(cipher, &cipher_holder);
flg = NIL_P(flags) ? 0 : NUM2INT(flags);
ret = NewPKCS7(cPKCS7);
in = ossl_obj2bio(&data);
x509s = ossl_protect_x509_ary2sk(certs, &status);
if(status){
BIO_free(in);
rb_jump_tag(status);
}
if (!(p7 = PKCS7_encrypt(x509s, in, ciph, flg))) {
BIO_free(in);
sk_X509_pop_free(x509s, X509_free);
ossl_raise(ePKCS7Error, NULL);
}
BIO_free(in);
SetPKCS7(ret, p7);
ossl_pkcs7_set_data(ret, data);
rb_ivar_set(ret, id_cipher_holder, cipher_holder);
sk_X509_pop_free(x509s, X509_free);
return ret;
}
Creates a PKCS #7 enveloped-data structure.
Before version 3.3.0, cipher was optional and defaulted to "RC2-40-CBC".
See also the man page PKCS7_encrypt(3).