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/AesCmac256Test.lvt
namespace Livt.Crypto.Tests.Aes
using Livt.Crypto.Aes
// Tests for Cmac256 — NIST SP 800-38B vectors.
// Key: 603deb1015ca71be2b73aef0857d77811f352c073b6108d72d9810a30914dff4
@Test
component AesCmac256Test
{
cmac: Cmac256
new()
{
this.cmac = new Cmac256()
}
// -----------------------------------------------------------------------
// NIST SP 800-38B, AES-256, zero-length message.
// Input: (empty)
// Padded: 80 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
// Tag: 028962f61b7bf89efc6b551f4667d983
// -----------------------------------------------------------------------
@Test
fn TestNistEmptyMessage()
{
var key: byte[32] = [
0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4]
var padded: byte[16] = [
0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]
this.cmac.SetKey(key)
this.cmac.Reset()
this.cmac.FinalizePaddedBlock(padded)
var tag: byte[16] = this.cmac.GetTag()
assert tag[0] == 0x02
assert tag[1] == 0x89
assert tag[2] == 0x62
assert tag[3] == 0xf6
assert tag[4] == 0x1b
assert tag[5] == 0x7b
assert tag[6] == 0xf8
assert tag[7] == 0x9e
assert tag[8] == 0xfc
assert tag[9] == 0x6b
assert tag[10] == 0x55
assert tag[11] == 0x1f
assert tag[12] == 0x46
assert tag[13] == 0x67
assert tag[14] == 0xd9
assert tag[15] == 0x83
}
// -----------------------------------------------------------------------
// NIST SP 800-38B, AES-256, one-block message.
// Message: 6bc1bee22e409f96e93d7e117393172a
// Tag: 28a7023f452e8f82bd4bf28d8c37c35c
// -----------------------------------------------------------------------
@Test
fn TestNistOneBlock()
{
var key: byte[32] = [
0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4]
var msg: byte[16] = [
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a]
this.cmac.SetKey(key)
this.cmac.Reset()
this.cmac.FinalizeBlock(msg)
var tag: byte[16] = this.cmac.GetTag()
assert tag[0] == 0x28
assert tag[1] == 0xa7
assert tag[2] == 0x02
assert tag[3] == 0x3f
assert tag[4] == 0x45
assert tag[5] == 0x2e
assert tag[6] == 0x8f
assert tag[7] == 0x82
assert tag[8] == 0xbd
assert tag[9] == 0x4b
assert tag[10] == 0xf2
assert tag[11] == 0x8d
assert tag[12] == 0x8c
assert tag[13] == 0x37
assert tag[14] == 0xc3
assert tag[15] == 0x5c
}
// -----------------------------------------------------------------------
// Determinism: same key + message → identical tags on two consecutive runs.
// -----------------------------------------------------------------------
@Test
fn TestDeterminism()
{
var key: byte[32] = [
0x60, 0x3d, 0xeb, 0x10, 0x15, 0xca, 0x71, 0xbe,
0x2b, 0x73, 0xae, 0xf0, 0x85, 0x7d, 0x77, 0x81,
0x1f, 0x35, 0x2c, 0x07, 0x3b, 0x61, 0x08, 0xd7,
0x2d, 0x98, 0x10, 0xa3, 0x09, 0x14, 0xdf, 0xf4]
var msg: byte[16] = [
0x6b, 0xc1, 0xbe, 0xe2, 0x2e, 0x40, 0x9f, 0x96,
0xe9, 0x3d, 0x7e, 0x11, 0x73, 0x93, 0x17, 0x2a]
this.cmac.SetKey(key)
// First run.
this.cmac.Reset()
this.cmac.FinalizeBlock(msg)
var tag1: byte[16] = this.cmac.GetTag()
var t0: byte = tag1[0]
var t1: byte = tag1[1]
var t2: byte = tag1[2]
var t3: byte = tag1[3]
var t4: byte = tag1[4]
var t5: byte = tag1[5]
var t6: byte = tag1[6]
var t7: byte = tag1[7]
var t8: byte = tag1[8]
var t9: byte = tag1[9]
var t10: byte = tag1[10]
var t11: byte = tag1[11]
var t12: byte = tag1[12]
var t13: byte = tag1[13]
var t14: byte = tag1[14]
var t15: byte = tag1[15]
// Second run.
this.cmac.Reset()
this.cmac.FinalizeBlock(msg)
var tag2: byte[16] = this.cmac.GetTag()
assert tag2[0] == t0
assert tag2[1] == t1
assert tag2[2] == t2
assert tag2[3] == t3
assert tag2[4] == t4
assert tag2[5] == t5
assert tag2[6] == t6
assert tag2[7] == t7
assert tag2[8] == t8
assert tag2[9] == t9
assert tag2[10] == t10
assert tag2[11] == t11
assert tag2[12] == t12
assert tag2[13] == t13
assert tag2[14] == t14
assert tag2[15] == t15
}
}