Skip to content

Commit 0c18627

Browse files
committed
add PKCS7 "partial" flag support to OpenSSL::PKCS7.sign
1 parent d9e5cbf commit 0c18627

File tree

1 file changed

+16
-4
lines changed

1 file changed

+16
-4
lines changed

ext/openssl/ossl_pkcs7.c

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -230,12 +230,16 @@ ossl_pkcs7_s_sign(int argc, VALUE *argv, VALUE klass)
230230
pkey = GetPrivPKeyPtr(key); /* NO NEED TO DUP */
231231
flg = NIL_P(flags) ? 0 : NUM2INT(flags);
232232
ret = NewPKCS7(cPKCS7);
233-
in = ossl_obj2bio(&data);
233+
234+
if (!(flg & PKCS7_PARTIAL))
235+
in = ossl_obj2bio(&data);
236+
234237
if(NIL_P(certs)) x509s = NULL;
235238
else{
236239
x509s = ossl_protect_x509_ary2sk(certs, &status);
237240
if(status){
238-
BIO_free(in);
241+
if (!(flg & PKCS7_PARTIAL))
242+
BIO_free(in);
239243
rb_jump_tag(status);
240244
}
241245
}
@@ -244,10 +248,17 @@ ossl_pkcs7_s_sign(int argc, VALUE *argv, VALUE klass)
244248
sk_X509_pop_free(x509s, X509_free);
245249
ossl_raise(ePKCS7Error, NULL);
246250
}
251+
247252
SetPKCS7(ret, pkcs7);
248-
ossl_pkcs7_set_data(ret, data);
253+
254+
if (!(flg & PKCS7_PARTIAL))
255+
ossl_pkcs7_set_data(ret, data);
256+
249257
ossl_pkcs7_set_err_string(ret, Qnil);
250-
BIO_free(in);
258+
259+
if (!(flg & PKCS7_PARTIAL))
260+
BIO_free(in);
261+
251262
sk_X509_pop_free(x509s, X509_free);
252263

253264
return ret;
@@ -1080,4 +1091,5 @@ Init_ossl_pkcs7(void)
10801091
DefPKCS7Const(BINARY);
10811092
DefPKCS7Const(NOATTR);
10821093
DefPKCS7Const(NOSMIMECAP);
1094+
DefPKCS7Const(PARTIAL);
10831095
}

0 commit comments

Comments
 (0)