I have generated mnemonic using bip39.generateMnemonic();
. I need to convert this mnemonic to AsymmetricKeyPair with secp256k1.
AsymmetricKeyPair<PublicKey, PrivateKey> secp256k1KeyPair() {
var keyParams = ECKeyGeneratorParameters(ECCurve_secp256k1());
var mnemonic = getMnemonic();
var seed = bip39.mnemonicToSeed(mnemonic);
print('mnemonicToSeed=========$seed');
var random = FortunaRandom();
random.seed(KeyParameter(seed));
var generator = ECKeyGenerator();
generator.init(ParametersWithRandom(keyParams,random));
return generator.generateKeyPair();
}
getMnemonic() {
var mnemonic = bip39.generateMnemonic();
print('mnemonic=========$mnemonic');
return mnemonic;
}
Unhandled Exception: Invalid argument(s): Fortuna PRNG can only be used with 256 bits keys.
Finally I'm able to generate the AsymmetricKeyPair as follows.but I'm not sure whether I did it in a correct way.Please correct me if I'm wrong.
/// generates dynamic mnemonic
String getMnemonic() {
var mnemonic = bip39.generateMnemonic();
print('mnemonic=========$mnemonic');
return mnemonic;
}
AsymmetricKeyPair<PublicKey, PrivateKey> secp256k1KeyPair() {
var keyParams = ECKeyGeneratorParameters(ECCurve_secp256k1());
var mnemonic = getMnemonic();
var seed = bip39.mnemonicToSeed(mnemonic);
final digest = sha256.convert(seed); // 32 bytes
print('mnemonicToSeed=========$seed');
var random = FortunaRandom();
random.seed(KeyParameter(_seed(digest.bytes)));
var generator = ECKeyGenerator();
generator.init(ParametersWithRandom(keyParams,random));
return generator.generateKeyPair();
}
Uint8List _seed(List<int> digest) {
var seed = List<int>.generate(digest.length, (_) => digest[_]);
return Uint8List.fromList(seed);
}
As FortunaRandom is not robust ,Could you please suggest anything else.