예제 #1
0
		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);
				}
			}
		}
예제 #2
0
		public void test_builtin() {
			/* fill digest values with some random data */
			byte[] digest = Random.PseudoBytes(20);
			byte[] wrong_digest = Random.PseudoBytes(20);

			/* create and verify a ecdsa signature with every availble curve
			 * (with ) */
			Console.WriteLine("testing ECDSA_sign() and ECDSA_verify() with some internal curves:");
			
			/* get a list of all internal curves */
			BuiltinCurve[] curves = BuiltinCurve.Get();
			
			/* now create and verify a signature for every curve */
			foreach (BuiltinCurve curve in curves) {
				if (curve.Object.NID == Objects.NID.ipsec4.NID)
					continue;
				
				/* create new ecdsa key (== EC_KEY) */
				using(Key eckey = new Key()) {

					using(Group group = Group.FromCurveName(curve.Object)) {
						eckey.Group = group;
					}
					
					if (eckey.Group.Degree < 160) {
						/* drop the curve */ 
						continue;
					}
					
					Console.Write("{0}: ", curve.Object.ShortName);
					
					/* create key */
					eckey.GenerateKey();
					
					/* create second key */
					using(Key wrong_eckey = new Key()) {
						using(Group group = Group.FromCurveName(curve.Object)) {
							wrong_eckey.Group = group;
						}
						
						wrong_eckey.GenerateKey();
						Console.Write(".");
						
						/* check key */
						Assert.IsTrue(eckey.CheckKey());
						Console.Write(".");
						
						/* create signature */
						byte[] signature = new byte[eckey.Size];
						eckey.Sign(0, digest, signature);
						Console.Write(".");
						
						/* verify signature */
						Assert.IsTrue(eckey.Verify(0, digest, signature));
						Console.Write(".");
						
						/* verify signature with the wrong key */
						Assert.IsFalse(wrong_eckey.Verify(0, digest, signature));
						Console.Write(".");
						
						/* wrong digest */
						Assert.IsFalse(eckey.Verify(0, wrong_digest, signature));
						Console.Write(".");
						
						Console.WriteLine(" ok");						
					}
				}
			}
		}