Ejemplo n.º 1
0
def test_verify_with_detached_bad():
    '''
    Если для `n`-го подписанта подпись под данными не бьется, функция
    `Signature.verify_data()` возвращает `False`.
    '''
    data = test_detached_sign()
    sgn = csp.Signature(data)
    for n in range(sgn.num_signers()):
        assert not sgn.verify_data(b'hUrblEwurBle', n)
Ejemplo n.º 2
0
def test_cert_from_detached():
    '''
    Конструктору хранилища сертификатов `CertStore(msg)` можно передать экземпляр
    класса `CryptMsg` или `Signature`. Через это хранилище можно извлекать
    хранящиеся в сообщении или подписи сертификаты.
    '''
    data = test_detached_sign()
    sgn = csp.Signature(data)
    cs = csp.CertStore(sgn)
    assert len(list(cs))
Ejemplo n.º 3
0
def test_verify_with_detached():
    '''
    Поле `Signature.num_signers`, также как и `CryptMsg.num_signers` содержит
    количество подписантов сообщения.

    Метод `Signature.verify_data(d, n)` проверяет для отсоединенных данных `d`
    подпись `n`-го подписанта.
    '''
    data = test_detached_sign2()
    sgn = csp.Signature(data)
    for n in range(sgn.num_signers()):
        assert sgn.verify_data(b'hurblewurble', n)
Ejemplo n.º 4
0
def test_verify_file():
    '''
    Проверка отсоединенной подписи, созданной через командную строку.
    '''
    names = ('data1', 'data2')
    for name in names:
        with open(case_path('{0}.bin'.format(name)), 'rb') as f:
            data = f.read()
        with open(case_path('{0}.p7s'.format(name)), 'rb') as f:
            sigdata = f.read()
        sign = csp.Signature(sigdata)
        print(name, sign.num_signers())
        if sign.num_signers() <= 0:
            continue
        for c in csp.CertStore(sign):
            print(b64encode(c.thumbprint()))
        assert all(sign.verify_data(data, n) for n in range(sign.num_signers()))
Ejemplo n.º 5
0
def main():
    global ctxname
    try:
        ctx = csp.Crypt(b'{0}'.format(ctxname), csp.PROV_GOST_2001_DH, 0 | silent, provider)
    except:
        ctx = None
    if ctx is None:
        ctx = csp.Crypt(
            b'{0}'.format(ctxname), csp.PROV_GOST_2001_DH, csp.CRYPT_NEWKEYSET | silent, provider)
    msg = csp.CryptMsg(ctx)
    cs = csp.CertStore(ctx, b"My")

    rec_c = list(cs.find_by_name(b'123456789abcdef'))[0]
    ci = csp.CertInfo(rec_c)
    print(ci.name(), ci.issuer(), hexlify(ci.serial()))
    print(ci.not_before(), ci.not_after())

    msg.add_recipient(rec_c)
    data = msg.encrypt_data(b'Test byte string')
    print(len(data))

    #rec_c = list(cs.find_by_name(b'test'))[0]
    cs2 = csp.CertStore()
    cs2.add_cert(rec_c)
    encrypted = csp.CryptMsg(data)
    print('type:', encrypted.get_type())
    print('data:', encrypted.get_data())
    return_data = encrypted.decrypt(cs2)
    print(return_data)

    signed = msg.sign_data(b'Test signed data', rec_c)
    print(len(signed))

    msg2 = csp.CryptMsg(signed, ctx)
    info = csp.CertInfo(msg2, 0)
    print('version:', info.version())
    print('type:', msg2.get_type())
    print(msg2.verify(0))
    detached = msg.sign_data(b'Test signed data', rec_c, True)
    print(len(detached))
    sig = csp.Signature(detached, ctx)
    print(sig.verify_data(b'Test signed data', 0))
    print(sig.verify_data(b'Test zigned Data', 0))
    sig2 = csp.CryptMsg(open('tests/data1.p7s', 'rb').read())
    print('sig type:', sig2.get_type())
    print('sig data:', sig2.get_data())
Ejemplo n.º 6
0
def test_detached_sign2():
    '''
    Класс `Signature` наследует всю функциональность `CryptMsg`, но
    ориентирован на работу с отсоединенными подписями. Поэтому метод
    `Signature.sign_data()` по умолчанию возвращает отсоединенную подпись.
    '''
    ctx = csp.Crypt(
        test_container,
        PROV_GOST,
        0,
        test_provider
    )
    assert ctx
    cs = csp.CertStore(ctx, b"MY")
    cert = list(cs.find_by_name(test_cn))[0]

    # создание новой (пустой) отсоединенной подписи
    sgn = csp.Signature(ctx)

    # подписывание данных экземпляром `Signature` по умолчанию дает
    # отсоединенную подпись.
    data = sgn.sign_data(b'hurblewurble', cert)
    assert len(data)
    return data