У меня есть сервер, работающий под python, подписывающий дайджест сообщения sha256 с помощью m2crypto
Я использую открытый и закрытый ключ RSA, сгенерированный openssl CLI. На стороне сервера все в порядке
Код Python:
privateKey = M2Crypto.RSA.load_key (sys.argv [2])
signatureDigest = privateKey.sign (digest, 'sha256')
Я дважды проверяю, что подпись хороша:
pubKey = M2Crypto.RSA.load_pub_key ("key.pub.pem")
if pubKey.verify (digest, signatureDigest, 'sha256') (и т. д ....)
Я храню подписанный дайджест sha256 в файле и отправляю его вместе с исходным сообщением клиенту.
На стороне клиента, работающей под c ++ vc6, я загружаю подписанный дайджест sha256 (как двоичный файл) и подписанное сообщение. Теперь цель - проверить сообщение вместе с подписанным sha256. У меня есть cryptopp в качестве статической ссылки, и я знаю, что она отлично работает, потому что я могу вычислить sha256 и сравнить с sha256 из python, имеющим тот же результат. Вот код:
RSA :: PublicKey pubKey;
pubKey.Load (FileSource (LicenseControl :: pubKeyPath, true));
RSASS :: Верификатор верификации (pubKey);
// shaDigest заново вычисляется sha256, signatureByte - это подпись сообщения, полученного с сервера
result = verifyier.VerifyMessage (shaDigest, CryptoPP :: SHA256 :: DIGESTSIZE, signatureByte, 512);
Это компилируется и запускается, но всегда возвращает false. Чтобы убедиться, что подпись действительна, я проверил ее, используя непосредственно CLI openssl (не через упаковщик python m2crypto):
openssl dgst -sha256 -верифицировать key.pub.pem -подпись подписи original_file
Проверено ОК
Это подтверждает, что подписанный дайджест sha256 в порядке, и что его можно использовать для успешной проверки сообщения с использованием открытого ключа. Мне известны форматы DER и PEM (используя PEM для openssl, DER для cryptopp). Поэтому я считаю, что открытый ключ правильный.
Теперь моя проблема Как использовать библиотеку cryptopp для проверки подписи ???
Я прошел через документ, но после нескольких дней он все еще выглядит для меня как китайский. Я пробовал что-то вроде
RSASS :: Верификатор верификатора (pubKey);
использование PSSR для шифрования в коде Python, но не повезло ...
Сейчас я рассматриваю возможность только расшифровать открытым ключом подписанный дайджест sha256 и сравнить его с недавно созданным дайджестом sha256, вычисленным из файла приема. Но даже такого простого я не нашел в доке ...
Есть идеи, как правильно использовать верификатор?
Как расшифровать с помощью открытого ключа? в случае, если предыдущий вопрос не может быть решен