Dart
Dart
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 Dart Downloads
import 'package:chilkat/chilkat.dart';
void main() {
// 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.
final privKey = CkPrivateKey();
try {
privKey.loadEncryptedPemFile('qa_data/ecc/secp256r1-key-pkcs8-secret.pem', 'secret');
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
// Load some data to be signed.
final bd = CkBinData();
try {
bd.loadFile('qa_data/hamlet.xml');
} on ChilkatException {
print('Failed to load file to be hashed.');
return;
}
final ecdsa = CkEcc();
final prng = CkPrng();
// Sign the sha256 hash of the data. Return the ECDSA signature in the base64 encoding.
print('ECDSA signing the sha256 hash of the data...');
var sig = ecdsa.signBd(bd, 'sha256', 'base64', privKey, prng);
print('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.
final pubKey = CkPublicKey();
try {
pubKey.loadFromFile('qa_data/ecc/secp256r1-pub.pem');
} on ChilkatException catch (e) {
print(e.lastErrorText);
return;
}
final ecc2 = CkEcc();
var result = ecc2.verifyBd(bd, 'sha256', sig, 'base64', pubKey);
if (result != 1) {
print(ecc2.lastErrorText);
return;
}
print('Verified!');
// ----------------------------------------------------------------------------------------
// Let's do the same thing, but with sha384 hashing...
print('--------------------------------------------');
print('ECDSA signing the sha384 hash of the data...');
sig = ecdsa.signBd(bd, 'sha384', 'base64', privKey, prng);
print('sig = $sig');
result = ecc2.verifyBd(bd, 'sha384', sig, 'base64', pubKey);
if (result != 1) {
print(ecc2.lastErrorText);
return;
}
print('Verified!');
}