Sample code for 30+ languages & platforms
React Native

ECDSA Sign and Verify Data using Different Hash Algorithms

See more ECC Examples

Demonstrates how to create ECDSA signatures on data using different hash algorithms.

Note: This example requires Chilkat v9.5.0.85 or greater because the SignBd and VerifyBd methods were added in v9.5.0.85.

Chilkat React Native Downloads

React Native
import { BinData, Ecc, PrivateKey, Prng, PublicKey } from '@chilkat/react-native'

function chilkatExample() {
  // This example assumes the Chilkat API to have been previously unlocked.
  // See Global Unlock Sample for sample code.

  // First load an ECDSA private key to be used for signing.
  const privKey = new PrivateKey();
  try {
    privKey.loadEncryptedPemFile('qa_data/ecc/secp256r1-key-pkcs8-secret.pem', 'secret');
  } catch {
    console.log(privKey.lastErrorText);
    return;
  }

  // Load some data to be signed.
  const bd = new BinData();
  try {
    bd.loadFile('qa_data/hamlet.xml');
  } catch {
    console.log('Failed to load file to be hashed.');
    return;
  }

  const ecdsa = new Ecc();
  const prng = new Prng();

  // Sign the sha256 hash of the data.  Return the ECDSA signature in the base64 encoding.
  console.log('ECDSA signing the sha256 hash of the data...');
  let sig = ecdsa.signBd(bd, 'sha256', 'base64', privKey, prng);
  console.log(`sig = ${sig}`);

  // Verify the signature against the original data.
  // (We must use the same hash algorithm that was used when signing.)

  // Load the public key that corresponds to the private key used for signing.
  const pubKey = new PublicKey();
  try {
    pubKey.loadFromFile('qa_data/ecc/secp256r1-pub.pem');
  } catch {
    console.log(pubKey.lastErrorText);
    return;
  }

  const ecc2 = new Ecc();
  let result = ecc2.verifyBd(bd, 'sha256', sig, 'base64', pubKey);
  if (result !== 1) {
    console.log(ecc2.lastErrorText);
    return;
  }

  console.log('Verified!');

  // ----------------------------------------------------------------------------------------
  // Let's do the same thing, but with sha384 hashing...

  console.log('--------------------------------------------');
  console.log('ECDSA signing the sha384 hash of the data...');

  sig = ecdsa.signBd(bd, 'sha384', 'base64', privKey, prng);
  console.log(`sig = ${sig}`);

  result = ecc2.verifyBd(bd, 'sha384', sig, 'base64', pubKey);
  if (result !== 1) {
    console.log(ecc2.lastErrorText);
    return;
  }

  console.log('Verified!');
}