Exemplo n.º 1
0
        public sbyte[] SignatureFragment(int[] normalizedBundleFragment, sbyte[] keyFragment)
        {
            var signatureFragment = keyFragment.ToArray();
            var hash = new sbyte[0];
            var kerl = new Kerl();

            for (var i = 0; i < 27; i++)
            {
                hash = signatureFragment.Slice(i * 243, (i + 1) * 243);

                for (var j = 0; j < 13 - normalizedBundleFragment[i]; j++)
                {
                    kerl.Initialize();
                    kerl.Reset();
                    kerl.Absorb(hash, 0, hash.Length);
                    kerl.Squeeze(hash, 0, Curl.HASH_LENGTH);
                }

                for (var j = 0; j < 243; j++)
                {
                    signatureFragment[i * 243 + j] = hash[j];
                }
            }

            return(signatureFragment);
        }
Exemplo n.º 2
0
        public sbyte[] Key(sbyte[] seed, int index, int length)
        {
            if ((seed.Length % 243) != 0)
            {
                var listSeed = seed.ToList();
                while ((listSeed.Count % 243) != 0)
                {
                    listSeed.Add(0);
                }
                seed = listSeed.ToArray();
            }

            var indexTrits = Converter.GetTritsFromInt(index);
            var subseed    = Adder.Add(seed, indexTrits);

            var kerl = new Kerl();

            kerl.Initialize();
            kerl.Absorb(subseed, 0, subseed.Length);
            kerl.Squeeze(subseed, 0, subseed.Length);

            kerl.Reset();
            kerl.Absorb(subseed, 0, subseed.Length);

            IList <sbyte> key = new List <sbyte>();

            sbyte[] buffer = new sbyte[subseed.Length];
            int     offset = 0;

            while (length-- > 0)
            {
                for (int i = 0; i < 27; i++)
                {
                    kerl.Squeeze(buffer, offset, buffer.Length);
                    for (int j = 0; j < 243; j++)
                    {
                        key.Add(buffer[j]);
                    }
                }
            }
            return(key.ToArray());
        }