ECDSA:如何通过使用openssl解压缩x获得y坐标

问题描述 投票:4回答:2

我想对ECDSA进行的操作是从外部ECDSA硬件(实际上是一个公共密钥)获取的值中获取一个x“压缩的”坐标和一个ay“位”,然后尝试使用OpenSSL恢复y坐标(未压缩)函数调用。

我正在尝试以下代码,但是它没有按我预期的方式工作(我的xy []数组未填充正确的数据)。谁能帮忙?

我是ECDSA的新手,甚至是OpenSSL的新手,但我想我可以做到以下几点:

enter code here


EC_GROUP *curve_group = EC_GROUP_new_by_curve_name(NID_X9_62_prime192v1);
EC_POINT *point;
BIGNUM *x_compressed = BN_new();
int y_chooser_bit = 1;
int results = 0;
size_t returnsize = 0;

unsigned char x_compressed_byte_array[25] = {0x02, 0x71, 0xc0, 0x73, 0x73, 
                                             0x9b, 0xbf, 0xc2, 0x0a, 
                                             0x81, 0xcd, 0xdd, 0xf4, 
                                             0xcf, 0xca, 0xc7, 0xb5, 
                                             0xa9, 0x99, 0x61, 0x23, 
                                             0x2c, 0x5c, 0x63, 0x7a};

unsigned char xy[49];

// create a big number from the unsigned char array
BN_bin2bn(&x_compressed_byte_array[0],200,NULL); // length is in bits?

point = EC_POINT_new(curve_group);

results = EC_POINT_set_compressed_coordinates_GFp(curve_group, point, 
                                                  x_compressed,                                                               
                                                  y_chooser_bit, NULL);

returnsize = EC_POINT_point2oct(curve_group, point, 
                                POINT_CONVERSION_UNCOMPRESSED, 
                                &xy[0], 49, NULL); // 49

// clean up allocated memory
BN_free(x_compressed);
EC_POINT_free(point);
EC_GROUP_free(curve_group);
openssl compression point ecdsa
2个回答
2
投票

在您的代码的这一行中


0
投票

我拥有压缩的公共密钥,并希望将其转换为未压缩的公共密钥。我该怎么办?

© www.soinside.com 2019 - 2024. All rights reserved.