public string Decrypt(JweConfig config) { byte[] unwrappedKey = RsaEncryption.UnwrapSecretKey(config, Base64Utils.URLDecode(EncryptedKey), "SHA-256"); if (unwrappedKey == null) { throw new EncryptionException(String.Format("Failed to unwrap key {0}", EncryptedKey)); } string encryptionMethod = Header.Enc; byte[] plaintext; if (A256GCM.Equals(encryptionMethod)) { plaintext = AesGcm.Decrypt(unwrappedKey, this); } else if (A128CBC_HS256.Equals(encryptionMethod)) { plaintext = AesCbc.Decrypt(unwrappedKey, this); } else { throw new EncryptionException(String.Format("Encryption method {0} is not supported", encryptionMethod)); } return(Encoding.UTF8.GetString(plaintext)); }
public void Decrypt_NullIV_ThrowsArgumentNullException() { CbcResult encryptionResult; using (var provider1 = new AesCbc()) { encryptionResult = provider1.Encrypt("Hello world"); } using var provider2 = new AesCbc(); Assert.That(() => provider2.Decrypt(encryptionResult.Cipher, encryptionResult.Key, null), Throws.ArgumentNullException); }
public void Decrypt_KeyIsNot32Bytes_ThrowsArgumentException() { CbcResult encryptionResult; using (var provider1 = new AesCbc()) { encryptionResult = provider1.Encrypt("Hello world"); } using var provider2 = new AesCbc(); Assert.That(() => provider2.Decrypt(encryptionResult.Cipher, new byte[16], encryptionResult.IV), Throws.ArgumentException); }
public void Decrypt_CipherLengthNotDivisibleBy16_ThrowsArgumentException() { CbcResult encryptionResult; using (var provider1 = new AesCbc()) { encryptionResult = provider1.Encrypt("Hello world"); } using var provider2 = new AesCbc(); Assert.That(() => provider2.Decrypt(new byte[new Random().Next(1, 16)], encryptionResult.Key, encryptionResult.IV), Throws.ArgumentException); }
public void TestChallenge10() { var keyStr = "YELLOW SUBMARINE"; var key = System.Text.Encoding.ASCII.GetBytes(keyStr); var iv = new HexString("0000000000000000"); var data = Convert.FromBase64String(Set2Data.Challenge10Input); var decrypted = AesCbc.Decrypt(key, iv.Bytes.ToArray(), data); var actual = System.Text.Encoding.ASCII.GetString(decrypted); Assert.AreEqual(Set2Data.Challenge10Solution, actual); }
public void TestDecrypt() { var key = new HexString("0102030405060708090A0B0C0D0E0F10"); var iv = new HexString("1112131415161718191A1B1C1D1E1F20"); var data = new HexString("C29B1B0E628232FA5A8F77F88546DF259D8B8B4E73B5D21D9BA1EDB557CAE0A67CA855B59DC1F423A2540EC15377EF70B7750F310C8E40AE68A52E57D478BB60"); var expected = "Hello World, let's try something longer than just one block."; var decrypted = AesCbc.Decrypt(key.Bytes.ToArray(), iv.Bytes.ToArray(), data.Bytes.ToArray()); var actual = System.Text.Encoding.ASCII.GetString(decrypted); Assert.AreEqual(expected, actual); }
public void TestDecryptOneBlock() { var key = new HexString("0102030405060708090A0B0C0D0E0F10"); var iv = new HexString("1112131415161718191A1B1C1D1E1F20"); var data = new HexString("E0A209AC01C9052681925942E0E5EA53"); var expected = "Hello World"; var decrypted = AesCbc.Decrypt(key.Bytes.ToArray(), iv.Bytes.ToArray(), data.Bytes.ToArray()); var actual = System.Text.Encoding.ASCII.GetString(decrypted); Assert.AreEqual(expected, actual); }
public void Decrypt_PlainTextStringEncrypted_ResultMatchesPlaintext(string plainText) { CbcResult encryptionResult; using (var provider1 = new AesCbc()) { encryptionResult = provider1.Encrypt(plainText); } using var provider2 = new AesCbc(); var plainTextResult = provider2.Decrypt(encryptionResult.Cipher, encryptionResult.Key, encryptionResult.IV); Assert.That(plainTextResult, Is.EqualTo(plainText)); }