/// <summary> /// Decrypts a given cipher texts and checks if it corresponds to the associated data. /// </summary> /// <param name="cipherText">Base64 encoded encrypted bytes</param> /// <param name="associatedDataString">max. 16 character long string (not secret)</param> /// <param name="nonce">unique nonce used during encryption (not secret)</param> /// <returns>decrypted as an UTF-8 encoded string</returns> private string Decrypt(string cipherText, string associatedDataString, byte[] nonce) { byte[] cipherBytes = Convert.FromBase64String(cipherText); byte[] adBytes = Encoding.UTF8.GetBytes(associatedDataString); byte[] plainBytes = SecretAeadChaCha20Poly1305.Decrypt(cipherBytes, nonce, secretKey, adBytes); return(Encoding.UTF8.GetString(plainBytes)); }
public void AeadWithAdditionalDataTest() { var key = new byte[] { 0x42, 0x90, 0xbc, 0xb1, 0x54, 0x17, 0x35, 0x31, 0xf3, 0x14, 0xaf, 0x57, 0xf3, 0xbe, 0x3b, 0x50, 0x06, 0xda, 0x37, 0x1e, 0xce, 0x27, 0x2a, 0xfa, 0x1b, 0x5d, 0xbd, 0xd1, 0x10, 0x0a, 0x10, 0x07 }; var nonce = new byte[] { 0xcd, 0x7c, 0xf6, 0x7b, 0xe3, 0x9c, 0x79, 0x4a }; var ad = new byte[] { 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0 }; var m = new byte[] { 0x86, 0xd0, 0x99, 0x74, 0x84, 0x0b, 0xde, 0xd2, 0xa5, 0xca }; var encrypted = SecretAeadChaCha20Poly1305.Encrypt(m, nonce, key, ad); var decrypted = SecretAeadChaCha20Poly1305.Decrypt(encrypted, nonce, key, ad); CollectionAssert.AreEqual(m, decrypted); }
public void SecretAeadChaCha20Poly1305DecryptWithBadAdditionalData() { var key = new byte[] { 0x42, 0x90, 0xbc, 0xb1, 0x54, 0x17, 0x35, 0x31, 0xf3, 0x14, 0xaf, 0x57, 0xf3, 0xbe, 0x3b, 0x50, 0x06, 0xda, 0x37, 0x1e, 0xce, 0x27, 0x2a, 0xfa, 0x1b, 0x5d, 0xbd, 0xd1, 0x10, 0x0a, 0x10, 0x07 }; var nonce = new byte[] { 0xcd, 0x7c, 0xf6, 0x7b, 0xe3, 0x9c, 0x79, 0x4a }; var ad = new byte[] { 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0, 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0, 0x87, 0xe2, 0x29, 0xd4, 0x50, 0x08, 0x45, 0xa0, 0x79, 0xc0 }; var m = new byte[] { 0x86, 0xd0, 0x99, 0x74, 0x84, 0x0b, 0xde, 0xd2, 0xa5, 0xca }; Assert.Throws <AdditionalDataOutOfRangeException>( () => SecretAeadChaCha20Poly1305.Decrypt(m, nonce, key, ad)); }