@@ -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