Add headers for discovered rom functions

This commit is contained in:
= 2015-05-28 15:10:12 -05:00
parent 59df376a3a
commit 2128c42f02
2 changed files with 32 additions and 8 deletions

25
app/include/rom.h Normal file
View File

@ -0,0 +1,25 @@
// Headers to the various functions in the rom (as we discover them)
// SHA1 is assumed to match the netbsd sha1.h headers
#define SHA1_DIGEST_LENGTH 20
#define SHA1_DIGEST_STRING_LENGTH 41
typedef struct {
uint32_t state[5];
uint32_t count[2];
uint8_t buffer[64];
} SHA1_CTX;
extern void SHA1Transform(uint32_t[5], const uint8_t[64]);
extern void SHA1Init(SHA1_CTX *);
extern void SHA1Final(uint8_t[SHA1_DIGEST_LENGTH], SHA1_CTX *);
extern void SHA1Update(SHA1_CTX *, const uint8_t *, unsigned int);
// base64_encode/decode derived by Cal
// Appears to match base64.h from netbsd wpa utils.
extern unsigned char * base64_encode(const unsigned char *src, size_t len, size_t *out_len);
extern unsigned char * base64_decode(const unsigned char *src, size_t len, size_t *out_len);
// Unfortunately it that seems to require the ROM memory management to be
// initialized because it uses mem_malloc
extern void mem_init(void * start_addr);

View File

@ -6,12 +6,13 @@
#include "platform.h"
#include "auxmods.h"
#include "lrotable.h"
#include "c_types.h"
#include "c_stdlib.h"
#include "user_interface.h"
#include "rom.h"
/**
* hash = crypto.sha1(input)
*
@ -20,23 +21,22 @@
*/
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];
SHA1_CTX ctx;
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);
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.base64Encode(raw)
@ -45,7 +45,6 @@ static const char* bytes64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx
*/
static int crypto_base64_encode( lua_State* L )
{
// TODO: figure out signature of base64_encode in rom and use that instead.
int len;
const char* msg = luaL_checklstring(L, 1, &len);
int blen = (len + 2) / 3 * 4;