Sample code for 30+ languages & platforms
Dart

Ed25519ph Sign and Verify

See more Ed25519 Examples

Demonstrates how to create an Ed25519ph signature, and then to verify it.

Note: This example requires Chilkat v9.5.0.91 or greater.

Chilkat Dart Downloads

Dart
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.

  // Use the following test vector from https://www.rfc-editor.org/rfc/rfc8032#page-30

  //    -----TEST abc
  // 
  //    ALGORITHM:
  //    Ed25519ph
  // 
  //    SECRET KEY:
  //    833fe62409237b9d62ec77587520911e
  //    9a759cec1d19755b7da901b96dca3d42
  // 
  //    PUBLIC KEY:
  //    ec172b93ad5e563bf4932c70e1245034
  //    c35467ef2efd4d64ebf819683467e2bf
  // 
  //    MESSAGE (length 3 bytes):
  //    616263
  // 
  //    SIGNATURE:
  //    98a70222f0b8121aa9d30f813d683f80
  //    9e462b469c7ff87639499bb94e6dae41
  //    31f85042463c2a355a2003d062adf5aa
  //    a10b8c61e636062aaad11c2a26083406

  final privKeyHex = '833fe62409237b9d62ec77587520911e9a759cec1d19755b7da901b96dca3d42';
  final pubKeyHex = 'ec172b93ad5e563bf4932c70e1245034c35467ef2efd4d64ebf819683467e2bf';

  final privKey = CkPrivateKey();
  try {
    privKey.loadEd25519(privKeyHex, pubKeyHex);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  // The data to be signed...
  final bd = CkBinData();
  bd.appendEncoded('616263', 'hex');

  final eddsa = CkEdDSA();
  // Indicate we want the Ed25519ph instance.
  eddsa.algorithm = 'Ed25519ph';

  final hexSig = eddsa.signBdENC(bd, 'hexlower', privKey);

  print('signature = $hexSig');

  // The expected output is: 98a70222f0b8121aa9d30f813d683f80....

  // Verify the signature..
  final pubKey = CkPublicKey();
  try {
    pubKey.loadEd25519(pubKeyHex);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    return;
  }

  try {
    eddsa.verifyBdENC(bd, hexSig, 'hexlower', pubKey);
  } on ChilkatException catch (e) {
    print(e.lastErrorText);
    print('Failed to verify the signature.');
    return;
  }

  print('The Ed25519ph signature is verified!');
}