예제 #1
0
        static void SignVerifyTest(ECDomainNames domainName)
        {
            int repeat = 5;

            for (int i = 0; i < repeat; i++)
            {
                ECDSA  ecdsa  = new ECDSA(domainName);
                byte[] pubKey = ecdsa.Parameters.PublicKey;
                byte[] hash   = RNG.GetBytes(ecdsa.KeySize >> 3);
                byte[] sign   = ecdsa.SignHash(hash);
                ecdsa = new ECDSA(domainName);
                ecdsa.Parameters.PublicKey = pubKey;
                Assert.IsTrue(ecdsa.VerifyHash(hash, sign), "Success Test " + domainName.ToString());
                sign[0]++;
                Assert.IsFalse(ecdsa.VerifyHash(hash, sign), "Failure Test " + domainName.ToString());
            }
        }
예제 #2
0
        private void btnKeyGenerate_Click(object sender, EventArgs e)
        {
            ECDomainNames domain     = (ECDomainNames)cbKeyType.SelectedIndex;
            ECDSA         dsa        = new ECDSA(domain);
            string        domainName = domain.ToString().Substring(4);

            byte[] privateKeyBytes = dsa.Parameters.PrivateKey;
            txtGeneratedKey.Text = ToPrivateKeyString(privateKeyBytes, txtGeneratedKeyPass.Text, domain);
            string publicKey = Convert.ToBase64String(dsa.Parameters.ExportPublicKey(domain != ECDomainNames.secp224r1 ? true : false));

            txtGeneratedPublicKey.Text = domainName + "=" + publicKey;
        }
예제 #3
0
        string ToPrivateKeyString(byte[] privateKey, string passphrase, ECDomainNames domain)
        {
            string domainName = domain.ToString().Substring(4);

            if (passphrase.Length > 0)
            {
                byte[] pass = ComputeHash(new SHA256Managed(), Encoding.UTF8.GetBytes(txtGeneratedKeyPass.Text), true);
                byte[] iv   = ComputeHash(new SHA1Managed(), Encoding.UTF8.GetBytes(txtGeneratedKeyPass.Text), true);
                Array.Resize <byte> (ref iv, 128 >> 3);
                string             encType = null;
                SymmetricAlgorithm algo    = null;
                switch (cbPassEncryptType.SelectedIndex)
                {
                case 0:
                    encType = "camellia256";
                    algo    = new CamelliaManaged();
                    break;

                case 1:
                    encType = "rijndael256";
                    algo    = new openCrypto.RijndaelManaged();
                    break;

                default:
                    throw new CryptographicException("暗号化の種類を認識できません");
                }
                byte[] encrypted      = Encrypt(algo, CipherMode.CBC, pass, iv, privateKey);
                string privateKeyText = Convert.ToBase64String(encrypted);
                return(encType + "=" + domainName + "=" + privateKeyText);
            }
            else
            {
                string privateKeyText = Convert.ToBase64String(privateKey);
                return(domainName + "=" + privateKeyText);
            }
        }
 static void Validate(ECDomainNames name)
 {
     Assert.IsTrue(ECDomains.GetDomainParameter(name).Validate(), name.ToString());
 }
예제 #5
0
		string ToPrivateKeyString (byte[] privateKey, string passphrase, ECDomainNames domain)
		{
			string domainName = domain.ToString ().Substring (4);
			if (passphrase.Length > 0) {
				byte[] pass = ComputeHash (new SHA256Managed (), Encoding.UTF8.GetBytes (txtGeneratedKeyPass.Text), true);
				byte[] iv = ComputeHash (new SHA1Managed (), Encoding.UTF8.GetBytes (txtGeneratedKeyPass.Text), true);
				Array.Resize<byte> (ref iv, 128 >> 3);
				string encType = null;
				SymmetricAlgorithm algo = null;
				switch (cbPassEncryptType.SelectedIndex) {
					case 0:
						encType = "camellia256";
						algo = new CamelliaManaged ();
						break;
					case 1:
						encType = "rijndael256";
						algo = new openCrypto.RijndaelManaged ();
						break;
					default:
						throw new CryptographicException ("暗号化の種類を認識できません");
				}
				byte[] encrypted = Encrypt (algo, CipherMode.CBC, pass, iv, privateKey);
				string privateKeyText = Convert.ToBase64String (encrypted);
				return encType + "=" + domainName + "=" + privateKeyText;
			} else {
				string privateKeyText = Convert.ToBase64String (privateKey);
				return domainName + "=" + privateKeyText;
			}
		}
예제 #6
0
		void PointCompressTest (ECDomainNames name, int repeats)
		{
			ECDomainParameters domain = ECDomains.GetDomainParameter (name);
			PointCompressTest ((int)domain.Bits, domain.Group, domain.G, repeats, name.ToString ());
		}
예제 #7
0
        void PointCompressTest(ECDomainNames name, int repeats)
        {
            ECDomainParameters domain = ECDomains.GetDomainParameter(name);

            PointCompressTest((int)domain.Bits, domain.Group, domain.G, repeats, name.ToString());
        }
		static void Validate (ECDomainNames name)
		{
			Assert.IsTrue (ECDomains.GetDomainParameter (name).Validate (), name.ToString ());
		}
예제 #9
0
		static void SignVerifyTest (ECDomainNames domainName)
		{
			int repeat = 5;
			for (int i = 0; i < repeat; i ++) {
				ECDSA ecdsa = new ECDSA (domainName);
				byte[] pubKey = ecdsa.Parameters.PublicKey;
				byte[] hash = RNG.GetBytes (ecdsa.KeySize >> 3);
				byte[] sign = ecdsa.SignHash (hash);
				ecdsa = new ECDSA (domainName);
				ecdsa.Parameters.PublicKey = pubKey;
				Assert.IsTrue (ecdsa.VerifyHash (hash, sign), "Success Test " + domainName.ToString ());
				sign[0]++;
				Assert.IsFalse (ecdsa.VerifyHash (hash, sign), "Failure Test " + domainName.ToString ());
			}
		}