public bool ValidateAddress(string address) { if (address.Length != 64 && !address.StartsWith("xrb_")) { return(false); } var pk32 = address.Substring(4, 52); var pk = Base32withPadding.Decode(pk32, _base32Alphabet, 4); var checksum = address.Substring(56); var checksumDecoded = Base32withPadding.Decode(checksum, _base32Alphabet, 0); checksumDecoded = checksumDecoded.Reverse().ToArray(); var blake2bConfig = new Blake2BConfig { OutputSizeInBytes = 5 }; var hasher = Blake2B.Create(blake2bConfig); hasher.Update(pk); var pkChecksum = hasher.Finish(); return(pkChecksum.SequenceEqual(checksumDecoded)); }
public string PublicAddress(int index = 0) { var addressSeed = GenerateRaiAddressSeed(index); var pk = Ed25519.PublicKeyFromSeed(addressSeed); var pk32 = Base32withPadding.Encode(pk, _base32Alphabet, 260); var blake2bConfig = new Blake2BConfig { OutputSizeInBytes = 5 }; var hasher = Blake2B.Create(blake2bConfig); hasher.Update(pk); var checksum = hasher.Finish().Reverse().ToArray(); var checksum32 = Base32withPadding.Encode(checksum, _base32Alphabet, 40); return($"xrb_{pk32}{checksum32}"); }