2016-10-12 15 views
2

Я новичок в криптографии Elliptic Curve, openSSL и wolfSSL. В моем контексте я генерирую KeyPair из командной строки с помощью openssl и импортирую закрытый ключ в свой код. Затем я использую wolfSSL для генерации подписи и вывода его.Как проверить подпись ECC от wolfSSL с помощью OpenSSL

Я сохраняю вывод в формате DER и пытаюсь проверить с помощью openSSL, проверка не выполняется.

Если я подписываю и проверяю внутри своего кода с помощью wolfSSL, он проверяет успешно, а также успешно, если я подпишу и подтвержу в командной строке с openSSL.

Есть ли проблема с кодировкой, о которой я не уверен?

код Обновление

// ECC public key 
const uint8_t pubKey[] ={Hex Format key}; 
// ECC Signature from wolfSSL 
char* sigString = {Signature from wolfSSL returned as char}; 
/* TYPE CONVERTIONS*/ 
const uint8_t *der_bytes_copy; 
const uint8_t *pub_bytes_copy; 
der_bytes_copy = (const unsigned char*)sigString; 
pub_bytes_copy = pubKey; 


EC_KEY *ECpubkey; 
size_t keySize = sizeof(pubKey); 
int eccgrp; 
eccgrp = OBJ_txt2nid("secp256r1"); 
ECpubkey = EC_KEY_new_by_curve_name(eccgrp); 
o2i_ECPublicKey(&ECpubkey, &pub_bytes_copy, keySize); 
ECDSA_SIG *signature; 
signature = d2i_ECDSA_SIG(NULL, &der_bytes_copy, signedSize); 
uint8_t digest[36]; 
int verified; 
const char message[] = "Test for Authenticate Kernel with ECC"; 
SHA256_CTX ctx; 
SHA256_Init(&ctx); 
SHA256_Update(&ctx, (const uint8_t*)message,sizeof(message)); 
SHA256_Final(digest, &ctx); 
verified = ECDSA_do_verify(digest, sizeof(digest), signature, ECpubkey); 

Закрытый ключ используется с wolfSSL подписать сообщение, а затем открытый ключ с OpenSSL для проверки, но это резко останавливается.

+0

* «Я сохраняю вывод в формате DER и пытаюсь проверить с помощью openSSL, проверка не выполняется ...» * - Пожалуйста, покажите свой код. Также см. [Подпись и проверка EVP] (http://wiki.openssl.org/index.php/EVP_Signing_and_Verifying) в вики OpenSSL. – jww

+0

Эй, пожалуйста, проверьте, если это возможно. Спасибо –

ответ

1

В прошлом при работе с OpenSSL и сравнения значений знака к wolfSSL Я обнаружил, что OpenSSL делает следующие шаги при подписании:

  1. Читайте в и расшифровать ключ
  2. вычислить хэш-
  3. Подпись закодировать окрошка
  4. знак закодированный хеш
  5. Base64 Encode подпись

OpenSSL не делает это очевидным или удобным для пользователя, поэтому, к сожалению, это то, что вам нужно открыть, как и у вас.

Пожалуйста, используйте следующие шаги в wolfSSL для достижения желаемого выхода:

1 Создайте или импортировать ECC ключ
2 Compute ша хэш на входе, как вы делали ранее
3 закодировать хэш с этим API вызова: encodedSz = wc_EncodeSignature(encodedOutput, hashInput, SHA256_DIGEST_SIZE, SHA256h);
4 Подписать закодированная хэш
5 Теперь сделайте проверить

Дайте нам знать, если это работает для вас.

+0

Привет, Калеб, спасибо за ответ. Я забыл закрыть это, я узнал, что wolfSSL фактически берет строку октета для открытого ключа в модуле ECC, и это сработало, когда я это передал. –