// SPDX-License-Identifier: GPL-2.0-only /* * Digital Voice Modem - Test Suite * GPLv2 Open Source. Use is subject to license terms. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright (C) 2023 Bryan Biedenkapp, N2PLL * */ #include "host/Defines.h" #include "common/AESCrypto.h" #include "common/Log.h" #include "common/Utils.h" using namespace crypto; #include #include #include TEST_CASE("AES LLA AM2 Test", "[aes][lla_am2]") { bool failed = false; INFO("AES P25 LLA AM2 Test"); /* ** TIA-102.AACE-A 6.6 AM2 Sample */ srand((unsigned int)time(NULL)); // key (KS) uint8_t KS[16] = { 0x05, 0x24, 0x30, 0xBD, 0xAF, 0x39, 0xE8, 0x2F, 0xD0, 0xDD, 0xD6, 0x98, 0xC0, 0x2F, 0xB0, 0x36 }; // RES1 uint8_t resultRES1[4] = { 0x3E, 0x00, 0xFA, 0xA8 }; // RAND1 uint8_t RAND1[5] = { 0x4D, 0x92, 0x5A, 0xF6, 0x08 }; // expand RAND1 to 16 bytes uint8_t expandedRAND1[16]; for (uint32_t i = 0; i < 16U; i++) expandedRAND1[i] = 0x00U; for (uint32_t i = 0; i < 5U; i++) expandedRAND1[i] = RAND1[i]; // perform crypto AES* aes = new AES(AESKeyLength::AES_128); uint8_t* aesOut = aes->encryptECB(expandedRAND1, 16 * sizeof(uint8_t), KS); // reduce AES output uint8_t RES1[4]; for (uint32_t i = 0; i < 4U; i++) RES1[i] = aesOut[i]; Utils::dump(2U, "LLA_AM2_Test, Const Result", resultRES1, 4); Utils::dump(2U, "LLA_AM2_Test, AES Out", aesOut, 16); Utils::dump(2U, "LLA_AM2_Test, Result", RES1, 4); for (uint32_t i = 0; i < 4U; i++) { if (RES1[i] != resultRES1[i]) { ::LogError("T", "LLA_AM2_Test, INVALID AT IDX %d", i); failed = true; } } delete aes; REQUIRE(failed==false); }