Livt packages
Livt.Crypto
Version 1.0.5
Fixed-size cryptographic components for Livt, including AES, ChaCha20, SHA, MACs, and key derivation.
Published files (69)
tests/aes/AesCtr128Test.lvt
namespace Livt.Crypto.Tests.Aes
using Livt.Crypto.Aes
@Test
component AesCtr128Test
{
ctr: Ctr128
new()
{
this.ctr = new Ctr128()
}
// -----------------------------------------------------------------------
// NIST SP 800-38A Appendix F.5.1, AES-128 CTR
// Key: 2b7e151628aed2a6abf7158809cf4f3c
// Counter[1]: f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff
// OB[1]: ec8cdf7398607cb0f2d21675ea9ea1e4
// PT[1]: 6bc1bee22e409f96e93d7e117393172a CT[1]: 874d6191b620e3261bef6864990db6ce
// Counter[2]: f0f1f2f3f4f5f6f7f8f9fafbfcfdff00
// OB[2]: 362b7c3c67735163 18a077d7fc5073ae
// PT[2]: ae2d8a571e03ac9c9eb76fac45af8e51 CT[2]: 9806f66b7970fdff8617187bb9fffdff
// -----------------------------------------------------------------------
// NIST SP 800-38A F.5.1 CTR-AES128 — Block 1 encryption.
@Test
fn TestNistSp80038ABlock1()
{
var key: byte[16] = [
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c]
var counter: byte[16] = [
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff]
var pt: byte[16] = [
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a]
this.ctr.SetKey(key)
this.ctr.SetCounter(counter)
this.ctr.LoadBlock(pt)
this.ctr.CryptBlock()
var ct: byte[16] = this.ctr.GetBlock()
assert ct[0] == 0x87
assert ct[1] == 0x4d
assert ct[2] == 0x61
assert ct[3] == 0x91
assert ct[4] == 0xb6
assert ct[5] == 0x20
assert ct[6] == 0xe3
assert ct[7] == 0x26
assert ct[8] == 0x1b
assert ct[9] == 0xef
assert ct[10] == 0x68
assert ct[11] == 0x64
assert ct[12] == 0x99
assert ct[13] == 0x0d
assert ct[14] == 0xb6
assert ct[15] == 0xce
}
// NIST SP 800-38A F.5.1 CTR-AES128 — Blocks 1 and 2 (tests counter increment).
@Test
fn TestNistSp80038ABlock2()
{
var key: byte[16] = [
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c]
var counter: byte[16] = [
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff]
var pt1: byte[16] = [
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a]
var pt2: byte[16] = [
0xae, 0x2d, 0x8a, 0x57, 0x1e, 0x03, 0xac, 0x9c,
0x9e, 0xb7, 0x6f, 0xac, 0x45, 0xaf, 0x8e, 0x51]
this.ctr.SetKey(key)
this.ctr.SetCounter(counter)
this.ctr.LoadBlock(pt1)
this.ctr.CryptBlock()
this.ctr.LoadBlock(pt2)
this.ctr.CryptBlock()
var ct2: byte[16] = this.ctr.GetBlock()
assert ct2[0] == 0x98
assert ct2[1] == 0x06
assert ct2[2] == 0xf6
assert ct2[3] == 0x6b
assert ct2[4] == 0x79
assert ct2[5] == 0x70
assert ct2[6] == 0xfd
assert ct2[7] == 0xff
assert ct2[8] == 0x86
assert ct2[9] == 0x17
assert ct2[10] == 0x18
assert ct2[11] == 0x7b
assert ct2[12] == 0xb9
assert ct2[13] == 0xff
assert ct2[14] == 0xfd
assert ct2[15] == 0xff
}
// CTR decrypt is the same operation as encrypt.
@Test
fn TestDecryptRoundtrip()
{
var key: byte[16] = [
0x2b, 0x7e, 0x15, 0x16, 0x28, 0xae, 0xd2, 0xa6,
0xab, 0xf7, 0x15, 0x88, 0x09, 0xcf, 0x4f, 0x3c]
var counter: byte[16] = [
0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff]
var pt: byte[16] = [
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a]
this.ctr.SetKey(key)
this.ctr.SetCounter(counter)
this.ctr.LoadBlock(pt)
this.ctr.CryptBlock()
var ct: byte[16] = this.ctr.GetBlock()
this.ctr.SetCounter(counter)
this.ctr.LoadBlock(ct)
this.ctr.CryptBlock()
var recovered: byte[16] = this.ctr.GetBlock()
assert recovered[0] == 0x6b
assert recovered[1] == 0xc1
assert recovered[2] == 0xbe
assert recovered[3] == 0xe2
assert recovered[4] == 0x2e
assert recovered[5] == 0x40
assert recovered[6] == 0x9f
assert recovered[7] == 0x96
assert recovered[8] == 0xe9
assert recovered[9] == 0x3d
assert recovered[10] == 0x7e
assert recovered[11] == 0x11
assert recovered[12] == 0x73
assert recovered[13] == 0x93
assert recovered[14] == 0x17
assert recovered[15] == 0x2a
}
}