
Тимур
10.01.2018
10:28:44
https://www.openssl.org/docs/man1.0.2/crypto/
https://github.com/pyca/cryptography
даже точнее вот это https://cryptography.io/en/latest/hazmat/bindings/openssl/

Тимур
10.01.2018
14:35:45
может это твой случай
спасибо за участие! там я уже был, случай не совсем мой, с гостом все хорошо, он работает. отсылки к биндингам pyopenssl и m2crypto не помогли, в первой я не увидел api для подписания pkcs7, но может плохо смотрел (и они сами вроде как советуют пользоваться пакетом cryptography) во второй нет поддержки Py3 и он вроде бы мертв.
через консольку openssl cms -sign и openssl smime -sign работают, кстати
может есть идея, как посмотреть внутрь объекта структуры, на который возвращается указатель?
попробовал заюзать PKCS7_sign вроде прокидывается все через BIO буфферы, но на выходе пустые байты (размером выделенного буффера), не понимаю как дебажить возврат из биндинга, когда он отдает указатель на сишную структуру, но не сам объект - даже не посмотришь, что оно там наподписывало.
Код примерно такой:
with open(in_file, 'rb') as in_file:
buf = in_file.read()
data = _ffi.new("char[]", buf)
bio = _lib.BIO_new_mem_buf(data, len(buf))
pointer = _lib.PKCS7_sign(x509, p_key, _ffi.NULL, data, _lib.PKCS7_DETACHED)
bio = _lib.BIO_new(_lib.BIO_s_mem())
_lib.SMIME_write_PKCS7(bio, pointer, _ffi.NULL, _lib.PKCS7_DETACHED)
signature_buffer = _ffi.new("unsigned char []", 1024)
signature_length = _ffi.new("unsigned int *")
signature_length[0] = len(signature_buffer)
result = _lib.BIO_write(bio, signature_buffer, 1024)
out = _ffi.buffer(signature_buffer, signature_length[0])[:]
with open('3.sig', 'wb') as sig:
sig.write(out)