123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- //
- // aes.h
- // nuSDKService
- //
- // Created by W.YudoAji on 29/06/20.
- // Copyright © 2020 newuniverse. All rights reserved.
- //
- #ifndef _AES_H_
- #define _AES_H_
- //#include <stdint.h>
- //#include <stdio.h>
- // #define the macros below to 1/0 to enable/disable the mode of operation.
- //
- // CBC enables AES encryption in CBC-mode of operation.
- // CTR enables encryption in counter-mode.
- // ECB enables the basic ECB 16-byte block algorithm. All can be enabled simultaneously.
- // The #ifndef-guard allows it to be configured before #include'ing or at compile time.
- #ifndef CBC
- #define CBC 1
- #endif
- //#ifndef ECB
- //#define ECB 1
- //#endif
- //
- //#ifndef CTR
- //#define CTR 1
- //#endif
- #define AES256 1
- //#define AES128 1
- //#define AES192 1
- #define AES_BLOCKLEN 16 //Block length in bytes AES is 128b block only
- #if defined(AES256) && (AES256 == 1)
- #define AES_KEYLEN 32
- #define AES_keyExpSize 240
- //#elif defined(AES192) && (AES192 == 1)
- //#define AES_KEYLEN 24
- //#define AES_keyExpSize 208
- //#else
- //#define AES_KEYLEN 16 // Key length in bytes
- //#define AES_keyExpSize 176
- #endif
- //struct AES_ctx {
- // uint8_t RoundKey[AES_keyExpSize];
- //#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
- // uint8_t Iv[AES_BLOCKLEN];
- //#endif
- //};
- //void AES_init_ctx(struct AES_ctx *ctx, const uint8_t *key);
- //
- //#if (defined(CBC) && (CBC == 1)) || (defined(CTR) && (CTR == 1))
- //
- //void AES_init_ctx_iv(struct AES_ctx *ctx, const uint8_t *key, const uint8_t *iv);
- //
- //void AES_ctx_set_iv(struct AES_ctx *ctx, const uint8_t *iv);
- //
- //#endif
- //
- //#if defined(ECB) && (ECB == 1)
- //
- //// buffer size is exactly AES_BLOCKLEN bytes;
- //// you need only AES_init_ctx as IV is not used in ECB
- //// NB: ECB is considered insecure for most uses
- //void AES_ECB_encrypt(const struct AES_ctx *ctx, uint8_t *buf);
- //
- //void AES_ECB_decrypt(const struct AES_ctx *ctx, uint8_t *buf);
- //
- //#endif // #if defined(ECB) && (ECB == !)
- //
- //
- //#if defined(CBC) && (CBC == 1)
- //
- //// buffer size MUST be mutile of AES_BLOCKLEN;
- //// Suggest https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
- //// NOTES: you need to set IV in ctx via AES_init_ctx_iv() or AES_ctx_set_iv()
- //// no IV should ever be reused with the same key
- //void AES_CBC_encrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
- //
- //void AES_CBC_decrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
- //
- //#endif // #if defined(CBC) && (CBC == 1)
- //
- //
- //#if defined(CTR) && (CTR == 1)
- //
- //// Same function for encrypting as for decrypting.
- //// IV is incremented for every block, and used after encryption as XOR-compliment for output
- //// Suggesting https://en.wikipedia.org/wiki/Padding_(cryptography)#PKCS7 for padding scheme
- //// NOTES: you need to set IV in ctx with AES_init_ctx_iv() or AES_ctx_set_iv()
- //// no IV should ever be reused with the same key
- //void AES_CTR_xcrypt_buffer(struct AES_ctx *ctx, uint8_t *buf, uint32_t length);
- //
- //#endif // #if defined(CTR) && (CTR == 1)
- // uint8_t iAx(uint8_t *abKey, const uint8_t len);
- void initCND(void);
- uint16_t abN(uint8_t *inpBytes, const uint16_t nInpLen, uint8_t *outBytes, uint8_t *aUint8Key);
- uint16_t abD(uint8_t *inpBytes, const uint16_t nInpLen, uint8_t *outBytes, uint8_t *aUint8Key, const uint8_t nRemoveTI);
- #endif //_AES_H_
|