void signText(std::string text, EC_key priv, unsigned char sign[SIGN_LEN]) { unsigned char hash[SHA256_DIGEST_LENGTH]; unsigned int signLen = ECDSA_size(priv); unsigned char *buf = NULL; if ((buf = (unsigned char *)OPENSSL_malloc(signLen)) == NULL) { printf("malloc failed"); } for (int k = 0; k < SHA256_DIGEST_LENGTH; k++) { buf[k]='0'; } if (!ECDSA_sign(NID_sha256, hash, SHA256_DIGEST_LENGTH, buf, &signLen, priv)) { printf(("ECDSA_sign failed(len=" + std::to_string(signLen) + ")").c_str()); } for (int k = 0; k < SHA256_DIGEST_LENGTH; k++) { sign[k]=buf[k]; } OPENSSL_free(buf); }
时间: 2024-04-15 14:25:12 浏览: 89
这段代码定义了一个名为signText的函数,用于对文本进行签名。函数接受三个参数:一个字符串text,一个EC_key结构体priv和一个unsigned char数组sign。
函数内部首先声明了两个变量:hash用于存储对文本进行SHA256哈希后的结果,signLen用于存储签名的长度。然后使用ECDSA_size函数获取私钥对应的签名长度,并分配了相应长度的内存给buf。
接下来,使用OPENSSL_malloc函数为buf分配内存。如果内存分配失败,则打印错误信息"malloc failed"。
然后,使用一个循环将buf数组中的所有元素初始化为字符'0'。
接着,使用ECDSA_sign函数对哈希值进行签名,并将签名结果存储在buf数组中。如果ECDSA_sign函数调用失败,则打印错误信息,并在错误信息中包含signLen的值。
然后,使用另一个循环将buf数组中的元素复制到sign数组中。
最后,使用OPENSSL_free函数释放buf数组所分配的内存。
相关问题
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数组中。
阅读全文