deep optimizing ram usage
This commit is contained in:
parent
c92c17392f
commit
acd9d0dc97
|
@ -469,7 +469,8 @@ uint8_t onewire_crc8(const uint8_t *addr, uint8_t len)
|
|||
|
||||
while (len--) {
|
||||
uint8_t inbyte = *addr++;
|
||||
for (uint8_t i = 8; i; i--) {
|
||||
uint8_t i;
|
||||
for (i = 8; i; i--) {
|
||||
uint8_t mix = (crc ^ inbyte) & 0x01;
|
||||
crc >>= 1;
|
||||
if (mix) crc ^= 0x8C;
|
||||
|
|
|
@ -29,7 +29,7 @@
|
|||
// old versions of OneWire). If you disable this, a slower
|
||||
// but very compact algorithm is used.
|
||||
#ifndef ONEWIRE_CRC8_TABLE
|
||||
#define ONEWIRE_CRC8_TABLE 1
|
||||
#define ONEWIRE_CRC8_TABLE 0
|
||||
#endif
|
||||
|
||||
// You can allow 16-bit CRC checks by defining this to 1
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
#define NODE_VERSION_INTERNAL 0U
|
||||
|
||||
#define NODE_VERSION "NodeMcu 0.9.5"
|
||||
#define BUILD_DATE "build 20150106"
|
||||
#define BUILD_DATE "build 20150107"
|
||||
|
||||
// #define FLASH_512K
|
||||
// #define FLASH_1M
|
||||
|
|
|
@ -22,7 +22,7 @@
|
|||
#include "lstring.h"
|
||||
#include "lvm.h"
|
||||
|
||||
|
||||
#include "flash_api.h"
|
||||
|
||||
const TValue luaO_nilobject_ = {LUA_TVALUE_NIL};
|
||||
|
||||
|
@ -52,7 +52,7 @@ int luaO_fb2int (int x) {
|
|||
|
||||
|
||||
int luaO_log2 (unsigned int x) {
|
||||
static const lu_byte log_2[256] = {
|
||||
static const lu_byte log_2[256] ICACHE_STORE_ATTR ICACHE_RODATA_ATTR = {
|
||||
0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
|
||||
6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
|
||||
7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
|
||||
|
@ -64,7 +64,8 @@ int luaO_log2 (unsigned int x) {
|
|||
};
|
||||
int l = -1;
|
||||
while (x >= 256) { l += 8; x >>= 8; }
|
||||
return l + log_2[x];
|
||||
// return l + log_2[x];
|
||||
return l + byte_of_aligned_array(log_2,x);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -225,3 +225,14 @@ bool flash_self_destruct(void)
|
|||
SPIEraseChip();
|
||||
return true;
|
||||
}
|
||||
|
||||
uint8_t byte_of_aligned_array(const uint8_t* aligned_array, uint32_t index)
|
||||
{
|
||||
if( (((uint32_t)aligned_array)%4) != 0 ){
|
||||
NODE_DBG("aligned_array is not 4-byte aligned.\n");
|
||||
return 0;
|
||||
}
|
||||
uint32_t v = ((uint32_t *)aligned_array)[ index/4 ];
|
||||
uint8_t *p = (uint8_t *) (&v);
|
||||
return p[ (index%4) ];
|
||||
}
|
||||
|
|
|
@ -67,5 +67,6 @@ bool flash_init_data_written(void);
|
|||
bool flash_init_data_default(void);
|
||||
bool flash_init_data_blank(void);
|
||||
bool flash_self_destruct(void);
|
||||
uint8_t byte_of_aligned_array(const uint8_t* aligned_array, uint32_t index);
|
||||
|
||||
#endif // __FLASH_API_H__
|
||||
|
|
|
@ -81,7 +81,7 @@
|
|||
/*
|
||||
* AES S-box
|
||||
*/
|
||||
static const uint8_t aes_sbox[256] =
|
||||
static const uint8_t aes_sbox[256] ICACHE_STORE_ATTR ICACHE_RODATA_ATTR =
|
||||
{
|
||||
0x63,0x7C,0x77,0x7B,0xF2,0x6B,0x6F,0xC5,
|
||||
0x30,0x01,0x67,0x2B,0xFE,0xD7,0xAB,0x76,
|
||||
|
@ -120,7 +120,7 @@ static const uint8_t aes_sbox[256] =
|
|||
/*
|
||||
* AES is-box
|
||||
*/
|
||||
static const uint8_t aes_isbox[256] =
|
||||
static const uint8_t aes_isbox[256] ICACHE_STORE_ATTR ICACHE_RODATA_ATTR =
|
||||
{
|
||||
0x52,0x09,0x6a,0xd5,0x30,0x36,0xa5,0x38,
|
||||
0xbf,0x40,0xa3,0x9e,0x81,0xf3,0xd7,0xfb,
|
||||
|
@ -226,20 +226,28 @@ void ICACHE_FLASH_ATTR AES_set_key(AES_CTX *ctx, const uint8_t *key,
|
|||
|
||||
if ((i % words) == 0)
|
||||
{
|
||||
tmp2 =(uint32_t)aes_sbox[(tmp )&0xff]<< 8;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>> 8)&0xff]<<16;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<24;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>>24) ];
|
||||
// tmp2 =(uint32_t)aes_sbox[(tmp )&0xff]<< 8;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>> 8)&0xff]<<16;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<24;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>>24) ];
|
||||
tmp2 =((uint32_t)byte_of_aligned_array(aes_sbox,(tmp )&0xff))<< 8;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>> 8)&0xff))<<16;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>>16)&0xff))<<24;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>>24) ));
|
||||
tmp=tmp2^(((unsigned int)*ip)<<24);
|
||||
ip++;
|
||||
}
|
||||
|
||||
if ((words == 8) && ((i % words) == 4))
|
||||
{
|
||||
tmp2 =(uint32_t)aes_sbox[(tmp )&0xff] ;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>> 8)&0xff]<< 8;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<16;
|
||||
tmp2|=(uint32_t)aes_sbox[(tmp>>24) ]<<24;
|
||||
// tmp2 =(uint32_t)aes_sbox[(tmp )&0xff] ;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>> 8)&0xff]<< 8;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>>16)&0xff]<<16;
|
||||
// tmp2|=(uint32_t)aes_sbox[(tmp>>24) ]<<24;
|
||||
tmp2 =((uint32_t)byte_of_aligned_array(aes_sbox,(tmp )&0xff)) ;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>> 8)&0xff))<< 8;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>>16)&0xff))<<16;
|
||||
tmp2|=((uint32_t)byte_of_aligned_array(aes_sbox,(tmp>>24) ))<<24;
|
||||
tmp=tmp2;
|
||||
}
|
||||
|
||||
|
@ -375,10 +383,15 @@ static void ICACHE_FLASH_ATTR AES_encrypt(const AES_CTX *ctx, uint32_t *data)
|
|||
/* Perform ByteSub and ShiftRow operations together */
|
||||
for (row = 0; row < 4; row++)
|
||||
{
|
||||
a0 = (uint32_t)aes_sbox[(data[row%4]>>24)&0xFF];
|
||||
a1 = (uint32_t)aes_sbox[(data[(row+1)%4]>>16)&0xFF];
|
||||
a2 = (uint32_t)aes_sbox[(data[(row+2)%4]>>8)&0xFF];
|
||||
a3 = (uint32_t)aes_sbox[(data[(row+3)%4])&0xFF];
|
||||
// a0 = (uint32_t)aes_sbox[(data[row%4]>>24)&0xFF];
|
||||
// a1 = (uint32_t)aes_sbox[(data[(row+1)%4]>>16)&0xFF];
|
||||
// a2 = (uint32_t)aes_sbox[(data[(row+2)%4]>>8)&0xFF];
|
||||
// a3 = (uint32_t)aes_sbox[(data[(row+3)%4])&0xFF];
|
||||
|
||||
a0 = (uint32_t)(byte_of_aligned_array(aes_sbox,(data[row%4]>>24)&0xFF));
|
||||
a1 = (uint32_t)(byte_of_aligned_array(aes_sbox,(data[(row+1)%4]>>16)&0xFF));
|
||||
a2 = (uint32_t)(byte_of_aligned_array(aes_sbox,(data[(row+2)%4]>>8)&0xFF));
|
||||
a3 = (uint32_t)(byte_of_aligned_array(aes_sbox,(data[(row+3)%4])&0xFF));
|
||||
|
||||
/* Perform MixColumn iff not last round */
|
||||
if (curr_rnd < (rounds - 1))
|
||||
|
@ -423,10 +436,15 @@ static void ICACHE_FLASH_ATTR AES_decrypt(const AES_CTX *ctx, uint32_t *data)
|
|||
/* Perform ByteSub and ShiftRow operations together */
|
||||
for (row = 4; row > 0; row--)
|
||||
{
|
||||
a0 = aes_isbox[(data[(row+3)%4]>>24)&0xFF];
|
||||
a1 = aes_isbox[(data[(row+2)%4]>>16)&0xFF];
|
||||
a2 = aes_isbox[(data[(row+1)%4]>>8)&0xFF];
|
||||
a3 = aes_isbox[(data[row%4])&0xFF];
|
||||
// a0 = aes_isbox[(data[(row+3)%4]>>24)&0xFF];
|
||||
// a1 = aes_isbox[(data[(row+2)%4]>>16)&0xFF];
|
||||
// a2 = aes_isbox[(data[(row+1)%4]>>8)&0xFF];
|
||||
// a3 = aes_isbox[(data[row%4])&0xFF];
|
||||
|
||||
a0 = byte_of_aligned_array(aes_isbox,(data[(row+3)%4]>>24)&0xFF);
|
||||
a1 = byte_of_aligned_array(aes_isbox,(data[(row+2)%4]>>16)&0xFF);
|
||||
a2 = byte_of_aligned_array(aes_isbox,(data[(row+1)%4]>>8)&0xFF);
|
||||
a3 = byte_of_aligned_array(aes_isbox,(data[row%4])&0xFF);
|
||||
|
||||
/* Perform MixColumn iff not last round */
|
||||
if (curr_rnd<(rounds-1))
|
||||
|
|
Loading…
Reference in New Issue