Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Общие вопросы > работа с cryptographic message syntax


Автор: Paher 14.8.2012, 22:41
Доброго здоровья вам, уважаемые!

Помогите, пожалуйста, новичку в криптографии. Надо из python работать с файлами в формате CMS(cryptographic message syntax). Нужно их создавать, а также вытаскивать из них данные и сведения о подписанте. Скорее всего, неправильно ищу, но просмотрел уже 3 библиотеки (pyCrypto, M2Crypto, cryptolib) и не увидел ответа(и в гугле тоже). Возможно, кто-то из Вас уже с этим сталкивался. Буду благодарен за ссылки, куски кода и просто советы

Автор: Paher 17.8.2012, 09:55
Так ничего и не нашел, кроме прямого вызова OpenSSL. Буду пока делать так. 

Автор: dbykov 7.12.2012, 15:23
Аналогичная ситуация. Напрямую к OpenSSL обращаюсь.

Автор: Paher 10.8.2014, 11:46
Возвращаясь к теме

Код

from M2Crypto import BIO, SMIME, X509, m2


def extract_container(data):
    '''
    Извлечение и проверка подписи CMS-сообщения. Бросает исключение, если
    подпись не бьется с сертификатом из сообщения.

    * `data` -  CMS-сообщение в виде байтовой строки

    Возвращает пару вида: (данные, отпечаток сертификата)

    '''
    inp = BIO.MemoryBuffer(data)
    p7 = SMIME.PKCS7(m2.pkcs7_read_bio_der(inp._ptr()), 1)
    certStack = p7.get0_signers(X509.X509_Stack())
    thumb = certStack[0].get_fingerprint('sha1')
    st = X509.X509_Store()
    mime = SMIME.SMIME()
    mime.set_x509_store(st)
    mime.set_x509_stack(certStack)
    result = mime.verify(p7, flags=SMIME.PKCS7_NOVERIFY)
    return result, thumb


def sign_container(data, key, cert):
    '''
    Подписывание данных сертификатом и упаковка в сообщение CMS

    * `data` - подписываемые данные в виде байтовой строки
    * `key` - закрытый ключ для подписи, закодированный в PEM
    * `cert` - сертификат для подписи, закодированный в PEM

    Возвращает CMS-сообщение, закодированное в DER, в виде байтовой строки

    '''
    buf = BIO.MemoryBuffer(data)
    mime = SMIME.SMIME()
    key_bio = BIO.File(open(key))
    cert_bio = BIO.File(open(cert))
    mime.load_key_bio(key_bio, cert_bio)
    pkcs7 = mime.sign(buf, flags=SMIME.PKCS7_BINARY)
    out = BIO.MemoryBuffer()
    pkcs7.write_der(out)
    return out.read()



спасибо одному моему знакомому, может, кому пригодится

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)