Beispiel #1
0
        public Tuple <PublicKeyLamportDiffie, PrivateKeyLamportDiffie> GenerateKeys()
        {
            BigInteger[,] private_key_array = new BigInteger[256, 2];
            BigInteger[,] public_key_array  = new BigInteger[256, 2];
            for (int index_key = 0; index_key < private_key_array.GetLength(0); index_key++)
            {
                private_key_array[index_key, 0] = d_random.RandomPositiveBigIntegerOfSizeInBits(256);
                private_key_array[index_key, 1] = d_random.RandomPositiveBigIntegerOfSizeInBits(256);
                public_key_array[index_key, 0]  = d_hash_key.Compute(private_key_array[index_key, 0]);
                public_key_array[index_key, 1]  = d_hash_key.Compute(private_key_array[index_key, 1]);
            }
            PublicKeyLamportDiffie  public_key  = new PublicKeyLamportDiffie(private_key_array);
            PrivateKeyLamportDiffie private_key = new PrivateKeyLamportDiffie(public_key_array);

            return(new Tuple <PublicKeyLamportDiffie, PrivateKeyLamportDiffie>(public_key, private_key));
        }
Beispiel #2
0
        public BigInteger [] Sign(BigInteger message, PrivateKeyLamportDiffie private_key)
        {
            BigInteger message_hash = d_hash_message.Compute(message);

            BigInteger [] signature = new BigInteger[256];
            BigInteger[,] key_array = private_key.KeyArray();
            for (int index_key = 0; index_key < signature.Length; index_key++)
            {
                if (message_hash.IsBitSet(index_key))// check bit is set)
                {
                    signature[index_key] = key_array[index_key, 0];
                }
                else
                {
                    signature[index_key] = key_array[index_key, 1];
                }
            }
            return(signature);
        }