EVP_PKEY_verify_init
时间: 2023-08-28 17:07:50 浏览: 233
EVP_PKEY_verify_init 是 OpenSSL 中的一个函数,用于初始化公钥验证操作的上下文,该函数原型如下:
```
int EVP_PKEY_verify_init(EVP_PKEY_CTX *ctx);
```
该函数的参数是一个 EVP_PKEY_CTX 类型的指针,它指向公钥操作的上下文。EVP_PKEY_CTX 类型的结构体定义在 OpenSSL 的头文件中,它包含了公钥操作所需的所有信息。
EVP_PKEY_verify_init 函数的返回值为 1 表示成功,返回 0 表示失败。该函数初始化的上下文可以用于后续的公钥验证操作,例如 EVP_PKEY_verify 和 EVP_PKEY_verify_recover 函数。
相关问题
bool verifyText(std::string text, EVP_key pub, unsigned char sign[SIGN_LEN]) { if(DEBUG) { std::cout << KCYN << "verifying text using EC" << KNRM << std::endl; } unsigned int signLen = SIGN_LEN; unsigned char hash[SHA256_DIGEST_LENGTH]; if(!SHA256 ((const unsigned char *)text.c_str(), text.size(), hash)) { std::cout << KCYN << "SHA1 failed" << KNRM << std::endl; exit(0); } // setting up context EVP_PKEY_CTX * key_ctx = EVP_PKEY_CTX_new(pub,NULL); EVP_PKEY_verify_init(key_ctx); EVP_PKEY_CTX_set_signature_md(key_ctx, EVP_sha256()); bool b = EVP_PKEY_verify(key_ctx, sign, signLen, hash, SHA256_DIGEST_LENGTH); EVP_PKEY_CTX_free(key_ctx); return b; }
这段代码定义了一个名为verifyText的函数,用于验证文本的签名是否有效。函数接受三个参数:一个字符串text,一个EVP_key结构体pub和一个unsigned char数组sign。
函数内部首先检查是否定义了DEBUG宏。如果定义了DEBUG宏,将打印一条信息"verifying text using EC"。
接下来,函数声明了两个变量:signLen用于存储签名的长度,hash用于存储对文本进行SHA256哈希后的结果。
然后,函数使用SHA256函数对text进行哈希,并将结果存储在hash数组中。如果SHA256函数调用失败,将打印错误信息并退出程序。
接着,函数设置上下文,并使用EVP_PKEY_verify_init函数初始化验证操作。然后使用EVP_PKEY_CTX_set_signature_md函数设置签名算法为EVP_sha256()。
接下来,函数调用EVP_PKEY_verify函数来验证签名。该函数返回一个布尔值,表示验证结果。如果验证成功,则返回true,否则返回false。
最后,函数使用EVP_PKEY_CTX_free函数释放上下文,并返回验证结果。
EVP_PKEY_verify函数
EVP_PKEY_verify函数是OpenSSL库中用于验证数字签名的函数之一。它接受四个参数:签名类型、待签名数据、待签名数据长度、以及公钥。
具体来说,该函数可以用于验证以下类型的数字签名:
1. RSA 签名
2. DSA 签名
3. ECDSA 签名
使用该函数时,需确保传入的参数正确,否则会导致验证失败。此外,需要注意的是,在验证数字签名之前,需要先加载公钥。
阅读全文