1

I used STM32 crypto library(firmware implement) and set private key value generated by openssl , but I can't get the right signature. No matter what the private key value or all-zero( "00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00"), The R parameter of signature always "D0 F4 7A FE 2F 31 76 B6 C3 1E BC 09 7E 57 81 0A B9 3A D9 65 01 39 90 D0". Anyone can help?

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;       

}

Cuh Chen
  • 11
  • 2

0 Answers0