int KeysFun::loadPrivateKey(PID id, RSA_key* priv) { if(DEBUG) { std::cout << KYEL << "loading private key" << KNRM << std::endl; } std::string pr; #ifdef KK_RSA4096 pr = dir + "rsa4096_private" + std::to_string(id); #endif #ifdef KK_RSA2048 pr = dir + "rsa2048_private" + std::to_string(id); #endif FILE * fpr = fopen (pr.c_str(), "rb"); if(fpr == NULL) { if(DEBUG) { std::cout << KYEL << "Unable to open file " << pr << KNRM << std::endl; } return 1; } *priv = PEM_read_RSAPrivateKey(fpr, priv, NULL, NULL); fclose(fpr); if(DEBUG) { std::cout << KYEL << "loaded private key from " << pr << KNRM << std::endl; } return 0; }
时间: 2024-04-18 16:24:20 浏览: 126
这段代码定义了一个名为loadPrivateKey的函数,用于加载私钥文件并将私钥信息存储在RSA_key结构体中。函数接受两个参数:一个PID类型的id和一个指向RSA_key结构体的指针priv。
函数内部首先根据宏定义KK_RSA4096或KK_RSA2048拼接私钥文件的路径,并将路径存储在字符串pr中。
然后,使用fopen函数以二进制方式打开私钥文件,并将文件指针fpr返回。
如果打开文件失败,将打印错误信息并返回1。
接下来,使用PEM_read_RSAPrivateKey函数从打开的文件中读取私钥信息,并将结果存储在priv指针指向的RSA_key结构体中。
最后,使用fclose函数关闭打开的文件。
如果DEBUG宏被定义,则会打印加载私钥文件成功的信息。
函数返回0表示加载私钥成功。
相关问题
void signText(std::string text, RSA_key priv, unsigned char sign[SIGN_LEN]) { unsigned int signLen; 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); } if (!RSA_sign (NID_sha256, hash, SHA256_DIGEST_LENGTH, sign, &signLen, priv)) { std::cout << KCYN << "RSA_sign failed" << KNRM << std::endl; exit(0); } }
这段代码定义了一个名为signText的函数,用于对文本进行签名。函数接受三个参数:一个字符串text,一个RSA_key结构体priv和一个unsigned char数组sign。
函数内部首先声明了两个变量:signLen用于存储签名的长度,hash用于存储对文本进行SHA256哈希后的结果。
接下来,函数使用SHA256函数对text进行哈希,并将结果存储在hash数组中。如果SHA256函数调用失败,将打印错误信息并退出程序。
然后,函数使用RSA_sign函数对哈希值进行签名,并将签名结果存储在sign数组中。如果RSA_sign函数调用失败,同样会打印错误信息并退出程序。
这段代码的作用是使用私钥对文本进行签名,生成签名结果存储在sign数组中。
阅读全文