public UserAccount() { CngKeyCreationParameters keyCreationParameters = new CngKeyCreationParameters(); keyCreationParameters.ExportPolicy = CngExportPolicies.AllowPlaintextExport; keyCreationParameters.KeyUsage = CngKeyUsages.Signing; CngKey key = CngKey.Create(CngAlgorithm.ECDsaP256, null, keyCreationParameters); ECDsaCng dsa = new ECDsaCng(key); //dsa = Digital Signature Algorithm byte[] privateKey = dsa.Key.Export(CngKeyBlobFormat.EccPrivateBlob); ECDSAPrivateKey = BitConverter.ToString(privateKey).Replace("-", String.Empty); //create public key byte[] publicKey = dsa.Key.Export(CngKeyBlobFormat.EccPublicBlob); ECSDAPublicKey = BitConverter.ToString(publicKey).Replace("-", String.Empty); //we calculate the hashvalue by slicing the end off of the public key string hashValue = ECDSAOperations.GetHashValue(publicKey); int hashLength = hashValue.Length; UserAddress = "0x" + hashValue.Substring(hashLength - ADDRESS_LENGTH); }
private void btnVerify_Click(object sender, EventArgs e) { string signature = txtMAC.Text; string publicKey = txtPublicKey.Text; string hashValue = txtHash.Text; bool verify = ECDSAOperations.VerifySignature(hashValue, signature, publicKey); }
private void btnSign_Click(object sender, EventArgs e) { string fileHash = ECDSAOperations.GetSha256FileHash(txtFileURL.Text); if (fileHash.Length > 0) { txtHash.Text = fileHash; string signature = ECDSAOperations.SignMessage(txtPrivateKey.Text, fileHash); txtMAC.Text = signature; } }