Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
acd9d0dc
Commit
acd9d0dc
authored
Jan 07, 2015
by
funshine
Browse files
deep optimizing ram usage
parent
c92c1739
Changes
7
Hide whitespace changes
Inline
Side-by-side
app/driver/onewire.c
View file @
acd9d0dc
...
...
@@ -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
;
...
...
app/include/driver/onewire.h
View file @
acd9d0dc
...
...
@@ -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
...
...
app/include/user_config.h
View file @
acd9d0dc
...
...
@@ -7,7 +7,7 @@
#define NODE_VERSION_INTERNAL 0U
#define NODE_VERSION "NodeMcu 0.9.5"
#define BUILD_DATE "build 2015010
6
"
#define BUILD_DATE "build 2015010
7
"
// #define FLASH_512K
// #define FLASH_1M
...
...
app/lua/lobject.c
View file @
acd9d0dc
...
...
@@ -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
);
}
...
...
app/platform/flash_api.c
View file @
acd9d0dc
...
...
@@ -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
)
];
}
app/platform/flash_api.h
View file @
acd9d0dc
...
...
@@ -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__
app/ssl/crypto/ssl_aes.c
View file @
acd9d0dc
...
...
@@ -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
))
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment