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()); } }
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; }
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()); }
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; } }
void PointCompressTest (ECDomainNames name, int repeats) { ECDomainParameters domain = ECDomains.GetDomainParameter (name); PointCompressTest ((int)domain.Bits, domain.Group, domain.G, repeats, name.ToString ()); }
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 ()); }
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 ()); } }