cryptography - 使用STM32加密库生成签名
问题描述
我使用 STM32 加密库(固件实现)并设置由 openssl 生成的私钥值,但我无法获得正确的签名。无论私钥值是多少或全零(
"00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"
),签名的 R 参数总是
"D0 F4 7A FE 2F 31 76 B6 C3 1E BC 09 7E 57 81 0A B9 3A D9 65 01 39 90 D0"
。任何人都可以帮忙吗?
int generate_sign(unsigned char* Input){
EC_st.pmA = P_192_a;
...
status = STM32_SHA256_HASH_DigestCompute((uint8_t*)TEST_ca,
sizeof(TEST_ca),
(uint8_t*)MessageDigest,
&MessageDigestLength);
if (status == HASH_SUCCESS)
{
status = STM32_Init_RNG_for_Sign( &RNGstate);
if (status == RNG_SUCCESS)
{
status = ECCinitEC(&EC_st, &Crypto_Buffer );
if (status == ECC_SUCCESS)
{
status = ECCinitPrivKey(&PrivKey, &EC_st, &Crypto_Buffer);
if (status == ECC_SUCCESS)
{
status = ECCsetPrivKeyValue(PrivKey,priv_key,priv_key_size);
if (status == ECC_SUCCESS)
{
status = ECDSAinitSign(&sign, &EC_st, &Crypto_Buffer);
if (status == ECC_SUCCESS)
{
signCtx.pmEC = &EC_st;
signCtx.pmPrivKey = PrivKey;
signCtx.pmRNG = &RNGstate;
status = ECDSAsign(MessageDigest, MessageDigestLength, sign, &signCtx, &Crypto_Buffer);
if (status == ECC_SUCCESS)
{
status = ECDSAgetSignature(sign, E_ECDSA_SIGNATURE_R_VALUE, sign_R, &sign_R_length);
status = ECDSAgetSignature(sign, E_ECDSA_SIGNATURE_S_VALUE, sign_S, &sign_S_length);
}
}
}
}
}
}
}
}
return 0;
}
解决方案
推荐阅读
- sql-server - 计算两个日期之间的日期并将其修改为范围
- java - if 语句在退出 while 语句后不起作用
- php - 将 influxdb 时间格式转换为 ISO8601 格式
- sql-server - 执行未从 SQL 代理作业运行的进程任务
- swift - 有没有办法可以在 SceneKit 的节点上停止和播放声音?
- android - 如何在 Flutter 中创建自定义动画启动屏幕
- xcode - 如何为 Flutter 添加额外的 iOS 模拟器?
- angular - 滚动到部分通过
- karate - 是否可以在空手道中为 WebUI 自动化执行性能测试?
- python - 如何将值分配给字典中的键?解决算法