EVP_PKEY_set0_EC_KEY()
时间: 2023-08-22 13:05:04 浏览: 54
EVP_PKEY_set0_EC_KEY()同样是OpenSSL库中的一个函数,它的作用是将一个EC_KEY结构设置为EVP_PKEY结构的密钥。具体来说,就是将EC_KEY结构中的公私钥信息放入EVP_PKEY结构中,以便后续的加密解密操作。需要注意的是,在调用该函数之前,EVP_PKEY结构必须已经被初始化,而且EC_KEY结构中的公私钥信息也必须已经被设置好。该函数的返回值为1表示成功,0表示失败。
相关问题
EVP_PKEY_set1_EC_KEY与EVP_PKEY_assign_EC_KEY有什么区别
`EVP_PKEY_set1_EC_KEY` 和 `EVP_PKEY_assign_EC_KEY` 都是 OpenSSL 中关于椭圆曲线加密的函数,但它们的作用有所不同。
`EVP_PKEY_assign_EC_KEY` 函数的作用是将一个 `EC_KEY` 结构体赋值给一个 `EVP_PKEY` 结构体,使得这个 `EVP_PKEY` 结构体可以使用 ECDSA 或 ECDH 等椭圆曲线算法进行加密和解密操作。它的函数原型为:
```
int EVP_PKEY_assign_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
```
而 `EVP_PKEY_set1_EC_KEY` 函数的作用是将一个 `EC_KEY` 结构体作为参数,创建一个新的 `EVP_PKEY` 结构体并将其与指定的 `EC_KEY` 结构体关联起来。这个新的 `EVP_PKEY` 结构体可以使用 ECDSA 或 ECDH 等椭圆曲线算法进行加密和解密操作。它的函数原型为:
```
int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
```
因此,`EVP_PKEY_assign_EC_KEY` 是将一个已有的 `EC_KEY` 结构体赋值给 `EVP_PKEY` 结构体,而 `EVP_PKEY_set1_EC_KEY` 是创建一个新的 `EVP_PKEY` 结构体并将其与指定的 `EC_KEY` 结构体关联起来。它们的作用是不同的。
EVP_PKEY与EC_KEY如何相互转换
在OpenSSL库中,可以使用以下函数将EVP_PKEY对象转换为EC_KEY对象:
```c
EC_KEY *EVP_PKEY_get1_EC_KEY(EVP_PKEY *pkey);
```
该函数返回一个新分配的EC_KEY对象,该对象包含与给定的EVP_PKEY对象相关联的EC密钥。如果pkey不是EC密钥,则返回NULL。
同样地,可以使用以下函数将EC_KEY对象转换为EVP_PKEY对象:
```c
EVP_PKEY *EVP_PKEY_new();
int EVP_PKEY_set1_EC_KEY(EVP_PKEY *pkey, EC_KEY *key);
```
其中,EVP_PKEY_new()函数用于创建一个新的EVP_PKEY对象,而EVP_PKEY_set1_EC_KEY()函数将EC_KEY对象key关联到EVP_PKEY对象pkey中。
需要注意的是,这两个函数都是一次性的,即它们都会在转换完成后释放原始对象。如果需要在转换后继续使用原始对象,请先对其进行引用计数,以避免意外释放。例如,可以使用以下函数对EVP_PKEY对象进行引用计数:
```c
int EVP_PKEY_up_ref(EVP_PKEY *pkey);
```
该函数将EVP_PKEY对象pkey的引用计数增加1。在完成对EVP_PKEY对象的使用后,应该使用以下函数对其进行释放:
```c
void EVP_PKEY_free(EVP_PKEY *pkey);
```
该函数释放EVP_PKEY对象pkey及其关联的资源。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)