public void TestOutputOffset(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(HelloWorldName); var output = new TlsBuffer(input.Size + host.MaxExtraEncryptedBytes + MagicDataSize); output.Write(GetBuffer(MagicDataName)); var startOffset = output.Offset; var startPos = output.Position; var startSize = output.Size; var length = host.Encrypt(input, output.GetRemaining()); ctx.Assert(length, Is.GreaterThanOrEqualTo(0), "#1"); ctx.Assert(length, Is.GreaterThanOrEqualTo(input.Size + host.MinExtraEncryptedBytes), "#2a"); ctx.Assert(length, Is.LessThanOrEqualTo(input.Size + host.MaxExtraEncryptedBytes), "#2a"); ctx.Assert(output.Offset, Is.EqualTo(startOffset), "#2b"); ctx.Assert(output.Size, Is.EqualTo(startSize), "#2c"); output.Position = 0; var magic = output.ReadBytes(MagicDataSize); ctx.Assert(magic, Is.EqualTo(GetField(MagicDataName)), "#3"); var encrypted = output.ReadBytes(length); CheckOutput(ctx, HelloWorldResult, new BufferOffsetSize(encrypted)); }
public void TestDecryptData0(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(Data0Result); var output = host.Decrypt(input); ctx.Assert(output.Size, Is.EqualTo(0), "#1"); }
protected override void Generate (TestContext ctx, IEncryptionTestHost host) { Generator.WriteRandom (TestKeyName, 32); Generator.WriteRandom (TestMacName, 32); Generator.WriteRandom (TestIvName, 16); Generator.WriteRandom (TestDataName, 128); Generator.WriteRandom (MultiFragmentName, 16384 + 32); Generator.WriteRandom (MagicDataName, MagicDataSize); Generator.WriteRandom (MagicData2Name, MagicData2Size); Generator.WriteOutput (HelloWorldName, Encoding.UTF8.GetBytes ("Hello World!")); #if FIXME SetUp (); #endif TestHelloWorld (ctx, host); TestData (ctx, host); TestData0 (ctx, host); TestData11 (ctx, host); TestData12 (ctx, host); TestData13 (ctx, host); TestRecord (ctx, host); TestMultiFragment (ctx, host); TestEncryptWithExtraPadding (ctx, host); }
public void TestDecrypt(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(HelloWorldResult); var output = new TlsBuffer(input.Size + MagicDataSize + MagicData2Size); output.Write(GetBuffer(MagicDataName)); output.Write(GetBuffer(MagicData2Name)); var hello = GetField(HelloWorldName); var length = host.Decrypt(input, output.GetRemaining()); ctx.Assert(length, Is.EqualTo(hello.Length), "#1"); output.Position = 0; var magic = output.ReadBytes(MagicDataSize); ctx.Assert(magic, Is.EqualTo(GetField(MagicDataName)), "#2"); var magic2 = output.ReadBytes(MagicData2Size); ctx.Assert(magic2, Is.EqualTo(GetField(MagicData2Name)), "#3"); var decrypted = output.ReadBytes(length); ctx.Assert(decrypted, Is.EqualTo(hello), "#4"); }
protected override void Generate(TestContext ctx, IEncryptionTestHost host) { Generator.WriteRandom(TestKeyName, 32); Generator.WriteRandom(TestMacName, 32); Generator.WriteRandom(TestIvName, 16); Generator.WriteRandom(TestDataName, 128); Generator.WriteRandom(MultiFragmentName, 16384 + 32); Generator.WriteRandom(MagicDataName, MagicDataSize); Generator.WriteRandom(MagicData2Name, MagicData2Size); Generator.WriteOutput(HelloWorldName, Encoding.UTF8.GetBytes("Hello World!")); #if FIXME SetUp(); #endif TestHelloWorld(ctx, host); TestData(ctx, host); TestData0(ctx, host); TestData11(ctx, host); TestData12(ctx, host); TestData13(ctx, host); TestRecord(ctx, host); TestMultiFragment(ctx, host); TestEncryptWithExtraPadding(ctx, host); }
public void TestDecryptData13(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(Data13Result); var output = host.Decrypt(input); ctx.Assert(output.Size, Is.EqualTo(13), "#1"); ctx.Assert(TlsBuffer.Compare(output, GetBuffer(TestDataName, 0, 13)), "#2"); }
public void TestData13(TestContext ctx, [TestHost] IEncryptionTestHost host) { var buffer = GetBuffer(TestDataName, 0, 13); var output = host.Encrypt(buffer); ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.EqualTo(64), "#2"); WriteAndCheckOutput(ctx, Data13Result, output); }
public void TestHelloWorld(TestContext ctx, [TestHost] IEncryptionTestHost host) { var buffer = GetBuffer(HelloWorldName); var output = host.Encrypt(buffer); ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.EqualTo(buffer.Size + host.MinExtraEncryptedBytes), "#2"); WriteAndCheckOutput(ctx, HelloWorldResult, output); }
public void TestDecryptWithExtraPadding(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(ExtraPaddingResult); var output = host.Decrypt(input); var data = GetBuffer(TestDataName); ctx.Assert(output.Size, Is.EqualTo(data.Size), "#1"); ctx.Assert(TlsBuffer.Compare(output, data), "#2"); }
public void TestData(TestContext ctx, [TestHost] IEncryptionTestHost host) { var buffer = GetBuffer(TestDataName); var output = host.Encrypt(buffer); ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.GreaterThanOrEqualTo(buffer.Size + host.MinExtraEncryptedBytes), "#2"); ctx.Assert(output.Size, Is.LessThanOrEqualTo(buffer.Size + host.MaxExtraEncryptedBytes), "#3"); WriteAndCheckOutput(ctx, DataResult, output); }
public void TestData11(TestContext ctx, [TestHost] IEncryptionTestHost host) { // This will use zero padding. var buffer = GetBuffer(TestDataName, 0, 11); var output = host.Encrypt(buffer); ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.EqualTo(48), "#2"); WriteAndCheckOutput(ctx, Data11Result, output); }
protected override void Generate(TestContext ctx, IEncryptionTestHost host) { Generator.WriteRandom(TestKeyName, 32); Generator.WriteRandom(ImplicitNonce, 4); Generator.WriteRandom(ExplicitNonce, 8); Generator.WriteRandom(TestDataName, 128); Generator.WriteRandom(MagicDataName, MagicDataSize); Generator.WriteRandom(MagicData2Name, MagicData2Size); Generator.WriteOutput(HelloWorldName, Encoding.UTF8.GetBytes("Hello World!")); TestHelloWorld(ctx, host); TestData0(ctx, host); TestData(ctx, host); }
protected override void Generate (TestContext ctx, IEncryptionTestHost host) { Generator.WriteRandom (TestKeyName, 32); Generator.WriteRandom (ImplicitNonce, 4); Generator.WriteRandom (ExplicitNonce, 8); Generator.WriteRandom (TestDataName, 128); Generator.WriteRandom (MagicDataName, MagicDataSize); Generator.WriteRandom (MagicData2Name, MagicData2Size); Generator.WriteOutput (HelloWorldName, Encoding.UTF8.GetBytes ("Hello World!")); TestHelloWorld (ctx, host); TestData0 (ctx, host); TestData (ctx, host); }
public void TestInputOffset(TestContext ctx, [TestHost] IEncryptionTestHost host) { var hello = GetBuffer(HelloWorldName); var input = new TlsBuffer(hello.Size + MagicDataSize + MagicData2Size); input.Write(GetField(MagicDataName)); var startPos = input.Position; input.Write(hello); input.Write(GetBuffer(MagicData2Name)); var output = host.Encrypt(new BufferOffsetSize(input.Buffer, startPos, hello.Size)); ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.GreaterThanOrEqualTo(hello.Size + host.MinExtraEncryptedBytes), "#2"); ctx.Assert(output.Size, Is.LessThanOrEqualTo(hello.Size + host.MaxExtraEncryptedBytes), "#2"); CheckOutput(ctx, HelloWorldResult, output); }
public void TestEncryptWithExtraPadding(TestContext ctx, [TestHost] IEncryptionTestHost host) { var buffer = GetBuffer(TestDataName); IBufferOffsetSize output; try { host.Parameters.ExtraPaddingBlocks = 13; output = host.Encrypt(buffer); } finally { host.Parameters.ExtraPaddingBlocks = 0; } var extraPadding = 13 * 16; ctx.Assert(output, Is.Not.Null, "#1"); ctx.Assert(output.Size, Is.GreaterThanOrEqualTo(buffer.Size + extraPadding + host.MinExtraEncryptedBytes), "#2"); ctx.Assert(output.Size, Is.LessThanOrEqualTo(buffer.Size + extraPadding + host.MaxExtraEncryptedBytes), "#3"); WriteAndCheckOutput(ctx, ExtraPaddingResult, output); }
public void TestMultiFragment(TestContext ctx, [TestHost] IEncryptionTestHost host) { // Padding will push us above the maximum fragment size. var size = MAX_FRAGMENT_SIZE - host.MinExtraEncryptedBytes + 1; var encryptedSize = host.GetEncryptedSize(size); ctx.Assert(encryptedSize, Is.GreaterThan(MAX_FRAGMENT_SIZE)); var buffer = GetBuffer(MultiFragmentName, 0, size); var output = new TlsStream(); host.EncryptRecord(ContentType.ApplicationData, buffer, output); ctx.Assert(output.Position, Is.GreaterThanOrEqualTo(size + 2 * host.MinExtraEncryptedBytes + 10), "#2a"); ctx.Assert(output.Position, Is.LessThanOrEqualTo(size + 2 * host.MaxExtraEncryptedBytes + 10), "#2b"); ctx.Assert(output.Offset, Is.EqualTo(0), "#3"); output.Position = 0; ctx.Assert(output.ReadByte(), Is.EqualTo((byte)ContentType.ApplicationData), "#4a"); ctx.Assert(output.ReadInt16(), Is.EqualTo((short)TlsProtocolCode.Tls12), "#4b"); var firstChunkSize = (int)output.ReadInt16(); ctx.Assert(firstChunkSize, Is.GreaterThanOrEqualTo(MAX_FRAGMENT_SIZE - host.MaxExtraEncryptedBytes - 1), "#4c"); ctx.Assert(firstChunkSize, Is.LessThanOrEqualTo(MAX_FRAGMENT_SIZE), "#4d"); output.Position += firstChunkSize; ctx.Assert(output.ReadByte(), Is.EqualTo((byte)ContentType.ApplicationData), "#5a"); ctx.Assert(output.ReadInt16(), Is.EqualTo((short)TlsProtocolCode.Tls12), "#5b"); var secondChunkSize = (int)output.ReadInt16(); ctx.Assert(secondChunkSize, Is.GreaterThanOrEqualTo(encryptedSize - firstChunkSize + host.MinExtraEncryptedBytes), "#5c"); ctx.Assert(secondChunkSize, Is.LessThanOrEqualTo(encryptedSize - firstChunkSize + host.MaxExtraEncryptedBytes), "#5d"); output.Position += secondChunkSize; WriteAndCheckOutput(ctx, MultiFragmentResult, new BufferOffsetSize(output.Buffer, 0, output.Position)); }
public void TestRecord(TestContext ctx, [TestHost] IEncryptionTestHost host) { var buffer = GetBuffer(TestDataName); var output = new TlsStream(); host.EncryptRecord(ContentType.ApplicationData, buffer, output); ctx.Assert(output.Position, Is.GreaterThanOrEqualTo(buffer.Size + host.MinExtraEncryptedBytes + 5), "#2a"); ctx.Assert(output.Position, Is.LessThanOrEqualTo(buffer.Size + host.MaxExtraEncryptedBytes + 5), "#2b"); var encryptedSize = host.GetEncryptedSize(buffer.Size); ctx.Assert(output.Position, Is.EqualTo(encryptedSize + 5), "#2c"); output.Position = 0; ctx.Assert(output.ReadByte(), Is.EqualTo((byte)ContentType.ApplicationData), "#4a"); ctx.Assert(output.ReadInt16(), Is.EqualTo((short)TlsProtocolCode.Tls12), "#4b"); ctx.Assert(output.ReadInt16(), Is.EqualTo((short)encryptedSize), "#4c"); output.Position += encryptedSize; WriteAndCheckOutput(ctx, RecordResult, new BufferOffsetSize(output.Buffer, 0, output.Position)); }
public void TestDecryptWithInvalidPadding2(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(Data11Result); var modified = new TlsBuffer(input.Size); modified.Write(input.Buffer); // Flip a bit in the last byte, this will affect the padding size. modified.Buffer [modified.Size - 1] ^= 0x01; input = new BufferOffsetSize(modified.Buffer, 0, modified.Size); try { host.Decrypt(input); ctx.AssertFail("#1"); } catch (Exception ex) { ctx.Assert(ex, Is.InstanceOf <TlsException> (), "#2"); var tlsEx = (TlsException)ex; ctx.Assert(tlsEx.Alert.Level, Is.EqualTo(AlertLevel.Fatal), "#3"); ctx.Assert(tlsEx.Alert.Description, Is.EqualTo(AlertDescription.BadRecordMAC), "#4"); } }
public void TestDecryptWithInvalidPadding(TestContext ctx, [TestHost] IEncryptionTestHost host) { var input = GetBuffer(ExtraPaddingResult); var modified = new TlsBuffer(input.Size); modified.Write(input.Buffer); var theOffset = modified.Size - (2 * host.BlockSize) - 5; modified.Buffer [theOffset] ^= 0x01; input = new BufferOffsetSize(modified.Buffer, 0, modified.Size); try { host.Decrypt(input); ctx.AssertFail("#1"); } catch (Exception ex) { ctx.Assert(ex, Is.InstanceOf <TlsException> (), "#2"); var tlsEx = (TlsException)ex; ctx.Assert(tlsEx.Alert.Level, Is.EqualTo(AlertLevel.Fatal), "#3"); ctx.Assert(tlsEx.Alert.Description, Is.EqualTo(AlertDescription.BadRecordMAC), "#4"); } }
public void Sizes(TestContext ctx, [TestHost] IEncryptionTestHost host) { ctx.Assert(host.BlockSize, Is.EqualTo(16), "#1"); ctx.Assert(host.MinExtraEncryptedBytes, Is.EqualTo(37), "#2"); ctx.Assert(host.MaxExtraEncryptedBytes, Is.EqualTo(52), "#2"); }