EDDSAPrivateKey.fromBytes constructor

EDDSAPrivateKey.fromBytes({
  1. required EDPoint generator,
  2. required List<int> privateKey,
  3. required HashFunc hashMethod,
})

Creates an EdDSA private key from a random value using a provided hash method.

The private key is generated from the provided hash method and the provided random value. It prunes the key for improved security.

Parameters:

  • generator: The Edwards curve generator point.
  • privateKey: The private key bytes.
  • hashMethod: A serializable hash function for key generation.

Throws:

  • CryptoException: If the private key size is invalid.

Implementation

factory EDDSAPrivateKey.fromBytes(
    {required EDPoint generator,
    required List<int> privateKey,
    required HashFunc hashMethod}) {
  // final baselen = (generator.curve.baselen + 1 + 7) ~/ 8;
  final int baselen = generator.curve.baselen;
  if (privateKey.length != generator.curve.baselen) {
    throw CryptoException(
        'Incorrect size of private key, expected: $baselen bytes');
  }
  final extendedKey = hashMethod().update(privateKey).digest();
  final a = extendedKey.sublist(0, baselen);
  final prunedKey = _keyPrune(a, generator);
  final secret = BigintUtils.fromBytes(prunedKey, byteOrder: Endian.little);
  return EDDSAPrivateKey._(
      generator: generator,
      privateKey: privateKey,
      secret: secret,
      extendedKey: extendedKey.sublist(baselen));
}