Tag: diffie hellman

生成EC Diffie-Hellman公钥和私钥对

我需要生成一个EC Diffie Hellman密钥对。 我使用的是secp256r1命名曲线和OpenSSL。 这就是我到目前为止所拥有的: unsigned char *ecdh(size_t *secret_len) { EVP_PKEY_CTX *pctx, *kctx; EVP_PKEY_CTX *ctx; unsigned char *secret; EVP_PKEY *pkey = NULL, *peerkey, *params = NULL; /* NB: assumes pkey, peerkey have been already set up */ /* Create the context for parameter generation */ if(NULL == (pctx = EVP_PKEY_CTX_new_id(EVP_PKEY_EC, NULL))) printf(“Error in EC key […]

如何在OpenSSL的EVP_PKEY结构中访问原始ECDH公钥,私钥和参数?

我正在使用OpenSSL的c库生成椭圆曲线Diffie-Hellman(ECDH)密钥对,遵循此处的第一个代码示例。 它掩盖了这一行的实际公钥交换: peerkey = get_peerkey(pkey); pkey变量和返回值都是EVP *类型。 pkey包含先前生成的公钥,私钥和params,返回值仅包含对等方的公钥。 所以这提出了三个问题: get_peerkey()实际上如何从get_peerkey()提取公钥,以便发送给对等方? 代码如何从pKey提取私钥和params来存储它们以便在密钥交换后供以后使用? get_peerkey()如何从对等方的原始公钥生成新的EVP_PKEY结构? 我见过OpenSSL函数EVP_PKEY_print_public() , EVP_PKEY_print_private()和EVP_PKEY_print_params()但它们用于生成人类可读的输出。 我还没有发现将人类可读的公钥转换回EVP_PKEY结构的任何等价物。