Various fixes and improvements (#21)

* fix potential write to read only memory

* fix infinite loop

* move macros to the source file, make PUT a statement rather than a block
This commit is contained in:
Wirtos_new 2021-04-07 15:16:06 +03:00 committed by GitHub
parent 9836e93a27
commit 9a9e55be72
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 10 additions and 9 deletions

View File

@ -20,6 +20,12 @@
#include "aes256.h"
#define LROTL(x) (((x) << 8) | ((x) >> 24))
#define LROTR(x) (((x) >> 8) | ((x) << 24))
#define SWAP(x) ((LROTL((x)) & 0x00ff00ff) | (LROTR((x)) & 0xff00ff00))
#define GET(p) SWAP(*((uint32_t *)(p)))
#define PUT(ct, st) (*((uint32_t *)(ct)) = SWAP((st)))
static const uint32_t Te0[256] = {
0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554,
0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a,

View File

@ -28,12 +28,6 @@
#define AES_BLOCK_SIZE 16
#define EXPANDED_KEY_SIZE 60
#define LROTL(x) (((x) << 8) | ((x) >> 24))
#define LROTR(x) (((x) >> 8) | ((x) << 24))
#define SWAP(x) ((LROTL((x)) & 0x00ff00ff) | (LROTR((x)) & 0xff00ff00))
#define GET(p) SWAP(*((uint32_t *)(p)))
#define PUT(ct, st) {*((uint32_t *)(ct)) = SWAP((st));}
void aes256_set_encryption_key(const uint8_t key[32], uint32_t expandedKey[60]);
void aes256_set_decryption_key(const uint8_t key[32], uint32_t expandedKey[60]);

View File

@ -21,6 +21,6 @@
#ifndef CBC256_H
#define CBC256_H
uint8_t *cbc256(const uint8_t in[], uint32_t length, const uint8_t key[32], const uint8_t iv[16], uint8_t encrypt);
uint8_t *cbc256(const uint8_t in[], uint32_t length, const uint8_t key[32], uint8_t iv[16], uint8_t encrypt);
#endif // CBC256_H

View File

@ -41,7 +41,8 @@ uint8_t *ctr256(const uint8_t in[], uint32_t length, const uint8_t key[32], uint
*state = 0;
if (*state == 0) {
for (k = AES_BLOCK_SIZE - 1; k >= 0; --k)
k = AES_BLOCK_SIZE;
while(k--)
if (++iv[k])
break;

View File

@ -21,6 +21,6 @@
#ifndef CTR256_H
#define CTR256_H
uint8_t *ctr256(const uint8_t in[], uint32_t length, const uint8_t key[32], const uint8_t iv[16], uint8_t *state);
uint8_t *ctr256(const uint8_t in[], uint32_t length, const uint8_t key[32], uint8_t iv[16], uint8_t *state);
#endif // CTR256_H