示例#1
0
        public Key(byte[] seed, int index)
        {
            var encoder = new ASCIIEncoder();
            var secret  = encoder.DecodeData(Ed25519Curve);

            // var seedBytes = HexByteConvertorExtensions.HexToByteArrayInternal(seed);
            var array = new HMACSHA512(secret).ComputeHash(seed);

            var key       = array.SafeSubarray(0, 32);
            var chainCode = array.SafeSubarray(32, 32);

            var derivedPath = unchecked ((uint)index + HardenedOffset);

            derivedPath = HexByteConvertorExtensions.ReverseBytes(derivedPath);
            var dpBytes = BitConverter.GetBytes(derivedPath);
            var data = new byte[] { 0 }.Concat(key, dpBytes);

            var array2 = new HMACSHA512(chainCode).ComputeHash(data);

            var key2 = array2.SafeSubarray(0, 32);

            var keyPair = PublicKeyAuth.GenerateKeyPair(key2);

            PrivateKey = keyPair.PrivateKey;
            PublicKey  = keyPair.PublicKey;
        }