@@ -230,12 +230,16 @@ ossl_pkcs7_s_sign(int argc, VALUE *argv, VALUE klass)
230
230
pkey = GetPrivPKeyPtr (key ); /* NO NEED TO DUP */
231
231
flg = NIL_P (flags ) ? 0 : NUM2INT (flags );
232
232
ret = NewPKCS7 (cPKCS7 );
233
- in = ossl_obj2bio (& data );
233
+
234
+ if (!(flg & PKCS7_PARTIAL ))
235
+ in = ossl_obj2bio (& data );
236
+
234
237
if (NIL_P (certs )) x509s = NULL ;
235
238
else {
236
239
x509s = ossl_protect_x509_ary2sk (certs , & status );
237
240
if (status ){
238
- BIO_free (in );
241
+ if (!(flg & PKCS7_PARTIAL ))
242
+ BIO_free (in );
239
243
rb_jump_tag (status );
240
244
}
241
245
}
@@ -244,10 +248,17 @@ ossl_pkcs7_s_sign(int argc, VALUE *argv, VALUE klass)
244
248
sk_X509_pop_free (x509s , X509_free );
245
249
ossl_raise (ePKCS7Error , NULL );
246
250
}
251
+
247
252
SetPKCS7 (ret , pkcs7 );
248
- ossl_pkcs7_set_data (ret , data );
253
+
254
+ if (!(flg & PKCS7_PARTIAL ))
255
+ ossl_pkcs7_set_data (ret , data );
256
+
249
257
ossl_pkcs7_set_err_string (ret , Qnil );
250
- BIO_free (in );
258
+
259
+ if (!(flg & PKCS7_PARTIAL ))
260
+ BIO_free (in );
261
+
251
262
sk_X509_pop_free (x509s , X509_free );
252
263
253
264
return ret ;
@@ -1080,4 +1091,5 @@ Init_ossl_pkcs7(void)
1080
1091
DefPKCS7Const (BINARY );
1081
1092
DefPKCS7Const (NOATTR );
1082
1093
DefPKCS7Const (NOSMIMECAP );
1094
+ DefPKCS7Const (PARTIAL );
1083
1095
}
0 commit comments