[c] ECDSA sign

Viewer

copydownloadembedprintName: ECDSA sign
  1. void crypto_sign_message(uint8_t * msg, uint16_t msg_len, uint8_t * buffer)
  2. {
  3.         size_t len_b64;
  4.         size_t olen;
  5.  
  6.         uint8_t hash[32];
  7.         uint8_t hash_b64[100];
  8.  
  9.         uint8_t sign[256];
  10.         uint8_t sign_b64[256];
  11.  
  12.         mbedtls_pk_context pk, pk2;
  13.  
  14.         CRY_DEBUG_PRINTF("Message: %s", msg);
  15.  
  16.         /* Import private key */
  17.         mbedtls_pk_init(&pk);
  18.         if (mbedtls_pk_parse_key(&pk, (const unsigned char *) flash.flash_ver0.ecc_priv_key,
  19.                                                                  strlen(flash.flash_ver0.ecc_priv_key) + 1,
  20.                                                                  (const unsigned char *)CA_DEF_ISSUER_PWD,
  21.                                                                  CA_DEF_ISSUER_PWD_LEN) != 0)
  22.         {
  23.                 CRY_DEBUG_PRINTF("Private key error!");
  24.                 return;
  25.         }
  26.  
  27.         CRY_DEBUG_PRINTF("Private key: %s", flash.flash_ver0.ecc_priv_key);
  28.  
  29.         /* Hash message */
  30.         if (mbedtls_md(mbedtls_md_info_from_type(MBEDTLS_MD_SHA256), msg, msg_len, hash) != 0)
  31.         {
  32.                 CRY_DEBUG_PRINTF("Hashing error!");
  33.                 return;
  34.         }
  35.  
  36.         mbedtls_base64_encode(hash_b64, sizeof(hash_b64), &len_b64, hash, 32);
  37.         CRY_DEBUG_PRINTF("Hash: %s", hash_b64);
  38.  
  39.         /* Sign message */
  40.         olen = 0;
  41.  
  42.         if (mbedtls_pk_sign(&pk, MBEDTLS_MD_SHA256, hash, 0, sign, &olen, mbedtls_ctr_drbg_random, &ctr_drbg) != 0)
  43.         {
  44.                 CRY_DEBUG_PRINTF("Signing error!");
  45.                 return;
  46.         }
  47.  
  48.         mbedtls_base64_encode(sign_b64, sizeof(sign_b64), &len_b64, sign, olen);
  49.         CRY_DEBUG_PRINTF("Signature: %s", sign_b64);
  50.  
  51.         /* Import public key */
  52.         mbedtls_pk_init(&pk2);
  53.         if (mbedtls_pk_parse_public_key(&pk2, (const unsigned char *) flash.flash_ver0.ecc_key,
  54.                                                                          strlen(flash.flash_ver0.ecc_key) + 1) != 0)
  55.         {
  56.                 CRY_DEBUG_PRINTF("Public key error!");
  57.                 return false;
  58.         }
  59.  
  60.         CRY_DEBUG_PRINTF("Public key: %s", flash.flash_ver0.ecc_key);
  61.  
  62.         if (mbedtls_pk_verify(&pk2, MBEDTLS_MD_SHA256, hash, 0, sign, olen) == 0)
  63.         {
  64.                 CRY_DEBUG_PRINTF("Verify: OK");
  65.         }
  66.         else
  67.         {
  68.                 CRY_DEBUG_PRINTF("Verify: Fail");
  69.         }
  70. }

Editor

You can edit this paste and save as new:


File Description
  • ECDSA sign
  • Paste Code
  • 21 Apr-2021
  • 1.78 Kb
You can Share it: