AddSeedMaterial() public method

public AddSeedMaterial ( byte inSeed ) : void
inSeed byte
return void
		private void doExpectedTest(IDigest digest, int seed, byte[] expected, byte[] noCycle)
		{
			DigestRandomGenerator rGen = new DigestRandomGenerator(digest);
			byte[] output = new byte[digest.GetDigestSize()];

			rGen.AddSeedMaterial(seed);

			for (int i = 0; i != 1024; i++)
			{
				rGen.NextBytes(output);
			}

			if (noCycle != null)
			{
				if (Arrays.AreEqual(noCycle, output))
				{
					Fail("seed not being cycled!");
				}
			}

			if (!Arrays.AreEqual(expected, output))
			{
				Fail("expected output doesn't match");
			}
		}
Beispiel #2
0
        public DTLSContext(bool client, Version version, HandshakeInfo handshakeInfo)
		{
            IsServer = !client;
            if (version == DTLSRecord.Version1_2)
            {
                ClientVersion = ProtocolVersion.DTLSv12;
                ServerVersion = ProtocolVersion.DTLSv12;
            }
            else
            {
                ClientVersion = ProtocolVersion.DTLSv10;
                ServerVersion = ProtocolVersion.DTLSv10;
            }
            SecurityParameters = new DTLSSecurityParameters(version, handshakeInfo);
			NonceRandomGenerator = new DigestRandomGenerator(TlsUtilities.CreateHash(HashAlgorithm.sha256));
			NonceRandomGenerator.AddSeedMaterial(Times.NanoTime());

		}
		private void doCountTest(IDigest digest, byte[] seed, byte[] expectedXors)
		{
			DigestRandomGenerator rGen = new DigestRandomGenerator(digest);
			byte[] output = new byte[digest.GetDigestSize()];
			int[] averages = new int[digest.GetDigestSize()];
			byte[] ands = new byte[digest.GetDigestSize()];
			byte[] xors = new byte[digest.GetDigestSize()];
			byte[] ors = new byte[digest.GetDigestSize()];

			rGen.AddSeedMaterial(seed);

			for (int i = 0; i != 1000000; i++)
			{
				rGen.NextBytes(output);
				for (int j = 0; j != output.Length; j++)
				{
					averages[j] += output[j] & 0xff;
					ands[j] &= output[j];
					xors[j] ^= output[j];
					ors[j] |= output[j];
				}
			}

			for (int i = 0; i != output.Length; i++)
			{
				if ((averages[i] / 1000000) != 127)
				{
					Fail("average test failed for " + digest.AlgorithmName);
				}
				if (ands[i] != 0)
				{
					Fail("and test failed for " + digest.AlgorithmName);
				}
				if ((ors[i] & 0xff) != 0xff)
				{
					Fail("or test failed for " + digest.AlgorithmName);
				}
				if (xors[i] != expectedXors[i])
				{
					Fail("xor test failed for " + digest.AlgorithmName);
				}
			}
		}
Beispiel #4
0
 /// <summary>
 /// Note:  Clears pool contents before returning
 /// </summary>
 private void CreateNewPRNG(byte[] pool)
 {
     if (pool == null)
     {
         throw new CryptographicException("Refusing to reseed with null pool");
     }
     try
     {
         if (pool.Length != PoolSize)
         {
             throw new CryptographicException("Refusing to reseed with invalid pool");
         }
         // Now, pool has been seeded, file operations are all completed, it's time to create my internal PRNG
         IDigest digest;
         switch (this.myRNGAlgorithm)
         {
             case PrngAlgorithm.MD5_128bit:
                 digest = new MD5Digest();
                 break;
             case PrngAlgorithm.RIPEMD128_128bit:
                 digest = new RipeMD128Digest();
                 break;
             case PrngAlgorithm.RIPEMD160_160bit:
                 digest = new RipeMD160Digest();
                 break;
             case PrngAlgorithm.RIPEMD256_256bit:
                 digest = new RipeMD256Digest();
                 break;
             case PrngAlgorithm.RIPEMD320_320bit:
                 digest = new RipeMD320Digest();
                 break;
             case PrngAlgorithm.SHA1_160bit:
                 digest = new Sha1Digest();
                 break;
             case PrngAlgorithm.SHA256_256bit:
                 digest = new Sha256Digest();
                 break;
             case PrngAlgorithm.SHA512_512bit:
                 digest = new Sha512Digest();
                 break;
             case PrngAlgorithm.Tiger_192bit:
                 digest = new TigerDigest();
                 break;
             case PrngAlgorithm.Whirlpool_512bit:
                 digest = new WhirlpoolDigest();
                 break;
             default:
                 throw new CryptographicException("Unknown prngAlgorithm specified: " + this.myRNGAlgorithm.ToString());
         }
         var drng = new DigestRandomGenerator(digest);
         drng.AddSeedMaterial(pool);
         this.myRNG = drng;
     }
     finally
     {
         Array.Clear(pool, 0, pool.Length);
     }
 }