2017-12-21 36 views
1

Kenneth MacKay의 easy-ecc 라이브러리에서 OpenSSL 생성 키를 사용하려고하는데 어려움을 겪고 있습니다.easy-ecc에서 ECDSA 용 OpenSSL (prime256v1)의 키를 사용하려면 어떻게해야합니까?

테스트하기 위해, 나는 키를 생성하지하고 덤프했습니다

$ openssl ec -in ec_private.pem -text -noout 
read EC key 
Private-Key: (256 bit) 
priv: 
    45:b7:1a:09:1c:2a:1c:78:f8:80:da:94:44:0f:0f: 
    3f:f6:a8:93:2d:07:43:c8:2a:9c:58:25:49:1e:a5: 
    b2:68 
pub: 
    04:ae:ef:df:ff:85:ee:59:00:fd:43:52:10:14:77: 
    23:c8:e3:ba:00:4d:82:4d:41:15:a4:c5:09:ec:96: 
    ef:50:73:79:9d:a7:a6:1a:88:a9:b2:26:ac:1e:03: 
    50:02:0d:93:47:83:9d:eb:f9:e7:d3:dd:7d:59:04: 
    95:a8:fd:bb:cf 
ASN1 OID: prime256v1 
NIST CURVE: P-256 

는, 곡선 secp256r1를 사용하여 홍보의 테스트를 기반으로 작은 마구로를 수입

#include <stdio.h> 
#include <string.h> 
#include "ecc.h" 

int main() { 

    uint8_t privatek[] = { 
     0x45, 0xb7, 0x1a, 0x09, 0x1c, 0x2a, 0x1c, 0x78, 
     0xf8, 0x80, 0xda, 0x94, 0x44, 0x0f, 0x0f, 0x3f, 
     0xf6, 0xa8, 0x93, 0x2d, 0x07, 0x43, 0xc8, 0x2a, 
     0x9c, 0x58, 0x25, 0x49, 0x1e, 0xa5, 0xb2, 0x68 
    }; 

    uint8_t publick[] = { 
     0xae, 0xef, 0xdf, 0xff, 0x85, 0xee, 0x59, 0x00, 
     0xfd, 0x43, 0x52, 0x10, 0x14, 0x77, 0x23, 0xc8, 
     0xe3, 0xba, 0x00, 0x4d, 0x82, 0x4d, 0x41, 0x15, 
     0xa4, 0xc5, 0x09, 0xec, 0x96, 0xef, 0x50, 0x73, 
     0x79, 0x9d, 0xa7, 0xa6, 0x1a, 0x88, 0xa9, 0xb2, 
     0x26, 0xac, 0x1e, 0x03, 0x50, 0x02, 0x0d, 0x93, 
     0x47, 0x83, 0x9d, 0xeb, 0xf9, 0xe7, 0xd3, 0xdd, 
     0x7d, 0x59, 0x04, 0x95, 0xa8, 0xfd, 0xbb, 0xcf 
    }; 

    uint8_t hash[ECC_BYTES]; 
    uint8_t sig[ECC_BYTES * 2]; 

    memcpy(hash, publick, ECC_BYTES); 

    if (!ecdsa_sign(privatek, hash, sig)) { 
     printf("ECC_sign() failed\n"); 
    } 

    if (!ecdsa_verify(publick, hash, sig)) { 
     printf("ECC_verify() failed\n"); 
    } 
} 

을하지만 결코 통과합니다. 키를 가져 오는 동안 바보 같은 짓을하고 있는지, 아니면 다른 것이 있는지는 잘 모르겠습니다.

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

+0

를 얻을 수 있다면

지금 당신은 ecdsa_sign'와'ecdsa_verify''에 대한 코드를 표시해야합니다; OpenSSL 기능이 아닙니다. 'EC_KEY'로 파싱하기위한 압축되지 않은 키를 지정해야한다면'publick'에'0x04'를 앞에 붙입니다. – jww

+0

감사합니다. @wwww. 필자는 OpenSSL을 사용하여 pem 파일을 생성하고 키를 덤프했습니다. 다른 것 (ecdsa_sign 및 ecdsa_verify)은 easy-ecc에서 수행됩니다. 압축되지 않은 점을 사용하고 압축 된 점을 사용하면 함께 나타납니다. – Brice

답변

0

나는 그 질문을 게시하기 전에 1 시간을 기다렸어야했다. easy-ecc는 압축 된 점에서 작동합니다. 압축 된 공개 키를 버리고 성공과 함께 사용했습니다.

비 압축 지점을 지원하는 fork by arekinath도 있습니다. 단지 내가 ... 내 마이크로 ECC 코드가 작동