2

의 인쇄 X 및 Y이 내 코드입니다 : 나는 "유형의 불완전한 정의 '구조체 ec_point_st가'"라는 오류가 발생하고있어은 OpenSSL : EC_POINT

EC_KEY *eckey = EC_KEY_new(); 
EC_KEY_generate_key(eckey); 
const EC_POINT *pub = EC_KEY_get0_public_key(eckey); 
printf("%s", pub->X); 

. 또한 시도 :

EC_GROUP *curve = EC_GROUP_new_by_curve_name(NID_secp521r1); 
BN_CTX *ecctx= BN_CTX_new(); 
EC_KEY *eckey = EC_KEY_new(); 
EC_KEY_generate_key(eckey); 
const EC_POINT *pub = EC_KEY_get0_public_key(eckey); 
NSLog(@"%s", EC_POINT_point2hex(curve, pub, POINT_CONVERSION_HYBRID, ecctx)); 

이 경우 EXC_BAD_ACCESS 오류가 발생합니다. 공개 키의 x와 y 포인트를 인쇄하려면 어떻게해야합니까 (디버깅 용)?

답변

4

당신은 EC_KEY_generate_key를 호출하기 전에 EC_KEYEC_GROUP 객체를 연결해야 :

EC_KEY *ec_key = EC_KEY_new(); 
    EC_GROUP *ec_group = EC_GROUP_new_by_curve_name(NID_secp521r1); 

    EC_KEY_set_group(ec_key, ec_group); 
    EC_KEY_generate_key(ec_key); 

후 공개 키를 인쇄 :

const EC_POINT *pub = EC_KEY_get0_public_key(ec_key); 

    BIGNUM *x = BN_new(); 
    BIGNUM *y = BN_new(); 

    if (EC_POINT_get_affine_coordinates_GFp(ec_group, pub, x, y, NULL)) { 
     BN_print_fp(stdout, x); 
     putc('\n', stdout); 
     BN_print_fp(stdout, y); 
     putc('\n', stdout); 
    } 

오류 및 메모리 처리를 추가하는 것을 잊지 마십시오 누출 위의 샘플 코드