public void EncryptDecryptNBlocksTest() { // Arrange var rnd = new Random(); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; for (var i = 0; i < 64; i++) { RandomNumberGenerator.Fill(key); var cipher = new XChaCha20(key, 0); for (var j = 0; j < 64; j++) { var expected = new byte[rnd.Next(300)]; rnd.NextBytes(expected); // Act var output = cipher.Encrypt(expected); var plaintext = cipher.Decrypt(output); // Assert plaintext.Should().Equal(expected); } } }
public void EncryptDecryptLongMessagesWithDestinationBufferTest() { var rnd = new Random(); var dataSize = 16; while (dataSize <= (1 << 24)) { var plaintext = new byte[dataSize]; rnd.NextBytes(plaintext); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; RandomNumberGenerator.Fill(key); var nonce = new byte[XChaCha20.NONCE_SIZE_IN_BYTES]; RandomNumberGenerator.Fill(nonce); var cipher = new XChaCha20(key, 0); var ciphertext = new byte[plaintext.Length]; cipher.Encrypt(plaintext, nonce, ciphertext); var decrypted = new byte[plaintext.Length]; cipher.Decrypt(ciphertext, nonce, decrypted); decrypted.Should().Equal(plaintext); dataSize += 5 * dataSize / 11; } }
public void EncryptDecryptNBlocksWithDestinationBufferTest() { // Arrange var rnd = new Random(); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; for (var i = 0; i < 64; i++) { RandomNumberGenerator.Fill(key); var nonce = new byte[XChaCha20.NONCE_SIZE_IN_BYTES]; RandomNumberGenerator.Fill(nonce); var cipher = new XChaCha20(key, 0); for (var j = 0; j < 64; j++) { var expected = new byte[rnd.Next(300)]; rnd.NextBytes(expected); // Act var ciphertext = new byte[expected.Length]; cipher.Encrypt(expected, nonce, ciphertext); var plaintext = new byte[expected.Length]; cipher.Decrypt(ciphertext, nonce, plaintext); // Assert plaintext.Should().Equal(expected); } } }
public void EncryptDecryptNBlocksTest() { // Arrange var rnd = new Random(); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; for (var i = 0; i < 64; i++) { rnd.NextBytes(key); var cipher = new XChaCha20(key, 0); for (var j = 0; j < 64; j++) { var expectedInput = new byte[rnd.Next(300)]; rnd.NextBytes(expectedInput); // Act var output = cipher.Encrypt(expectedInput); var actualInput = cipher.Decrypt(output); // Assert //Assert.AreEqual(expectedInput, actualInput); Assert.IsTrue(CryptoBytes.ConstantTimeEquals(expectedInput, actualInput)); } } }
public void EncryptDecryptLongMessagesWithNonceTest() { var rnd = new Random(); var dataSize = 16; while (dataSize <= (1 << 24)) { var plaintext = new byte[dataSize]; rnd.NextBytes(plaintext); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; rnd.NextBytes(key); var cipher = new XChaCha20(key, 0); var nonce = new byte[cipher.NonceSizeInBytes()]; rnd.NextBytes(nonce); var ciphertext = cipher.Encrypt(plaintext, nonce); var decrypted = cipher.Decrypt(ciphertext, nonce); //Assert.AreEqual(plaintext, decrypted); Assert.IsTrue(CryptoBytes.ConstantTimeEquals(plaintext, decrypted)); dataSize += 5 * dataSize / 11; } }
public void EncryptWhenNonceIsEmptyFails() { // Arrange var cipher = new XChaCha20(new byte[Snuffle.KEY_SIZE_IN_BYTES], 0); // Act & Assert Assert.Throws <CryptographicException>(() => cipher.Encrypt(new byte[0], new byte[0]), EXCEPTION_MESSAGE_NONCE_LENGTH); }
public void EncryptWhenNonceLengthIsInvalidFails() { // Arrange var cipher = new XChaCha20(new byte[Snuffle.KEY_SIZE_IN_BYTES], 0); // Act & Assert Assert.Throws <CryptographicException>(() => cipher.Encrypt(new byte[0], new byte[cipher.NonceSizeInBytes() + TestHelpers.ReturnRandomPositiveNegative()]), EXCEPTION_MESSAGE_NONCE_LENGTH); }
public void EncryptWhenPlaintextIsNotEqualToCiphertextFails(int plaintextLen, int ciphertextLen) { // Arrange var cipher = new XChaCha20(new byte[Snuffle.KEY_SIZE_IN_BYTES], 0); // Act var act = () => cipher.Encrypt(new byte[plaintextLen], new byte[cipher.NonceSizeInBytes], new byte[ciphertextLen]); // Assert act.Should().Throw <ArgumentException>().WithMessage("The plaintext parameter and the ciphertext do not have the same length."); }
public void EncryptWhenNonceIsEmptyFails() { // Arrange var nonce = new byte[0]; var plaintext = new byte[0]; var ciphertext = new byte[0]; var cipher = new XChaCha20(new byte[Snuffle.KEY_SIZE_IN_BYTES], 0); // Act & Assert Action act = () => cipher.Encrypt(plaintext, nonce, ciphertext); act.Should().Throw <ArgumentException>().WithMessage(EXCEPTION_MESSAGE_NONCE_LENGTH); }
public void EncryptWhenNonceLengthIsInvalidFails() { // Arrange var nonce = new byte[XChaCha20.NONCE_SIZE_IN_BYTES + TestHelpers.ReturnRandomPositiveNegative()]; var plaintext = new byte[0]; var ciphertext = new byte[0]; var cipher = new XChaCha20(new byte[Snuffle.KEY_SIZE_IN_BYTES], 0); // Act & Assert Action act = () => cipher.Encrypt(plaintext, nonce, ciphertext); act.Should().Throw <ArgumentException>().WithMessage(EXCEPTION_MESSAGE_NONCE_LENGTH); }
public void EncryptDecryptLongMessagesTest() { var rnd = new Random(); var dataSize = 16; while (dataSize <= (1 << 24)) { var plaintext = new byte[dataSize]; rnd.NextBytes(plaintext); var key = new byte[Snuffle.KEY_SIZE_IN_BYTES]; RandomNumberGenerator.Fill(key); var cipher = new XChaCha20(key, 0); var ciphertext = cipher.Encrypt(plaintext); var decrypted = cipher.Decrypt(ciphertext); decrypted.Should().Equal(plaintext); dataSize += 5 * dataSize / 11; } }
public void Encrypt() { var ciphertext = new byte[message.Length]; cipher.Encrypt(message.Span, nonce.Span, ciphertext); }
public byte[] Encrypt() => cipher.Encrypt(message, nonce);