Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22  Сказал(а) «Спасибо»: 8 раз Поблагодарили: 1 раз в 1 постах
|
Автор: Андрей *  Автор: cancer  В итоге, на текущий момент, подходящую подпись для получения токена от МДЛП, получается создать только при помощи следующей команды:
./csptest -sfsign -sign -in <путь>/code.txt -out <путь>/out.txt -my <отпечаток сертификата> -detached -base64 -add
Подскажите, как при помощи pycades создать подпись, эквивалентную результату этой команды? Спасибо. У Вас выше же успешно формировалась и проверялась отсоединенная подпись. Отличие: Утилита добавляет только сертификат подписанта, в pycades явно указать CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLYЦитата:= 2 Сохраняет только сертификат конечного пользователя. на JS это выглядит так: Код:
yield oSigner.propset_Options(cadesplugin.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY);
Спасибо! Да, дело было именно в Options, подпись МДЛП принимается, токен приходит.
|
|
|
|
|
|
Статус: Участник
Группы: Участники
Зарегистрирован: 09.12.2022(UTC) Сообщений: 22  Сказал(а) «Спасибо»: 8 раз Поблагодарили: 1 раз в 1 постах
|
Код создаёт валидную подпись для API МДЛП (на основе примера из КриптоПро): Код:
import base64
import pycades
store = pycades.Store()
store.Open(pycades.CADESCOM_CONTAINER_STORE, pycades.CAPICOM_MY_STORE, pycades.CAPICOM_STORE_OPEN_MAXIMUM_ALLOWED)
certs = store.Certificates
assert(certs.Count != 0), "Certificates with private key not found"
signer = pycades.Signer()
signer.Certificate = certs.Item(1)
# signer.CheckCertificate = True
signer.Options = pycades.CAPICOM_CERTIFICATE_INCLUDE_END_ENTITY_ONLY
string_to_sign = "b1758253-9220-421a-8dee-c701f32e4c37"
b = base64.b64encode(bytes(string_to_sign, 'utf-8'))
base64_str = b.decode('utf-8')
signedData = pycades.SignedData()
signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
signedData.Content = base64_str
signature = signedData.SignCades(signer, pycades.CADESCOM_CADES_BES, True)
final_signature = ''.join(signature.splitlines())
print("--Signature--")
print(final_signature)
print("----")
_signedData = pycades.SignedData()
_signedData.ContentEncoding = pycades.CADESCOM_BASE64_TO_BINARY
_signedData.Content = signedData.Content
_signedData.VerifyCades(signature, pycades.CADESCOM_CADES_BES, True)
print("Verified successfully")
Отредактировано пользователем 13 декабря 2022 г. 13:35:19(UTC)
| Причина: добавил import base64
|
 1 пользователь поблагодарил Baki111 за этот пост.
|
|
|
|
Быстрый переход
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.
Important Information:
The Форум КриптоПро uses cookies. By continuing to browse this site, you are agreeing to our use of cookies.
More Details
Close