generateRandomAddress static method
Uint8List
generateRandomAddress(
- Uint8List? tag,
- Uint8List secret, [
- RandomGenerator randomGenerator = randomBytes
Generates a random WOTS address using the randomGenerator Note: use your own randomGenerator that fills in deterministic bytes if you want to generate a specific address
Implementation
static Uint8List generateRandomAddress(
Uint8List? tag,
Uint8List secret, [
RandomGenerator randomGenerator = randomBytes,
]) {
if (secret.length != PARAMSN) {
throw ArgumentError('Invalid secret length');
}
if (tag != null && tag.length != 12) {
throw ArgumentError('Invalid tag length');
}
final address = Uint8List(2208);
final rnd2 = Uint8List(PARAMSN);
// Generate random bytes for address
randomGenerator(address);
// Copy random bytes to rnd2
rnd2.setRange(0, PARAMSN, address, 2176);
// Generate public key
wotsPkgen(address, secret,
address.sublist(WOTSSIGBYTES, WOTSSIGBYTES + PARAMSN), 0, rnd2);
// Copy rnd2 back to address
address.setRange(2176, 2208, rnd2);
// Apply tag if provided using Tag.tag
final readyAddress = tag != null ? Tag.tag(address, tag) : address;
// Validate address
for (int i = 0; i < 10; i++) {
if (!isValid(secret, readyAddress, randomGenerator)) {
throw ArgumentError('Invalid WOTS');
}
}
return readyAddress;
}