首页 > 解决方案 > 使用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;       

}

标签: cryptographystm32

解决方案


推荐阅读