public void CanCreateFromDH()
		{
			using (var dh = new DH())
			{
				dh.GenerateKeys();

				using (var key = new CryptoKey(dh))
				{
					Assert.AreEqual(CryptoKey.KeyType.DH, key.Type);
					Assert.AreEqual(dh.Handle, key.GetDH().Handle);
				}

				using (var key = new CryptoKey())
				{
					key.Assign(dh);
					Assert.AreEqual(dh.Handle, key.GetDH().Handle);
				}
			}
		}
		public void CanCreateFromRSA()
		{
			using (var rsa = new RSA())
			{
				rsa.GenerateKeys(1024, BigNumber.One, null, null);
				using (var key = new CryptoKey(rsa))
				{
					Assert.AreEqual(CryptoKey.KeyType.RSA, key.Type);
					Assert.AreEqual(rsa.Size, key.Size);
					Assert.AreEqual(rsa.Handle, key.GetRSA().Handle);
				}

				using (var key = new CryptoKey())
				{
					key.Assign(rsa);
					Assert.AreEqual(rsa.Handle, key.GetRSA().Handle);
				}
			}
		}
		public void CanCreateFromEC()
		{
			using (var ec = new Key())
			{
				using (var group = Group.FromCurveName(Objects.NID.X9_62_prime256v1))
				{
					ec.Group = group;
				}
				ec.GenerateKey();
				using (var key = new CryptoKey(ec))
				{
					Assert.AreEqual(CryptoKey.KeyType.EC, key.Type);
					Assert.AreEqual(ec.Size, key.Size);
					Assert.AreEqual(ec.Handle, key.GetEC().Handle);
				}

				using (var key = new CryptoKey())
				{
					key.Assign(ec);
					Assert.AreEqual(ec.Handle, key.GetEC().Handle);
				}
			}
		}
		public void CanCreateFromDSA()
		{
			using (var dsa = new DSA(true))
			{
				using (var key = new CryptoKey(dsa))
				{
					Assert.AreEqual(CryptoKey.KeyType.DSA, key.Type);
					Assert.AreEqual(dsa.Size, key.Size);
					Assert.AreEqual(dsa.Handle, key.GetDSA().Handle);
				}

				using (var key = new CryptoKey())
				{
					key.Assign(dsa);
					Assert.AreEqual(dsa.Handle, key.GetDSA().Handle);
				}
			}

			using (var key = new CryptoKey(new DSA(false)))
			{
				Assert.AreEqual(CryptoKey.KeyType.DSA, key.Type);
			}
		}