OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Aes.c File Reference
#include "CryptoInternal.h"

Go to the source code of this file.

Macros

#define Nb   4
 
#define GetSboxValue(num)
 
#define GetSBoxInvert(num)
 
#define Multiply(x, y)
 

Typedefs

typedef UINT8 AES_INTERNAL_STATE[4][4]
 

Functions

STATIC VOID KeyExpansion (OUT UINT8 *RoundKey, IN CONST UINT8 *Key)
 
VOID AesInitCtxIv (OUT AES_CONTEXT *Context, IN CONST UINT8 *Key, IN CONST UINT8 *Iv)
 
VOID AesSetCtxIv (OUT AES_CONTEXT *Context, IN CONST UINT8 *Iv)
 
STATIC VOID AddRoundKey (IN UINT8 Round, IN OUT AES_INTERNAL_STATE *State, IN CONST UINT8 *RoundKey)
 
STATIC VOID SubBytes (IN OUT AES_INTERNAL_STATE *State)
 
STATIC VOID ShiftRows (IN OUT AES_INTERNAL_STATE *State)
 
STATIC UINT8 XTime (IN UINT8 X)
 
STATIC VOID MixColumns (IN OUT AES_INTERNAL_STATE *State)
 
STATIC VOID InvMixColumns (IN OUT AES_INTERNAL_STATE *State)
 
STATIC VOID InvSubBytes (IN OUT AES_INTERNAL_STATE *State)
 
STATIC VOID InvShiftRows (IN OUT AES_INTERNAL_STATE *State)
 
STATIC VOID Cipher (IN OUT AES_INTERNAL_STATE *State, IN CONST UINT8 *RoundKey)
 
STATIC VOID InvCipher (IN OUT AES_INTERNAL_STATE *State, IN CONST UINT8 *RoundKey)
 
STATIC VOID XorWithIv (IN OUT UINT8 *Buf, IN CONST UINT8 *Iv)
 
VOID AesCbcEncryptBuffer (IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
 
VOID AesCbcDecryptBuffer (IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
 
VOID AesCtrXcryptBuffer (IN OUT AES_CONTEXT *Context, IN OUT UINT8 *Data, IN UINT32 Len)
 

Variables

STATIC CONST UINT8 Sbox [256]
 
STATIC CONST UINT8 RsBox [256]
 
STATIC CONST UINT8 Rcon [11]
 

Detailed Description

OcCryptoLib

Copyright (c) 2018, savvas

All rights reserved.

This program and the accompanying materials are licensed and made available under the terms and conditions of the BSD License which accompanies this distribution. The full text of the license may be found at http://opensource.org/licenses/bsd-license.php

THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.

Definition in file Aes.c.

Macro Definition Documentation

◆ GetSBoxInvert

#define GetSBoxInvert ( num)
Value:
(RsBox[(num)])
STATIC CONST UINT8 RsBox[256]
Definition Aes.c:116

Definition at line 157 of file Aes.c.

◆ GetSboxValue

#define GetSboxValue ( num)
Value:
(Sbox[(num)])
STATIC CONST UINT8 Sbox[256]
Definition Aes.c:96

Definition at line 156 of file Aes.c.

◆ Multiply

#define Multiply ( x,
y )
Value:
( (((y) & 1u) * (x)) ^ \
(((y)>>1u & 1u) * XTime(x)) ^ \
(((y)>>2u & 1u) * XTime(XTime(x))) ^ \
(((y)>>3u & 1u) * XTime(XTime(XTime(x)))) ^ \
(((y)>>4u & 1u) * XTime(XTime(XTime(XTime(x)))))) \
STATIC UINT8 XTime(IN UINT8 X)
Definition Aes.c:354
UINT16 y
Definition BmfFile.h:84
UINT16 x
Definition BmfFile.h:83

Definition at line 397 of file Aes.c.

◆ Nb

#define Nb   4

Copyright (c) 2014-2018, kokke

This is free and unencumbered software released into the public domain.

Anyone is free to copy, modify, publish, use, compile, sell, or distribute this software, either in source code form or as a compiled binary, for any purpose, commercial or non-commercial, and by any means.

In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain. We make this dedication for the benefit of the public at large and to the detriment of our heirs and successors. We intend this dedication to be an overt act of relinquishment in perpetuity of all present and future rights to this software under copyright law.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

For more information, please refer to http://unlicense.org/ This is an implementation of the AES algorithm, specifically CTR and CBC mode. Block size can be chosen in OcCryptoLib.h.

The implementation is verified against the test vectors in: National Institute of Standards and Technology Special Publication 800-38A 2001 ED

NOTE: String length must be evenly divisible by 16byte (str_len % 16 == 0) You should pad the end of the string with zeros if this is not the case. For AES192/256 the key size is proportionally larger.

Definition at line 73 of file Aes.c.

Typedef Documentation

◆ AES_INTERNAL_STATE

typedef UINT8 AES_INTERNAL_STATE[4][4]

Definition at line 89 of file Aes.c.

Function Documentation

◆ AddRoundKey()

STATIC VOID AddRoundKey ( IN UINT8 Round,
IN OUT AES_INTERNAL_STATE * State,
IN CONST UINT8 * RoundKey )

Definition at line 275 of file Aes.c.

◆ AesCbcDecryptBuffer()

VOID AesCbcDecryptBuffer ( IN OUT AES_CONTEXT * Context,
IN OUT UINT8 * Data,
IN UINT32 Len )

Definition at line 611 of file Aes.c.

◆ AesCbcEncryptBuffer()

VOID AesCbcEncryptBuffer ( IN OUT AES_CONTEXT * Context,
IN OUT UINT8 * Data,
IN UINT32 Len )

Definition at line 586 of file Aes.c.

◆ AesCtrXcryptBuffer()

VOID AesCtrXcryptBuffer ( IN OUT AES_CONTEXT * Context,
IN OUT UINT8 * Data,
IN UINT32 Len )

Definition at line 634 of file Aes.c.

◆ AesInitCtxIv()

VOID AesInitCtxIv ( OUT AES_CONTEXT * Context,
IN CONST UINT8 * Key,
IN CONST UINT8 * Iv )

Definition at line 250 of file Aes.c.

◆ AesSetCtxIv()

VOID AesSetCtxIv ( OUT AES_CONTEXT * Context,
IN CONST UINT8 * Iv )

Definition at line 261 of file Aes.c.

◆ Cipher()

STATIC VOID Cipher ( IN OUT AES_INTERNAL_STATE * State,
IN CONST UINT8 * RoundKey )

Definition at line 496 of file Aes.c.

◆ InvCipher()

STATIC VOID InvCipher ( IN OUT AES_INTERNAL_STATE * State,
IN CONST UINT8 * RoundKey )

Definition at line 531 of file Aes.c.

◆ InvMixColumns()

STATIC VOID InvMixColumns ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 411 of file Aes.c.

◆ InvShiftRows()

STATIC VOID InvShiftRows ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 455 of file Aes.c.

◆ InvSubBytes()

STATIC VOID InvSubBytes ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 440 of file Aes.c.

◆ KeyExpansion()

STATIC VOID KeyExpansion ( OUT UINT8 * RoundKey,
IN CONST UINT8 * Key )

Definition at line 165 of file Aes.c.

◆ MixColumns()

STATIC VOID MixColumns ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 366 of file Aes.c.

◆ ShiftRows()

STATIC VOID ShiftRows ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 316 of file Aes.c.

◆ SubBytes()

STATIC VOID SubBytes ( IN OUT AES_INTERNAL_STATE * State)

Definition at line 296 of file Aes.c.

◆ XorWithIv()

STATIC VOID XorWithIv ( IN OUT UINT8 * Buf,
IN CONST UINT8 * Iv )

Definition at line 566 of file Aes.c.

◆ XTime()

STATIC UINT8 XTime ( IN UINT8 X)

Definition at line 354 of file Aes.c.

Variable Documentation

◆ Rcon

STATIC CONST UINT8 Rcon[11]
Initial value:
= {
0x8d, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
}

Definition at line 139 of file Aes.c.

◆ RsBox

STATIC CONST UINT8 RsBox[256]
Initial value:
= {
0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
}

Definition at line 116 of file Aes.c.

◆ Sbox

STATIC CONST UINT8 Sbox[256]
Initial value:
= {
0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
}

Definition at line 96 of file Aes.c.