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;
}