instance method
OpenSSL::PKCS7#add_data
(::String data) -> self
add_data(p1)
ext/openssl/ossl_pkcs7.c
View on GitHub ↗
static VALUE
ossl_pkcs7_add_data(VALUE self, VALUE data)
{
PKCS7 *pkcs7;
BIO *out, *in;
char buf[4096];
int len, ret;
GetPKCS7(self, pkcs7);
if (PKCS7_type_is_signed(pkcs7)) {
if (!PKCS7_content_new(pkcs7, NID_pkcs7_data))
ossl_raise(ePKCS7Error, "PKCS7_content_new");
}
in = ossl_obj2bio(&data);
if (!(out = PKCS7_dataInit(pkcs7, NULL))) {
BIO_free(in);
ossl_raise(ePKCS7Error, "PKCS7_dataInit");
}
for (;;) {
if ((len = BIO_read(in, buf, sizeof(buf))) <= 0)
break;
if (BIO_write(out, buf, len) != len) {
BIO_free_all(out);
BIO_free(in);
ossl_raise(ePKCS7Error, "BIO_write");
}
}
if (BIO_flush(out) <= 0) {
BIO_free_all(out);
BIO_free(in);
ossl_raise(ePKCS7Error, "BIO_flush");
}
ret = PKCS7_dataFinal(pkcs7, out);
BIO_free_all(out);
BIO_free(in);
if (!ret)
ossl_raise(ePKCS7Error, "PKCS7_dataFinal");
ossl_pkcs7_set_data(self, Qnil);
return data;
}
No documentation available
See also
#add_crl
#add_recipient
#add_certificate
#add_signer
also in
4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0