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
ca78b9ea
Commit
ca78b9ea
authored
May 25, 2015
by
=
Browse files
Add crypto module initially containing sha1 and base64_encode.
parent
4736f10d
Changes
3
Hide whitespace changes
Inline
Side-by-side
app/include/user_modules.h
View file @
ca78b9ea
...
@@ -31,6 +31,7 @@
...
@@ -31,6 +31,7 @@
#define LUA_USE_MODULES_U8G
#define LUA_USE_MODULES_U8G
#define LUA_USE_MODULES_WS2812
#define LUA_USE_MODULES_WS2812
#define LUA_USE_MODULES_CJSON
#define LUA_USE_MODULES_CJSON
#define LUA_USE_MODULES_CRYPTO
#endif
/* LUA_USE_MODULES */
#endif
/* LUA_USE_MODULES */
#endif
/* __USER_MODULES_H__ */
#endif
/* __USER_MODULES_H__ */
app/modules/crypto.c
0 → 100644
View file @
ca78b9ea
// Module for cryptography
//#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_types.h"
#include "c_stdlib.h"
#include "user_interface.h"
/**
* hash = crypto.sha1(input)
*
* Calculates raw SHA1 hash of input string.
* Input is arbitrary string, output is raw 20-byte hash as string.
*/
static
int
crypto_sha1
(
lua_State
*
L
)
{
// We only need a data buffer large enough to match SHA1_CTX in the rom.
// I *think* this is a 92-byte netbsd struct.
uint8_t
ctx
[
100
];
uint8_t
digest
[
20
];
// Read the string from lua (with length)
int
len
;
const
char
*
msg
=
luaL_checklstring
(
L
,
1
,
&
len
);
// Use the SHA* functions in the rom
SHA1Init
(
ctx
);
SHA1Update
(
ctx
,
msg
,
len
);
SHA1Final
(
digest
,
ctx
);
// Push the result as a lua string
lua_pushlstring
(
L
,
digest
,
20
);
return
1
;
}
static
const
char
*
bytes64
=
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
;
/**
* encoded = crypto.base64_encode(raw)
*
* Encodes raw binary string as base64 string.
*/
static
int
crypto_base64_encode
(
lua_State
*
L
)
{
int
len
;
const
char
*
msg
=
luaL_checklstring
(
L
,
1
,
&
len
);
int
blen
=
(
len
+
2
)
/
3
*
4
;
char
*
out
=
(
char
*
)
c_malloc
(
blen
);
int
j
=
0
,
i
;
for
(
i
=
0
;
i
<
len
;
i
+=
3
)
{
int
a
=
msg
[
i
];
int
b
=
(
i
+
1
<
len
)
?
msg
[
i
+
1
]
:
0
;
int
c
=
(
i
+
2
<
len
)
?
msg
[
i
+
2
]
:
0
;
out
[
j
++
]
=
bytes64
[
a
>>
2
];
out
[
j
++
]
=
bytes64
[((
a
&
3
)
<<
4
)
|
(
b
>>
4
)];
out
[
j
++
]
=
(
i
+
1
<
len
)
?
bytes64
[((
b
&
15
)
<<
2
)
|
(
c
>>
6
)]
:
61
;
out
[
j
++
]
=
(
i
+
2
<
len
)
?
bytes64
[(
c
&
63
)]
:
61
;
}
lua_pushlstring
(
L
,
out
,
j
);
c_free
(
out
);
return
1
;
}
// Module function map
#define MIN_OPT_LEVEL 2
#include "lrodefs.h"
const
LUA_REG_TYPE
crypto_map
[]
=
{
{
LSTRKEY
(
"sha1"
),
LFUNCVAL
(
crypto_sha1
)
},
{
LSTRKEY
(
"base64Encode"
),
LFUNCVAL
(
crypto_base64_encode
)
},
#if LUA_OPTIMIZE_MEMORY > 0
#endif
{
LNILKEY
,
LNILVAL
}
};
LUALIB_API
int
luaopen_crypto
(
lua_State
*
L
)
{
#if LUA_OPTIMIZE_MEMORY > 0
return
0
;
#else // #if LUA_OPTIMIZE_MEMORY > 0
luaL_register
(
L
,
AUXLIB_CRYPTO
,
crypto_map
);
// Add constants
return
1
;
#endif // #if LUA_OPTIMIZE_MEMORY > 0
}
app/modules/modules.h
View file @
ca78b9ea
...
@@ -149,6 +149,14 @@
...
@@ -149,6 +149,14 @@
#define ROM_MODULES_CJSON
#define ROM_MODULES_CJSON
#endif
#endif
#if defined(LUA_USE_MODULES_CRYPTO)
#define MODULES_CRYPTO "crypto"
#define ROM_MODULES_CRYPTO \
_ROM(MODULES_CRYPTO, luaopen_crypto, crypto_map)
#else
#define ROM_MODULES_CRYPTO
#endif
#define LUA_MODULES_ROM \
#define LUA_MODULES_ROM \
ROM_MODULES_GPIO \
ROM_MODULES_GPIO \
ROM_MODULES_PWM \
ROM_MODULES_PWM \
...
@@ -167,7 +175,8 @@
...
@@ -167,7 +175,8 @@
ROM_MODULES_OW \
ROM_MODULES_OW \
ROM_MODULES_BIT \
ROM_MODULES_BIT \
ROM_MODULES_WS2812 \
ROM_MODULES_WS2812 \
ROM_MODULES_CJSON
ROM_MODULES_CJSON \
ROM_MODULES_CRYPTO
#endif
#endif
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