Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
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