Я пытаюсь подключить фреймворк AquaticPrime для Mac к Windows.CryptoAPI: Использование CryptVerifySignature для проверки подписи с openssl с открытым ключом
На Mac он использует библиотеку opensll, и я пытаюсь понять, как переносить это в Windows, где я должен использовать CryptoAPI, я думаю.
Мне в основном нужен код для проверки сгенерированной подписи с данным открытым ключом.
Вот как проверка осуществляется с помощью OpenSSL:
- входы: данные лицензии, открытый ключ и подпись, как 128 байт длиной.
- Сборник SHA1 рассчитывается на основе данных лицензии.
- RSA контекст устанавливаются с открытым ключом данными
- RSA_public_decrypt() называются, дал ключ RSA и подпись, которая возвращает 20 байт длинного SHA1 дайджест - это переварить равные один из шага 2, подпись действительна.
Итак, как мне это сделать с помощью CryptoAPI? Я получил это далеко:
- Начать с CryptAcquireContext (СТХ, 0, 0, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)
- Использование CryptImportKey с помощью this проводки, с pubexp = 3 и bitlen = 1024. Все это работает, то есть я не получаю ошибок, и я смотрел на двоичные данные, чтобы убедиться, что они соответствуют тому, что показывает статья MSDN.
- Создайте дайджест SHA1 из данных лицензии. Я получил полученное 20-байтовое значение хэша и вижу, что он соответствует тому, что я получаю с помощью openssl на Mac.
На данный момент, я называю:
CryptVerifySignature (hashHdl, sig, sigLen, keyHdl, 0, 0)
Это терпит неудачу с кодом ошибки ERROR_INVALID_PARAMETER.
Нечетным является то, что, когда я впервые случайно сохранил двойной открытый ключ в структуре PUBLICKEYBLOB, вместо этого я получил ошибку NTE_BAD_SIGNATURE. Это может означать, что теперь открытый ключ, который я передаю, является правильным.
Почему ошибка ERROR_INVALID_PARAMETER сейчас? Я проверил, что значение хеша правильное, и ключ также считается принятым. И параметр «sig» - это просто указатель на 128 байт подписи, а sigLen - 128.
Итак, что мне здесь не хватает?
Вопрос: Почему бы вам не использовать версию OpenSSL для Windows [ported] (http://www.slproweb.com/products/Win32OpenSSL.html)?Я имею в виду, что нет ничего плохого в использовании CryptoAPI, но openSSL уже существует, и это будет означать меньше работы ... – erloewe
Я не хочу, чтобы люди устанавливали новые системные компоненты только для запуска приложения, которое в противном случае даже не требует установки. –