This commit is contained in:
indigowor2 2018-10-31 17:39:32 +00:00
commit f29c94954f
4 changed files with 222 additions and 55 deletions

View file

@ -1,5 +1,6 @@
//-----------------------------------------------------------------------------
// Copyright (C) 2018 Merlok
// Copyright (C) 2018 drHatson
//
// This code is licensed to you under the terms of the GNU GPL, version 2 or,
// at your option, any later version. See the LICENSE.txt file for the text of
@ -12,6 +13,7 @@
#include <polarssl/aes.h>
#include <polarssl/aes_cmac128.h>
// NIST Special Publication 800-38A — Recommendation for block cipher modes of operation: methods and techniques, 2001.
int aes_encode(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *output, int length){
uint8_t iiv[16] = {0};
if (iv)
@ -52,16 +54,10 @@ int aes_cmac(uint8_t *iv, uint8_t *key, uint8_t *input, uint8_t *mac, int length
if (iv)
memcpy(iiv, iv, 16);
// padding: ISO/IEC 9797-1 Message Authentication Codes (MACs) - Part 1: Mechanisms using a block cipher
uint8_t data[2049] = {0}; // length + 16
memcpy(data, input, length);
data[length] = 0x80;
int datalen = (length & 0xfffffff0) + 0x10;
// NIST 800-38B
aes_cmac128_context ctx;
aes_cmac128_starts(&ctx, key);
aes_cmac128_update(&ctx, data, datalen);
aes_cmac128_update(&ctx, input, length);
aes_cmac128_final(&ctx, mac);
return 0;