我正在学习TLS 1.3方案,并尝试在C ++中实现基本的握手步骤,而无需使用来自SSL_accept
或SSL_do_handshake
等OpenSSL的现成包装器。该项目已经将OpenSSL用于常见的加密操作,因此我不希望将其与x25519计算比在OpenSSL中更为明显的任何其他加密库链接。所以...
有两个缓冲区:
unsigned char private_key[32];
RAND_bytes(private_key, 32);
unsigned char public_key[32];
memset(public_key, 0, 32);
我应该使用哪种OpenSSL方法,使用x25519算法(从复制和分配分配到尽可能少的数据),用public_key
计算出的字节填充private_key
缓冲区?
答案 0 :(得分:1)
使用函数EVP_PKEY
创建一个EVP_PKEY_new_raw_private_key
对象,如下所述:
https://www.openssl.org/docs/man1.1.1/man3/EVP_PKEY_new_raw_private_key.html
EVP_PKEY key = EVP_PKEY_new_raw_private_key(EVP_PKEY_X25519, NULL, private_key, sizeof(private_key));
if (key == NULL)
/* Error */;
然后您可以使用函数EVP_PKEY_get_raw_public_key
获取公共密钥字节,如上一页所述:
size_t publen = sizeof(public_key);
if (!EVP_PKEY_get_raw_public_key(key, public_key, &publen))
/* Error */;