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
38efa482
Commit
38efa482
authored
Nov 11, 2015
by
Robert Foss
Browse files
Merge remote-tracking branch 'upstream/dev' into dev
parents
d2fc8782
340edbbe
Changes
408
Expand all
Show whitespace changes
Inline
Side-by-side
app/include/ssl/ssl_crypto.h
deleted
100644 → 0
View file @
d2fc8782
/*
* Copyright (c) 2007, Cameron Rich
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the axTLS project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file crypto.h
*/
#ifndef HEADER_CRYPTO_H
#define HEADER_CRYPTO_H
#ifdef __cplusplus
extern
"C"
{
#endif
#include "ssl/ssl_config.h"
#include "ssl/ssl_bigint_impl.h"
#include "ssl/ssl_bigint.h"
#ifndef STDCALL
#define STDCALL
#endif
#ifndef EXP_FUNC
#define EXP_FUNC
#endif
/* enable features based on a 'super-set' capbaility. */
#if defined(CONFIG_SSL_FULL_MODE)
#define CONFIG_SSL_ENABLE_CLIENT
#define CONFIG_SSL_CERT_VERIFICATION
#elif defined(CONFIG_SSL_ENABLE_CLIENT)
#define CONFIG_SSL_CERT_VERIFICATION
#endif
/**************************************************************************
* AES declarations
**************************************************************************/
#define AES_MAXROUNDS 14
#define AES_BLOCKSIZE 16
#define AES_IV_SIZE 16
typedef
struct
aes_key_st
{
uint16_t
rounds
;
uint16_t
key_size
;
uint32_t
ks
[(
AES_MAXROUNDS
+
1
)
*
8
];
uint8_t
iv
[
AES_IV_SIZE
];
}
AES_CTX
;
typedef
enum
{
AES_MODE_128
,
AES_MODE_256
}
AES_MODE
;
void
AES_set_key
(
AES_CTX
*
ctx
,
const
uint8_t
*
key
,
const
uint8_t
*
iv
,
AES_MODE
mode
);
void
AES_cbc_encrypt
(
AES_CTX
*
ctx
,
const
uint8_t
*
msg
,
uint8_t
*
out
,
int
length
);
void
AES_cbc_decrypt
(
AES_CTX
*
ks
,
const
uint8_t
*
in
,
uint8_t
*
out
,
int
length
);
void
AES_convert_key
(
AES_CTX
*
ctx
);
/**************************************************************************
* RC4 declarations
**************************************************************************/
typedef
struct
{
uint8_t
x
,
y
,
m
[
256
];
}
RC4_CTX
;
void
RC4_setup
(
RC4_CTX
*
s
,
const
uint8_t
*
key
,
int
length
);
void
RC4_crypt
(
RC4_CTX
*
s
,
const
uint8_t
*
msg
,
uint8_t
*
data
,
int
length
);
/**************************************************************************
* SHA1 declarations
**************************************************************************/
#define SHA1_SIZE 20
/*
* This structure will hold context information for the SHA-1
* hashing operation
*/
typedef
struct
{
uint32_t
Intermediate_Hash
[
SHA1_SIZE
/
4
];
/* Message Digest */
uint32_t
Length_Low
;
/* Message length in bits */
uint32_t
Length_High
;
/* Message length in bits */
uint16_t
Message_Block_Index
;
/* Index into message block array */
uint8_t
Message_Block
[
64
];
/* 512-bit message blocks */
}
SHA1_CTX
;
void
SHA1_Init
(
SHA1_CTX
*
);
void
SHA1_Update
(
SHA1_CTX
*
,
const
uint8_t
*
msg
,
int
len
);
void
SHA1_Final
(
uint8_t
*
digest
,
SHA1_CTX
*
);
/**************************************************************************
* MD2 declarations
**************************************************************************/
#define MD2_SIZE 16
typedef
struct
{
unsigned
char
cksum
[
16
];
/* checksum of the data block */
unsigned
char
state
[
48
];
/* intermediate digest state */
unsigned
char
buffer
[
16
];
/* data block being processed */
int
left
;
/* amount of data in buffer */
}
MD2_CTX
;
EXP_FUNC
void
STDCALL
MD2_Init
(
MD2_CTX
*
ctx
);
EXP_FUNC
void
STDCALL
MD2_Update
(
MD2_CTX
*
ctx
,
const
uint8_t
*
input
,
int
ilen
);
EXP_FUNC
void
STDCALL
MD2_Final
(
uint8_t
*
digest
,
MD2_CTX
*
ctx
);
/**************************************************************************
* MD5 declarations
**************************************************************************/
#define MD5_SIZE 16
typedef
struct
{
uint32_t
state
[
4
];
/* state (ABCD) */
uint32_t
count
[
2
];
/* number of bits, modulo 2^64 (lsb first) */
uint8_t
buffer
[
64
];
/* input buffer */
}
MD5_CTX
;
EXP_FUNC
void
STDCALL
MD5_Init
(
MD5_CTX
*
);
EXP_FUNC
void
STDCALL
MD5_Update
(
MD5_CTX
*
,
const
uint8_t
*
msg
,
int
len
);
EXP_FUNC
void
STDCALL
MD5_Final
(
uint8_t
*
digest
,
MD5_CTX
*
);
/**************************************************************************
* HMAC declarations
**************************************************************************/
void
ssl_hmac_md5
(
const
uint8_t
*
msg
,
int
length
,
const
uint8_t
*
key
,
int
key_len
,
uint8_t
*
digest
);
// fix hmac_md5 to ssl_hmac_md5, discriminate ieee80211
void
ssl_hmac_sha1
(
const
uint8_t
*
msg
,
int
length
,
const
uint8_t
*
key
,
int
key_len
,
uint8_t
*
digest
);
// fix hmac_md5 to ssl_hmac_sha1, discriminate ieee80211
/**************************************************************************
* RSA declarations
**************************************************************************/
typedef
struct
{
bigint
*
m
;
/* modulus */
bigint
*
e
;
/* public exponent */
bigint
*
d
;
/* private exponent */
#ifdef CONFIG_BIGINT_CRT
bigint
*
p
;
/* p as in m = pq */
bigint
*
q
;
/* q as in m = pq */
bigint
*
dP
;
/* d mod (p-1) */
bigint
*
dQ
;
/* d mod (q-1) */
bigint
*
qInv
;
/* q^-1 mod p */
#endif
int
num_octets
;
BI_CTX
*
bi_ctx
;
}
RSA_CTX
;
void
RSA_priv_key_new
(
RSA_CTX
**
rsa_ctx
,
const
uint8_t
*
modulus
,
int
mod_len
,
const
uint8_t
*
pub_exp
,
int
pub_len
,
const
uint8_t
*
priv_exp
,
int
priv_len
#ifdef CONFIG_BIGINT_CRT
,
const
uint8_t
*
p
,
int
p_len
,
const
uint8_t
*
q
,
int
q_len
,
const
uint8_t
*
dP
,
int
dP_len
,
const
uint8_t
*
dQ
,
int
dQ_len
,
const
uint8_t
*
qInv
,
int
qInv_len
#endif
);
void
RSA_pub_key_new
(
RSA_CTX
**
rsa_ctx
,
const
uint8_t
*
modulus
,
int
mod_len
,
const
uint8_t
*
pub_exp
,
int
pub_len
);
void
RSA_free
(
RSA_CTX
*
ctx
);
int
RSA_decrypt
(
const
RSA_CTX
*
ctx
,
const
uint8_t
*
in_data
,
uint8_t
*
out_data
,
int
is_decryption
);
bigint
*
RSA_private
(
const
RSA_CTX
*
c
,
bigint
*
bi_msg
);
#if defined(CONFIG_SSL_CERT_VERIFICATION) || defined(CONFIG_SSL_GENERATE_X509_CERT)
bigint
*
RSA_sign_verify
(
BI_CTX
*
ctx
,
const
uint8_t
*
sig
,
int
sig_len
,
bigint
*
modulus
,
bigint
*
pub_exp
);
bigint
*
RSA_public
(
const
RSA_CTX
*
c
,
bigint
*
bi_msg
);
int
RSA_encrypt
(
const
RSA_CTX
*
ctx
,
const
uint8_t
*
in_data
,
uint16_t
in_len
,
uint8_t
*
out_data
,
int
is_signing
);
void
RSA_print
(
const
RSA_CTX
*
ctx
);
#endif
/**************************************************************************
* RNG declarations
**************************************************************************/
EXP_FUNC
void
STDCALL
RNG_initialize
(
void
);
EXP_FUNC
void
STDCALL
RNG_custom_init
(
const
uint8_t
*
seed_buf
,
int
size
);
EXP_FUNC
void
STDCALL
RNG_terminate
(
void
);
EXP_FUNC
void
STDCALL
get_random
(
int
num_rand_bytes
,
uint8_t
*
rand_data
);
void
get_random_NZ
(
int
num_rand_bytes
,
uint8_t
*
rand_data
);
#ifdef __cplusplus
}
#endif
#endif
app/include/ssl/ssl_crypto_misc.h
deleted
100644 → 0
View file @
d2fc8782
/*
* Copyright (c) 2007, Cameron Rich
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the axTLS project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file crypto_misc.h
*/
#ifndef HEADER_CRYPTO_MISC_H
#define HEADER_CRYPTO_MISC_H
#ifdef __cplusplus
extern
"C"
{
#endif
#include "ssl/ssl_crypto.h"
#include "ssl/ssl_bigint.h"
/**************************************************************************
* X509 declarations
**************************************************************************/
#define X509_OK 0
#define X509_NOT_OK -1
#define X509_VFY_ERROR_NO_TRUSTED_CERT -2
#define X509_VFY_ERROR_BAD_SIGNATURE -3
#define X509_VFY_ERROR_NOT_YET_VALID -4
#define X509_VFY_ERROR_EXPIRED -5
#define X509_VFY_ERROR_SELF_SIGNED -6
#define X509_VFY_ERROR_INVALID_CHAIN -7
#define X509_VFY_ERROR_UNSUPPORTED_DIGEST -8
#define X509_INVALID_PRIV_KEY -9
/*
* The Distinguished Name
*/
#define X509_NUM_DN_TYPES 3
#define X509_COMMON_NAME 0
#define X509_ORGANIZATION 1
#define X509_ORGANIZATIONAL_UNIT 2
struct
_x509_ctx
{
char
*
ca_cert_dn
[
X509_NUM_DN_TYPES
];
char
*
cert_dn
[
X509_NUM_DN_TYPES
];
char
**
subject_alt_dnsnames
;
time_t
not_before
;
time_t
not_after
;
uint8_t
*
signature
;
uint16_t
sig_len
;
uint8_t
sig_type
;
RSA_CTX
*
rsa_ctx
;
bigint
*
digest
;
struct
_x509_ctx
*
next
;
};
typedef
struct
_x509_ctx
X509_CTX
;
#ifdef CONFIG_SSL_CERT_VERIFICATION
typedef
struct
{
X509_CTX
*
cert
[
CONFIG_X509_MAX_CA_CERTS
];
}
CA_CERT_CTX
;
#endif
int
x509_new
(
const
uint8_t
*
cert
,
int
*
len
,
X509_CTX
**
ctx
);
void
x509_free
(
X509_CTX
*
x509_ctx
);
#ifdef CONFIG_SSL_CERT_VERIFICATION
int
x509_verify
(
const
CA_CERT_CTX
*
ca_cert_ctx
,
const
X509_CTX
*
cert
);
#endif
#ifdef CONFIG_SSL_FULL_MODE
void
x509_print
(
const
X509_CTX
*
cert
,
CA_CERT_CTX
*
ca_cert_ctx
);
const
char
*
x509_display_error
(
int
error
);
#endif
/**************************************************************************
* ASN1 declarations
**************************************************************************/
#define ASN1_INTEGER 0x02
#define ASN1_BIT_STRING 0x03
#define ASN1_OCTET_STRING 0x04
#define ASN1_NULL 0x05
#define ASN1_PRINTABLE_STR2 0x0C
#define ASN1_OID 0x06
#define ASN1_PRINTABLE_STR2 0x0C
#define ASN1_PRINTABLE_STR 0x13
#define ASN1_TELETEX_STR 0x14
#define ASN1_IA5_STR 0x16
#define ASN1_UTC_TIME 0x17
#define ASN1_UNICODE_STR 0x1e
#define ASN1_SEQUENCE 0x30
#define ASN1_CONTEXT_DNSNAME 0x82
#define ASN1_SET 0x31
#define ASN1_V3_DATA 0xa3
#define ASN1_IMPLICIT_TAG 0x80
#define ASN1_CONTEXT_DNSNAME 0x82
#define ASN1_EXPLICIT_TAG 0xa0
#define ASN1_V3_DATA 0xa3
#define SIG_TYPE_MD2 0x02
#define SIG_TYPE_MD5 0x04
#define SIG_TYPE_SHA1 0x05
int
get_asn1_length
(
const
uint8_t
*
buf
,
int
*
offset
);
int
asn1_get_private_key
(
const
uint8_t
*
buf
,
int
len
,
RSA_CTX
**
rsa_ctx
);
int
asn1_next_obj
(
const
uint8_t
*
buf
,
int
*
offset
,
int
obj_type
);
int
asn1_skip_obj
(
const
uint8_t
*
buf
,
int
*
offset
,
int
obj_type
);
int
asn1_get_int
(
const
uint8_t
*
buf
,
int
*
offset
,
uint8_t
**
object
);
int
asn1_version
(
const
uint8_t
*
cert
,
int
*
offset
,
X509_CTX
*
x509_ctx
);
int
asn1_validity
(
const
uint8_t
*
cert
,
int
*
offset
,
X509_CTX
*
x509_ctx
);
int
asn1_name
(
const
uint8_t
*
cert
,
int
*
offset
,
char
*
dn
[]);
int
asn1_public_key
(
const
uint8_t
*
cert
,
int
*
offset
,
X509_CTX
*
x509_ctx
);
#ifdef CONFIG_SSL_CERT_VERIFICATION
int
asn1_signature
(
const
uint8_t
*
cert
,
int
*
offset
,
X509_CTX
*
x509_ctx
);
int
asn1_find_subjectaltname
(
const
uint8_t
*
cert
,
int
offset
);
int
asn1_compare_dn
(
char
*
const
dn1
[],
char
*
const
dn2
[]);
#endif
/* CONFIG_SSL_CERT_VERIFICATION */
int
asn1_signature_type
(
const
uint8_t
*
cert
,
int
*
offset
,
X509_CTX
*
x509_ctx
);
/**************************************************************************
* MISC declarations
**************************************************************************/
#define SALT_SIZE 8
extern
const
char
*
const
unsupported_str
;
typedef
void
(
*
crypt_func
)(
void
*
,
const
uint8_t
*
,
uint8_t
*
,
int
);
typedef
void
(
*
hmac_func
)(
const
uint8_t
*
msg
,
int
length
,
const
uint8_t
*
key
,
int
key_len
,
uint8_t
*
digest
);
int
get_file
(
const
char
*
filename
,
uint8_t
**
buf
);
#if defined(CONFIG_SSL_FULL_MODE) || defined(WIN32) || defined(CONFIG_DEBUG)
EXP_FUNC
void
STDCALL
print_blob
(
const
char
*
format
,
const
uint8_t
*
data
,
int
size
,
...);
#else
#define print_blob(...)
#endif
EXP_FUNC
int
STDCALL
base64_decode
(
const
char
*
in
,
int
len
,
uint8_t
*
out
,
int
*
outlen
);
#ifdef __cplusplus
}
#endif
#endif
app/include/ssl/ssl_os_int.h
deleted
100644 → 0
View file @
d2fc8782
/*
* Copyright (c) 2012, Cameron Rich
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the axTLS project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file os_int.h
*
* Ensure a consistent bit size
*/
#ifndef HEADER_OS_INT_H
#define HEADER_OS_INT_H
#ifdef __cplusplus
extern
"C"
{
#endif
#if defined(WIN32)
typedef
UINT8
uint8_t
;
typedef
INT8
int8_t
;
typedef
UINT16
uint16_t
;
typedef
INT16
int16_t
;
typedef
UINT32
uint32_t
;
typedef
INT32
int32_t
;
typedef
UINT64
uint64_t
;
typedef
INT64
int64_t
;
#else
/* Not Win32 */
#ifdef CONFIG_PLATFORM_SOLARIS
#include <inttypes.h>
#else
//#include <stdint.h>
#endif
/* Not Solaris */
#endif
/* Not Win32 */
#ifdef __cplusplus
}
#endif
#endif
app/include/ssl/ssl_os_port.h
deleted
100644 → 0
View file @
d2fc8782
/*
* Copyright (c) 2007, Cameron Rich
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the axTLS project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file os_port.h
*
* Some stuff to minimise the differences between windows and linux/unix
*/
#ifndef HEADER_OS_PORT_H
#define HEADER_OS_PORT_H
#ifdef __cplusplus
extern
"C"
{
#endif
//#include "../crypto/os_int.h"
#include "c_types.h"
#include "osapi.h"
#include <stdio.h>
#if 0
#define ssl_printf(fmt, args...) os_printf(fmt,## args)
#else
#define ssl_printf(fmt, args...)
#endif
#define STDCALL
#define EXP_FUNC
struct
timeval
{
long
tv_sec
;
/* seconds */
long
tv_usec
;
/* and microseconds */
};
/* Mutexing definitions */
#define SSL_CTX_MUTEX_INIT(A)
#define SSL_CTX_MUTEX_DESTROY(A)
#define SSL_CTX_LOCK(A)
#define SSL_CTX_UNLOCK(A)
#ifdef __cplusplus
}
#endif
#endif
app/include/ssl/ssl_private_key.h
deleted
100644 → 0
View file @
d2fc8782
unsigned
char
default_private_key
[]
=
{
0x30
,
0x82
,
0x02
,
0x5d
,
0x02
,
0x01
,
0x00
,
0x02
,
0x81
,
0x81
,
0x00
,
0xcd
,
0xfd
,
0x89
,
0x48
,
0xbe
,
0x36
,
0xb9
,
0x95
,
0x76
,
0xd4
,
0x13
,
0x30
,
0x0e
,
0xbf
,
0xb2
,
0xed
,
0x67
,
0x0a
,
0xc0
,
0x16
,
0x3f
,
0x51
,
0x09
,
0x9d
,
0x29
,
0x2f
,
0xb2
,
0x6d
,
0x3f
,
0x3e
,
0x6c
,
0x2f
,
0x90
,
0x80
,
0xa1
,
0x71
,
0xdf
,
0xbe
,
0x38
,
0xc5
,
0xcb
,
0xa9
,
0x9a
,
0x40
,
0x14
,
0x90
,
0x0a
,
0xf9
,
0xb7
,
0x07
,
0x0b
,
0xe1
,
0xda
,
0xe7
,
0x09
,
0xbf
,
0x0d
,
0x57
,
0x41
,
0x86
,
0x60
,
0xa1
,
0xc1
,
0x27
,
0x91
,
0x5b
,
0x0a
,
0x98
,
0x46
,
0x1b
,
0xf6
,
0xa2
,
0x84
,
0xf8
,
0x65
,
0xc7
,
0xce
,
0x2d
,
0x96
,
0x17
,
0xaa
,
0x91
,
0xf8
,
0x61
,
0x04
,
0x50
,
0x70
,
0xeb
,
0xb4
,
0x43
,
0xb7
,
0xdc
,
0x9a
,
0xcc
,
0x31
,
0x01
,
0x14
,
0xd4
,
0xcd
,
0xcc
,
0xc2
,
0x37
,
0x6d
,
0x69
,
0x82
,
0xd6
,
0xc6
,
0xc4
,
0xbe
,
0xf2
,
0x34
,
0xa5
,
0xc9
,
0xa6
,
0x19
,
0x53
,
0x32
,
0x7a
,
0x86
,
0x0e
,
0x91
,
0x82
,
0x0f
,
0xa1
,
0x42
,
0x54
,
0xaa
,
0x01
,
0x02
,
0x03
,
0x01
,
0x00
,
0x01
,
0x02
,
0x81
,
0x81
,
0x00
,
0x95
,
0xaa
,
0x6e
,
0x11
,
0xf5
,
0x6a
,
0x8b
,
0xa2
,
0xc6
,
0x48
,
0xc6
,
0x7c
,
0x37
,
0x6b
,
0x1f
,
0x55
,
0x10
,
0x76
,
0x26
,
0x24
,
0xc3
,
0xf2
,
0x5c
,
0x5a
,
0xdd
,
0x2e
,
0xf3
,
0xa4
,
0x1e
,
0xbc
,
0x7b
,
0x1c
,
0x80
,
0x10
,
0x85
,
0xbc
,
0xd8
,
0x45
,
0x3c
,
0xb8
,
0xb2
,
0x06
,
0x53
,
0xb5
,
0xd5
,
0x7a
,
0xe7
,
0x0e
,
0x92
,
0xe6
,
0x42
,
0xc2
,
0xe2
,
0x2a
,
0xd5
,
0xd1
,
0x03
,
0x9f
,
0x6f
,
0x53
,
0x74
,
0x68
,
0x72
,
0x8e
,
0xbf
,
0x03
,
0xbb
,
0xab
,
0xbd
,
0xa1
,
0xf9
,
0x81
,
0x7d
,
0x12
,
0xd4
,
0x9d
,
0xb6
,
0xae
,
0x4c
,
0xad
,
0xca
,
0xa8
,
0xc9
,
0x80
,
0x8d
,
0x0d
,
0xd5
,
0xd0
,
0xa1
,
0xbf
,
0xec
,
0x60
,
0x48
,
0x49
,
0xed
,
0x97
,
0x0f
,
0x5e
,
0xed
,
0xfc
,
0x39
,
0x15
,
0x96
,
0x9e
,
0x5d
,
0xe2
,
0xb4
,
0x5d
,
0x2e
,
0x04
,
0xdc
,
0x08
,
0xa2
,
0x65
,
0x29
,
0x2d
,
0x37
,
0xfb
,
0x62
,
0x90
,
0x1b
,
0x7b
,
0xe5
,
0x3a
,
0x58
,
0x05
,
0x55
,
0xc1
,
0x02
,
0x41
,
0x00
,
0xfc
,
0x69
,
0x28
,
0xc9
,
0xa8
,
0xc4
,
0x5c
,
0xe3
,
0xd0
,
0x5e
,
0xaa
,
0xda
,
0xde
,
0x87
,
0x74
,
0xdb
,
0xcb
,
0x40
,
0x78
,
0x8e
,
0x1d
,
0x12
,
0x96
,
0x16
,
0x61
,
0x3f
,
0xb3
,
0x3e
,
0xa3
,
0x0d
,
0xdc
,
0x49
,
0xa5
,
0x25
,
0x87
,
0xc5
,
0x97
,
0x85
,
0x9d
,
0xbb
,
0xb4
,
0xf0
,
0x44
,
0xfd
,
0x6c
,
0xe8
,
0xd2
,
0x8c
,
0xec
,
0x33
,
0x81
,
0x46
,
0x1e
,
0x10
,
0x12
,
0x33
,
0x16
,
0x95
,
0x00
,
0x4f
,
0x75
,
0xb4
,
0xe5
,
0x79
,
0x02
,
0x41
,
0x00
,
0xd0
,
0xeb
,
0x65
,
0x07
,
0x10
,
0x3b
,
0xd9
,
0x03
,
0xeb
,
0xdc
,
0x6f
,
0x4b
,
0x8f
,
0xc3
,
0x87
,
0xce
,
0x76
,
0xd6
,
0xc5
,
0x14
,
0x21
,
0x4e
,
0xe7
,
0x4f
,
0x1b
,
0xe8
,
0x05
,
0xf8
,
0x84
,
0x1a
,
0xe0
,
0xc5
,
0xd6
,
0xe3
,
0x08
,
0xb3
,
0x54
,
0x57
,
0x02
,
0x1f
,
0xd4
,
0xd9
,
0xfb
,
0xff
,
0x40
,
0xb1
,
0x56
,
0x1c
,
0x60
,
0xf7
,
0xac
,
0x91
,
0xf3
,
0xd3
,
0xc6
,
0x7f
,
0x84
,
0xfd
,
0x84
,
0x9d
,
0xea
,
0x26
,
0xee
,
0xc9
,
0x02
,
0x41
,
0x00
,
0xa6
,
0xcf
,
0x1c
,
0x6c
,
0x81
,
0x03
,
0x1c
,
0x5c
,
0x56
,
0x05
,
0x6a
,
0x26
,
0x70
,
0xef
,
0xd6
,
0x13
,
0xb7
,
0x74
,
0x28
,
0xf7
,
0xca
,
0x50
,
0xd1
,
0x2d
,
0x83
,
0x21
,
0x64
,
0xe4
,
0xdd
,
0x3f
,
0x38
,
0xb8
,
0xd6
,
0xd2
,
0x41
,
0xb3
,
0x1c
,
0x9a
,
0xea
,
0x0d
,
0xf5
,
0xda
,
0xdf
,
0xcd
,
0x17
,
0x9f
,
0x9a
,
0x1e
,
0x15
,
0xaf
,
0x48
,
0x1c
,
0xbd
,
0x9b
,
0x63
,
0x5b
,
0xad
,
0xed
,
0xd4
,
0xa1
,
0xae
,
0xa9
,
0x59
,
0x09
,
0x02
,
0x40
,
0x4e
,
0x08
,
0xce
,
0xa8
,
0x8f
,
0xc0
,
0xba
,
0xf3
,
0x83
,
0x02
,
0xc8
,
0x33
,
0x62
,
0x14
,
0x77
,
0xc2
,
0x7f
,
0x93
,
0x02
,
0xf3
,
0xdc
,
0xe9
,
0x1a
,
0xee
,
0xea
,
0x8e
,
0x84
,
0xc4
,
0x69
,
0x9b
,
0x9c
,
0x7f
,
0x69
,
0x1f
,
0x4e
,
0x1d
,
0xa5
,
0x90
,
0x06
,
0x44
,
0x1b
,
0x7d
,
0xfc
,
0x69
,
0x40
,
0x21
,
0xbc
,
0xf7
,
0x46
,
0xa4
,
0xdc
,
0x39
,
0x7b
,
0xe8
,
0x8b
,
0x49
,
0x10
,
0x44
,
0x9d
,
0x67
,
0x5a
,
0x91
,
0x86
,
0x39
,
0x02
,
0x40
,
0x41
,
0x2c
,
0x4e
,
0xfe
,
0xd9
,
0x90
,
0x89
,
0x00
,
0x5c
,
0x94
,
0x0a
,
0x4a
,
0x7e
,
0x1b
,
0x1a
,
0x80
,
0x06
,
0x01
,
0x37
,
0xda
,
0x50
,
0x61
,
0x9d
,
0x9c
,
0xfe
,
0x25
,
0x7f
,
0xd8
,
0xd4
,
0xc4
,
0x9e
,
0x81
,
0xf2
,
0x0c
,
0x1e
,
0x38
,
0x21
,
0x1e
,
0x90
,
0x3f
,
0xd4
,
0xba
,
0x6c
,
0x53
,
0xcb
,
0xf0
,
0x77
,
0x79
,
0x9b
,
0xf1
,
0xfa
,
0x3f
,
0x81
,
0xdc
,
0xf3
,
0x21
,
0x02
,
0x6d
,
0xb7
,
0x95
,
0xc3
,
0x2e
,
0xce
,
0xd5
};
unsigned
int
default_private_key_len
=
609
;
app/include/ssl/ssl_ssl.h
deleted
100644 → 0
View file @
d2fc8782
This diff is collapsed.
Click to expand it.
app/include/ssl/ssl_tls1.h
deleted
100644 → 0
View file @
d2fc8782
/*
* Copyright (c) 2007, Cameron Rich
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* * Neither the name of the axTLS project nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/**
* @file tls1.h
*
* @brief The definitions for the TLS library.
*/
#ifndef HEADER_SSL_LIB_H
#define HEADER_SSL_LIB_H
#ifdef __cplusplus
extern
"C"
{
#endif
#include "c_types.h"
#include "ssl/ssl_version.h"
#include "ssl/ssl_config.h"
//#include "../crypto/os_int.h"
#include "ssl/ssl_crypto.h"
#include "ssl/ssl_crypto_misc.h"
#include "lwip/tcp.h"
#define SSL_PROTOCOL_MIN_VERSION 0x31
/* TLS v1.0 */
#define SSL_PROTOCOL_MINOR_VERSION 0x02
/* TLS v1.1 */
#define SSL_PROTOCOL_VERSION_MAX 0x32
/* TLS v1.1 */
#define SSL_PROTOCOL_VERSION1_1 0x32
/* TLS v1.1 */
#define SSL_RANDOM_SIZE 32
#define SSL_SECRET_SIZE 48
#define SSL_FINISHED_HASH_SIZE 12
#define SSL_RECORD_SIZE 5
#define SSL_SERVER_READ 0
#define SSL_SERVER_WRITE 1
#define SSL_CLIENT_READ 2
#define SSL_CLIENT_WRITE 3
#define SSL_HS_HDR_SIZE 4
/* the flags we use while establishing a connection */
#define SSL_NEED_RECORD 0x0001
#define SSL_TX_ENCRYPTED 0x0002
#define SSL_RX_ENCRYPTED 0x0004
#define SSL_SESSION_RESUME 0x0008
#define SSL_IS_CLIENT 0x0010
#define SSL_HAS_CERT_REQ 0x0020
#define SSL_SENT_CLOSE_NOTIFY 0x0040
/* some macros to muck around with flag bits */
#define SET_SSL_FLAG(A) (ssl->flag |= A)
#define CLR_SSL_FLAG(A) (ssl->flag &= ~A)
#define IS_SET_SSL_FLAG(A) (ssl->flag & A)
#define MAX_KEY_BYTE_SIZE 512
/* for a 4096 bit key */
#define RT_MAX_PLAIN_LENGTH 4096
#define RT_EXTRA 1024
#define BM_RECORD_OFFSET 5
#ifdef CONFIG_SSL_SKELETON_MODE
#define NUM_PROTOCOLS 1
#else
#define NUM_PROTOCOLS 4
#endif
#define PARANOIA_CHECK(A, B) if (A < B) { \
ret = SSL_ERROR_INVALID_HANDSHAKE; goto error; }
/* protocol types */
enum
{
PT_CHANGE_CIPHER_SPEC
=
20
,
PT_ALERT_PROTOCOL
,
PT_HANDSHAKE_PROTOCOL
,
PT_APP_PROTOCOL_DATA
};
/* handshaking types */
enum
{
HS_HELLO_REQUEST
,
HS_CLIENT_HELLO
,
HS_SERVER_HELLO
,
HS_CERTIFICATE
=
11
,
HS_SERVER_KEY_XCHG
,
HS_CERT_REQ
,
HS_SERVER_HELLO_DONE
,
HS_CERT_VERIFY
,
HS_CLIENT_KEY_XCHG
,
HS_FINISHED
=
20
};
typedef
struct
{
uint8_t
cipher
;
uint8_t
key_size
;
uint8_t
iv_size
;
uint8_t
key_block_size
;
uint8_t
padding_size
;
uint8_t
digest_size
;
hmac_func
hmac
;
crypt_func
encrypt
;
crypt_func
decrypt
;
}
cipher_info_t
;
struct
_SSLObjLoader
{
uint8_t
*
buf
;
int
len
;
};
typedef
struct
_SSLObjLoader
SSLObjLoader
;
typedef
struct
{
time_t
conn_time
;
uint8_t
session_id
[
SSL_SESSION_ID_SIZE
];
uint8_t
master_secret
[
SSL_SECRET_SIZE
];
}
SSL_SESSION
;
typedef
struct
{
uint8_t
*
buf
;
int
size
;
}
SSL_CERT
;
typedef
struct
{
MD5_CTX
md5_ctx
;
SHA1_CTX
sha1_ctx
;
uint8_t
final_finish_mac
[
SSL_FINISHED_HASH_SIZE
];
uint8_t
*
key_block
;
uint8_t
master_secret
[
SSL_SECRET_SIZE
];
uint8_t
client_random
[
SSL_RANDOM_SIZE
];
/* client's random sequence */
uint8_t
server_random
[
SSL_RANDOM_SIZE
];
/* server's random sequence */
uint16_t
bm_proc_index
;
}
DISPOSABLE_CTX
;
struct
_SSL
{
uint32_t
flag
;
uint16_t
need_bytes
;
uint16_t
got_bytes
;
uint8_t
record_type
;
uint8_t
cipher
;
uint8_t
sess_id_size
;
uint8_t
version
;
uint8_t
client_version
;
sint16_t
next_state
;
sint16_t
hs_status
;
DISPOSABLE_CTX
*
dc
;
/* temporary data which we'll get rid of soon */
//int client_fd;
struct
tcp_pcb
*
SslClient_pcb
;
//add by ives 12.12.2013
struct
pbuf
*
ssl_pbuf
;
//add by ives 12.12.2013
const
cipher_info_t
*
cipher_info
;
void
*
encrypt_ctx
;
void
*
decrypt_ctx
;
uint8_t
bm_all_data
[
RT_MAX_PLAIN_LENGTH
+
RT_EXTRA
];
uint8_t
*
bm_data
;
uint16_t
bm_index
;
uint16_t
bm_read_index
;
struct
_SSL
*
next
;
/* doubly linked list */
struct
_SSL
*
prev
;
struct
_SSL_CTX
*
ssl_ctx
;
/* back reference to a clnt/svr ctx */
#ifndef CONFIG_SSL_SKELETON_MODE
uint16_t
session_index
;
SSL_SESSION
*
session
;
#endif
#ifdef CONFIG_SSL_CERT_VERIFICATION
X509_CTX
*
x509_ctx
;
#endif
uint8_t
session_id
[
SSL_SESSION_ID_SIZE
];
uint8_t
client_mac
[
SHA1_SIZE
];
/* for HMAC verification */
uint8_t
server_mac
[
SHA1_SIZE
];
/* for HMAC verification */
uint8_t
read_sequence
[
8
];
/* 64 bit sequence number */
uint8_t
write_sequence
[
8
];
/* 64 bit sequence number */
uint8_t
hmac_header
[
SSL_RECORD_SIZE
];
/* rx hmac */
};
typedef
struct
_SSL
SSL
;
struct
_SSL_CTX
{
uint32_t
options
;
uint8_t
chain_length
;
RSA_CTX
*
rsa_ctx
;
#ifdef CONFIG_SSL_CERT_VERIFICATION
CA_CERT_CTX
*
ca_cert_ctx
;
#endif
SSL
*
head
;
SSL
*
tail
;
SSL_CERT
certs
[
CONFIG_SSL_MAX_CERTS
];
#ifndef CONFIG_SSL_SKELETON_MODE
uint16_t
num_sessions
;
SSL_SESSION
**
ssl_sessions
;
#endif
#ifdef CONFIG_SSL_CTX_MUTEXING
SSL_CTX_MUTEX_TYPE
mutex
;
#endif
#ifdef CONFIG_OPENSSL_COMPATIBLE
void
*
bonus_attr
;
#endif
};
typedef
struct
_SSL_CTX
SSL_CTX
;
/* backwards compatibility */
typedef
struct
_SSL_CTX
SSLCTX
;
extern
const
uint8_t
ssl_prot_prefs
[
NUM_PROTOCOLS
];
SSL
*
ssl_new
(
SSL_CTX
*
ssl_ctx
,
int
client_fd
);
SSL
*
ssl_new_context
(
SSL_CTX
*
ssl_ctx
,
struct
tcp_pcb
*
SslClient_pcb
);
void
disposable_new
(
SSL
*
ssl
);
void
disposable_free
(
SSL
*
ssl
);
int
send_packet
(
SSL
*
ssl
,
uint8_t
protocol
,
const
uint8_t
*
in
,
int
length
);
int
do_svr_handshake
(
SSL
*
ssl
,
int
handshake_type
,
uint8_t
*
buf
,
int
hs_len
);
int
do_clnt_handshake
(
SSL
*
ssl
,
int
handshake_type
,
uint8_t
*
buf
,
int
hs_len
);
int
process_finished
(
SSL
*
ssl
,
uint8_t
*
buf
,
int
hs_len
);
int
process_sslv23_client_hello
(
SSL
*
ssl
);
int
send_alert
(
SSL
*
ssl
,
int
error_code
);
int
send_finished
(
SSL
*
ssl
);
int
send_certificate
(
SSL
*
ssl
);
int
basic_read
(
SSL
*
ssl
,
uint8_t
**
in_data
);
int
send_change_cipher_spec
(
SSL
*
ssl
);
void
finished_digest
(
SSL
*
ssl
,
const
char
*
label
,
uint8_t
*
digest
);
void
generate_master_secret
(
SSL
*
ssl
,
const
uint8_t
*
premaster_secret
);
void
add_packet
(
SSL
*
ssl
,
const
uint8_t
*
pkt
,
int
len
);
int
add_cert
(
SSL_CTX
*
ssl_ctx
,
const
uint8_t
*
buf
,
int
len
);
int
add_private_key
(
SSL_CTX
*
ssl_ctx
,
SSLObjLoader
*
ssl_obj
);
void
ssl_obj_free
(
SSLObjLoader
*
ssl_obj
);
int
pkcs8_decode
(
SSL_CTX
*
ssl_ctx
,
SSLObjLoader
*
ssl_obj
,
const
char
*
password
);
int
pkcs12_decode
(
SSL_CTX
*
ssl_ctx
,
SSLObjLoader
*
ssl_obj
,
const
char
*
password
);
int
load_key_certs
(
SSL_CTX
*
ssl_ctx
);
#ifdef CONFIG_SSL_CERT_VERIFICATION
int
add_cert_auth
(
SSL_CTX
*
ssl_ctx
,
const
uint8_t
*
buf
,
int
len
);
void
remove_ca_certs
(
CA_CERT_CTX
*
ca_cert_ctx
);
#endif
#ifdef CONFIG_SSL_ENABLE_CLIENT
int
do_client_connect
(
SSL
*
ssl
);
#endif
#ifdef CONFIG_SSL_FULL_MODE
//void DISPLAY_STATE(SSL *ssl, int is_send, uint8_t state, int not_ok);
//void DISPLAY_BYTES(SSL *ssl, const char *format,
// const uint8_t *data, int size, ...);
//void DISPLAY_CERT(SSL *ssl, const X509_CTX *x509_ctx);
//void DISPLAY_RSA(SSL *ssl, const RSA_CTX *rsa_ctx);
//void DISPLAY_ALERT(SSL *ssl, int alert);
#else
#define DISPLAY_STATE(A,B,C,D)
#define DISPLAY_CERT(A,B)
#define DISPLAY_RSA(A,B)
#define DISPLAY_ALERT(A, B)
#ifdef WIN32
void
DISPLAY_BYTES
(
SSL
*
ssl
,
const
char
*
format
,
/* win32 has no variadic macros */
const
uint8_t
*
data
,
int
size
,
...);
#else
#define DISPLAY_BYTES(A,B,C,D,...)
#endif
#endif
#ifdef CONFIG_SSL_CERT_VERIFICATION
int
process_certificate
(
SSL
*
ssl
,
X509_CTX
**
x509_ctx
);
#endif
SSL_SESSION
*
ssl_session_update
(
int
max_sessions
,
SSL_SESSION
*
ssl_sessions
[],
SSL
*
ssl
,
const
uint8_t
*
session_id
);
void
kill_ssl_session
(
SSL_SESSION
**
ssl_sessions
,
SSL
*
ssl
);
#ifdef __cplusplus
}
#endif
#endif
app/include/ssl/ssl_version.h
deleted
100644 → 0
View file @
d2fc8782
#define AXTLS_VERSION "1.4.9"
app/include/ucg_config.h
0 → 100644
View file @
38efa482
#ifndef __UCG_CONFIG_H__
#define __UCG_CONFIG_H__
// ***************************************************************************
// Configure Ucglib fonts
//
// Add a UCG_FONT_TABLE_ENTRY for each font you want to compile into the image
#define UCG_FONT_TABLE_ENTRY(font)
#define UCG_FONT_TABLE \
UCG_FONT_TABLE_ENTRY(font_7x13B_tr) \
UCG_FONT_TABLE_ENTRY(font_helvB08_hr) \
UCG_FONT_TABLE_ENTRY(font_helvB10_hr) \
UCG_FONT_TABLE_ENTRY(font_helvB12_hr) \
UCG_FONT_TABLE_ENTRY(font_helvB18_hr) \
UCG_FONT_TABLE_ENTRY(font_ncenB24_tr) \
UCG_FONT_TABLE_ENTRY(font_ncenR12_tr) \
UCG_FONT_TABLE_ENTRY(font_ncenR14_hr)
#undef UCG_FONT_TABLE_ENTRY
//
// ***************************************************************************
// ***************************************************************************
// Enable display drivers
//
// Uncomment the UCG_DISPLAY_TABLE_ENTRY for the device(s) you want to
// compile into the firmware.
//
// UCG_DISPLAY_TABLE_ENTRY(ili9163_18x128x128_hw_spi, ucg_dev_ili9163_18x128x128, ucg_ext_ili9163_18) \
// UCG_DISPLAY_TABLE_ENTRY(ili9341_18x240x320_hw_spi, ucg_dev_ili9341_18x240x320, ucg_ext_ili9341_18) \
// UCG_DISPLAY_TABLE_ENTRY(pcf8833_16x132x132_hw_spi, ucg_dev_pcf8833_16x132x132, ucg_ext_pcf8833_16) \
// UCG_DISPLAY_TABLE_ENTRY(seps225_16x128x128_univision_hw_spi, ucg_dev_seps225_16x128x128_univision, ucg_ext_seps225_16) \
// UCG_DISPLAY_TABLE_ENTRY(ssd1351_18x128x128_hw_spi, ucg_dev_ssd1351_18x128x128_ilsoft, ucg_ext_ssd1351_18) \
// UCG_DISPLAY_TABLE_ENTRY(ssd1351_18x128x128_ft_hw_spi, ucg_dev_ssd1351_18x128x128_ft, ucg_ext_ssd1351_18) \
// UCG_DISPLAY_TABLE_ENTRY(ssd1331_18x96x64_univision_hw_spi, ucg_dev_ssd1331_18x96x64_univision, ucg_ext_ssd1331_18) \
// UCG_DISPLAY_TABLE_ENTRY(st7735_18x128x160_hw_spi, ucg_dev_st7735_18x128x160, ucg_ext_st7735_18) \
#define UCG_DISPLAY_TABLE_ENTRY(binding, device, extension)
#define UCG_DISPLAY_TABLE \
UCG_DISPLAY_TABLE_ENTRY(ili9341_18x240x320_hw_spi, ucg_dev_ili9341_18x240x320, ucg_ext_ili9341_18) \
UCG_DISPLAY_TABLE_ENTRY(st7735_18x128x160_hw_spi, ucg_dev_st7735_18x128x160, ucg_ext_st7735_18) \
#undef UCG_DISPLAY_TABLE_ENTRY
//
// ***************************************************************************
#endif
/* __UCG_CONFIG_H__ */
app/include/user_config.h
View file @
38efa482
...
...
@@ -19,8 +19,12 @@
#ifdef DEVELOP_VERSION
#define NODE_DEBUG
#define COAP_DEBUG
#define BIT_RATE_DEFAULT BIT_RATE_74880
#else
#define BIT_RATE_DEFAULT BIT_RATE_9600
#endif
/* DEVELOP_VERSION */
#define NODE_ERROR
#ifdef NODE_DEBUG
...
...
@@ -47,6 +51,8 @@
// #define BUILD_WOFS 1
#define BUILD_SPIFFS 1
#define SPIFFS_CACHE 1
// #define LUA_NUMBER_INTEGRAL
#define LUA_OPTRAM
...
...
@@ -57,8 +63,13 @@
#endif
/* LUA_OPTRAM */
#define READLINE_INTERVAL 80
#define LUA_TASK_PRIO USER_TASK_PRIO_0
#define LUA_PROCESS_LINE_SIG 2
#define LUA_OPTIMIZE_DEBUG 2
#ifdef DEVKIT_VERSION_0_9
#define KEYLED_INTERVAL 80
#define KEY_SHORT_MS 200
#define KEY_LONG_MS 3000
#define KEY_SHORT_COUNT (KEY_SHORT_MS / READLINE_INTERVAL)
...
...
@@ -68,6 +79,8 @@
#define LED_LOW_COUNT_DEFAULT 0
#endif
#define ENDUSER_SETUP_AP_SSID "SetupGadget"
#define STRBUF_DEFAULT_INCREMENT 32
#endif
/* __USER_CONFIG_H__ */
app/include/user_modules.h
View file @
38efa482
...
...
@@ -8,8 +8,10 @@
// #define LUA_USE_BUILTIN_IO // for io.xxx(), partially work
// #define LUA_USE_BUILTIN_OS // for os.xxx(), not work
// #define LUA_USE_BUILTIN_DEBUG // for debug.xxx(), not work
// #define LUA_USE_BUILTIN_DEBUG
#define LUA_USE_BUILTIN_DEBUG_MINIMAL // for debug.getregistry() and debug.traceback()
#ifndef LUA_CROSS_COMPILER
#define LUA_USE_MODULES
#ifdef LUA_USE_MODULES
...
...
@@ -28,7 +30,9 @@
#define LUA_USE_MODULES_BIT
#define LUA_USE_MODULES_MQTT
#define LUA_USE_MODULES_COAP
//#define LUA_USE_MODULES_ENDUSER_SETUP // USE_DNS in dhcpserver.h needs to be enabled for this module to work.
#define LUA_USE_MODULES_U8G
//#define LUA_USE_MODULES_UCG
// #define LUA_USE_MODULES_WS2801
#define LUA_USE_MODULES_WS2812
#define LUA_USE_MODULES_CJSON
...
...
@@ -39,7 +43,11 @@
#define LUA_USE_MODULES_RTCTIME
#define LUA_USE_MODULES_RTCFIFO
#define LUA_USE_MODULES_SNTP
//#define LUA_USE_MODULES_BMP085
#define LUA_USE_MODULES_TSL2561
//#define LUA_USE_MODULES_HX711
#endif
/* LUA_USE_MODULES */
#endif
#endif
/* __USER_MODULES_H__ */
app/include/user_version.h
View file @
38efa482
#ifndef __USER_VERSION_H__
#define __USER_VERSION_H__
#define NODE_VERSION_MAJOR
0
U
#define NODE_VERSION_MINOR
9
U
#define NODE_VERSION_REVISION
6
U
#define NODE_VERSION_MAJOR
1
U
#define NODE_VERSION_MINOR
4
U
#define NODE_VERSION_REVISION
0
U
#define NODE_VERSION_INTERNAL 0U
#define NODE_VERSION "NodeMCU 0.9.6"
#define BUILD_DATE "build 20150627"
#define NODE_VERSION "NodeMCU 1.4.0"
#ifndef BUILD_DATE
#define BUILD_DATE "20151006"
#endif
extern
char
SDK_VERSION
[];
#endif
/* __USER_VERSION_H__ */
app/libc/c_stdlib.c
View file @
38efa482
//#include "user_interface.h"
#include "user_config.h"
#ifdef LUA_CROSS_COMPILER
#include <stdlib.h>
#include <ctype.h>
#include <string.h>
#define ICACHE_RODATA_ATTR
#define TRUE 1
#define FALSE 0
#else
#include "c_stdlib.h"
#include "c_stdio.h"
#include "c_types.h"
#include "c_string.h"
#include "user_interface.h"
#include "user_config.h"
// const char *lua_init_value = "print(\"Hello world\")";
const
char
*
lua_init_value
=
"@init.lua"
;
...
...
@@ -21,7 +32,6 @@ const char *c_getenv(const char *__string)
}
return
NULL
;
}
// make sure there is enough memory before real malloc, otherwise malloc will panic and reset
// void *c_malloc(size_t __size){
// if(__size>system_get_free_heap_size()){
...
...
@@ -43,7 +53,8 @@ const char *c_getenv(const char *__string)
// // NODE_ERR("free1: %d\n", system_get_free_heap_size());
// os_free(p);
// // NODE_ERR("-free1: %d\n", system_get_free_heap_size());
// }
// }c_stdlib.s
// int c_rand(void){
...
...
@@ -55,9 +66,8 @@ const char *c_getenv(const char *__string)
// }
#include <_ansi.h>
//#include <reent.h>
#include <string.h>
//#include "mprec.h"
#endif
double
powersOf10
[]
ICACHE_STORE_ATTR
ICACHE_RODATA_ATTR
=
/* Table giving binary powers of 10. Entry */
{
10
.,
/* is 10^2^i. Used to convert decimal */
...
...
app/lua/lapi.c
View file @
38efa482
...
...
@@ -4,17 +4,15 @@
** See Copyright Notice in lua.h
*/
//#include "c_assert.h"
#include "c_math.h"
#include "c_stdarg.h"
#include "c_string.h"
#define lapi_c
#define LUA_CORE
#define LUAC_CROSS_FILE
#include "lua.h"
//#include C_HEADER_ASSERT
#include C_HEADER_MATH
#include C_HEADER_STRING
#include "lapi.h"
#include "ldebug.h"
#include "ldo.h"
...
...
app/lua/lauxlib.c
View file @
38efa482
...
...
@@ -4,14 +4,18 @@
** See Copyright Notice in lua.h
*/
#define LUAC_CROSS_FILE
#include "c_ctype.h"
// #include "c_errno.h"
#include "c_stdarg.h"
#include "c_stdio.h"
#include "c_stdlib.h"
#include "c_string.h"
#include "lua.h"
#include C_HEADER_CTYPE
#include C_HEADER_ERRNO
#include C_HEADER_STDIO
#include C_HEADER_STDLIB
#include C_HEADER_STRING
#ifndef LUA_CROSS_COMPILER
#include "flash_fs.h"
#else
#endif
/* This file uses only the official API of Lua.
** Any function declared here could be written as an application function.
...
...
@@ -20,8 +24,6 @@
#define lauxlib_c
#define LUA_LIB
#include "lua.h"
#include "lrotable.h"
#include "lauxlib.h"
...
...
@@ -573,7 +575,7 @@ LUALIB_API void luaL_unref (lua_State *L, int t, int ref) {
** =======================================================
*/
#if
0
#if
def LUA_CROSS_COMPILER
typedef
struct
LoadF
{
int
extraline
;
...
...
@@ -647,7 +649,7 @@ LUALIB_API int luaL_loadfile (lua_State *L, const char *filename) {
#else
#include
"c_fcntl.h"
#include
C_HEADER_FCNTL
typedef
struct
LoadFSF
{
int
extraline
;
...
...
app/lua/lauxlib.h
View file @
38efa482
...
...
@@ -9,11 +9,14 @@
#define lauxlib_h
//#include "c_stddef.h"
#include "c_stdio.h"
#include "lua.h"
#ifdef LUA_CROSS_COMPILER
#include <stdio.h>
#else
#include "c_stdio.h"
#endif
#if defined(LUA_COMPAT_GETN)
LUALIB_API
int
(
luaL_getn
)
(
lua_State
*
L
,
int
t
);
...
...
@@ -79,7 +82,7 @@ LUALIB_API int (luaL_checkoption) (lua_State *L, int narg, const char *def,
LUALIB_API
int
(
luaL_ref
)
(
lua_State
*
L
,
int
t
);
LUALIB_API
void
(
luaL_unref
)
(
lua_State
*
L
,
int
t
,
int
ref
);
#if
0
#if
def LUA_CROSS_COMPILER
LUALIB_API
int
(
luaL_loadfile
)
(
lua_State
*
L
,
const
char
*
filename
);
#else
LUALIB_API
int
(
luaL_loadfsfile
)
(
lua_State
*
L
,
const
char
*
filename
);
...
...
app/lua/lbaselib.c
View file @
38efa482
...
...
@@ -6,16 +6,14 @@
#include "c_ctype.h"
#include "c_stdio.h"
#include "c_stdlib.h"
#include "c_string.h"
#define lbaselib_c
#define LUA_LIB
#define LUAC_CROSS_FILE
#include "lua.h"
#include C_HEADER_STDIO
#include C_HEADER_STRING
#include C_HEADER_STDLIB
#include "lauxlib.h"
#include "lualib.h"
#include "lrotable.h"
...
...
@@ -295,7 +293,7 @@ static int luaB_loadstring (lua_State *L) {
static
int
luaB_loadfile
(
lua_State
*
L
)
{
const
char
*
fname
=
luaL_optstring
(
L
,
1
,
NULL
);
#if
0
#if
def LUA_CROSS_COMPILER
return
load_aux
(
L
,
luaL_loadfile
(
L
,
fname
));
#else
return
load_aux
(
L
,
luaL_loadfsfile
(
L
,
fname
));
...
...
@@ -342,7 +340,7 @@ static int luaB_load (lua_State *L) {
static
int
luaB_dofile
(
lua_State
*
L
)
{
const
char
*
fname
=
luaL_optstring
(
L
,
1
,
NULL
);
int
n
=
lua_gettop
(
L
);
#if
0
#if
def LUA_CROSS_COMPILER
if
(
luaL_loadfile
(
L
,
fname
)
!=
0
)
lua_error
(
L
);
#else
if
(
luaL_loadfsfile
(
L
,
fname
)
!=
0
)
lua_error
(
L
);
...
...
app/lua/lcode.c
View file @
38efa482
...
...
@@ -5,12 +5,12 @@
*/
#include "c_stdlib.h"
#define lcode_c
#define LUA_CORE
#define LUAC_CROSS_FILE
#include "lua.h"
#include C_HEADER_STDLIB
#include "lcode.h"
#include "ldebug.h"
...
...
@@ -781,8 +781,91 @@ void luaK_posfix (FuncState *fs, BinOpr op, expdesc *e1, expdesc *e2) {
}
#ifdef LUA_OPTIMIZE_DEBUG
/*
* Attempted to write to last (null terminator) byte of lineinfo, so need
* to grow the lineinfo vector and extend the fill bytes
*/
static
unsigned
char
*
growLineInfo
(
FuncState
*
fs
)
{
int
i
,
oldsize
=
fs
->
packedlineinfoSize
;
Proto
*
f
=
fs
->
f
;
unsigned
char
*
p
,
*
r
;
lua_assert
(
f
->
packedlineinfo
==
NULL
||
f
->
packedlineinfo
[
oldsize
-
1
]
==
0
);
/* using the macro results in a redundant if test, but what the hell */
luaM_growvector
(
fs
->
L
,
f
->
packedlineinfo
,
fs
->
packedlineinfoSize
,
fs
->
packedlineinfoSize
,
unsigned
char
,
MAX_INT
,
"code size overflow"
);
r
=
p
=
f
->
packedlineinfo
+
oldsize
;
if
(
oldsize
)
*--
r
=
INFO_FILL_BYTE
;
i
=
fs
->
packedlineinfoSize
-
oldsize
-
1
;
while
(
i
--
)
*
p
++
=
INFO_FILL_BYTE
;
*
p
=
0
;
return
r
;
}
static
void
generateInfoDeltaLine
(
FuncState
*
fs
,
int
line
)
{
/* Handle first time through when lineinfo points is NULL */
unsigned
char
*
p
=
fs
->
f
->
packedlineinfo
?
lineInfoTop
(
fs
)
+
1
:
growLineInfo
(
fs
);
#define addDLbyte(v) if (*p==0) p = growLineInfo(fs); *p++ = (v);
int
delta
=
line
-
fs
->
lastline
-
1
;
if
(
delta
)
{
if
(
delta
<
0
)
{
delta
=
-
delta
-
1
;
addDLbyte
((
INFO_DELTA_MASK
|
INFO_SIGN_MASK
)
|
(
delta
&
INFO_DELTA_6BITS
));
}
else
{
delta
=
delta
-
1
;
addDLbyte
(
INFO_DELTA_MASK
|
(
delta
&
INFO_DELTA_6BITS
));
}
delta
>>=
6
;
while
(
delta
)
{
addDLbyte
(
INFO_DELTA_MASK
|
(
delta
&
INFO_DELTA_7BITS
));
delta
>>=
7
;
}
}
addDLbyte
(
1
);
fs
->
lastline
=
line
;
fs
->
lastlineOffset
=
p
-
fs
->
f
->
packedlineinfo
-
1
;
#undef addDLbyte
}
#endif
void
luaK_fixline
(
FuncState
*
fs
,
int
line
)
{
#ifdef LUA_OPTIMIZE_DEBUG
/* The fixup line can be the same as existing one and in this case there's nothing to do */
if
(
line
!=
fs
->
lastline
)
{
/* first remove the current line reference */
unsigned
char
*
p
=
lineInfoTop
(
fs
);
lua_assert
(
*
p
<
127
);
if
(
*
p
>
1
)
{
(
*
p
)
--
;
/* this is simply decrementing the last count a multi-PC line */
}
else
{
/* it's a bit more complicated if it's the 1st instruction on the line */
int
delta
=
0
;
unsigned
char
code
;
/* this logic handles <i/c> [1snnnnnnn [1nnnnnnn]*]? <i/c=1> */
*
p
--
=
INFO_FILL_BYTE
;
/* work backwards over the coded delta computing the delta */
while
((
code
=*
p
)
&
INFO_DELTA_MASK
)
{
*
p
--
=
INFO_FILL_BYTE
;
if
(
*
p
&
INFO_DELTA_MASK
)
{
delta
=
delta
+
((
code
&
INFO_DELTA_7BITS
)
<<
7
);
}
else
{
delta
+=
(
code
&
INFO_DELTA_6BITS
)
+
1
;
if
(
code
&
INFO_SIGN_MASK
)
delta
=
-
delta
;
}
}
/* and reposition the FuncState lastline pointers at the previous instruction count */
fs
->
lastline
-=
delta
+
1
;
fs
->
lastlineOffset
=
p
-
fs
->
f
->
packedlineinfo
;
}
/* Then add the new line reference */
generateInfoDeltaLine
(
fs
,
line
);
}
#else
fs
->
f
->
lineinfo
[
fs
->
pc
-
1
]
=
line
;
#endif
}
...
...
@@ -794,9 +877,25 @@ static int luaK_code (FuncState *fs, Instruction i, int line) {
MAX_INT
,
"code size overflow"
);
f
->
code
[
fs
->
pc
]
=
i
;
/* save corresponding line information */
#ifdef LUA_OPTIMIZE_DEBUG
/* note that frst time fs->lastline==0 through, so the else branch is taken */
if
(
fs
->
pc
==
fs
->
lineinfoLastPC
+
1
)
{
if
(
line
==
fs
->
lastline
&&
f
->
packedlineinfo
[
fs
->
lastlineOffset
]
<
INFO_MAX_LINECNT
)
{
f
->
packedlineinfo
[
fs
->
lastlineOffset
]
++
;
}
else
{
generateInfoDeltaLine
(
fs
,
line
);
}
}
else
{
/* The last instruction is occasionally overwritten as part of branch optimisation*/
lua_assert
(
fs
->
pc
==
fs
->
lineinfoLastPC
);
/* panic if its anything other than this !! */
luaK_fixline
(
fs
,
line
);
}
fs
->
lineinfoLastPC
=
fs
->
pc
;
#else
luaM_growvector
(
fs
->
L
,
f
->
lineinfo
,
fs
->
pc
,
f
->
sizelineinfo
,
int
,
MAX_INT
,
"code size overflow"
);
f
->
lineinfo
[
fs
->
pc
]
=
line
;
#endif
return
fs
->
pc
++
;
}
...
...
app/lua/
not_used/
ldblib.c
→
app/lua/ldblib.c
View file @
38efa482
...
...
@@ -5,18 +5,19 @@
*/
#include "c_stdio.h"
#include "c_stdlib.h"
#include "c_string.h"
#define ldblib_c
#define LUA_LIB
#define LUAC_CROSS_FILE
#include "lua.h"
#include C_HEADER_STDIO
#include C_HEADER_STDLIB
#include C_HEADER_STRING
#include "lauxlib.h"
#include "lualib.h"
#include "lrotable.h"
#include "user_modules.h"
...
...
@@ -25,6 +26,7 @@ static int db_getregistry (lua_State *L) {
return
1
;
}
#ifndef LUA_USE_BUILTIN_DEBUG_MINIMAL
static
int
db_getmetatable
(
lua_State
*
L
)
{
luaL_checkany
(
L
,
1
);
...
...
@@ -73,7 +75,7 @@ static void settabsi (lua_State *L, const char *i, int v) {
lua_setfield
(
L
,
-
2
,
i
);
}
#endif
static
lua_State
*
getthread
(
lua_State
*
L
,
int
*
arg
)
{
if
(
lua_isthread
(
L
,
1
))
{
*
arg
=
1
;
...
...
@@ -84,7 +86,7 @@ static lua_State *getthread (lua_State *L, int *arg) {
return
L
;
}
}
#ifndef LUA_USE_BUILTIN_DEBUG_MINIMAL
static
void
treatstackoption
(
lua_State
*
L
,
lua_State
*
L1
,
const
char
*
fname
)
{
if
(
L
==
L1
)
{
...
...
@@ -324,7 +326,7 @@ static int db_debug (lua_State *L) {
lua_settop
(
L
,
0
);
/* remove eventual returns */
}
}
#endif
#define LEVELS1 12
/* size of the first part of the stack */
#define LEVELS2 10
/* size of the second part of the stack */
...
...
@@ -384,12 +386,15 @@ static int db_errorfb (lua_State *L) {
#define MIN_OPT_LEVEL 1
#include "lrodefs.h"
const
LUA_REG_TYPE
dblib
[]
=
{
#ifndef LUA_USE_BUILTIN_DEBUG_MINIMAL
{
LSTRKEY
(
"debug"
),
LFUNCVAL
(
db_debug
)},
{
LSTRKEY
(
"getfenv"
),
LFUNCVAL
(
db_getfenv
)},
{
LSTRKEY
(
"gethook"
),
LFUNCVAL
(
db_gethook
)},
{
LSTRKEY
(
"getinfo"
),
LFUNCVAL
(
db_getinfo
)},
{
LSTRKEY
(
"getlocal"
),
LFUNCVAL
(
db_getlocal
)},
#endif
{
LSTRKEY
(
"getregistry"
),
LFUNCVAL
(
db_getregistry
)},
#ifndef LUA_USE_BUILTIN_DEBUG_MINIMAL
{
LSTRKEY
(
"getmetatable"
),
LFUNCVAL
(
db_getmetatable
)},
{
LSTRKEY
(
"getupvalue"
),
LFUNCVAL
(
db_getupvalue
)},
{
LSTRKEY
(
"setfenv"
),
LFUNCVAL
(
db_setfenv
)},
...
...
@@ -397,6 +402,7 @@ const LUA_REG_TYPE dblib[] = {
{
LSTRKEY
(
"setlocal"
),
LFUNCVAL
(
db_setlocal
)},
{
LSTRKEY
(
"setmetatable"
),
LFUNCVAL
(
db_setmetatable
)},
{
LSTRKEY
(
"setupvalue"
),
LFUNCVAL
(
db_setupvalue
)},
#endif
{
LSTRKEY
(
"traceback"
),
LFUNCVAL
(
db_errorfb
)},
{
LNILKEY
,
LNILVAL
}
};
...
...
app/lua/ldebug.c
View file @
38efa482
...
...
@@ -5,15 +5,12 @@
*/
#include "c_stdarg.h"
#include "c_stddef.h"
#include "c_string.h"
#define ldebug_c
#define LUA_CORE
#define LUAC_CROSS_FILE
#include "lua.h"
#include C_HEADER_STRING
#include "lapi.h"
#include "lcode.h"
...
...
@@ -174,20 +171,113 @@ static void info_tailcall (lua_Debug *ar) {
}
static
void
collectvalidlines
(
lua_State
*
L
,
Closure
*
f
)
{
static
void
collectvalidlines
(
lua_State
*
L
,
Closure
*
f
)
{
if
(
f
==
NULL
||
f
->
c
.
isC
)
{
setnilvalue
(
L
->
top
);
}
else
{
# define INFO_FILL_BYTE 0x7F
# define INFO_DELTA_MASK 0x80
# define INFO_SIGN_MASK 0x40
# define INFO_DELTA_6BITS 0x3F
# define INFO_DELTA_7BITS 0x7F
# define INFO_MAX_LINECNT 126
Table
*
t
=
luaH_new
(
L
,
0
,
0
);
#ifdef LUA_OPTIMIZE_DEBUG
int
line
=
0
;
unsigned
char
*
p
=
f
->
l
.
p
->
packedlineinfo
;
if
(
p
)
{
for
(;
*
p
&&
*
p
!=
INFO_FILL_BYTE
;
)
{
if
(
*
p
&
INFO_DELTA_MASK
)
{
/* line delta */
int
delta
=
*
p
&
INFO_DELTA_6BITS
;
unsigned
char
sign
=
*
p
++
&
INFO_SIGN_MASK
;
int
shift
;
for
(
shift
=
6
;
*
p
&
INFO_DELTA_MASK
;
p
++
,
shift
+=
7
)
{
delta
+=
(
*
p
&
INFO_DELTA_7BITS
)
<<
shift
;
}
line
+=
sign
?
-
delta
:
delta
+
2
;
}
else
{
line
++
;
}
p
++
;
setbvalue
(
luaH_setnum
(
L
,
t
,
line
),
1
);
}
}
#else
int
*
lineinfo
=
f
->
l
.
p
->
lineinfo
;
int
i
;
for
(
i
=
0
;
i
<
f
->
l
.
p
->
sizelineinfo
;
i
++
)
setbvalue
(
luaH_setnum
(
L
,
t
,
lineinfo
[
i
]),
1
);
#endif
sethvalue
(
L
,
L
->
top
,
t
);
}
incr_top
(
L
);
}
#ifdef LUA_OPTIMIZE_DEBUG
/*
* This may seem expensive but this is only accessed frequently in traceexec
* and the while loop will be executed roughly half the number of non-blank
* source lines in the Lua function and these tend to be short.
*/
int
luaG_getline
(
const
Proto
*
f
,
int
pc
)
{
int
line
=
0
,
thispc
=
0
,
nextpc
;
unsigned
char
*
p
;
for
(
p
=
f
->
packedlineinfo
;
*
p
&&
*
p
!=
INFO_FILL_BYTE
;)
{
if
(
*
p
&
INFO_DELTA_MASK
)
{
/* line delta */
int
delta
=
*
p
&
INFO_DELTA_6BITS
;
unsigned
char
sign
=
*
p
++
&
INFO_SIGN_MASK
;
int
shift
;
for
(
shift
=
6
;
*
p
&
INFO_DELTA_MASK
;
p
++
,
shift
+=
7
)
{
delta
+=
(
*
p
&
INFO_DELTA_7BITS
)
<<
shift
;
}
line
+=
sign
?
-
delta
:
delta
+
2
;
}
else
{
line
++
;
}
lua_assert
(
*
p
<
127
);
nextpc
=
thispc
+
*
p
++
;
if
(
thispc
<=
pc
&&
pc
<
nextpc
)
{
return
line
;
}
thispc
=
nextpc
;
}
lua_assert
(
0
);
return
0
;
}
static
int
stripdebug
(
lua_State
*
L
,
Proto
*
f
,
int
level
)
{
int
len
=
0
,
sizepackedlineinfo
;
TString
*
dummy
;
switch
(
level
)
{
case
3
:
sizepackedlineinfo
=
c_strlen
(
cast
(
char
*
,
f
->
packedlineinfo
))
+
1
;
f
->
packedlineinfo
=
luaM_freearray
(
L
,
f
->
packedlineinfo
,
sizepackedlineinfo
,
unsigned
char
);
len
+=
sizepackedlineinfo
;
case
2
:
len
+=
f
->
sizelocvars
*
(
sizeof
(
struct
LocVar
)
+
sizeof
(
dummy
->
tsv
)
+
sizeof
(
struct
LocVar
*
));
f
->
locvars
=
luaM_freearray
(
L
,
f
->
locvars
,
f
->
sizelocvars
,
struct
LocVar
);
f
->
upvalues
=
luaM_freearray
(
L
,
f
->
upvalues
,
f
->
sizeupvalues
,
TString
*
);
len
+=
f
->
sizelocvars
*
(
sizeof
(
struct
LocVar
)
+
sizeof
(
dummy
->
tsv
)
+
sizeof
(
struct
LocVar
*
))
+
f
->
sizeupvalues
*
(
sizeof
(
dummy
->
tsv
)
+
sizeof
(
TString
*
));
f
->
sizelocvars
=
0
;
f
->
sizeupvalues
=
0
;
}
return
len
;
}
/* This is a recursive function so it's stack size has been kept to a minimum! */
LUA_API
int
luaG_stripdebug
(
lua_State
*
L
,
Proto
*
f
,
int
level
,
int
recv
){
int
len
=
0
,
i
;
if
(
recv
!=
0
&&
f
->
sizep
!=
0
)
{
for
(
i
=
0
;
i
<
f
->
sizep
;
i
++
)
len
+=
luaG_stripdebug
(
L
,
f
->
p
[
i
],
level
,
recv
);
}
len
+=
stripdebug
(
L
,
f
,
level
);
return
len
;
}
#endif
static
int
auxgetinfo
(
lua_State
*
L
,
const
char
*
what
,
lua_Debug
*
ar
,
...
...
@@ -290,7 +380,9 @@ static int precheck (const Proto *pt) {
check
(
!
(
pt
->
is_vararg
&
VARARG_NEEDSARG
)
||
(
pt
->
is_vararg
&
VARARG_HASARG
));
check
(
pt
->
sizeupvalues
<=
pt
->
nups
);
#ifndef LUA_OPTIMIZE_DEBUG
check
(
pt
->
sizelineinfo
==
pt
->
sizecode
||
pt
->
sizelineinfo
==
0
);
#endif
check
(
pt
->
sizecode
>
0
&&
GET_OPCODE
(
pt
->
code
[
pt
->
sizecode
-
1
])
==
OP_RETURN
);
return
1
;
}
...
...
Prev
1
2
3
4
5
6
7
…
21
Next
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