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
67027c0d
Unverified
Commit
67027c0d
authored
Apr 02, 2018
by
Marcel Stör
Committed by
GitHub
Apr 02, 2018
Browse files
Merge pull request #2340 from nodemcu/dev
2.2 master snap
parents
5073c199
18f33f5f
Changes
294
Show whitespace changes
Inline
Side-by-side
app/mbedtls/app/espconn_mbedtls.c
View file @
67027c0d
...
@@ -353,6 +353,8 @@ static void mbedtls_msg_free(pmbedtls_msg *msg)
...
@@ -353,6 +353,8 @@ static void mbedtls_msg_free(pmbedtls_msg *msg)
os_free
((
*
msg
)
->
ssl
.
out_buf
);
os_free
((
*
msg
)
->
ssl
.
out_buf
);
(
*
msg
)
->
ssl
.
out_buf
=
NULL
;
(
*
msg
)
->
ssl
.
out_buf
=
NULL
;
}
}
if
((
*
msg
)
->
pfinished
!=
NULL
)
mbedtls_finished_free
(
&
(
*
msg
)
->
pfinished
);
#endif
#endif
mbedtls_entropy_free
(
&
(
*
msg
)
->
entropy
);
mbedtls_entropy_free
(
&
(
*
msg
)
->
entropy
);
mbedtls_ssl_free
(
&
(
*
msg
)
->
ssl
);
mbedtls_ssl_free
(
&
(
*
msg
)
->
ssl
);
...
@@ -423,10 +425,14 @@ static bool mbedtls_handshake_result(const pmbedtls_msg Threadmsg)
...
@@ -423,10 +425,14 @@ static bool mbedtls_handshake_result(const pmbedtls_msg Threadmsg)
static
void
mbedtls_fail_info
(
espconn_msg
*
pinfo
,
int
ret
)
static
void
mbedtls_fail_info
(
espconn_msg
*
pinfo
,
int
ret
)
{
{
pmbedtls_msg
TLSmsg
=
NULL
;
pmbedtls_msg
TLSmsg
=
NULL
;
lwIP_REQUIRE_ACTION
(
pinfo
,
exit
,
ret
=
ERR_ARG
);
lwIP_REQUIRE_ACTION
(
pinfo
,
exit
,);
TLSmsg
=
pinfo
->
pssl
;
TLSmsg
=
pinfo
->
pssl
;
lwIP_REQUIRE_ACTION
(
TLSmsg
,
exit
,
ret
=
ERR_ARG
);
lwIP_REQUIRE_ACTION
(
TLSmsg
,
exit
,);
/* Don't complain to console if we've been told the other end is hanging
* up. That's entirely normal and not worthy of the confusion it sows!
*/
if
(
ret
!=
MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY
)
{
if
(
TLSmsg
->
quiet
){
if
(
TLSmsg
->
quiet
){
if
(
pinfo
->
preverse
!=
NULL
)
{
if
(
pinfo
->
preverse
!=
NULL
)
{
os_printf
(
"server's data invalid protocol
\n
"
);
os_printf
(
"server's data invalid protocol
\n
"
);
...
@@ -441,6 +447,7 @@ static void mbedtls_fail_info(espconn_msg *pinfo, int ret)
...
@@ -441,6 +447,7 @@ static void mbedtls_fail_info(espconn_msg *pinfo, int ret)
os_printf
(
"client handshake failed!
\n
"
);
os_printf
(
"client handshake failed!
\n
"
);
}
}
}
}
}
os_printf
(
"Reason:[-0x%2x]
\n
"
,
-
ret
);
os_printf
(
"Reason:[-0x%2x]
\n
"
,
-
ret
);
/*Error code convert*/
/*Error code convert*/
...
@@ -556,6 +563,11 @@ static void espconn_close_internal(void *arg, netconn_event event_type)
...
@@ -556,6 +563,11 @@ static void espconn_close_internal(void *arg, netconn_event event_type)
ssl_reerr
=
pssl_recon
->
pcommon
.
err
;
ssl_reerr
=
pssl_recon
->
pcommon
.
err
;
hs_status
=
pssl_recon
->
hs_status
;
hs_status
=
pssl_recon
->
hs_status
;
if
(
espconn
!=
NULL
)
{
if
(
espconn
!=
NULL
)
{
//clear pcommon parameters.
pssl_recon
->
pcommon
.
write_flag
=
false
;
pssl_recon
->
pcommon
.
ptrbuf
=
NULL
;
pssl_recon
->
pcommon
.
cntr
=
0
;
pssl_recon
->
pcommon
.
err
=
0
;
espconn
=
pssl_recon
->
preverse
;
espconn
=
pssl_recon
->
preverse
;
}
else
{
}
else
{
espconn
=
pssl_recon
->
pespconn
;
espconn
=
pssl_recon
->
pespconn
;
...
@@ -659,6 +671,11 @@ again:
...
@@ -659,6 +671,11 @@ again:
offerset
+=
sizeof
(
file_head
)
+
pfile_param
->
file_head
.
file_length
;
offerset
+=
sizeof
(
file_head
)
+
pfile_param
->
file_head
.
file_length
;
goto
again
;
goto
again
;
}
}
/*Optional is load the cert*/
if
(
auth_info
->
auth_type
==
ESPCONN_CERT_OWN
&&
os_memcmp
(
pfile_param
->
file_head
.
file_name
,
"certificate"
,
os_strlen
(
"certificate"
))
!=
0
){
offerset
+=
sizeof
(
file_head
)
+
pfile_param
->
file_head
.
file_length
;
goto
again
;
}
load_buf
=
(
uint8_t
*
)
os_zalloc
(
pfile_param
->
file_head
.
file_length
+
FILE_OFFSET
);
load_buf
=
(
uint8_t
*
)
os_zalloc
(
pfile_param
->
file_head
.
file_length
+
FILE_OFFSET
);
if
(
load_buf
==
NULL
){
if
(
load_buf
==
NULL
){
os_free
(
pfile_param
);
os_free
(
pfile_param
);
...
@@ -704,6 +721,12 @@ exit:
...
@@ -704,6 +721,12 @@ exit:
}
}
}
}
static
void
mbedtls_dbg
(
void
*
p
,
int
level
,
const
char
*
file
,
int
line
,
const
char
*
str
)
{
os_printf
(
"TLS<%d> (heap=%d): %s:%d %s"
,
level
,
system_get_free_heap_size
(),
file
,
line
,
str
);
}
static
bool
mbedtls_msg_config
(
mbedtls_msg
*
msg
)
static
bool
mbedtls_msg_config
(
mbedtls_msg
*
msg
)
{
{
const
char
*
pers
=
NULL
;
const
char
*
pers
=
NULL
;
...
@@ -784,7 +807,7 @@ static bool mbedtls_msg_config(mbedtls_msg *msg)
...
@@ -784,7 +807,7 @@ static bool mbedtls_msg_config(mbedtls_msg *msg)
mbedtls_ssl_conf_authmode
(
&
msg
->
conf
,
MBEDTLS_SSL_VERIFY_NONE
);
mbedtls_ssl_conf_authmode
(
&
msg
->
conf
,
MBEDTLS_SSL_VERIFY_NONE
);
}
}
mbedtls_ssl_conf_rng
(
&
msg
->
conf
,
mbedtls_ctr_drbg_random
,
&
msg
->
ctr_drbg
);
mbedtls_ssl_conf_rng
(
&
msg
->
conf
,
mbedtls_ctr_drbg_random
,
&
msg
->
ctr_drbg
);
mbedtls_ssl_conf_dbg
(
&
msg
->
conf
,
NULL
,
NULL
);
mbedtls_ssl_conf_dbg
(
&
msg
->
conf
,
mbedtls_dbg
,
NULL
);
ret
=
mbedtls_ssl_setup
(
&
msg
->
ssl
,
&
msg
->
conf
);
ret
=
mbedtls_ssl_setup
(
&
msg
->
ssl
,
&
msg
->
conf
);
lwIP_REQUIRE_NOERROR
(
ret
,
exit
);
lwIP_REQUIRE_NOERROR
(
ret
,
exit
);
...
@@ -825,6 +848,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
...
@@ -825,6 +848,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
if
(
ret
==
MBEDTLS_ERR_SSL_WANT_READ
||
ret
==
0
){
if
(
ret
==
MBEDTLS_ERR_SSL_WANT_READ
||
ret
==
0
){
ret
=
ESPCONN_OK
;
ret
=
ESPCONN_OK
;
break
;
break
;
}
else
if
(
ret
==
MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY
){
ret
=
ESPCONN_OK
;
mbedtls_ssl_close_notify
(
&
TLSmsg
->
ssl
);
}
else
{
}
else
{
break
;
break
;
}
}
...
@@ -877,6 +903,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
...
@@ -877,6 +903,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
}
}
system_soft_wdt_stop
();
system_soft_wdt_stop
();
uint8
cpu_freq
;
cpu_freq
=
system_get_cpu_freq
();
system_update_cpu_freq
(
160
);
while
((
ret
=
mbedtls_ssl_handshake
(
&
TLSmsg
->
ssl
))
!=
0
)
{
while
((
ret
=
mbedtls_ssl_handshake
(
&
TLSmsg
->
ssl
))
!=
0
)
{
if
(
ret
==
MBEDTLS_ERR_SSL_WANT_READ
||
ret
==
MBEDTLS_ERR_SSL_WANT_WRITE
)
{
if
(
ret
==
MBEDTLS_ERR_SSL_WANT_READ
||
ret
==
MBEDTLS_ERR_SSL_WANT_WRITE
)
{
...
@@ -887,6 +916,7 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
...
@@ -887,6 +916,7 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
}
}
}
}
system_soft_wdt_restart
();
system_soft_wdt_restart
();
system_update_cpu_freq
(
cpu_freq
);
lwIP_REQUIRE_NOERROR
(
ret
,
exit
);
lwIP_REQUIRE_NOERROR
(
ret
,
exit
);
/**/
/**/
TLSmsg
->
quiet
=
mbedtls_handshake_result
(
TLSmsg
);
TLSmsg
->
quiet
=
mbedtls_handshake_result
(
TLSmsg
);
...
@@ -923,6 +953,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
...
@@ -923,6 +953,9 @@ int __attribute__((weak)) mbedtls_parse_internal(int socket, sint8 error)
exit:
exit:
if
(
ret
!=
ESPCONN_OK
){
if
(
ret
!=
ESPCONN_OK
){
mbedtls_fail_info
(
Threadmsg
,
ret
);
mbedtls_fail_info
(
Threadmsg
,
ret
);
if
(
ret
==
MBEDTLS_ERR_SSL_PEER_CLOSE_NOTIFY
){
Threadmsg
->
hs_status
=
ESPCONN_OK
;
}
ets_post
(
lwIPThreadPrio
,
NETCONN_EVENT_CLOSE
,(
uint32
)
Threadmsg
);
ets_post
(
lwIPThreadPrio
,
NETCONN_EVENT_CLOSE
,(
uint32
)
Threadmsg
);
}
}
return
ret
;
return
ret
;
...
...
app/mbedtls/app/lwIPSocket.c
View file @
67027c0d
...
@@ -302,6 +302,20 @@ static err_t do_accepted(void *arg, struct tcp_pcb *newpcb, err_t err)
...
@@ -302,6 +302,20 @@ static err_t do_accepted(void *arg, struct tcp_pcb *newpcb, err_t err)
lwIP_netconn
*
newconn
=
NULL
;
lwIP_netconn
*
newconn
=
NULL
;
lwIP_netconn
*
conn
=
arg
;
lwIP_netconn
*
conn
=
arg
;
err
=
ERR_OK
;
err
=
ERR_OK
;
//Avoid two TCP connections coming in simultaneously
struct
tcp_pcb
*
pactive_pcb
;
int
active_pcb_num
=
0
;
for
(
pactive_pcb
=
tcp_active_pcbs
;
pactive_pcb
!=
NULL
;
pactive_pcb
=
pactive_pcb
->
next
){
if
(
pactive_pcb
->
state
==
ESTABLISHED
||
pactive_pcb
->
state
==
SYN_RCVD
){
active_pcb_num
++
;
if
(
active_pcb_num
>
MEMP_NUM_TCP_PCB
){
ESP_LOG
(
"%s %d active_pcb_number:%d
\n
"
,
__FILE__
,
__LINE__
,
active_pcb_num
);
return
ERR_MEM
;
}
}
}
lwIP_REQUIRE_ACTION
(
conn
,
exit
,
err
=
ESP_ARG
);
lwIP_REQUIRE_ACTION
(
conn
,
exit
,
err
=
ESP_ARG
);
/* We have to set the callback here even though
/* We have to set the callback here even though
* the new socket is unknown. conn->socket is marked as -1. */
* the new socket is unknown. conn->socket is marked as -1. */
...
@@ -738,6 +752,11 @@ int lwip_close(int s)
...
@@ -738,6 +752,11 @@ int lwip_close(int s)
return
-
1
;
return
-
1
;
}
}
/*Do not set callback function when tcp->state is LISTEN.
Avoid memory overlap when conn->tcp changes from
struct tcp_bcb to struct tcp_pcb_listen after lwip_listen.*/
if
(
sock
->
conn
->
tcp
->
state
!=
LISTEN
)
{
if
(
sock
->
conn
->
state
!=
NETCONN_STATE_ERROR
){
if
(
sock
->
conn
->
state
!=
NETCONN_STATE_ERROR
){
tcp_recv
(
sock
->
conn
->
tcp
,
NULL
);
tcp_recv
(
sock
->
conn
->
tcp
,
NULL
);
err
=
tcp_close
(
sock
->
conn
->
tcp
);
err
=
tcp_close
(
sock
->
conn
->
tcp
);
...
@@ -749,9 +768,11 @@ int lwip_close(int s)
...
@@ -749,9 +768,11 @@ int lwip_close(int s)
return
-
1
;
return
-
1
;
}
}
}
}
/* closing succeeded */
/* closing succeeded */
remove_tcp
(
sock
->
conn
);
remove_tcp
(
sock
->
conn
);
}
else
{
tcp_close
(
sock
->
conn
->
tcp
);
}
free_netconn
(
sock
->
conn
);
free_netconn
(
sock
->
conn
);
free_socket
(
sock
);
free_socket
(
sock
);
return
ERR_OK
;
return
ERR_OK
;
...
...
app/mbedtls/library/aes.c
View file @
67027c0d
...
@@ -33,7 +33,6 @@
...
@@ -33,7 +33,6 @@
#if defined(MBEDTLS_AES_C)
#if defined(MBEDTLS_AES_C)
#include "c_types.h"
#include <string.h>
#include <string.h>
#include "mbedtls/aes.h"
#include "mbedtls/aes.h"
...
@@ -57,7 +56,7 @@
...
@@ -57,7 +56,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
/*
/*
...
@@ -92,7 +91,7 @@ static int aes_padlock_ace = -1;
...
@@ -92,7 +91,7 @@ static int aes_padlock_ace = -1;
/*
/*
* Forward S-box
* Forward S-box
*/
*/
static
const
unsigned
char
FSb
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
static
const
unsigned
char
FSb
[
256
]
=
{
{
0x63
,
0x7C
,
0x77
,
0x7B
,
0xF2
,
0x6B
,
0x6F
,
0xC5
,
0x63
,
0x7C
,
0x77
,
0x7B
,
0xF2
,
0x6B
,
0x6F
,
0xC5
,
0x30
,
0x01
,
0x67
,
0x2B
,
0xFE
,
0xD7
,
0xAB
,
0x76
,
0x30
,
0x01
,
0x67
,
0x2B
,
0xFE
,
0xD7
,
0xAB
,
0x76
,
...
@@ -199,19 +198,19 @@ static const unsigned char FSb[256] ICACHE_RODATA_ATTR STORE_ATTR =
...
@@ -199,19 +198,19 @@ static const unsigned char FSb[256] ICACHE_RODATA_ATTR STORE_ATTR =
V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C)
V(CB,B0,B0,7B), V(FC,54,54,A8), V(D6,BB,BB,6D), V(3A,16,16,2C)
#define V(a,b,c,d) 0x##a##b##c##d
#define V(a,b,c,d) 0x##a##b##c##d
static
const
uint32_t
FT0
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
FT
};
static
const
uint32_t
FT0
[
256
]
=
{
FT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##b##c##d##a
#define V(a,b,c,d) 0x##b##c##d##a
static
const
uint32_t
FT1
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
FT
};
static
const
uint32_t
FT1
[
256
]
=
{
FT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##c##d##a##b
#define V(a,b,c,d) 0x##c##d##a##b
static
const
uint32_t
FT2
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
FT
};
static
const
uint32_t
FT2
[
256
]
=
{
FT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##d##a##b##c
#define V(a,b,c,d) 0x##d##a##b##c
static
const
uint32_t
FT3
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
FT
};
static
const
uint32_t
FT3
[
256
]
=
{
FT
};
#undef V
#undef V
#undef FT
#undef FT
...
@@ -219,7 +218,7 @@ static const uint32_t FT3[256] ICACHE_RODATA_ATTR STORE_ATTR = { FT };
...
@@ -219,7 +218,7 @@ static const uint32_t FT3[256] ICACHE_RODATA_ATTR STORE_ATTR = { FT };
/*
/*
* Reverse S-box
* Reverse S-box
*/
*/
static
const
unsigned
char
RSb
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
static
const
unsigned
char
RSb
[
256
]
=
{
{
0x52
,
0x09
,
0x6A
,
0xD5
,
0x30
,
0x36
,
0xA5
,
0x38
,
0x52
,
0x09
,
0x6A
,
0xD5
,
0x30
,
0x36
,
0xA5
,
0x38
,
0xBF
,
0x40
,
0xA3
,
0x9E
,
0x81
,
0xF3
,
0xD7
,
0xFB
,
0xBF
,
0x40
,
0xA3
,
0x9E
,
0x81
,
0xF3
,
0xD7
,
0xFB
,
...
@@ -326,19 +325,19 @@ static const unsigned char RSb[256] ICACHE_RODATA_ATTR STORE_ATTR =
...
@@ -326,19 +325,19 @@ static const unsigned char RSb[256] ICACHE_RODATA_ATTR STORE_ATTR =
V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0)
V(61,84,CB,7B), V(70,B6,32,D5), V(74,5C,6C,48), V(42,57,B8,D0)
#define V(a,b,c,d) 0x##a##b##c##d
#define V(a,b,c,d) 0x##a##b##c##d
static
const
uint32_t
RT0
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
RT
};
static
const
uint32_t
RT0
[
256
]
=
{
RT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##b##c##d##a
#define V(a,b,c,d) 0x##b##c##d##a
static
const
uint32_t
RT1
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
RT
};
static
const
uint32_t
RT1
[
256
]
=
{
RT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##c##d##a##b
#define V(a,b,c,d) 0x##c##d##a##b
static
const
uint32_t
RT2
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
RT
};
static
const
uint32_t
RT2
[
256
]
=
{
RT
};
#undef V
#undef V
#define V(a,b,c,d) 0x##d##a##b##c
#define V(a,b,c,d) 0x##d##a##b##c
static
const
uint32_t
RT3
[
256
]
ICACHE_RODATA_ATTR
STORE_ATTR
=
{
RT
};
static
const
uint32_t
RT3
[
256
]
=
{
RT
};
#undef V
#undef V
#undef RT
#undef RT
...
@@ -346,7 +345,7 @@ static const uint32_t RT3[256] ICACHE_RODATA_ATTR STORE_ATTR = { RT };
...
@@ -346,7 +345,7 @@ static const uint32_t RT3[256] ICACHE_RODATA_ATTR STORE_ATTR = { RT };
/*
/*
* Round constants
* Round constants
*/
*/
static
const
uint32_t
RCON
[
10
]
ICACHE_RODATA_ATTR
=
static
const
uint32_t
RCON
[
10
]
=
{
{
0x00000001
,
0x00000002
,
0x00000004
,
0x00000008
,
0x00000001
,
0x00000002
,
0x00000004
,
0x00000008
,
0x00000010
,
0x00000020
,
0x00000040
,
0x00000080
,
0x00000010
,
0x00000020
,
0x00000040
,
0x00000080
,
...
@@ -532,10 +531,10 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
...
@@ -532,10 +531,10 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
for
(
i
=
0
;
i
<
10
;
i
++
,
RK
+=
4
)
for
(
i
=
0
;
i
<
10
;
i
++
,
RK
+=
4
)
{
{
RK
[
4
]
=
RK
[
0
]
^
RCON
[
i
]
^
RK
[
4
]
=
RK
[
0
]
^
RCON
[
i
]
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
3
]
>>
8
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
3
]
>>
8
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
3
]
>>
16
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
3
]
>>
16
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
3
]
>>
24
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
3
]
>>
24
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
3
]
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
RK
[
3
]
)
&
0xFF
]
<<
24
);
RK
[
5
]
=
RK
[
1
]
^
RK
[
4
];
RK
[
5
]
=
RK
[
1
]
^
RK
[
4
];
RK
[
6
]
=
RK
[
2
]
^
RK
[
5
];
RK
[
6
]
=
RK
[
2
]
^
RK
[
5
];
...
@@ -548,10 +547,10 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
...
@@ -548,10 +547,10 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
for
(
i
=
0
;
i
<
8
;
i
++
,
RK
+=
6
)
for
(
i
=
0
;
i
<
8
;
i
++
,
RK
+=
6
)
{
{
RK
[
6
]
=
RK
[
0
]
^
RCON
[
i
]
^
RK
[
6
]
=
RK
[
0
]
^
RCON
[
i
]
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
5
]
>>
8
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
5
]
>>
8
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
5
]
>>
16
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
5
]
>>
16
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
5
]
>>
24
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
5
]
>>
24
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
5
]
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
RK
[
5
]
)
&
0xFF
]
<<
24
);
RK
[
7
]
=
RK
[
1
]
^
RK
[
6
];
RK
[
7
]
=
RK
[
1
]
^
RK
[
6
];
RK
[
8
]
=
RK
[
2
]
^
RK
[
7
];
RK
[
8
]
=
RK
[
2
]
^
RK
[
7
];
...
@@ -566,20 +565,20 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
...
@@ -566,20 +565,20 @@ int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key,
for
(
i
=
0
;
i
<
7
;
i
++
,
RK
+=
8
)
for
(
i
=
0
;
i
<
7
;
i
++
,
RK
+=
8
)
{
{
RK
[
8
]
=
RK
[
0
]
^
RCON
[
i
]
^
RK
[
8
]
=
RK
[
0
]
^
RCON
[
i
]
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
7
]
>>
8
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
7
]
>>
8
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
7
]
>>
16
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
7
]
>>
16
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
7
]
>>
24
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
7
]
>>
24
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
7
]
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
RK
[
7
]
)
&
0xFF
]
<<
24
);
RK
[
9
]
=
RK
[
1
]
^
RK
[
8
];
RK
[
9
]
=
RK
[
1
]
^
RK
[
8
];
RK
[
10
]
=
RK
[
2
]
^
RK
[
9
];
RK
[
10
]
=
RK
[
2
]
^
RK
[
9
];
RK
[
11
]
=
RK
[
3
]
^
RK
[
10
];
RK
[
11
]
=
RK
[
3
]
^
RK
[
10
];
RK
[
12
]
=
RK
[
4
]
^
RK
[
12
]
=
RK
[
4
]
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
11
]
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
11
]
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
11
]
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
11
]
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
11
]
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
RK
[
11
]
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
RK
[
11
]
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
RK
[
11
]
>>
24
)
&
0xFF
]
<<
24
);
RK
[
13
]
=
RK
[
5
]
^
RK
[
12
];
RK
[
13
]
=
RK
[
5
]
^
RK
[
12
];
RK
[
14
]
=
RK
[
6
]
^
RK
[
13
];
RK
[
14
]
=
RK
[
6
]
^
RK
[
13
];
...
@@ -642,10 +641,10 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key,
...
@@ -642,10 +641,10 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key,
{
{
for
(
j
=
0
;
j
<
4
;
j
++
,
SK
++
)
for
(
j
=
0
;
j
<
4
;
j
++
,
SK
++
)
{
{
*
RK
++
=
RT0
[
system_get_data_of_array_8
(
FSb
,
(
*
SK
)
&
0xFF
)
]
^
*
RK
++
=
RT0
[
FSb
[
(
*
SK
)
&
0xFF
]
]
^
RT1
[
system_get_data_of_array_8
(
FSb
,
(
*
SK
>>
8
)
&
0xFF
)
]
^
RT1
[
FSb
[
(
*
SK
>>
8
)
&
0xFF
]
]
^
RT2
[
system_get_data_of_array_8
(
FSb
,
(
*
SK
>>
16
)
&
0xFF
)
]
^
RT2
[
FSb
[
(
*
SK
>>
16
)
&
0xFF
]
]
^
RT3
[
system_get_data_of_array_8
(
FSb
,
(
*
SK
>>
24
)
&
0xFF
)
];
RT3
[
FSb
[
(
*
SK
>>
24
)
&
0xFF
]
];
}
}
}
}
...
@@ -711,7 +710,7 @@ exit:
...
@@ -711,7 +710,7 @@ exit:
* AES-ECB block encryption
* AES-ECB block encryption
*/
*/
#if !defined(MBEDTLS_AES_ENCRYPT_ALT)
#if !defined(MBEDTLS_AES_ENCRYPT_ALT)
void
mbedtls_aes_encrypt
(
mbedtls_aes_context
*
ctx
,
int
mbedtls_
internal_
aes_encrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
const
unsigned
char
input
[
16
],
unsigned
char
output
[
16
]
)
unsigned
char
output
[
16
]
)
{
{
...
@@ -734,41 +733,50 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx,
...
@@ -734,41 +733,50 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx,
AES_FROUND
(
Y0
,
Y1
,
Y2
,
Y3
,
X0
,
X1
,
X2
,
X3
);
AES_FROUND
(
Y0
,
Y1
,
Y2
,
Y3
,
X0
,
X1
,
X2
,
X3
);
X0
=
*
RK
++
^
\
X0
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y0
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
Y0
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y1
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
Y1
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y2
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
Y2
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y3
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
Y3
>>
24
)
&
0xFF
]
<<
24
);
X1
=
*
RK
++
^
\
X1
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y1
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
Y1
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y2
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
Y2
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y3
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
Y3
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y0
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
Y0
>>
24
)
&
0xFF
]
<<
24
);
X2
=
*
RK
++
^
\
X2
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y2
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
Y2
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y3
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
Y3
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y0
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
Y0
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y1
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
Y1
>>
24
)
&
0xFF
]
<<
24
);
X3
=
*
RK
++
^
\
X3
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y3
)
&
0xFF
)
)
^
(
(
uint32_t
)
FSb
[
(
Y3
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y0
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
FSb
[
(
Y0
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y1
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
FSb
[
(
Y1
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
FSb
,
(
Y2
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
FSb
[
(
Y2
>>
24
)
&
0xFF
]
<<
24
);
PUT_UINT32_LE
(
X0
,
output
,
0
);
PUT_UINT32_LE
(
X0
,
output
,
0
);
PUT_UINT32_LE
(
X1
,
output
,
4
);
PUT_UINT32_LE
(
X1
,
output
,
4
);
PUT_UINT32_LE
(
X2
,
output
,
8
);
PUT_UINT32_LE
(
X2
,
output
,
8
);
PUT_UINT32_LE
(
X3
,
output
,
12
);
PUT_UINT32_LE
(
X3
,
output
,
12
);
return
(
0
);
}
}
#endif
/* !MBEDTLS_AES_ENCRYPT_ALT */
#endif
/* !MBEDTLS_AES_ENCRYPT_ALT */
void
mbedtls_aes_encrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
unsigned
char
output
[
16
]
)
{
mbedtls_internal_aes_encrypt
(
ctx
,
input
,
output
);
}
/*
/*
* AES-ECB block decryption
* AES-ECB block decryption
*/
*/
#if !defined(MBEDTLS_AES_DECRYPT_ALT)
#if !defined(MBEDTLS_AES_DECRYPT_ALT)
void
mbedtls_aes_decrypt
(
mbedtls_aes_context
*
ctx
,
int
mbedtls_
internal_
aes_decrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
const
unsigned
char
input
[
16
],
unsigned
char
output
[
16
]
)
unsigned
char
output
[
16
]
)
{
{
...
@@ -791,36 +799,45 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx,
...
@@ -791,36 +799,45 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx,
AES_RROUND
(
Y0
,
Y1
,
Y2
,
Y3
,
X0
,
X1
,
X2
,
X3
);
AES_RROUND
(
Y0
,
Y1
,
Y2
,
Y3
,
X0
,
X1
,
X2
,
X3
);
X0
=
*
RK
++
^
\
X0
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y0
)
&
0xFF
)
)
^
(
(
uint32_t
)
RSb
[
(
Y0
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y3
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
RSb
[
(
Y3
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y2
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
RSb
[
(
Y2
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y1
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
RSb
[
(
Y1
>>
24
)
&
0xFF
]
<<
24
);
X1
=
*
RK
++
^
\
X1
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y1
)
&
0xFF
)
)
^
(
(
uint32_t
)
RSb
[
(
Y1
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y0
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
RSb
[
(
Y0
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y3
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
RSb
[
(
Y3
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y2
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
RSb
[
(
Y2
>>
24
)
&
0xFF
]
<<
24
);
X2
=
*
RK
++
^
\
X2
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y2
)
&
0xFF
)
)
^
(
(
uint32_t
)
RSb
[
(
Y2
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y1
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
RSb
[
(
Y1
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y0
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
RSb
[
(
Y0
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y3
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
RSb
[
(
Y3
>>
24
)
&
0xFF
]
<<
24
);
X3
=
*
RK
++
^
\
X3
=
*
RK
++
^
\
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y3
)
&
0xFF
)
)
^
(
(
uint32_t
)
RSb
[
(
Y3
)
&
0xFF
]
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y2
>>
8
)
&
0xFF
)
<<
8
)
^
(
(
uint32_t
)
RSb
[
(
Y2
>>
8
)
&
0xFF
]
<<
8
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y1
>>
16
)
&
0xFF
)
<<
16
)
^
(
(
uint32_t
)
RSb
[
(
Y1
>>
16
)
&
0xFF
]
<<
16
)
^
(
(
uint32_t
)
system_get_data_of_array_8
(
RSb
,
(
Y0
>>
24
)
&
0xFF
)
<<
24
);
(
(
uint32_t
)
RSb
[
(
Y0
>>
24
)
&
0xFF
]
<<
24
);
PUT_UINT32_LE
(
X0
,
output
,
0
);
PUT_UINT32_LE
(
X0
,
output
,
0
);
PUT_UINT32_LE
(
X1
,
output
,
4
);
PUT_UINT32_LE
(
X1
,
output
,
4
);
PUT_UINT32_LE
(
X2
,
output
,
8
);
PUT_UINT32_LE
(
X2
,
output
,
8
);
PUT_UINT32_LE
(
X3
,
output
,
12
);
PUT_UINT32_LE
(
X3
,
output
,
12
);
return
(
0
);
}
}
#endif
/* !MBEDTLS_AES_DECRYPT_ALT */
#endif
/* !MBEDTLS_AES_DECRYPT_ALT */
void
mbedtls_aes_decrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
unsigned
char
output
[
16
]
)
{
mbedtls_internal_aes_decrypt
(
ctx
,
input
,
output
);
}
/*
/*
* AES-ECB block encryption/decryption
* AES-ECB block encryption/decryption
*/
*/
...
@@ -847,11 +864,9 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
...
@@ -847,11 +864,9 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
#endif
#endif
if
(
mode
==
MBEDTLS_AES_ENCRYPT
)
if
(
mode
==
MBEDTLS_AES_ENCRYPT
)
mbedtls
_aes_encrypt
(
ctx
,
input
,
output
);
return
(
mbedtls_internal
_aes_encrypt
(
ctx
,
input
,
output
)
);
else
else
mbedtls_aes_decrypt
(
ctx
,
input
,
output
);
return
(
mbedtls_internal_aes_decrypt
(
ctx
,
input
,
output
)
);
return
(
0
);
}
}
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1220,10 +1235,14 @@ static const int aes_test_ctr_len[3] =
...
@@ -1220,10 +1235,14 @@ static const int aes_test_ctr_len[3] =
*/
*/
int
mbedtls_aes_self_test
(
int
verbose
)
int
mbedtls_aes_self_test
(
int
verbose
)
{
{
int
ret
=
0
,
i
,
j
,
u
,
v
;
int
ret
=
0
,
i
,
j
,
u
,
mode
;
unsigned
int
keybits
;
unsigned
char
key
[
32
];
unsigned
char
key
[
32
];
unsigned
char
buf
[
64
];
unsigned
char
buf
[
64
];
const
unsigned
char
*
aes_tests
;
#if defined(MBEDTLS_CIPHER_MODE_CBC) || defined(MBEDTLS_CIPHER_MODE_CFB)
unsigned
char
iv
[
16
];
unsigned
char
iv
[
16
];
#endif
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
unsigned
char
prv
[
16
];
unsigned
char
prv
[
16
];
#endif
#endif
...
@@ -1246,46 +1265,53 @@ int mbedtls_aes_self_test( int verbose )
...
@@ -1246,46 +1265,53 @@ int mbedtls_aes_self_test( int verbose )
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
{
u
=
i
>>
1
;
u
=
i
>>
1
;
v
=
i
&
1
;
keybits
=
128
+
u
*
64
;
mode
=
i
&
1
;
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-ECB-%3d (%s): "
,
128
+
u
*
64
,
mbedtls_printf
(
" AES-ECB-%3d (%s): "
,
keybits
,
(
v
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
(
mode
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
memset
(
buf
,
0
,
16
);
memset
(
buf
,
0
,
16
);
if
(
v
==
MBEDTLS_AES_DECRYPT
)
if
(
mode
==
MBEDTLS_AES_DECRYPT
)
{
{
mbedtls_aes_setkey_dec
(
&
ctx
,
key
,
128
+
u
*
64
);
ret
=
mbedtls_aes_setkey_dec
(
&
ctx
,
key
,
keybits
);
aes_tests
=
aes_test_ecb_dec
[
u
];
for
(
j
=
0
;
j
<
10000
;
j
++
)
}
mbedtls_aes_crypt_ecb
(
&
ctx
,
v
,
buf
,
buf
);
else
if
(
memcmp
(
buf
,
aes_test_ecb_dec
[
u
],
16
)
!=
0
)
{
{
if
(
verbose
!=
0
)
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
keybits
);
mbedtls_printf
(
"failed
\n
"
);
aes_tests
=
aes_test_ecb_enc
[
u
];
ret
=
1
;
goto
exit
;
}
}
/*
* AES-192 is an optional feature that may be unavailable when
* there is an alternative underlying implementation i.e. when
* MBEDTLS_AES_ALT is defined.
*/
if
(
ret
==
MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE
&&
keybits
==
192
)
{
mbedtls_printf
(
"skipped
\n
"
);
continue
;
}
}
else
else
if
(
ret
!=
0
)
{
{
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
128
+
u
*
64
);
goto
exit
;
}
for
(
j
=
0
;
j
<
10000
;
j
++
)
for
(
j
=
0
;
j
<
10000
;
j
++
)
mbedtls_aes_crypt_ecb
(
&
ctx
,
v
,
buf
,
buf
);
if
(
memcmp
(
buf
,
aes_test_ecb_enc
[
u
],
16
)
!=
0
)
{
{
if
(
verbose
!=
0
)
ret
=
mbedtls_aes_crypt_ecb
(
&
ctx
,
mode
,
buf
,
buf
);
mbedtls_printf
(
"failed
\n
"
);
if
(
ret
!=
0
)
goto
exit
;
}
if
(
memcmp
(
buf
,
aes_tests
,
16
)
!=
0
)
{
ret
=
1
;
ret
=
1
;
goto
exit
;
goto
exit
;
}
}
}
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_printf
(
"passed
\n
"
);
...
@@ -1301,56 +1327,65 @@ int mbedtls_aes_self_test( int verbose )
...
@@ -1301,56 +1327,65 @@ int mbedtls_aes_self_test( int verbose )
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
{
u
=
i
>>
1
;
u
=
i
>>
1
;
v
=
i
&
1
;
keybits
=
128
+
u
*
64
;
mode
=
i
&
1
;
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-CBC-%3d (%s): "
,
128
+
u
*
64
,
mbedtls_printf
(
" AES-CBC-%3d (%s): "
,
keybits
,
(
v
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
(
mode
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
memset
(
iv
,
0
,
16
);
memset
(
iv
,
0
,
16
);
memset
(
prv
,
0
,
16
);
memset
(
prv
,
0
,
16
);
memset
(
buf
,
0
,
16
);
memset
(
buf
,
0
,
16
);
if
(
v
==
MBEDTLS_AES_DECRYPT
)
if
(
mode
==
MBEDTLS_AES_DECRYPT
)
{
{
mbedtls_aes_setkey_dec
(
&
ctx
,
key
,
128
+
u
*
64
);
ret
=
mbedtls_aes_setkey_dec
(
&
ctx
,
key
,
keybits
);
aes_tests
=
aes_test_cbc_dec
[
u
];
for
(
j
=
0
;
j
<
10000
;
j
++
)
}
mbedtls_aes_crypt_cbc
(
&
ctx
,
v
,
16
,
iv
,
buf
,
buf
);
else
if
(
memcmp
(
buf
,
aes_test_cbc_dec
[
u
],
16
)
!=
0
)
{
{
if
(
verbose
!=
0
)
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
keybits
);
mbedtls_printf
(
"failed
\n
"
);
aes_tests
=
aes_test_cbc_enc
[
u
];
ret
=
1
;
goto
exit
;
}
}
/*
* AES-192 is an optional feature that may be unavailable when
* there is an alternative underlying implementation i.e. when
* MBEDTLS_AES_ALT is defined.
*/
if
(
ret
==
MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE
&&
keybits
==
192
)
{
mbedtls_printf
(
"skipped
\n
"
);
continue
;
}
}
else
else
if
(
ret
!=
0
)
{
{
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
128
+
u
*
64
);
goto
exit
;
}
for
(
j
=
0
;
j
<
10000
;
j
++
)
for
(
j
=
0
;
j
<
10000
;
j
++
)
{
if
(
mode
==
MBEDTLS_AES_ENCRYPT
)
{
{
unsigned
char
tmp
[
16
];
unsigned
char
tmp
[
16
];
mbedtls_aes_crypt_cbc
(
&
ctx
,
v
,
16
,
iv
,
buf
,
buf
);
memcpy
(
tmp
,
prv
,
16
);
memcpy
(
tmp
,
prv
,
16
);
memcpy
(
prv
,
buf
,
16
);
memcpy
(
prv
,
buf
,
16
);
memcpy
(
buf
,
tmp
,
16
);
memcpy
(
buf
,
tmp
,
16
);
}
}
if
(
memcmp
(
prv
,
aes_test_cbc_enc
[
u
],
16
)
!=
0
)
ret
=
mbedtls_aes_crypt_cbc
(
&
ctx
,
mode
,
16
,
iv
,
buf
,
buf
);
{
if
(
ret
!=
0
)
if
(
verbose
!=
0
)
goto
exit
;
mbedtls_printf
(
"failed
\n
"
);
}
if
(
memcmp
(
buf
,
aes_tests
,
16
)
!=
0
)
{
ret
=
1
;
ret
=
1
;
goto
exit
;
goto
exit
;
}
}
}
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_printf
(
"passed
\n
"
);
...
@@ -1367,46 +1402,53 @@ int mbedtls_aes_self_test( int verbose )
...
@@ -1367,46 +1402,53 @@ int mbedtls_aes_self_test( int verbose )
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
{
u
=
i
>>
1
;
u
=
i
>>
1
;
v
=
i
&
1
;
keybits
=
128
+
u
*
64
;
mode
=
i
&
1
;
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-CFB128-%3d (%s): "
,
128
+
u
*
64
,
mbedtls_printf
(
" AES-CFB128-%3d (%s): "
,
keybits
,
(
v
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
(
mode
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
memcpy
(
iv
,
aes_test_cfb128_iv
,
16
);
memcpy
(
iv
,
aes_test_cfb128_iv
,
16
);
memcpy
(
key
,
aes_test_cfb128_key
[
u
],
16
+
u
*
8
);
memcpy
(
key
,
aes_test_cfb128_key
[
u
],
keybits
/
8
);
offset
=
0
;
offset
=
0
;
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
128
+
u
*
64
);
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
keybits
);
/*
if
(
v
==
MBEDTLS_AES_DECRYPT
)
* AES-192 is an optional feature that may be unavailable when
* there is an alternative underlying implementation i.e. when
* MBEDTLS_AES_ALT is defined.
*/
if
(
ret
==
MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE
&&
keybits
==
192
)
{
{
m
emcpy
(
buf
,
aes_test_cfb128_ct
[
u
],
64
);
m
bedtls_printf
(
"skipped
\n
"
);
mbedtls_aes_crypt_cfb128
(
&
ctx
,
v
,
64
,
&
offset
,
iv
,
buf
,
buf
)
;
continue
;
}
if
(
memcmp
(
buf
,
aes_test_cfb128_pt
,
64
)
!=
0
)
else
if
(
ret
!=
0
)
{
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
ret
=
1
;
goto
exit
;
goto
exit
;
}
}
if
(
mode
==
MBEDTLS_AES_DECRYPT
)
{
memcpy
(
buf
,
aes_test_cfb128_ct
[
u
],
64
);
aes_tests
=
aes_test_cfb128_pt
;
}
}
else
else
{
{
memcpy
(
buf
,
aes_test_cfb128_pt
,
64
);
memcpy
(
buf
,
aes_test_cfb128_pt
,
64
);
mbedtls_aes_crypt_cfb128
(
&
ctx
,
v
,
64
,
&
offset
,
iv
,
buf
,
buf
);
aes_tests
=
aes_test_cfb128_ct
[
u
];
}
if
(
memcmp
(
buf
,
aes_test_cfb128_ct
[
u
],
64
)
!=
0
)
ret
=
mbedtls_aes_crypt_cfb128
(
&
ctx
,
mode
,
64
,
&
offset
,
iv
,
buf
,
buf
);
{
if
(
ret
!=
0
)
if
(
verbose
!=
0
)
goto
exit
;
mbedtls_printf
(
"failed
\n
"
);
if
(
memcmp
(
buf
,
aes_tests
,
64
)
!=
0
)
{
ret
=
1
;
ret
=
1
;
goto
exit
;
goto
exit
;
}
}
}
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_printf
(
"passed
\n
"
);
...
@@ -1423,52 +1465,42 @@ int mbedtls_aes_self_test( int verbose )
...
@@ -1423,52 +1465,42 @@ int mbedtls_aes_self_test( int verbose )
for
(
i
=
0
;
i
<
6
;
i
++
)
for
(
i
=
0
;
i
<
6
;
i
++
)
{
{
u
=
i
>>
1
;
u
=
i
>>
1
;
v
=
i
&
1
;
mode
=
i
&
1
;
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-CTR-128 (%s): "
,
mbedtls_printf
(
" AES-CTR-128 (%s): "
,
(
v
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
(
mode
==
MBEDTLS_AES_DECRYPT
)
?
"dec"
:
"enc"
);
memcpy
(
nonce_counter
,
aes_test_ctr_nonce_counter
[
u
],
16
);
memcpy
(
nonce_counter
,
aes_test_ctr_nonce_counter
[
u
],
16
);
memcpy
(
key
,
aes_test_ctr_key
[
u
],
16
);
memcpy
(
key
,
aes_test_ctr_key
[
u
],
16
);
offset
=
0
;
offset
=
0
;
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
128
);
if
(
(
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
,
key
,
128
)
)
!=
0
)
goto
exit
;
if
(
v
==
MBEDTLS_AES_DECRYPT
)
{
len
=
aes_test_ctr_len
[
u
];
len
=
aes_test_ctr_len
[
u
];
memcpy
(
buf
,
aes_test_ctr_ct
[
u
],
len
);
mbedtls_aes_crypt_ctr
(
&
ctx
,
len
,
&
offset
,
nonce_counter
,
stream_block
,
buf
,
buf
);
if
(
m
emcmp
(
buf
,
aes_test_ctr_pt
[
u
],
len
)
!=
0
)
if
(
m
ode
==
MBEDTLS_AES_DECRYPT
)
{
{
if
(
verbose
!=
0
)
memcpy
(
buf
,
aes_test_ctr_ct
[
u
],
len
);
mbedtls_printf
(
"failed
\n
"
);
aes_tests
=
aes_test_ctr_pt
[
u
];
ret
=
1
;
goto
exit
;
}
}
}
else
else
{
{
len
=
aes_test_ctr_len
[
u
];
memcpy
(
buf
,
aes_test_ctr_pt
[
u
],
len
);
memcpy
(
buf
,
aes_test_ctr_pt
[
u
],
len
);
aes_tests
=
aes_test_ctr_ct
[
u
];
}
mbedtls_aes_crypt_ctr
(
&
ctx
,
len
,
&
offset
,
nonce_counter
,
stream_block
,
ret
=
mbedtls_aes_crypt_ctr
(
&
ctx
,
len
,
&
offset
,
nonce_counter
,
buf
,
buf
);
stream_block
,
buf
,
buf
);
if
(
ret
!=
0
)
goto
exit
;
if
(
memcmp
(
buf
,
aes_test
_ctr_ct
[
u
]
,
len
)
!=
0
)
if
(
memcmp
(
buf
,
aes_test
s
,
len
)
!=
0
)
{
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
ret
=
1
;
ret
=
1
;
goto
exit
;
goto
exit
;
}
}
}
if
(
verbose
!=
0
)
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_printf
(
"passed
\n
"
);
...
@@ -1481,6 +1513,9 @@ int mbedtls_aes_self_test( int verbose )
...
@@ -1481,6 +1513,9 @@ int mbedtls_aes_self_test( int verbose )
ret
=
0
;
ret
=
0
;
exit:
exit:
if
(
ret
!=
0
&&
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
mbedtls_aes_free
(
&
ctx
);
mbedtls_aes_free
(
&
ctx
);
return
(
ret
);
return
(
ret
);
...
...
app/mbedtls/library/aesni.c
View file @
67027c0d
...
@@ -100,7 +100,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
...
@@ -100,7 +100,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
asm
(
"movdqu (%3), %%xmm0
\n\t
"
// load input
asm
(
"movdqu (%3), %%xmm0
\n\t
"
// load input
"movdqu (%1), %%xmm1
\n\t
"
// load round key 0
"movdqu (%1), %%xmm1
\n\t
"
// load round key 0
"pxor %%xmm1, %%xmm0
\n\t
"
// round 0
"pxor %%xmm1, %%xmm0
\n\t
"
// round 0
"add
q
$16, %1
\n\t
"
// point to next round key
"add
$16, %1
\n\t
"
// point to next round key
"subl $1, %0
\n\t
"
// normal rounds = nr - 1
"subl $1, %0
\n\t
"
// normal rounds = nr - 1
"test %2, %2
\n\t
"
// mode?
"test %2, %2
\n\t
"
// mode?
"jz 2f
\n\t
"
// 0 = decrypt
"jz 2f
\n\t
"
// 0 = decrypt
...
@@ -108,7 +108,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
...
@@ -108,7 +108,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
"1:
\n\t
"
// encryption loop
"1:
\n\t
"
// encryption loop
"movdqu (%1), %%xmm1
\n\t
"
// load round key
"movdqu (%1), %%xmm1
\n\t
"
// load round key
AESENC
xmm1_xmm0
"
\n\t
"
// do round
AESENC
xmm1_xmm0
"
\n\t
"
// do round
"add
q
$16, %1
\n\t
"
// point to next round key
"add
$16, %1
\n\t
"
// point to next round key
"subl $1, %0
\n\t
"
// loop
"subl $1, %0
\n\t
"
// loop
"jnz 1b
\n\t
"
"jnz 1b
\n\t
"
"movdqu (%1), %%xmm1
\n\t
"
// load round key
"movdqu (%1), %%xmm1
\n\t
"
// load round key
...
@@ -118,7 +118,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
...
@@ -118,7 +118,7 @@ int mbedtls_aesni_crypt_ecb( mbedtls_aes_context *ctx,
"2:
\n\t
"
// decryption loop
"2:
\n\t
"
// decryption loop
"movdqu (%1), %%xmm1
\n\t
"
"movdqu (%1), %%xmm1
\n\t
"
AESDEC
xmm1_xmm0
"
\n\t
"
// do round
AESDEC
xmm1_xmm0
"
\n\t
"
// do round
"add
q
$16, %1
\n\t
"
"add
$16, %1
\n\t
"
"subl $1, %0
\n\t
"
"subl $1, %0
\n\t
"
"jnz 2b
\n\t
"
"jnz 2b
\n\t
"
"movdqu (%1), %%xmm1
\n\t
"
// load round key
"movdqu (%1), %%xmm1
\n\t
"
// load round key
...
...
app/mbedtls/library/arc4.c
View file @
67027c0d
...
@@ -49,7 +49,7 @@
...
@@ -49,7 +49,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
void
mbedtls_arc4_init
(
mbedtls_arc4_context
*
ctx
)
void
mbedtls_arc4_init
(
mbedtls_arc4_context
*
ctx
)
...
...
app/mbedtls/library/asn1parse.c
View file @
67027c0d
...
@@ -45,7 +45,7 @@
...
@@ -45,7 +45,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
/*
/*
...
@@ -153,7 +153,7 @@ int mbedtls_asn1_get_int( unsigned char **p,
...
@@ -153,7 +153,7 @@ int mbedtls_asn1_get_int( unsigned char **p,
if
(
(
ret
=
mbedtls_asn1_get_tag
(
p
,
end
,
&
len
,
MBEDTLS_ASN1_INTEGER
)
)
!=
0
)
if
(
(
ret
=
mbedtls_asn1_get_tag
(
p
,
end
,
&
len
,
MBEDTLS_ASN1_INTEGER
)
)
!=
0
)
return
(
ret
);
return
(
ret
);
if
(
len
>
sizeof
(
int
)
||
(
**
p
&
0x80
)
!=
0
)
if
(
len
==
0
||
len
>
sizeof
(
int
)
||
(
**
p
&
0x80
)
!=
0
)
return
(
MBEDTLS_ERR_ASN1_INVALID_LENGTH
);
return
(
MBEDTLS_ERR_ASN1_INVALID_LENGTH
);
*
val
=
0
;
*
val
=
0
;
...
@@ -269,7 +269,8 @@ int mbedtls_asn1_get_sequence_of( unsigned char **p,
...
@@ -269,7 +269,8 @@ int mbedtls_asn1_get_sequence_of( unsigned char **p,
/* Allocate and assign next pointer */
/* Allocate and assign next pointer */
if
(
*
p
<
end
)
if
(
*
p
<
end
)
{
{
cur
->
next
=
mbedtls_calloc
(
1
,
sizeof
(
mbedtls_asn1_sequence
)
);
cur
->
next
=
(
mbedtls_asn1_sequence
*
)
mbedtls_calloc
(
1
,
sizeof
(
mbedtls_asn1_sequence
)
);
if
(
cur
->
next
==
NULL
)
if
(
cur
->
next
==
NULL
)
return
(
MBEDTLS_ERR_ASN1_ALLOC_FAILED
);
return
(
MBEDTLS_ERR_ASN1_ALLOC_FAILED
);
...
...
app/mbedtls/library/asn1write.c
View file @
67027c0d
...
@@ -60,16 +60,43 @@ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len
...
@@ -60,16 +60,43 @@ int mbedtls_asn1_write_len( unsigned char **p, unsigned char *start, size_t len
return
(
2
);
return
(
2
);
}
}
if
(
len
<=
0xFFFF
)
{
if
(
*
p
-
start
<
3
)
if
(
*
p
-
start
<
3
)
return
(
MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
);
return
(
MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
);
// We assume we never have lengths larger than 65535 bytes
*--
(
*
p
)
=
(
len
)
&
0xFF
;
//
*--
(
*
p
)
=
(
len
>>
8
)
&
0xFF
;
*--
(
*
p
)
=
len
%
256
;
*--
(
*
p
)
=
(
len
/
256
)
%
256
;
*--
(
*
p
)
=
0x82
;
*--
(
*
p
)
=
0x82
;
return
(
3
);
return
(
3
);
}
if
(
len
<=
0xFFFFFF
)
{
if
(
*
p
-
start
<
4
)
return
(
MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
);
*--
(
*
p
)
=
(
len
)
&
0xFF
;
*--
(
*
p
)
=
(
len
>>
8
)
&
0xFF
;
*--
(
*
p
)
=
(
len
>>
16
)
&
0xFF
;
*--
(
*
p
)
=
0x83
;
return
(
4
);
}
if
(
len
<=
0xFFFFFFFF
)
{
if
(
*
p
-
start
<
5
)
return
(
MBEDTLS_ERR_ASN1_BUF_TOO_SMALL
);
*--
(
*
p
)
=
(
len
)
&
0xFF
;
*--
(
*
p
)
=
(
len
>>
8
)
&
0xFF
;
*--
(
*
p
)
=
(
len
>>
16
)
&
0xFF
;
*--
(
*
p
)
=
(
len
>>
24
)
&
0xFF
;
*--
(
*
p
)
=
0x84
;
return
(
5
);
}
return
(
MBEDTLS_ERR_ASN1_INVALID_LENGTH
);
}
}
int
mbedtls_asn1_write_tag
(
unsigned
char
**
p
,
unsigned
char
*
start
,
unsigned
char
tag
)
int
mbedtls_asn1_write_tag
(
unsigned
char
**
p
,
unsigned
char
*
start
,
unsigned
char
tag
)
...
@@ -312,7 +339,9 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data
...
@@ -312,7 +339,9 @@ mbedtls_asn1_named_data *mbedtls_asn1_store_named_data( mbedtls_asn1_named_data
{
{
// Add new entry if not present yet based on OID
// Add new entry if not present yet based on OID
//
//
if
(
(
cur
=
mbedtls_calloc
(
1
,
sizeof
(
mbedtls_asn1_named_data
)
)
)
==
NULL
)
cur
=
(
mbedtls_asn1_named_data
*
)
mbedtls_calloc
(
1
,
sizeof
(
mbedtls_asn1_named_data
)
);
if
(
cur
==
NULL
)
return
(
NULL
);
return
(
NULL
);
cur
->
oid
.
len
=
oid_len
;
cur
->
oid
.
len
=
oid_len
;
...
...
app/mbedtls/library/base64.c
View file @
67027c0d
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
#endif
/* MBEDTLS_PLATFORM_C */
#endif
/* MBEDTLS_PLATFORM_C */
#endif
/* MBEDTLS_SELF_TEST */
#endif
/* MBEDTLS_SELF_TEST */
static
const
unsigned
char
base64_enc_map
[
64
]
ICACHE_RODATA_ATTR
=
static
const
unsigned
char
base64_enc_map
[
64
]
=
{
{
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'A'
,
'B'
,
'C'
,
'D'
,
'E'
,
'F'
,
'G'
,
'H'
,
'I'
,
'J'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
'K'
,
'L'
,
'M'
,
'N'
,
'O'
,
'P'
,
'Q'
,
'R'
,
'S'
,
'T'
,
...
@@ -52,7 +52,7 @@ static const unsigned char base64_enc_map[64] ICACHE_RODATA_ATTR =
...
@@ -52,7 +52,7 @@ static const unsigned char base64_enc_map[64] ICACHE_RODATA_ATTR =
'8'
,
'9'
,
'+'
,
'/'
'8'
,
'9'
,
'+'
,
'/'
};
};
static
const
unsigned
char
base64_dec_map
[
128
]
ICACHE_RODATA_ATTR
=
static
const
unsigned
char
base64_dec_map
[
128
]
=
{
{
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
127
,
...
@@ -97,7 +97,7 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -97,7 +97,7 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
n
*=
4
;
n
*=
4
;
if
(
dlen
<
n
+
1
)
if
(
(
dlen
<
n
+
1
)
||
(
NULL
==
dst
)
)
{
{
*
olen
=
n
+
1
;
*
olen
=
n
+
1
;
return
(
MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL
);
return
(
MBEDTLS_ERR_BASE64_BUFFER_TOO_SMALL
);
...
@@ -111,10 +111,10 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -111,10 +111,10 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
C2
=
*
src
++
;
C2
=
*
src
++
;
C3
=
*
src
++
;
C3
=
*
src
++
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
(
C1
>>
2
)
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
(
C1
>>
2
)
&
0x3F
]
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
(((
C1
&
3
)
<<
4
)
+
(
C2
>>
4
))
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
(((
C1
&
3
)
<<
4
)
+
(
C2
>>
4
))
&
0x3F
]
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
(((
C2
&
15
)
<<
2
)
+
(
C3
>>
6
))
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
(((
C2
&
15
)
<<
2
)
+
(
C3
>>
6
))
&
0x3F
]
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
C3
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
C3
&
0x3F
]
;
}
}
if
(
i
<
slen
)
if
(
i
<
slen
)
...
@@ -122,11 +122,11 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -122,11 +122,11 @@ int mbedtls_base64_encode( unsigned char *dst, size_t dlen, size_t *olen,
C1
=
*
src
++
;
C1
=
*
src
++
;
C2
=
(
(
i
+
1
)
<
slen
)
?
*
src
++
:
0
;
C2
=
(
(
i
+
1
)
<
slen
)
?
*
src
++
:
0
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
(
C1
>>
2
)
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
(
C1
>>
2
)
&
0x3F
]
;
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
(((
C1
&
3
)
<<
4
)
+
(
C2
>>
4
))
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
(((
C1
&
3
)
<<
4
)
+
(
C2
>>
4
))
&
0x3F
]
;
if
(
(
i
+
1
)
<
slen
)
if
(
(
i
+
1
)
<
slen
)
*
p
++
=
system_get_data_of_array_8
(
base64_enc_map
,
((
C2
&
15
)
<<
2
)
&
0x3F
)
;
*
p
++
=
base64_enc_map
[
((
C2
&
15
)
<<
2
)
&
0x3F
]
;
else
*
p
++
=
'='
;
else
*
p
++
=
'='
;
*
p
++
=
'='
;
*
p
++
=
'='
;
...
@@ -177,10 +177,10 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -177,10 +177,10 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
if
(
src
[
i
]
==
'='
&&
++
j
>
2
)
if
(
src
[
i
]
==
'='
&&
++
j
>
2
)
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
if
(
src
[
i
]
>
127
||
system_get_data_of_array_8
(
base64_dec_map
,
src
[
i
]
)
==
127
)
if
(
src
[
i
]
>
127
||
base64_dec_map
[
src
[
i
]
]
==
127
)
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
if
(
system_get_data_of_array_8
(
base64_dec_map
,
src
[
i
]
)
<
64
&&
j
!=
0
)
if
(
base64_dec_map
[
src
[
i
]
]
<
64
&&
j
!=
0
)
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
return
(
MBEDTLS_ERR_BASE64_INVALID_CHARACTER
);
n
++
;
n
++
;
...
@@ -192,7 +192,11 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -192,7 +192,11 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
return
(
0
);
return
(
0
);
}
}
n
=
(
(
n
*
6
)
+
7
)
>>
3
;
/* The following expression is to calculate the following formula without
* risk of integer overflow in n:
* n = ( ( n * 6 ) + 7 ) >> 3;
*/
n
=
(
6
*
(
n
>>
3
)
)
+
(
(
6
*
(
n
&
0x7
)
+
7
)
>>
3
);
n
-=
j
;
n
-=
j
;
if
(
dst
==
NULL
||
dlen
<
n
)
if
(
dst
==
NULL
||
dlen
<
n
)
...
@@ -206,8 +210,8 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
...
@@ -206,8 +210,8 @@ int mbedtls_base64_decode( unsigned char *dst, size_t dlen, size_t *olen,
if
(
*
src
==
'\r'
||
*
src
==
'\n'
||
*
src
==
' '
)
if
(
*
src
==
'\r'
||
*
src
==
'\n'
||
*
src
==
' '
)
continue
;
continue
;
j
-=
(
system_get_data_of_array_8
(
base64_dec_map
,
*
src
)
==
64
);
j
-=
(
base64_dec_map
[
*
src
]
==
64
);
x
=
(
x
<<
6
)
|
(
system_get_data_of_array_8
(
base64_dec_map
,
*
src
)
&
0x3F
);
x
=
(
x
<<
6
)
|
(
base64_dec_map
[
*
src
]
&
0x3F
);
if
(
++
n
==
4
)
if
(
++
n
==
4
)
{
{
...
...
app/mbedtls/library/bignum.c
View file @
67027c0d
...
@@ -42,7 +42,7 @@
...
@@ -42,7 +42,7 @@
#endif
#endif
#if defined(MBEDTLS_BIGNUM_C)
#if defined(MBEDTLS_BIGNUM_C)
#include "c_types.h"
#include "mbedtls/bignum.h"
#include "mbedtls/bignum.h"
#include "mbedtls/bn_mul.h"
#include "mbedtls/bn_mul.h"
...
@@ -58,6 +58,11 @@
...
@@ -58,6 +58,11 @@
#define mbedtls_free free
#define mbedtls_free free
#endif
#endif
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_mpi_zeroize
(
mbedtls_mpi_uint
*
v
,
size_t
n
)
{
volatile
mbedtls_mpi_uint
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
}
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
...
@@ -99,7 +104,7 @@ void mbedtls_mpi_free( mbedtls_mpi *X )
...
@@ -99,7 +104,7 @@ void mbedtls_mpi_free( mbedtls_mpi *X )
if
(
X
->
p
!=
NULL
)
if
(
X
->
p
!=
NULL
)
{
{
mbedtls_zeroize
(
X
->
p
,
X
->
n
*
ciL
);
mbedtls_
mpi_
zeroize
(
X
->
p
,
X
->
n
);
mbedtls_free
(
X
->
p
);
mbedtls_free
(
X
->
p
);
}
}
...
@@ -120,13 +125,13 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs )
...
@@ -120,13 +125,13 @@ int mbedtls_mpi_grow( mbedtls_mpi *X, size_t nblimbs )
if
(
X
->
n
<
nblimbs
)
if
(
X
->
n
<
nblimbs
)
{
{
if
(
(
p
=
mbedtls_calloc
(
nblimbs
,
ciL
)
)
==
NULL
)
if
(
(
p
=
(
mbedtls_mpi_uint
*
)
mbedtls_calloc
(
nblimbs
,
ciL
)
)
==
NULL
)
return
(
MBEDTLS_ERR_MPI_ALLOC_FAILED
);
return
(
MBEDTLS_ERR_MPI_ALLOC_FAILED
);
if
(
X
->
p
!=
NULL
)
if
(
X
->
p
!=
NULL
)
{
{
memcpy
(
p
,
X
->
p
,
X
->
n
*
ciL
);
memcpy
(
p
,
X
->
p
,
X
->
n
*
ciL
);
mbedtls_zeroize
(
X
->
p
,
X
->
n
*
ciL
);
mbedtls_
mpi_
zeroize
(
X
->
p
,
X
->
n
);
mbedtls_free
(
X
->
p
);
mbedtls_free
(
X
->
p
);
}
}
...
@@ -158,13 +163,13 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs )
...
@@ -158,13 +163,13 @@ int mbedtls_mpi_shrink( mbedtls_mpi *X, size_t nblimbs )
if
(
i
<
nblimbs
)
if
(
i
<
nblimbs
)
i
=
nblimbs
;
i
=
nblimbs
;
if
(
(
p
=
mbedtls_calloc
(
i
,
ciL
)
)
==
NULL
)
if
(
(
p
=
(
mbedtls_mpi_uint
*
)
mbedtls_calloc
(
i
,
ciL
)
)
==
NULL
)
return
(
MBEDTLS_ERR_MPI_ALLOC_FAILED
);
return
(
MBEDTLS_ERR_MPI_ALLOC_FAILED
);
if
(
X
->
p
!=
NULL
)
if
(
X
->
p
!=
NULL
)
{
{
memcpy
(
p
,
X
->
p
,
i
*
ciL
);
memcpy
(
p
,
X
->
p
,
i
*
ciL
);
mbedtls_zeroize
(
X
->
p
,
X
->
n
*
ciL
);
mbedtls_
mpi_
zeroize
(
X
->
p
,
X
->
n
);
mbedtls_free
(
X
->
p
);
mbedtls_free
(
X
->
p
);
}
}
...
@@ -534,7 +539,12 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix,
...
@@ -534,7 +539,12 @@ int mbedtls_mpi_write_string( const mbedtls_mpi *X, int radix,
n
=
mbedtls_mpi_bitlen
(
X
);
n
=
mbedtls_mpi_bitlen
(
X
);
if
(
radix
>=
4
)
n
>>=
1
;
if
(
radix
>=
4
)
n
>>=
1
;
if
(
radix
>=
16
)
n
>>=
1
;
if
(
radix
>=
16
)
n
>>=
1
;
n
+=
3
;
/*
* Round up the buffer length to an even value to ensure that there is
* enough room for hexadecimal values that can be represented in an odd
* number of digits.
*/
n
+=
3
+
(
(
n
+
1
)
&
1
);
if
(
buflen
<
n
)
if
(
buflen
<
n
)
{
{
...
@@ -611,11 +621,11 @@ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin )
...
@@ -611,11 +621,11 @@ int mbedtls_mpi_read_file( mbedtls_mpi *X, int radix, FILE *fin )
if
(
slen
==
sizeof
(
s
)
-
2
)
if
(
slen
==
sizeof
(
s
)
-
2
)
return
(
MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
);
return
(
MBEDTLS_ERR_MPI_BUFFER_TOO_SMALL
);
if
(
s
[
slen
-
1
]
==
'\n'
)
{
slen
--
;
s
[
slen
]
=
'\0'
;
}
if
(
slen
>
0
&&
s
[
slen
-
1
]
==
'\n'
)
{
slen
--
;
s
[
slen
]
=
'\0'
;
}
if
(
s
[
slen
-
1
]
==
'\r'
)
{
slen
--
;
s
[
slen
]
=
'\0'
;
}
if
(
slen
>
0
&&
s
[
slen
-
1
]
==
'\r'
)
{
slen
--
;
s
[
slen
]
=
'\0'
;
}
p
=
s
+
slen
;
p
=
s
+
slen
;
while
(
--
p
>
=
s
)
while
(
p
--
>
s
)
if
(
mpi_get_digit
(
&
d
,
radix
,
*
p
)
!=
0
)
if
(
mpi_get_digit
(
&
d
,
radix
,
*
p
)
!=
0
)
break
;
break
;
...
@@ -667,16 +677,20 @@ cleanup:
...
@@ -667,16 +677,20 @@ cleanup:
int
mbedtls_mpi_read_binary
(
mbedtls_mpi
*
X
,
const
unsigned
char
*
buf
,
size_t
buflen
)
int
mbedtls_mpi_read_binary
(
mbedtls_mpi
*
X
,
const
unsigned
char
*
buf
,
size_t
buflen
)
{
{
int
ret
;
int
ret
;
size_t
i
,
j
,
n
;
size_t
i
,
j
;
size_t
const
limbs
=
CHARS_TO_LIMBS
(
buflen
);
for
(
n
=
0
;
n
<
buflen
;
n
++
)
/* Ensure that target MPI has exactly the necessary number of limbs */
if
(
buf
[
n
]
!=
0
)
if
(
X
->
n
!=
limbs
)
break
;
{
mbedtls_mpi_free
(
X
);
mbedtls_mpi_init
(
X
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_grow
(
X
,
limbs
)
);
}
MBEDTLS_MPI_CHK
(
mbedtls_mpi_grow
(
X
,
CHARS_TO_LIMBS
(
buflen
-
n
)
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_lset
(
X
,
0
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_lset
(
X
,
0
)
);
for
(
i
=
buflen
,
j
=
0
;
i
>
n
;
i
--
,
j
++
)
for
(
i
=
buflen
,
j
=
0
;
i
>
0
;
i
--
,
j
++
)
X
->
p
[
j
/
ciL
]
|=
((
mbedtls_mpi_uint
)
buf
[
i
-
1
])
<<
((
j
%
ciL
)
<<
3
);
X
->
p
[
j
/
ciL
]
|=
((
mbedtls_mpi_uint
)
buf
[
i
-
1
])
<<
((
j
%
ciL
)
<<
3
);
cleanup:
cleanup:
...
@@ -883,7 +897,7 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -883,7 +897,7 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
{
{
int
ret
;
int
ret
;
size_t
i
,
j
;
size_t
i
,
j
;
mbedtls_mpi_uint
*
o
,
*
p
,
c
;
mbedtls_mpi_uint
*
o
,
*
p
,
c
,
tmp
;
if
(
X
==
B
)
if
(
X
==
B
)
{
{
...
@@ -906,10 +920,14 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -906,10 +920,14 @@ int mbedtls_mpi_add_abs( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
o
=
B
->
p
;
p
=
X
->
p
;
c
=
0
;
o
=
B
->
p
;
p
=
X
->
p
;
c
=
0
;
/*
* tmp is used because it might happen that p == o
*/
for
(
i
=
0
;
i
<
j
;
i
++
,
o
++
,
p
++
)
for
(
i
=
0
;
i
<
j
;
i
++
,
o
++
,
p
++
)
{
{
tmp
=
*
o
;
*
p
+=
c
;
c
=
(
*
p
<
c
);
*
p
+=
c
;
c
=
(
*
p
<
c
);
*
p
+=
*
o
;
c
+=
(
*
p
<
*
o
);
*
p
+=
tmp
;
c
+=
(
*
p
<
tmp
);
}
}
while
(
c
!=
0
)
while
(
c
!=
0
)
...
@@ -1538,12 +1556,15 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N )
...
@@ -1538,12 +1556,15 @@ static void mpi_montg_init( mbedtls_mpi_uint *mm, const mbedtls_mpi *N )
/*
/*
* Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36)
* Montgomery multiplication: A = A * B * R^-1 mod N (HAC 14.36)
*/
*/
static
void
mpi_montmul
(
mbedtls_mpi
*
A
,
const
mbedtls_mpi
*
B
,
const
mbedtls_mpi
*
N
,
mbedtls_mpi_uint
mm
,
static
int
mpi_montmul
(
mbedtls_mpi
*
A
,
const
mbedtls_mpi
*
B
,
const
mbedtls_mpi
*
N
,
mbedtls_mpi_uint
mm
,
const
mbedtls_mpi
*
T
)
const
mbedtls_mpi
*
T
)
{
{
size_t
i
,
n
,
m
;
size_t
i
,
n
,
m
;
mbedtls_mpi_uint
u0
,
u1
,
*
d
;
mbedtls_mpi_uint
u0
,
u1
,
*
d
;
if
(
T
->
n
<
N
->
n
+
1
||
T
->
p
==
NULL
)
return
(
MBEDTLS_ERR_MPI_BAD_INPUT_DATA
);
memset
(
T
->
p
,
0
,
T
->
n
*
ciL
);
memset
(
T
->
p
,
0
,
T
->
n
*
ciL
);
d
=
T
->
p
;
d
=
T
->
p
;
...
@@ -1571,12 +1592,14 @@ static void mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi
...
@@ -1571,12 +1592,14 @@ static void mpi_montmul( mbedtls_mpi *A, const mbedtls_mpi *B, const mbedtls_mpi
else
else
/* prevent timing attacks */
/* prevent timing attacks */
mpi_sub_hlp
(
n
,
A
->
p
,
T
->
p
);
mpi_sub_hlp
(
n
,
A
->
p
,
T
->
p
);
return
(
0
);
}
}
/*
/*
* Montgomery reduction: A = A * R^-1 mod N
* Montgomery reduction: A = A * R^-1 mod N
*/
*/
static
void
mpi_montred
(
mbedtls_mpi
*
A
,
const
mbedtls_mpi
*
N
,
mbedtls_mpi_uint
mm
,
const
mbedtls_mpi
*
T
)
static
int
mpi_montred
(
mbedtls_mpi
*
A
,
const
mbedtls_mpi
*
N
,
mbedtls_mpi_uint
mm
,
const
mbedtls_mpi
*
T
)
{
{
mbedtls_mpi_uint
z
=
1
;
mbedtls_mpi_uint
z
=
1
;
mbedtls_mpi
U
;
mbedtls_mpi
U
;
...
@@ -1584,7 +1607,7 @@ static void mpi_montred( mbedtls_mpi *A, const mbedtls_mpi *N, mbedtls_mpi_uint
...
@@ -1584,7 +1607,7 @@ static void mpi_montred( mbedtls_mpi *A, const mbedtls_mpi *N, mbedtls_mpi_uint
U
.
n
=
U
.
s
=
(
int
)
z
;
U
.
n
=
U
.
s
=
(
int
)
z
;
U
.
p
=
&
z
;
U
.
p
=
&
z
;
mpi_montmul
(
A
,
&
U
,
N
,
mm
,
T
);
return
(
mpi_montmul
(
A
,
&
U
,
N
,
mm
,
T
)
);
}
}
/*
/*
...
@@ -1661,13 +1684,13 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1661,13 +1684,13 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
else
else
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
1
],
A
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
1
],
A
)
);
mpi_montmul
(
&
W
[
1
],
&
RR
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
&
W
[
1
],
&
RR
,
N
,
mm
,
&
T
)
);
/*
/*
* X = R^2 * R^-1 mod N = R mod N
* X = R^2 * R^-1 mod N = R mod N
*/
*/
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
X
,
&
RR
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
X
,
&
RR
)
);
mpi_montred
(
X
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montred
(
X
,
N
,
mm
,
&
T
)
);
if
(
wsize
>
1
)
if
(
wsize
>
1
)
{
{
...
@@ -1680,7 +1703,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1680,7 +1703,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
j
],
&
W
[
1
]
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
j
],
&
W
[
1
]
)
);
for
(
i
=
0
;
i
<
wsize
-
1
;
i
++
)
for
(
i
=
0
;
i
<
wsize
-
1
;
i
++
)
mpi_montmul
(
&
W
[
j
],
&
W
[
j
],
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
&
W
[
j
],
&
W
[
j
],
N
,
mm
,
&
T
)
);
/*
/*
* W[i] = W[i - 1] * W[1]
* W[i] = W[i - 1] * W[1]
...
@@ -1690,7 +1713,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1690,7 +1713,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
MBEDTLS_MPI_CHK
(
mbedtls_mpi_grow
(
&
W
[
i
],
N
->
n
+
1
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_grow
(
&
W
[
i
],
N
->
n
+
1
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
i
],
&
W
[
i
-
1
]
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_copy
(
&
W
[
i
],
&
W
[
i
-
1
]
)
);
mpi_montmul
(
&
W
[
i
],
&
W
[
1
],
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
&
W
[
i
],
&
W
[
1
],
N
,
mm
,
&
T
)
);
}
}
}
}
...
@@ -1727,7 +1750,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1727,7 +1750,7 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
/*
/*
* out of window, square X
* out of window, square X
*/
*/
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
)
);
continue
;
continue
;
}
}
...
@@ -1745,12 +1768,12 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1745,12 +1768,12 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
* X = X^wsize R^-1 mod N
* X = X^wsize R^-1 mod N
*/
*/
for
(
i
=
0
;
i
<
wsize
;
i
++
)
for
(
i
=
0
;
i
<
wsize
;
i
++
)
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
)
);
/*
/*
* X = X * W[wbits] R^-1 mod N
* X = X * W[wbits] R^-1 mod N
*/
*/
mpi_montmul
(
X
,
&
W
[
wbits
],
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
X
,
&
W
[
wbits
],
N
,
mm
,
&
T
)
);
state
--
;
state
--
;
nbits
=
0
;
nbits
=
0
;
...
@@ -1763,20 +1786,20 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1763,20 +1786,20 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
*/
*/
for
(
i
=
0
;
i
<
nbits
;
i
++
)
for
(
i
=
0
;
i
<
nbits
;
i
++
)
{
{
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
X
,
X
,
N
,
mm
,
&
T
)
);
wbits
<<=
1
;
wbits
<<=
1
;
if
(
(
wbits
&
(
one
<<
wsize
)
)
!=
0
)
if
(
(
wbits
&
(
one
<<
wsize
)
)
!=
0
)
mpi_montmul
(
X
,
&
W
[
1
],
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montmul
(
X
,
&
W
[
1
],
N
,
mm
,
&
T
)
);
}
}
/*
/*
* X = A^E * R * R^-1 mod N = A^E mod N
* X = A^E * R * R^-1 mod N = A^E mod N
*/
*/
mpi_montred
(
X
,
N
,
mm
,
&
T
);
MBEDTLS_MPI_CHK
(
mpi_montred
(
X
,
N
,
mm
,
&
T
)
);
if
(
neg
)
if
(
neg
&&
E
->
n
!=
0
&&
(
E
->
p
[
0
]
&
1
)
!=
0
)
{
{
X
->
s
=
-
1
;
X
->
s
=
-
1
;
MBEDTLS_MPI_CHK
(
mbedtls_mpi_add_mpi
(
X
,
N
,
X
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_add_mpi
(
X
,
N
,
X
)
);
...
@@ -1868,6 +1891,7 @@ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size,
...
@@ -1868,6 +1891,7 @@ int mbedtls_mpi_fill_random( mbedtls_mpi *X, size_t size,
MBEDTLS_MPI_CHK
(
mbedtls_mpi_read_binary
(
X
,
buf
,
size
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_read_binary
(
X
,
buf
,
size
)
);
cleanup:
cleanup:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
return
(
ret
);
return
(
ret
);
}
}
...
@@ -1879,7 +1903,7 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
...
@@ -1879,7 +1903,7 @@ int mbedtls_mpi_inv_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
int
ret
;
int
ret
;
mbedtls_mpi
G
,
TA
,
TU
,
U1
,
U2
,
TB
,
TV
,
V1
,
V2
;
mbedtls_mpi
G
,
TA
,
TU
,
U1
,
U2
,
TB
,
TV
,
V1
,
V2
;
if
(
mbedtls_mpi_cmp_int
(
N
,
0
)
<=
0
)
if
(
mbedtls_mpi_cmp_int
(
N
,
1
)
<=
0
)
return
(
MBEDTLS_ERR_MPI_BAD_INPUT_DATA
);
return
(
MBEDTLS_ERR_MPI_BAD_INPUT_DATA
);
mbedtls_mpi_init
(
&
TA
);
mbedtls_mpi_init
(
&
TU
);
mbedtls_mpi_init
(
&
U1
);
mbedtls_mpi_init
(
&
U2
);
mbedtls_mpi_init
(
&
TA
);
mbedtls_mpi_init
(
&
TU
);
mbedtls_mpi_init
(
&
U1
);
mbedtls_mpi_init
(
&
U2
);
...
@@ -1968,7 +1992,7 @@ cleanup:
...
@@ -1968,7 +1992,7 @@ cleanup:
#if defined(MBEDTLS_GENPRIME)
#if defined(MBEDTLS_GENPRIME)
static
const
int
small_prime
[]
ICACHE_RODATA_ATTR
STORE_ATTR
=
static
const
int
small_prime
[]
=
{
{
3
,
5
,
7
,
11
,
13
,
17
,
19
,
23
,
3
,
5
,
7
,
11
,
13
,
17
,
19
,
23
,
29
,
31
,
37
,
41
,
43
,
47
,
53
,
59
,
29
,
31
,
37
,
41
,
43
,
47
,
53
,
59
,
...
...
app/mbedtls/library/blowfish.c
View file @
67027c0d
...
@@ -41,7 +41,7 @@
...
@@ -41,7 +41,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
/*
/*
...
...
app/mbedtls/library/camellia.c
View file @
67027c0d
...
@@ -50,7 +50,7 @@
...
@@ -50,7 +50,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
/*
/*
...
...
app/mbedtls/library/ccm.c
View file @
67027c0d
...
@@ -49,9 +49,11 @@
...
@@ -49,9 +49,11 @@
#endif
/* MBEDTLS_PLATFORM_C */
#endif
/* MBEDTLS_PLATFORM_C */
#endif
/* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */
#endif
/* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */
#if !defined(MBEDTLS_CCM_ALT)
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
#define CCM_ENCRYPT 0
#define CCM_ENCRYPT 0
...
@@ -348,6 +350,7 @@ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length,
...
@@ -348,6 +350,7 @@ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length,
return
(
0
);
return
(
0
);
}
}
#endif
/* !MBEDTLS_CCM_ALT */
#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
/*
/*
...
...
app/mbedtls/library/certs.c
View file @
67027c0d
...
@@ -27,8 +27,6 @@
...
@@ -27,8 +27,6 @@
#include "mbedtls/certs.h"
#include "mbedtls/certs.h"
#if defined(MBEDTLS_SELF_TEST)
#if defined(MBEDTLS_CERTS_C)
#if defined(MBEDTLS_CERTS_C)
#if defined(MBEDTLS_ECDSA_C)
#if defined(MBEDTLS_ECDSA_C)
...
@@ -49,6 +47,7 @@
...
@@ -49,6 +47,7 @@
"uCjn8pwUOkABXK8Mss90fzCfCEOtIA==\r\n" \
"uCjn8pwUOkABXK8Mss90fzCfCEOtIA==\r\n" \
"-----END CERTIFICATE-----\r\n"
"-----END CERTIFICATE-----\r\n"
const
char
mbedtls_test_ca_crt_ec
[]
=
TEST_CA_CRT_EC
;
const
char
mbedtls_test_ca_crt_ec
[]
=
TEST_CA_CRT_EC
;
const
size_t
mbedtls_test_ca_crt_ec_len
=
sizeof
(
mbedtls_test_ca_crt_ec
);
const
char
mbedtls_test_ca_key_ec
[]
=
const
char
mbedtls_test_ca_key_ec
[]
=
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
...
@@ -60,8 +59,10 @@ const char mbedtls_test_ca_key_ec[] =
...
@@ -60,8 +59,10 @@ const char mbedtls_test_ca_key_ec[] =
"UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb
\r\n
"
"UsuWTITwJImcnlAs1gaRZ3sAWm7cOUidL0fo2G0fYUFNcYoCSLffCFTEHBuPnagb
\r\n
"
"a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm
\r\n
"
"a77x/sY1Bvii8S9/XhDTb6pTMx06wzrm
\r\n
"
"-----END EC PRIVATE KEY-----
\r\n
"
;
"-----END EC PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_ca_key_ec_len
=
sizeof
(
mbedtls_test_ca_key_ec
);
const
char
mbedtls_test_ca_pwd_ec
[]
=
"PolarSSLTest"
;
const
char
mbedtls_test_ca_pwd_ec
[]
=
"PolarSSLTest"
;
const
size_t
mbedtls_test_ca_pwd_ec_len
=
sizeof
(
mbedtls_test_ca_pwd_ec
)
-
1
;
const
char
mbedtls_test_srv_crt_ec
[]
=
const
char
mbedtls_test_srv_crt_ec
[]
=
"-----BEGIN CERTIFICATE-----
\r\n
"
"-----BEGIN CERTIFICATE-----
\r\n
"
...
@@ -78,6 +79,7 @@ const char mbedtls_test_srv_crt_ec[] =
...
@@ -78,6 +79,7 @@ const char mbedtls_test_srv_crt_ec[] =
"C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V
\r\n
"
"C12r0Lz3ri/moSEpNZWqPjkCMCE2f53GXcYLqyfyJR078c/xNSUU5+Xxl7VZ414V
\r\n
"
"fGa5kHvHARBPc8YAIVIqDvHH1Q==
\r\n
"
"fGa5kHvHARBPc8YAIVIqDvHH1Q==
\r\n
"
"-----END CERTIFICATE-----
\r\n
"
;
"-----END CERTIFICATE-----
\r\n
"
;
const
size_t
mbedtls_test_srv_crt_ec_len
=
sizeof
(
mbedtls_test_srv_crt_ec
);
const
char
mbedtls_test_srv_key_ec
[]
=
const
char
mbedtls_test_srv_key_ec
[]
=
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
...
@@ -85,6 +87,7 @@ const char mbedtls_test_srv_key_ec[] =
...
@@ -85,6 +87,7 @@ const char mbedtls_test_srv_key_ec[] =
"AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/
\r\n
"
"AwEHoUQDQgAEN8xW2XYJHlpyPsdZLf8gbu58+QaRdNCtFLX3aCJZYpJO5QDYIxH/
\r\n
"
"6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==
\r\n
"
"6i/SNF1dFr2KiMJrdw1VzYoqDvoByLTt/w==
\r\n
"
"-----END EC PRIVATE KEY-----
\r\n
"
;
"-----END EC PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_srv_key_ec_len
=
sizeof
(
mbedtls_test_srv_key_ec
);
const
char
mbedtls_test_cli_crt_ec
[]
=
const
char
mbedtls_test_cli_crt_ec
[]
=
"-----BEGIN CERTIFICATE-----
\r\n
"
"-----BEGIN CERTIFICATE-----
\r\n
"
...
@@ -101,6 +104,7 @@ const char mbedtls_test_cli_crt_ec[] =
...
@@ -101,6 +104,7 @@ const char mbedtls_test_cli_crt_ec[] =
"lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU
\r\n
"
"lgOsjnhw3fIOoLIWy2WOGsk/LGF++DzvrRzuNiACMQCd8iem1XS4JK7haj8xocpU
\r\n
"
"LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=
\r\n
"
"LwjQje5PDGHfd3h9tP38Qknu5bJqws0md2KOKHyeV0U=
\r\n
"
"-----END CERTIFICATE-----
\r\n
"
;
"-----END CERTIFICATE-----
\r\n
"
;
const
size_t
mbedtls_test_cli_crt_ec_len
=
sizeof
(
mbedtls_test_cli_crt_ec
);
const
char
mbedtls_test_cli_key_ec
[]
=
const
char
mbedtls_test_cli_key_ec
[]
=
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
"-----BEGIN EC PRIVATE KEY-----
\r\n
"
...
@@ -108,20 +112,45 @@ const char mbedtls_test_cli_key_ec[] =
...
@@ -108,20 +112,45 @@ const char mbedtls_test_cli_key_ec[] =
"AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW
\r\n
"
"AwEHoUQDQgAEV+WusXPf06y7k7iB/xKu7uZTrM5VU/Y0Dswu42MlC9+Y4vNcYDaW
\r\n
"
"wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==
\r\n
"
"wNUYFHDlf5/VS0UY5bBs1Vz4lo+HcKPkxw==
\r\n
"
"-----END EC PRIVATE KEY-----
\r\n
"
;
"-----END EC PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_ca_crt_ec_len
=
sizeof
(
mbedtls_test_ca_crt_ec
);
const
size_t
mbedtls_test_ca_key_ec_len
=
sizeof
(
mbedtls_test_ca_key_ec
);
const
size_t
mbedtls_test_ca_pwd_ec_len
=
sizeof
(
mbedtls_test_ca_pwd_ec
)
-
1
;
const
size_t
mbedtls_test_srv_crt_ec_len
=
sizeof
(
mbedtls_test_srv_crt_ec
);
const
size_t
mbedtls_test_srv_key_ec_len
=
sizeof
(
mbedtls_test_srv_key_ec
);
const
size_t
mbedtls_test_cli_crt_ec_len
=
sizeof
(
mbedtls_test_cli_crt_ec
);
const
size_t
mbedtls_test_cli_key_ec_len
=
sizeof
(
mbedtls_test_cli_key_ec
);
const
size_t
mbedtls_test_cli_key_ec_len
=
sizeof
(
mbedtls_test_cli_key_ec
);
#else
#define TEST_CA_CRT_EC
#endif
/* MBEDTLS_ECDSA_C */
#endif
/* MBEDTLS_ECDSA_C */
#if defined(MBEDTLS_RSA_C)
#if defined(MBEDTLS_RSA_C)
#define TEST_CA_CRT_RSA \
#if defined(MBEDTLS_SHA256_C)
#define TEST_CA_CRT_RSA_SHA256 \
"-----BEGIN CERTIFICATE-----\r\n" \
"MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQsFADA7MQswCQYDVQQGEwJOTDER\r\n" \
"MA8GA1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" \
"MTcwNTA0MTY1NzAxWhcNMjcwNTA1MTY1NzAxWjA7MQswCQYDVQQGEwJOTDERMA8G\r\n" \
"A1UECgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0EwggEiMA0G\r\n" \
"CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDA3zf8F7vglp0/ht6WMn1EpRagzSHx\r\n" \
"mdTs6st8GFgIlKXsm8WL3xoemTiZhx57wI053zhdcHgH057Zk+i5clHFzqMwUqny\r\n" \
"50BwFMtEonILwuVA+T7lpg6z+exKY8C4KQB0nFc7qKUEkHHxvYPZP9al4jwqj+8n\r\n" \
"YMPGn8u67GB9t+aEMr5P+1gmIgNb1LTV+/Xjli5wwOQuvfwu7uJBVcA0Ln0kcmnL\r\n" \
"R7EUQIN9Z/SG9jGr8XmksrUuEvmEF/Bibyc+E1ixVA0hmnM3oTDPb5Lc9un8rNsu\r\n" \
"KNF+AksjoBXyOGVkCeoMbo4bF6BxyLObyavpw/LPh5aPgAIynplYb6LVAgMBAAGj\r\n" \
"gZUwgZIwHQYDVR0OBBYEFLRa5KWz3tJS9rnVppUP6z68x/3/MGMGA1UdIwRcMFqA\r\n" \
"FLRa5KWz3tJS9rnVppUP6z68x/3/oT+kPTA7MQswCQYDVQQGEwJOTDERMA8GA1UE\r\n" \
"CgwIUG9sYXJTU0wxGTAXBgNVBAMMEFBvbGFyU1NMIFRlc3QgQ0GCAQAwDAYDVR0T\r\n" \
"BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAHK/HHrTZMnnVMpde1io+voAtql7j\r\n" \
"4sRhLrjD7o3THtwRbDa2diCvpq0Sq23Ng2LMYoXsOxoL/RQK3iN7UKxV3MKPEr0w\r\n" \
"XQS+kKQqiT2bsfrjnWMVHZtUOMpm6FNqcdGm/Rss3vKda2lcKl8kUnq/ylc1+QbB\r\n" \
"G6A6tUvQcr2ZyWfVg+mM5XkhTrOOXus2OLikb4WwEtJTJRNE0f+yPODSUz0/vT57\r\n" \
"ApH0CnB80bYJshYHPHHymOtleAB8KSYtqm75g/YNobjnjB6cm4HkW3OZRVIl6fYY\r\n" \
"n20NRVA1Vjs6GAROr4NqW4k/+LofY9y0LLDE+p0oIEKXIsIvhPr39swxSA==\r\n" \
"-----END CERTIFICATE-----\r\n"
const
char
mbedtls_test_ca_crt_rsa
[]
=
TEST_CA_CRT_RSA_SHA256
;
const
size_t
mbedtls_test_ca_crt_rsa_len
=
sizeof
(
mbedtls_test_ca_crt_rsa
);
#define TEST_CA_CRT_RSA_SOME
static
const
char
mbedtls_test_ca_crt_rsa_sha256
[]
=
TEST_CA_CRT_RSA_SHA256
;
#endif
#if !defined(TEST_CA_CRT_RSA_SOME) || defined(MBEDTLS_SHA1_C)
#define TEST_CA_CRT_RSA_SHA1 \
"-----BEGIN CERTIFICATE-----\r\n" \
"-----BEGIN CERTIFICATE-----\r\n" \
"MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" \
"MIIDhzCCAm+gAwIBAgIBADANBgkqhkiG9w0BAQUFADA7MQswCQYDVQQGEwJOTDER\r\n" \
"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" \
"MA8GA1UEChMIUG9sYXJTU0wxGTAXBgNVBAMTEFBvbGFyU1NMIFRlc3QgQ0EwHhcN\r\n" \
...
@@ -143,7 +172,15 @@ const size_t mbedtls_test_cli_key_ec_len = sizeof( mbedtls_test_cli_key_ec );
...
@@ -143,7 +172,15 @@ const size_t mbedtls_test_cli_key_ec_len = sizeof( mbedtls_test_cli_key_ec );
"m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ\r\n" \
"m/UTSLBNFNHesiTZeH31NcxYGdHSme9Nc/gfidRa0FLOCfWxRlFqAI47zG9jAQCZ\r\n" \
"7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA==\r\n" \
"7Z2mCGDNMhjQc+BYcdnl0lPXjdDK6V0qCg1dVewhUBcW5gZKzV7e9+DpVA==\r\n" \
"-----END CERTIFICATE-----\r\n"
"-----END CERTIFICATE-----\r\n"
const
char
mbedtls_test_ca_crt_rsa
[]
=
TEST_CA_CRT_RSA
;
#if !defined (TEST_CA_CRT_RSA_SOME)
const
char
mbedtls_test_ca_crt_rsa
[]
=
TEST_CA_CRT_RSA_SHA1
;
const
size_t
mbedtls_test_ca_crt_rsa_len
=
sizeof
(
mbedtls_test_ca_crt_rsa
);
#endif
static
const
char
mbedtls_test_ca_crt_rsa_sha1
[]
=
TEST_CA_CRT_RSA_SHA1
;
#endif
const
char
mbedtls_test_ca_key_rsa
[]
=
const
char
mbedtls_test_ca_key_rsa
[]
=
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
...
@@ -176,8 +213,10 @@ const char mbedtls_test_ca_key_rsa[] =
...
@@ -176,8 +213,10 @@ const char mbedtls_test_ca_key_rsa[] =
"wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde
\r\n
"
"wN48lslbHnqqagr6Xm1nNOSVl8C/6kbJEsMpLhAezfRtGwvOucoaE+WbeUNolGde
\r\n
"
"P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2
\r\n
"
"P/eQiddSf0brnpiLJRh7qZrl9XuqYdpUqnoEdMAfotDOID8OtV7gt8a48ad8VPW2
\r\n
"
"-----END RSA PRIVATE KEY-----
\r\n
"
;
"-----END RSA PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_ca_key_rsa_len
=
sizeof
(
mbedtls_test_ca_key_rsa
);
const
char
mbedtls_test_ca_pwd_rsa
[]
=
"PolarSSLTest"
;
const
char
mbedtls_test_ca_pwd_rsa
[]
=
"PolarSSLTest"
;
const
size_t
mbedtls_test_ca_pwd_rsa_len
=
sizeof
(
mbedtls_test_ca_pwd_rsa
)
-
1
;
const
char
mbedtls_test_srv_crt_rsa
[]
=
const
char
mbedtls_test_srv_crt_rsa
[]
=
"-----BEGIN CERTIFICATE-----
\r\n
"
"-----BEGIN CERTIFICATE-----
\r\n
"
...
@@ -200,6 +239,7 @@ const char mbedtls_test_srv_crt_rsa[] =
...
@@ -200,6 +239,7 @@ const char mbedtls_test_srv_crt_rsa[] =
"RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8
\r\n
"
"RRQfaD8neM9c1S/iJ/amTVqJxA1KOdOS5780WhPfSArA+g4qAmSjelc3p4wWpha8
\r\n
"
"zhuYwjVuX6JHG0c=
\r\n
"
"zhuYwjVuX6JHG0c=
\r\n
"
"-----END CERTIFICATE-----
\r\n
"
;
"-----END CERTIFICATE-----
\r\n
"
;
const
size_t
mbedtls_test_srv_crt_rsa_len
=
sizeof
(
mbedtls_test_srv_crt_rsa
);
const
char
mbedtls_test_srv_key_rsa
[]
=
const
char
mbedtls_test_srv_key_rsa
[]
=
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
...
@@ -229,28 +269,31 @@ const char mbedtls_test_srv_key_rsa[] =
...
@@ -229,28 +269,31 @@ const char mbedtls_test_srv_key_rsa[] =
"4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE
\r\n
"
"4AgahOxIxXx2gxJnq3yfkJfIjwf0s2DyP0kY2y6Ua1OeomPeY9mrIS4tCuDQ6LrE
\r\n
"
"TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==
\r\n
"
"TB6l9VGoxJL4fyHnZb8L5gGvnB1bbD8cL6YPaDiOhcRseC9vBiEuVg==
\r\n
"
"-----END RSA PRIVATE KEY-----
\r\n
"
;
"-----END RSA PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_srv_key_rsa_len
=
sizeof
(
mbedtls_test_srv_key_rsa
);
const
char
mbedtls_test_cli_crt_rsa
[]
=
const
char
mbedtls_test_cli_crt_rsa
[]
=
"-----BEGIN CERTIFICATE-----
\r\n
"
"-----BEGIN CERTIFICATE-----
\r\n
"
"MIID
Pz
CCA
ie
gAwIBAgIBBDANBgkqhkiG9w0BAQ
U
FADA7MQswCQYDVQQGEwJOTDER
\r\n
"
"MIID
hT
CCA
m2
gAwIBAgIBBDANBgkqhkiG9w0BAQ
s
FADA7MQswCQYDVQQGEwJOTDER
\r\n
"
"MA8GA1UEC
hM
IUG9sYXJTU0wxGTAXBgNVBAM
T
EFBvbGFyU1NMIFRlc3QgQ0EwHhcN
\r\n
"
"MA8GA1UEC
gw
IUG9sYXJTU0wxGTAXBgNVBAM
M
EFBvbGFyU1NMIFRlc3QgQ0EwHhcN
\r\n
"
"MT
EwMjEyMTQ0NDA3WhcNMjEwMjEyMTQ0NDA3
WjA8MQswCQYDVQQGEwJOTDERMA8G
\r\n
"
"MT
cwNTA1MTMwNzU5WhcNMjcwNTA2MTMwNzU5
WjA8MQswCQYDVQQGEwJOTDERMA8G
\r\n
"
"A1UEC
hM
IUG9sYXJTU0wxGjAYBgNVBAM
T
EVBvbGFyU1NMIENsaWVudCAyMIIBIjAN
\r\n
"
"A1UEC
gw
IUG9sYXJTU0wxGjAYBgNVBAM
M
EVBvbGFyU1NMIENsaWVudCAyMIIBIjAN
\r\n
"
"BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f
\r\n
"
"BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyHTEzLn5tXnpRdkUYLB9u5Pyax6f
\r\n
"
"M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu
\r\n
"
"M60Nj4o8VmXl3ETZzGaFB9X4J7BKNdBjngpuG7fa8H6r7gwQk4ZJGDTzqCrSV/Uu
\r\n
"
"1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw
\r\n
"
"1C93KYRhTYJQj6eVSHD1bk2y1RPD0hrt5kPqQhTrdOrA7R/UV06p86jt0uDBMHEw
\r\n
"
"MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v
\r\n
"
"MjDV0/YI0FZPRo7yX/k9Z5GIMC5Cst99++UMd//sMcB4j7/Cf8qtbCHWjdmLao5v
\r\n
"
"4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/
\r\n
"
"4Jv4EFbMs44TFeY0BGbH7vk2DmqV9gmaBmf0ZXH4yqSxJeD+PIs1BGe64E92hfx/
\r\n
"
"/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB
\r\n
"
"/DZrtenNLQNiTrM9AM+vdqBpVoNq0qjU51Bx5rU2BXcFbXvI5MT9TNUhXwIDAQAB
\r\n
"
"o00wSzAJBgNVHRMEAjAAMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITAf
\r\n
"
"o4GSMIGPMB0GA1UdDgQWBBRxoQBzckAvVHZeM/xSj7zx3WtGITBjBgNVHSMEXDBa
\r\n
"
"BgNVHSMEGDAWgBS0WuSls97SUva51aaVD+s+vMf9/zANBgkqhkiG9w0BAQUFAAOC
\r\n
"
"gBS0WuSls97SUva51aaVD+s+vMf9/6E/pD0wOzELMAkGA1UEBhMCTkwxETAPBgNV
\r\n
"
"AQEAAn86isAM8X+mVwJqeItt6E9slhEQbAofyk+diH1Lh8Y9iLlWQSKbw/UXYjx5
\r\n
"
"BAoMCFBvbGFyU1NMMRkwFwYDVQQDDBBQb2xhclNTTCBUZXN0IENBggEAMAkGA1Ud
\r\n
"
"LLPZcniovxIcARC/BjyZR9g3UwTHNGNm+rwrqa15viuNOFBchykX/Orsk02EH7NR
\r\n
"
"EwQCMAAwDQYJKoZIhvcNAQELBQADggEBAC7yO786NvcHpK8UovKIG9cB32oSQQom
\r\n
"
"Alw5WLPorYjED6cdVQgBl9ot93HdJogRiXCxErM7NC8/eP511mjq+uLDjLKH8ZPQ
\r\n
"
"LoR0eHDRzdqEkoq7yGZufHFiRAAzbMqJfogRtxlrWAeB4y/jGaMBV25IbFOIcH2W
\r\n
"
"8I4ekHJnroLsDkIwXKGIsvIBHQy2ac/NwHLCQOK6mfum1pRx52V4Utu5dLLjD5bM
\r\n
"
"iCEaMMbG+VQLKNvuC63kmw/Zewc9ThM6Pa1Hcy0axT0faf1B/U01j0FIcw/6mTfK
\r\n
"
"xOBC7KU4xZKuMXXZM6/93Yb51K/J4ahf1TxJlTWXtnzDr9saEYdNy2SKY/6ZiDNH
\r\n
"
"D8w48OIwc1yr0JtutCVjig5DC0yznGMt32RyseOLcUe+lfq005v2PAiCozr5X8rE
\r\n
"
"D+stpAKiQLAWaAusIWKYEyw9MQ==
\r\n
"
"ofGZpiM2NqRPePgYy+Vc75Zk28xkRQq1ncprgQb3S4vTsZdScpM9hLf+eMlrgqlj
\r\n
"
"c5PLSkXBeLE5+fedkyfTaLxxQlgCpuoOhKBm04/R1pWNzUHyqagjO9Q=
\r\n
"
"-----END CERTIFICATE-----
\r\n
"
;
"-----END CERTIFICATE-----
\r\n
"
;
const
size_t
mbedtls_test_cli_crt_rsa_len
=
sizeof
(
mbedtls_test_cli_crt_rsa
);
const
char
mbedtls_test_cli_key_rsa
[]
=
const
char
mbedtls_test_cli_key_rsa
[]
=
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
"-----BEGIN RSA PRIVATE KEY-----
\r\n
"
...
@@ -280,28 +323,32 @@ const char mbedtls_test_cli_key_rsa[] =
...
@@ -280,28 +323,32 @@ const char mbedtls_test_cli_key_rsa[] =
"bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv
\r\n
"
"bHFVW2r0dBTqegP2/KTOxKzaHfC1qf0RGDsUoJCNJrd1cwoCLG8P2EF4w3OBrKqv
\r\n
"
"8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==
\r\n
"
"8u4ytY0F+Vlanj5lm3TaoHSVF1+NWPyOTiwevIECGKwSxvlki4fDAA==
\r\n
"
"-----END RSA PRIVATE KEY-----
\r\n
"
;
"-----END RSA PRIVATE KEY-----
\r\n
"
;
const
size_t
mbedtls_test_ca_crt_rsa_len
=
sizeof
(
mbedtls_test_ca_crt_rsa
);
const
size_t
mbedtls_test_ca_key_rsa_len
=
sizeof
(
mbedtls_test_ca_key_rsa
);
const
size_t
mbedtls_test_ca_pwd_rsa_len
=
sizeof
(
mbedtls_test_ca_pwd_rsa
)
-
1
;
const
size_t
mbedtls_test_srv_crt_rsa_len
=
sizeof
(
mbedtls_test_srv_crt_rsa
);
const
size_t
mbedtls_test_srv_key_rsa_len
=
sizeof
(
mbedtls_test_srv_key_rsa
);
const
size_t
mbedtls_test_cli_crt_rsa_len
=
sizeof
(
mbedtls_test_cli_crt_rsa
);
const
size_t
mbedtls_test_cli_key_rsa_len
=
sizeof
(
mbedtls_test_cli_key_rsa
);
const
size_t
mbedtls_test_cli_key_rsa_len
=
sizeof
(
mbedtls_test_cli_key_rsa
);
#else
#define TEST_CA_CRT_RSA
#endif
/* MBEDTLS_RSA_C */
#endif
/* MBEDTLS_RSA_C */
#if defined(MBEDTLS_PEM_PARSE_C)
#if defined(MBEDTLS_PEM_PARSE_C)
/* Concatenation of all available CA certificates */
/* Concatenation of all available CA certificates */
const
char
mbedtls_test_cas_pem
[]
=
TEST_CA_CRT_RSA
TEST_CA_CRT_EC
;
const
char
mbedtls_test_cas_pem
[]
=
#ifdef TEST_CA_CRT_RSA_SHA1
TEST_CA_CRT_RSA_SHA1
#endif
#ifdef TEST_CA_CRT_RSA_SHA256
TEST_CA_CRT_RSA_SHA256
#endif
#ifdef TEST_CA_CRT_EC
TEST_CA_CRT_EC
#endif
""
;
const
size_t
mbedtls_test_cas_pem_len
=
sizeof
(
mbedtls_test_cas_pem
);
const
size_t
mbedtls_test_cas_pem_len
=
sizeof
(
mbedtls_test_cas_pem
);
#endif
#endif
/* List of all available CA certificates */
/* List of all available CA certificates */
const
char
*
mbedtls_test_cas
[]
=
{
const
char
*
mbedtls_test_cas
[]
=
{
#if defined(MBEDTLS_RSA_C)
#if defined(TEST_CA_CRT_RSA_SHA1)
mbedtls_test_ca_crt_rsa
,
mbedtls_test_ca_crt_rsa_sha1
,
#endif
#if defined(TEST_CA_CRT_RSA_SHA256)
mbedtls_test_ca_crt_rsa_sha256
,
#endif
#endif
#if defined(MBEDTLS_ECDSA_C)
#if defined(MBEDTLS_ECDSA_C)
mbedtls_test_ca_crt_ec
,
mbedtls_test_ca_crt_ec
,
...
@@ -309,8 +356,11 @@ const char * mbedtls_test_cas[] = {
...
@@ -309,8 +356,11 @@ const char * mbedtls_test_cas[] = {
NULL
NULL
};
};
const
size_t
mbedtls_test_cas_len
[]
=
{
const
size_t
mbedtls_test_cas_len
[]
=
{
#if defined(MBEDTLS_RSA_C)
#if defined(TEST_CA_CRT_RSA_SHA1)
sizeof
(
mbedtls_test_ca_crt_rsa
),
sizeof
(
mbedtls_test_ca_crt_rsa_sha1
),
#endif
#if defined(TEST_CA_CRT_RSA_SHA256)
sizeof
(
mbedtls_test_ca_crt_rsa_sha256
),
#endif
#endif
#if defined(MBEDTLS_ECDSA_C)
#if defined(MBEDTLS_ECDSA_C)
sizeof
(
mbedtls_test_ca_crt_ec
),
sizeof
(
mbedtls_test_ca_crt_ec
),
...
@@ -319,7 +369,7 @@ const size_t mbedtls_test_cas_len[] = {
...
@@ -319,7 +369,7 @@ const size_t mbedtls_test_cas_len[] = {
};
};
#if defined(MBEDTLS_RSA_C)
#if defined(MBEDTLS_RSA_C)
const
char
*
mbedtls_test_ca_crt
=
mbedtls_test_ca_crt_rsa
;
const
char
*
mbedtls_test_ca_crt
=
mbedtls_test_ca_crt_rsa
;
/* SHA1 or SHA256 */
const
char
*
mbedtls_test_ca_key
=
mbedtls_test_ca_key_rsa
;
const
char
*
mbedtls_test_ca_key
=
mbedtls_test_ca_key_rsa
;
const
char
*
mbedtls_test_ca_pwd
=
mbedtls_test_ca_pwd_rsa
;
const
char
*
mbedtls_test_ca_pwd
=
mbedtls_test_ca_pwd_rsa
;
const
char
*
mbedtls_test_srv_crt
=
mbedtls_test_srv_crt_rsa
;
const
char
*
mbedtls_test_srv_crt
=
mbedtls_test_srv_crt_rsa
;
...
@@ -351,7 +401,3 @@ const size_t mbedtls_test_cli_key_len = sizeof( mbedtls_test_cli_key_ec );
...
@@ -351,7 +401,3 @@ const size_t mbedtls_test_cli_key_len = sizeof( mbedtls_test_cli_key_ec );
#endif
/* MBEDTLS_RSA_C */
#endif
/* MBEDTLS_RSA_C */
#endif
/* MBEDTLS_CERTS_C */
#endif
/* MBEDTLS_CERTS_C */
#else
#endif
app/mbedtls/library/cipher.c
View file @
67027c0d
...
@@ -45,13 +45,24 @@
...
@@ -45,13 +45,24 @@
#include "mbedtls/ccm.h"
#include "mbedtls/ccm.h"
#endif
#endif
#if defined(MBEDTLS_CMAC_C)
#include "mbedtls/cmac.h"
#endif
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
#else
#define mbedtls_calloc calloc
#define mbedtls_free free
#endif
#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER)
#if defined(MBEDTLS_ARC4_C) || defined(MBEDTLS_CIPHER_NULL_CIPHER)
#define MBEDTLS_CIPHER_MODE_STREAM
#define MBEDTLS_CIPHER_MODE_STREAM
#endif
#endif
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
static
int
supported_init
=
0
;
static
int
supported_init
=
0
;
...
@@ -127,6 +138,14 @@ void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx )
...
@@ -127,6 +138,14 @@ void mbedtls_cipher_free( mbedtls_cipher_context_t *ctx )
if
(
ctx
==
NULL
)
if
(
ctx
==
NULL
)
return
;
return
;
#if defined(MBEDTLS_CMAC_C)
if
(
ctx
->
cmac_ctx
)
{
mbedtls_zeroize
(
ctx
->
cmac_ctx
,
sizeof
(
mbedtls_cmac_context_t
)
);
mbedtls_free
(
ctx
->
cmac_ctx
);
}
#endif
if
(
ctx
->
cipher_ctx
)
if
(
ctx
->
cipher_ctx
)
ctx
->
cipher_info
->
base
->
ctx_free_func
(
ctx
->
cipher_ctx
);
ctx
->
cipher_info
->
base
->
ctx_free_func
(
ctx
->
cipher_ctx
);
...
@@ -252,6 +271,7 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -252,6 +271,7 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
size_t
ilen
,
unsigned
char
*
output
,
size_t
*
olen
)
size_t
ilen
,
unsigned
char
*
output
,
size_t
*
olen
)
{
{
int
ret
;
int
ret
;
size_t
block_size
=
0
;
if
(
NULL
==
ctx
||
NULL
==
ctx
->
cipher_info
||
NULL
==
olen
)
if
(
NULL
==
ctx
||
NULL
==
ctx
->
cipher_info
||
NULL
==
olen
)
{
{
...
@@ -259,10 +279,11 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -259,10 +279,11 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
}
}
*
olen
=
0
;
*
olen
=
0
;
block_size
=
mbedtls_cipher_get_block_size
(
ctx
);
if
(
ctx
->
cipher_info
->
mode
==
MBEDTLS_MODE_ECB
)
if
(
ctx
->
cipher_info
->
mode
==
MBEDTLS_MODE_ECB
)
{
{
if
(
ilen
!=
mbedtls_cipher_get_
block_size
(
ctx
)
)
if
(
ilen
!=
block_size
)
return
(
MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED
);
return
(
MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED
);
*
olen
=
ilen
;
*
olen
=
ilen
;
...
@@ -285,8 +306,13 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -285,8 +306,13 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
}
}
#endif
#endif
if
(
0
==
block_size
)
{
return
MBEDTLS_ERR_CIPHER_INVALID_CONTEXT
;
}
if
(
input
==
output
&&
if
(
input
==
output
&&
(
ctx
->
unprocessed_len
!=
0
||
ilen
%
mbedtls_cipher_get_
block_size
(
ctx
)
)
)
(
ctx
->
unprocessed_len
!=
0
||
ilen
%
block_size
)
)
{
{
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
}
}
...
@@ -300,9 +326,9 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -300,9 +326,9 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
* If there is not enough data for a full block, cache it.
* If there is not enough data for a full block, cache it.
*/
*/
if
(
(
ctx
->
operation
==
MBEDTLS_DECRYPT
&&
if
(
(
ctx
->
operation
==
MBEDTLS_DECRYPT
&&
ilen
+
ctx
->
unprocessed_len
<=
mbedtls_cipher_get_block_size
(
ctx
)
)
||
ilen
<=
block_size
-
ctx
->
unprocessed_len
)
||
(
ctx
->
operation
==
MBEDTLS_ENCRYPT
&&
(
ctx
->
operation
==
MBEDTLS_ENCRYPT
&&
ilen
+
ctx
->
unprocessed_len
<
mbedtls_cipher_get_block_size
(
ctx
)
)
)
ilen
<
block_size
-
ctx
->
unprocessed_len
)
)
{
{
memcpy
(
&
(
ctx
->
unprocessed_data
[
ctx
->
unprocessed_len
]
),
input
,
memcpy
(
&
(
ctx
->
unprocessed_data
[
ctx
->
unprocessed_len
]
),
input
,
ilen
);
ilen
);
...
@@ -314,22 +340,22 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -314,22 +340,22 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
/*
/*
* Process cached data first
* Process cached data first
*/
*/
if
(
ctx
->
unprocessed_len
!=
0
)
if
(
0
!=
ctx
->
unprocessed_len
)
{
{
copy_len
=
mbedtls_cipher_get_
block_size
(
ctx
)
-
ctx
->
unprocessed_len
;
copy_len
=
block_size
-
ctx
->
unprocessed_len
;
memcpy
(
&
(
ctx
->
unprocessed_data
[
ctx
->
unprocessed_len
]
),
input
,
memcpy
(
&
(
ctx
->
unprocessed_data
[
ctx
->
unprocessed_len
]
),
input
,
copy_len
);
copy_len
);
if
(
0
!=
(
ret
=
ctx
->
cipher_info
->
base
->
cbc_func
(
ctx
->
cipher_ctx
,
if
(
0
!=
(
ret
=
ctx
->
cipher_info
->
base
->
cbc_func
(
ctx
->
cipher_ctx
,
ctx
->
operation
,
mbedtls_cipher_get_
block_size
(
ctx
)
,
ctx
->
iv
,
ctx
->
operation
,
block_size
,
ctx
->
iv
,
ctx
->
unprocessed_data
,
output
)
)
)
ctx
->
unprocessed_data
,
output
)
)
)
{
{
return
(
ret
);
return
(
ret
);
}
}
*
olen
+=
mbedtls_cipher_get_
block_size
(
ctx
)
;
*
olen
+=
block_size
;
output
+=
mbedtls_cipher_get_
block_size
(
ctx
)
;
output
+=
block_size
;
ctx
->
unprocessed_len
=
0
;
ctx
->
unprocessed_len
=
0
;
input
+=
copy_len
;
input
+=
copy_len
;
...
@@ -341,9 +367,14 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
...
@@ -341,9 +367,14 @@ int mbedtls_cipher_update( mbedtls_cipher_context_t *ctx, const unsigned char *i
*/
*/
if
(
0
!=
ilen
)
if
(
0
!=
ilen
)
{
{
copy_len
=
ilen
%
mbedtls_cipher_get_block_size
(
ctx
);
if
(
0
==
block_size
)
{
return
MBEDTLS_ERR_CIPHER_INVALID_CONTEXT
;
}
copy_len
=
ilen
%
block_size
;
if
(
copy_len
==
0
&&
ctx
->
operation
==
MBEDTLS_DECRYPT
)
if
(
copy_len
==
0
&&
ctx
->
operation
==
MBEDTLS_DECRYPT
)
copy_len
=
mbedtls_cipher_get_
block_size
(
ctx
)
;
copy_len
=
block_size
;
memcpy
(
ctx
->
unprocessed_data
,
&
(
input
[
ilen
-
copy_len
]
),
memcpy
(
ctx
->
unprocessed_data
,
&
(
input
[
ilen
-
copy_len
]
),
copy_len
);
copy_len
);
...
@@ -485,14 +516,14 @@ static int get_one_and_zeros_padding( unsigned char *input, size_t input_len,
...
@@ -485,14 +516,14 @@ static int get_one_and_zeros_padding( unsigned char *input, size_t input_len,
if
(
NULL
==
input
||
NULL
==
data_len
)
if
(
NULL
==
input
||
NULL
==
data_len
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
bad
=
0x
FF
;
bad
=
0x
80
;
*
data_len
=
0
;
*
data_len
=
0
;
for
(
i
=
input_len
;
i
>
0
;
i
--
)
for
(
i
=
input_len
;
i
>
0
;
i
--
)
{
{
prev_done
=
done
;
prev_done
=
done
;
done
|=
(
input
[
i
-
1
]
!=
0
);
done
|=
(
input
[
i
-
1
]
!=
0
);
*
data_len
|=
(
i
-
1
)
*
(
done
!=
prev_done
);
*
data_len
|=
(
i
-
1
)
*
(
done
!=
prev_done
);
bad
&=
(
input
[
i
-
1
]
^
0x80
)
|
(
done
=
=
prev_done
);
bad
^=
input
[
i
-
1
]
*
(
done
!
=
prev_done
);
}
}
return
(
MBEDTLS_ERR_CIPHER_INVALID_PADDING
*
(
bad
!=
0
)
);
return
(
MBEDTLS_ERR_CIPHER_INVALID_PADDING
*
(
bad
!=
0
)
);
...
...
app/mbedtls/library/cipher_wrap.c
View file @
67027c0d
...
@@ -178,7 +178,7 @@ static void aes_ctx_free( void *ctx )
...
@@ -178,7 +178,7 @@ static void aes_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
mbedtls_free
(
ctx
);
}
}
static
const
mbedtls_cipher_base_t
aes_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
aes_info
=
{
MBEDTLS_CIPHER_ID_AES
,
MBEDTLS_CIPHER_ID_AES
,
aes_crypt_ecb_wrap
,
aes_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -199,7 +199,7 @@ static const mbedtls_cipher_base_t aes_info ICACHE_RODATA_ATTR = {
...
@@ -199,7 +199,7 @@ static const mbedtls_cipher_base_t aes_info ICACHE_RODATA_ATTR = {
aes_ctx_free
aes_ctx_free
};
};
static
const
mbedtls_cipher_info_t
aes_128_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_ecb_info
=
{
MBEDTLS_CIPHER_AES_128_ECB
,
MBEDTLS_CIPHER_AES_128_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
128
,
128
,
...
@@ -210,7 +210,7 @@ static const mbedtls_cipher_info_t aes_128_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -210,7 +210,7 @@ static const mbedtls_cipher_info_t aes_128_ecb_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_ecb_info
=
{
MBEDTLS_CIPHER_AES_192_ECB
,
MBEDTLS_CIPHER_AES_192_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
192
,
192
,
...
@@ -221,7 +221,7 @@ static const mbedtls_cipher_info_t aes_192_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -221,7 +221,7 @@ static const mbedtls_cipher_info_t aes_192_ecb_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_ecb_info
=
{
MBEDTLS_CIPHER_AES_256_ECB
,
MBEDTLS_CIPHER_AES_256_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
256
,
256
,
...
@@ -233,7 +233,7 @@ static const mbedtls_cipher_info_t aes_256_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -233,7 +233,7 @@ static const mbedtls_cipher_info_t aes_256_ecb_info ICACHE_RODATA_ATTR = {
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
aes_128_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_cbc_info
=
{
MBEDTLS_CIPHER_AES_128_CBC
,
MBEDTLS_CIPHER_AES_128_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
128
,
128
,
...
@@ -244,7 +244,7 @@ static const mbedtls_cipher_info_t aes_128_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -244,7 +244,7 @@ static const mbedtls_cipher_info_t aes_128_cbc_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_cbc_info
=
{
MBEDTLS_CIPHER_AES_192_CBC
,
MBEDTLS_CIPHER_AES_192_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
192
,
192
,
...
@@ -255,7 +255,7 @@ static const mbedtls_cipher_info_t aes_192_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -255,7 +255,7 @@ static const mbedtls_cipher_info_t aes_192_cbc_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_cbc_info
=
{
MBEDTLS_CIPHER_AES_256_CBC
,
MBEDTLS_CIPHER_AES_256_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
256
,
256
,
...
@@ -268,7 +268,7 @@ static const mbedtls_cipher_info_t aes_256_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -268,7 +268,7 @@ static const mbedtls_cipher_info_t aes_256_cbc_info ICACHE_RODATA_ATTR = {
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#if defined(MBEDTLS_CIPHER_MODE_CFB)
#if defined(MBEDTLS_CIPHER_MODE_CFB)
static
const
mbedtls_cipher_info_t
aes_128_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_cfb128_info
=
{
MBEDTLS_CIPHER_AES_128_CFB128
,
MBEDTLS_CIPHER_AES_128_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
128
,
128
,
...
@@ -279,7 +279,7 @@ static const mbedtls_cipher_info_t aes_128_cfb128_info ICACHE_RODATA_ATTR = {
...
@@ -279,7 +279,7 @@ static const mbedtls_cipher_info_t aes_128_cfb128_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_cfb128_info
=
{
MBEDTLS_CIPHER_AES_192_CFB128
,
MBEDTLS_CIPHER_AES_192_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
192
,
192
,
...
@@ -290,7 +290,7 @@ static const mbedtls_cipher_info_t aes_192_cfb128_info ICACHE_RODATA_ATTR = {
...
@@ -290,7 +290,7 @@ static const mbedtls_cipher_info_t aes_192_cfb128_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_cfb128_info
=
{
MBEDTLS_CIPHER_AES_256_CFB128
,
MBEDTLS_CIPHER_AES_256_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
256
,
256
,
...
@@ -303,7 +303,7 @@ static const mbedtls_cipher_info_t aes_256_cfb128_info ICACHE_RODATA_ATTR = {
...
@@ -303,7 +303,7 @@ static const mbedtls_cipher_info_t aes_256_cfb128_info ICACHE_RODATA_ATTR = {
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#if defined(MBEDTLS_CIPHER_MODE_CTR)
#if defined(MBEDTLS_CIPHER_MODE_CTR)
static
const
mbedtls_cipher_info_t
aes_128_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_ctr_info
=
{
MBEDTLS_CIPHER_AES_128_CTR
,
MBEDTLS_CIPHER_AES_128_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
128
,
128
,
...
@@ -314,7 +314,7 @@ static const mbedtls_cipher_info_t aes_128_ctr_info ICACHE_RODATA_ATTR = {
...
@@ -314,7 +314,7 @@ static const mbedtls_cipher_info_t aes_128_ctr_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_ctr_info
=
{
MBEDTLS_CIPHER_AES_192_CTR
,
MBEDTLS_CIPHER_AES_192_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
192
,
192
,
...
@@ -325,7 +325,7 @@ static const mbedtls_cipher_info_t aes_192_ctr_info ICACHE_RODATA_ATTR = {
...
@@ -325,7 +325,7 @@ static const mbedtls_cipher_info_t aes_192_ctr_info ICACHE_RODATA_ATTR = {
&
aes_info
&
aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_ctr_info
=
{
MBEDTLS_CIPHER_AES_256_CTR
,
MBEDTLS_CIPHER_AES_256_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
256
,
256
,
...
@@ -345,7 +345,7 @@ static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
...
@@ -345,7 +345,7 @@ static int gcm_aes_setkey_wrap( void *ctx, const unsigned char *key,
key
,
key_bitlen
);
key
,
key_bitlen
);
}
}
static
const
mbedtls_cipher_base_t
gcm_aes_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
gcm_aes_info
=
{
MBEDTLS_CIPHER_ID_AES
,
MBEDTLS_CIPHER_ID_AES
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -366,7 +366,7 @@ static const mbedtls_cipher_base_t gcm_aes_info ICACHE_RODATA_ATTR = {
...
@@ -366,7 +366,7 @@ static const mbedtls_cipher_base_t gcm_aes_info ICACHE_RODATA_ATTR = {
gcm_ctx_free
,
gcm_ctx_free
,
};
};
static
const
mbedtls_cipher_info_t
aes_128_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_gcm_info
=
{
MBEDTLS_CIPHER_AES_128_GCM
,
MBEDTLS_CIPHER_AES_128_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
128
,
128
,
...
@@ -377,7 +377,7 @@ static const mbedtls_cipher_info_t aes_128_gcm_info ICACHE_RODATA_ATTR = {
...
@@ -377,7 +377,7 @@ static const mbedtls_cipher_info_t aes_128_gcm_info ICACHE_RODATA_ATTR = {
&
gcm_aes_info
&
gcm_aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_gcm_info
=
{
MBEDTLS_CIPHER_AES_192_GCM
,
MBEDTLS_CIPHER_AES_192_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
192
,
192
,
...
@@ -388,7 +388,7 @@ static const mbedtls_cipher_info_t aes_192_gcm_info ICACHE_RODATA_ATTR = {
...
@@ -388,7 +388,7 @@ static const mbedtls_cipher_info_t aes_192_gcm_info ICACHE_RODATA_ATTR = {
&
gcm_aes_info
&
gcm_aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_gcm_info
=
{
MBEDTLS_CIPHER_AES_256_GCM
,
MBEDTLS_CIPHER_AES_256_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
256
,
256
,
...
@@ -408,7 +408,7 @@ static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
...
@@ -408,7 +408,7 @@ static int ccm_aes_setkey_wrap( void *ctx, const unsigned char *key,
key
,
key_bitlen
);
key
,
key_bitlen
);
}
}
static
const
mbedtls_cipher_base_t
ccm_aes_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
ccm_aes_info
=
{
MBEDTLS_CIPHER_ID_AES
,
MBEDTLS_CIPHER_ID_AES
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -429,7 +429,7 @@ static const mbedtls_cipher_base_t ccm_aes_info ICACHE_RODATA_ATTR = {
...
@@ -429,7 +429,7 @@ static const mbedtls_cipher_base_t ccm_aes_info ICACHE_RODATA_ATTR = {
ccm_ctx_free
,
ccm_ctx_free
,
};
};
static
const
mbedtls_cipher_info_t
aes_128_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_128_ccm_info
=
{
MBEDTLS_CIPHER_AES_128_CCM
,
MBEDTLS_CIPHER_AES_128_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
128
,
128
,
...
@@ -440,7 +440,7 @@ static const mbedtls_cipher_info_t aes_128_ccm_info ICACHE_RODATA_ATTR = {
...
@@ -440,7 +440,7 @@ static const mbedtls_cipher_info_t aes_128_ccm_info ICACHE_RODATA_ATTR = {
&
ccm_aes_info
&
ccm_aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_192_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_192_ccm_info
=
{
MBEDTLS_CIPHER_AES_192_CCM
,
MBEDTLS_CIPHER_AES_192_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
192
,
192
,
...
@@ -451,7 +451,7 @@ static const mbedtls_cipher_info_t aes_192_ccm_info ICACHE_RODATA_ATTR = {
...
@@ -451,7 +451,7 @@ static const mbedtls_cipher_info_t aes_192_ccm_info ICACHE_RODATA_ATTR = {
&
ccm_aes_info
&
ccm_aes_info
};
};
static
const
mbedtls_cipher_info_t
aes_256_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
aes_256_ccm_info
=
{
MBEDTLS_CIPHER_AES_256_CCM
,
MBEDTLS_CIPHER_AES_256_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
256
,
256
,
...
@@ -535,7 +535,7 @@ static void camellia_ctx_free( void *ctx )
...
@@ -535,7 +535,7 @@ static void camellia_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
mbedtls_free
(
ctx
);
}
}
static
const
mbedtls_cipher_base_t
camellia_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
camellia_info
=
{
MBEDTLS_CIPHER_ID_CAMELLIA
,
MBEDTLS_CIPHER_ID_CAMELLIA
,
camellia_crypt_ecb_wrap
,
camellia_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -556,7 +556,7 @@ static const mbedtls_cipher_base_t camellia_info ICACHE_RODATA_ATTR = {
...
@@ -556,7 +556,7 @@ static const mbedtls_cipher_base_t camellia_info ICACHE_RODATA_ATTR = {
camellia_ctx_free
camellia_ctx_free
};
};
static
const
mbedtls_cipher_info_t
camellia_128_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_ecb_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_ECB
,
MBEDTLS_CIPHER_CAMELLIA_128_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
128
,
128
,
...
@@ -567,7 +567,7 @@ static const mbedtls_cipher_info_t camellia_128_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -567,7 +567,7 @@ static const mbedtls_cipher_info_t camellia_128_ecb_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_ecb_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_ECB
,
MBEDTLS_CIPHER_CAMELLIA_192_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
192
,
192
,
...
@@ -578,7 +578,7 @@ static const mbedtls_cipher_info_t camellia_192_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -578,7 +578,7 @@ static const mbedtls_cipher_info_t camellia_192_ecb_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_ecb_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_ECB
,
MBEDTLS_CIPHER_CAMELLIA_256_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
256
,
256
,
...
@@ -590,7 +590,7 @@ static const mbedtls_cipher_info_t camellia_256_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -590,7 +590,7 @@ static const mbedtls_cipher_info_t camellia_256_ecb_info ICACHE_RODATA_ATTR = {
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
camellia_128_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_cbc_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_CBC
,
MBEDTLS_CIPHER_CAMELLIA_128_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
128
,
128
,
...
@@ -601,7 +601,7 @@ static const mbedtls_cipher_info_t camellia_128_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -601,7 +601,7 @@ static const mbedtls_cipher_info_t camellia_128_cbc_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_cbc_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_CBC
,
MBEDTLS_CIPHER_CAMELLIA_192_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
192
,
192
,
...
@@ -612,7 +612,7 @@ static const mbedtls_cipher_info_t camellia_192_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -612,7 +612,7 @@ static const mbedtls_cipher_info_t camellia_192_cbc_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_cbc_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_CBC
,
MBEDTLS_CIPHER_CAMELLIA_256_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
256
,
256
,
...
@@ -625,7 +625,7 @@ static const mbedtls_cipher_info_t camellia_256_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -625,7 +625,7 @@ static const mbedtls_cipher_info_t camellia_256_cbc_info ICACHE_RODATA_ATTR = {
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#if defined(MBEDTLS_CIPHER_MODE_CFB)
#if defined(MBEDTLS_CIPHER_MODE_CFB)
static
const
mbedtls_cipher_info_t
camellia_128_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_cfb128_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_CFB128
,
MBEDTLS_CIPHER_CAMELLIA_128_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
128
,
128
,
...
@@ -636,7 +636,7 @@ static const mbedtls_cipher_info_t camellia_128_cfb128_info ICACHE_RODATA_ATTR =
...
@@ -636,7 +636,7 @@ static const mbedtls_cipher_info_t camellia_128_cfb128_info ICACHE_RODATA_ATTR =
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_cfb128_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_CFB128
,
MBEDTLS_CIPHER_CAMELLIA_192_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
192
,
192
,
...
@@ -647,7 +647,7 @@ static const mbedtls_cipher_info_t camellia_192_cfb128_info ICACHE_RODATA_ATTR =
...
@@ -647,7 +647,7 @@ static const mbedtls_cipher_info_t camellia_192_cfb128_info ICACHE_RODATA_ATTR =
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_cfb128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_cfb128_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_CFB128
,
MBEDTLS_CIPHER_CAMELLIA_256_CFB128
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
256
,
256
,
...
@@ -660,7 +660,7 @@ static const mbedtls_cipher_info_t camellia_256_cfb128_info ICACHE_RODATA_ATTR =
...
@@ -660,7 +660,7 @@ static const mbedtls_cipher_info_t camellia_256_cfb128_info ICACHE_RODATA_ATTR =
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#if defined(MBEDTLS_CIPHER_MODE_CTR)
#if defined(MBEDTLS_CIPHER_MODE_CTR)
static
const
mbedtls_cipher_info_t
camellia_128_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_ctr_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_CTR
,
MBEDTLS_CIPHER_CAMELLIA_128_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
128
,
128
,
...
@@ -671,7 +671,7 @@ static const mbedtls_cipher_info_t camellia_128_ctr_info ICACHE_RODATA_ATTR = {
...
@@ -671,7 +671,7 @@ static const mbedtls_cipher_info_t camellia_128_ctr_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_ctr_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_CTR
,
MBEDTLS_CIPHER_CAMELLIA_192_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
192
,
192
,
...
@@ -682,7 +682,7 @@ static const mbedtls_cipher_info_t camellia_192_ctr_info ICACHE_RODATA_ATTR = {
...
@@ -682,7 +682,7 @@ static const mbedtls_cipher_info_t camellia_192_ctr_info ICACHE_RODATA_ATTR = {
&
camellia_info
&
camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_ctr_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_CTR
,
MBEDTLS_CIPHER_CAMELLIA_256_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
256
,
256
,
...
@@ -702,7 +702,7 @@ static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
...
@@ -702,7 +702,7 @@ static int gcm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
key
,
key_bitlen
);
key
,
key_bitlen
);
}
}
static
const
mbedtls_cipher_base_t
gcm_camellia_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
gcm_camellia_info
=
{
MBEDTLS_CIPHER_ID_CAMELLIA
,
MBEDTLS_CIPHER_ID_CAMELLIA
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -723,7 +723,7 @@ static const mbedtls_cipher_base_t gcm_camellia_info ICACHE_RODATA_ATTR = {
...
@@ -723,7 +723,7 @@ static const mbedtls_cipher_base_t gcm_camellia_info ICACHE_RODATA_ATTR = {
gcm_ctx_free
,
gcm_ctx_free
,
};
};
static
const
mbedtls_cipher_info_t
camellia_128_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_gcm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_GCM
,
MBEDTLS_CIPHER_CAMELLIA_128_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
128
,
128
,
...
@@ -734,7 +734,7 @@ static const mbedtls_cipher_info_t camellia_128_gcm_info ICACHE_RODATA_ATTR = {
...
@@ -734,7 +734,7 @@ static const mbedtls_cipher_info_t camellia_128_gcm_info ICACHE_RODATA_ATTR = {
&
gcm_camellia_info
&
gcm_camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_gcm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_GCM
,
MBEDTLS_CIPHER_CAMELLIA_192_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
192
,
192
,
...
@@ -745,7 +745,7 @@ static const mbedtls_cipher_info_t camellia_192_gcm_info ICACHE_RODATA_ATTR = {
...
@@ -745,7 +745,7 @@ static const mbedtls_cipher_info_t camellia_192_gcm_info ICACHE_RODATA_ATTR = {
&
gcm_camellia_info
&
gcm_camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_gcm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_gcm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_GCM
,
MBEDTLS_CIPHER_CAMELLIA_256_GCM
,
MBEDTLS_MODE_GCM
,
MBEDTLS_MODE_GCM
,
256
,
256
,
...
@@ -765,7 +765,7 @@ static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
...
@@ -765,7 +765,7 @@ static int ccm_camellia_setkey_wrap( void *ctx, const unsigned char *key,
key
,
key_bitlen
);
key
,
key_bitlen
);
}
}
static
const
mbedtls_cipher_base_t
ccm_camellia_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
ccm_camellia_info
=
{
MBEDTLS_CIPHER_ID_CAMELLIA
,
MBEDTLS_CIPHER_ID_CAMELLIA
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -786,7 +786,7 @@ static const mbedtls_cipher_base_t ccm_camellia_info ICACHE_RODATA_ATTR = {
...
@@ -786,7 +786,7 @@ static const mbedtls_cipher_base_t ccm_camellia_info ICACHE_RODATA_ATTR = {
ccm_ctx_free
,
ccm_ctx_free
,
};
};
static
const
mbedtls_cipher_info_t
camellia_128_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_128_ccm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_128_CCM
,
MBEDTLS_CIPHER_CAMELLIA_128_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
128
,
128
,
...
@@ -797,7 +797,7 @@ static const mbedtls_cipher_info_t camellia_128_ccm_info ICACHE_RODATA_ATTR = {
...
@@ -797,7 +797,7 @@ static const mbedtls_cipher_info_t camellia_128_ccm_info ICACHE_RODATA_ATTR = {
&
ccm_camellia_info
&
ccm_camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_192_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_192_ccm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_192_CCM
,
MBEDTLS_CIPHER_CAMELLIA_192_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
192
,
192
,
...
@@ -808,7 +808,7 @@ static const mbedtls_cipher_info_t camellia_192_ccm_info ICACHE_RODATA_ATTR = {
...
@@ -808,7 +808,7 @@ static const mbedtls_cipher_info_t camellia_192_ccm_info ICACHE_RODATA_ATTR = {
&
ccm_camellia_info
&
ccm_camellia_info
};
};
static
const
mbedtls_cipher_info_t
camellia_256_ccm_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
camellia_256_ccm_info
=
{
MBEDTLS_CIPHER_CAMELLIA_256_CCM
,
MBEDTLS_CIPHER_CAMELLIA_256_CCM
,
MBEDTLS_MODE_CCM
,
MBEDTLS_MODE_CCM
,
256
,
256
,
...
@@ -941,7 +941,7 @@ static void des3_ctx_free( void *ctx )
...
@@ -941,7 +941,7 @@ static void des3_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
mbedtls_free
(
ctx
);
}
}
static
const
mbedtls_cipher_base_t
des_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
des_info
=
{
MBEDTLS_CIPHER_ID_DES
,
MBEDTLS_CIPHER_ID_DES
,
des_crypt_ecb_wrap
,
des_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -962,7 +962,7 @@ static const mbedtls_cipher_base_t des_info ICACHE_RODATA_ATTR = {
...
@@ -962,7 +962,7 @@ static const mbedtls_cipher_base_t des_info ICACHE_RODATA_ATTR = {
des_ctx_free
des_ctx_free
};
};
static
const
mbedtls_cipher_info_t
des_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_ecb_info
=
{
MBEDTLS_CIPHER_DES_ECB
,
MBEDTLS_CIPHER_DES_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_KEY_LENGTH_DES
,
MBEDTLS_KEY_LENGTH_DES
,
...
@@ -974,7 +974,7 @@ static const mbedtls_cipher_info_t des_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -974,7 +974,7 @@ static const mbedtls_cipher_info_t des_ecb_info ICACHE_RODATA_ATTR = {
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
des_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_cbc_info
=
{
MBEDTLS_CIPHER_DES_CBC
,
MBEDTLS_CIPHER_DES_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_KEY_LENGTH_DES
,
MBEDTLS_KEY_LENGTH_DES
,
...
@@ -986,7 +986,7 @@ static const mbedtls_cipher_info_t des_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -986,7 +986,7 @@ static const mbedtls_cipher_info_t des_cbc_info ICACHE_RODATA_ATTR = {
};
};
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
static
const
mbedtls_cipher_base_t
des_ede_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
des_ede_info
=
{
MBEDTLS_CIPHER_ID_DES
,
MBEDTLS_CIPHER_ID_DES
,
des3_crypt_ecb_wrap
,
des3_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1007,7 +1007,7 @@ static const mbedtls_cipher_base_t des_ede_info ICACHE_RODATA_ATTR = {
...
@@ -1007,7 +1007,7 @@ static const mbedtls_cipher_base_t des_ede_info ICACHE_RODATA_ATTR = {
des3_ctx_free
des3_ctx_free
};
};
static
const
mbedtls_cipher_info_t
des_ede_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_ede_ecb_info
=
{
MBEDTLS_CIPHER_DES_EDE_ECB
,
MBEDTLS_CIPHER_DES_EDE_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_KEY_LENGTH_DES_EDE
,
MBEDTLS_KEY_LENGTH_DES_EDE
,
...
@@ -1019,7 +1019,7 @@ static const mbedtls_cipher_info_t des_ede_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -1019,7 +1019,7 @@ static const mbedtls_cipher_info_t des_ede_ecb_info ICACHE_RODATA_ATTR = {
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
des_ede_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_ede_cbc_info
=
{
MBEDTLS_CIPHER_DES_EDE_CBC
,
MBEDTLS_CIPHER_DES_EDE_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_KEY_LENGTH_DES_EDE
,
MBEDTLS_KEY_LENGTH_DES_EDE
,
...
@@ -1031,7 +1031,7 @@ static const mbedtls_cipher_info_t des_ede_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -1031,7 +1031,7 @@ static const mbedtls_cipher_info_t des_ede_cbc_info ICACHE_RODATA_ATTR = {
};
};
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
static
const
mbedtls_cipher_base_t
des_ede3_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
des_ede3_info
=
{
MBEDTLS_CIPHER_ID_3DES
,
MBEDTLS_CIPHER_ID_3DES
,
des3_crypt_ecb_wrap
,
des3_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1052,7 +1052,7 @@ static const mbedtls_cipher_base_t des_ede3_info ICACHE_RODATA_ATTR = {
...
@@ -1052,7 +1052,7 @@ static const mbedtls_cipher_base_t des_ede3_info ICACHE_RODATA_ATTR = {
des3_ctx_free
des3_ctx_free
};
};
static
const
mbedtls_cipher_info_t
des_ede3_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_ede3_ecb_info
=
{
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_KEY_LENGTH_DES_EDE3
,
MBEDTLS_KEY_LENGTH_DES_EDE3
,
...
@@ -1063,7 +1063,7 @@ static const mbedtls_cipher_info_t des_ede3_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -1063,7 +1063,7 @@ static const mbedtls_cipher_info_t des_ede3_ecb_info ICACHE_RODATA_ATTR = {
&
des_ede3_info
&
des_ede3_info
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
des_ede3_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
des_ede3_cbc_info
=
{
MBEDTLS_CIPHER_DES_EDE3_CBC
,
MBEDTLS_CIPHER_DES_EDE3_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_KEY_LENGTH_DES_EDE3
,
MBEDTLS_KEY_LENGTH_DES_EDE3
,
...
@@ -1140,7 +1140,7 @@ static void blowfish_ctx_free( void *ctx )
...
@@ -1140,7 +1140,7 @@ static void blowfish_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
mbedtls_free
(
ctx
);
}
}
static
const
mbedtls_cipher_base_t
blowfish_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
blowfish_info
=
{
MBEDTLS_CIPHER_ID_BLOWFISH
,
MBEDTLS_CIPHER_ID_BLOWFISH
,
blowfish_crypt_ecb_wrap
,
blowfish_crypt_ecb_wrap
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1161,7 +1161,7 @@ static const mbedtls_cipher_base_t blowfish_info ICACHE_RODATA_ATTR = {
...
@@ -1161,7 +1161,7 @@ static const mbedtls_cipher_base_t blowfish_info ICACHE_RODATA_ATTR = {
blowfish_ctx_free
blowfish_ctx_free
};
};
static
const
mbedtls_cipher_info_t
blowfish_ecb_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
blowfish_ecb_info
=
{
MBEDTLS_CIPHER_BLOWFISH_ECB
,
MBEDTLS_CIPHER_BLOWFISH_ECB
,
MBEDTLS_MODE_ECB
,
MBEDTLS_MODE_ECB
,
128
,
128
,
...
@@ -1173,7 +1173,7 @@ static const mbedtls_cipher_info_t blowfish_ecb_info ICACHE_RODATA_ATTR = {
...
@@ -1173,7 +1173,7 @@ static const mbedtls_cipher_info_t blowfish_ecb_info ICACHE_RODATA_ATTR = {
};
};
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
static
const
mbedtls_cipher_info_t
blowfish_cbc_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
blowfish_cbc_info
=
{
MBEDTLS_CIPHER_BLOWFISH_CBC
,
MBEDTLS_CIPHER_BLOWFISH_CBC
,
MBEDTLS_MODE_CBC
,
MBEDTLS_MODE_CBC
,
128
,
128
,
...
@@ -1186,7 +1186,7 @@ static const mbedtls_cipher_info_t blowfish_cbc_info ICACHE_RODATA_ATTR = {
...
@@ -1186,7 +1186,7 @@ static const mbedtls_cipher_info_t blowfish_cbc_info ICACHE_RODATA_ATTR = {
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#endif
/* MBEDTLS_CIPHER_MODE_CBC */
#if defined(MBEDTLS_CIPHER_MODE_CFB)
#if defined(MBEDTLS_CIPHER_MODE_CFB)
static
const
mbedtls_cipher_info_t
blowfish_cfb64_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
blowfish_cfb64_info
=
{
MBEDTLS_CIPHER_BLOWFISH_CFB64
,
MBEDTLS_CIPHER_BLOWFISH_CFB64
,
MBEDTLS_MODE_CFB
,
MBEDTLS_MODE_CFB
,
128
,
128
,
...
@@ -1199,7 +1199,7 @@ static const mbedtls_cipher_info_t blowfish_cfb64_info ICACHE_RODATA_ATTR = {
...
@@ -1199,7 +1199,7 @@ static const mbedtls_cipher_info_t blowfish_cfb64_info ICACHE_RODATA_ATTR = {
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#endif
/* MBEDTLS_CIPHER_MODE_CFB */
#if defined(MBEDTLS_CIPHER_MODE_CTR)
#if defined(MBEDTLS_CIPHER_MODE_CTR)
static
const
mbedtls_cipher_info_t
blowfish_ctr_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
blowfish_ctr_info
=
{
MBEDTLS_CIPHER_BLOWFISH_CTR
,
MBEDTLS_CIPHER_BLOWFISH_CTR
,
MBEDTLS_MODE_CTR
,
MBEDTLS_MODE_CTR
,
128
,
128
,
...
@@ -1250,7 +1250,7 @@ static void arc4_ctx_free( void *ctx )
...
@@ -1250,7 +1250,7 @@ static void arc4_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
mbedtls_free
(
ctx
);
}
}
static
const
mbedtls_cipher_base_t
arc4_base_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
arc4_base_info
=
{
MBEDTLS_CIPHER_ID_ARC4
,
MBEDTLS_CIPHER_ID_ARC4
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1271,7 +1271,7 @@ static const mbedtls_cipher_base_t arc4_base_info ICACHE_RODATA_ATTR = {
...
@@ -1271,7 +1271,7 @@ static const mbedtls_cipher_base_t arc4_base_info ICACHE_RODATA_ATTR = {
arc4_ctx_free
arc4_ctx_free
};
};
static
const
mbedtls_cipher_info_t
arc4_128_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
arc4_128_info
=
{
MBEDTLS_CIPHER_ARC4_128
,
MBEDTLS_CIPHER_ARC4_128
,
MBEDTLS_MODE_STREAM
,
MBEDTLS_MODE_STREAM
,
128
,
128
,
...
@@ -1313,7 +1313,7 @@ static void null_ctx_free( void *ctx )
...
@@ -1313,7 +1313,7 @@ static void null_ctx_free( void *ctx )
((
void
)
ctx
);
((
void
)
ctx
);
}
}
static
const
mbedtls_cipher_base_t
null_base_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_base_t
null_base_info
=
{
MBEDTLS_CIPHER_ID_NULL
,
MBEDTLS_CIPHER_ID_NULL
,
NULL
,
NULL
,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
#if defined(MBEDTLS_CIPHER_MODE_CBC)
...
@@ -1334,7 +1334,7 @@ static const mbedtls_cipher_base_t null_base_info ICACHE_RODATA_ATTR = {
...
@@ -1334,7 +1334,7 @@ static const mbedtls_cipher_base_t null_base_info ICACHE_RODATA_ATTR = {
null_ctx_free
null_ctx_free
};
};
static
const
mbedtls_cipher_info_t
null_cipher_info
ICACHE_RODATA_ATTR
=
{
static
const
mbedtls_cipher_info_t
null_cipher_info
=
{
MBEDTLS_CIPHER_NULL
,
MBEDTLS_CIPHER_NULL
,
MBEDTLS_MODE_STREAM
,
MBEDTLS_MODE_STREAM
,
0
,
0
,
...
@@ -1346,7 +1346,7 @@ static const mbedtls_cipher_info_t null_cipher_info ICACHE_RODATA_ATTR = {
...
@@ -1346,7 +1346,7 @@ static const mbedtls_cipher_info_t null_cipher_info ICACHE_RODATA_ATTR = {
};
};
#endif
/* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
#endif
/* defined(MBEDTLS_CIPHER_NULL_CIPHER) */
const
mbedtls_cipher_definition_t
mbedtls_cipher_definitions
[]
ICACHE_RODATA_ATTR
=
const
mbedtls_cipher_definition_t
mbedtls_cipher_definitions
[]
=
{
{
#if defined(MBEDTLS_AES_C)
#if defined(MBEDTLS_AES_C)
{
MBEDTLS_CIPHER_AES_128_ECB
,
&
aes_128_ecb_info
},
{
MBEDTLS_CIPHER_AES_128_ECB
,
&
aes_128_ecb_info
},
...
...
app/mbedtls/library/cmac.c
0 → 100644
View file @
67027c0d
/**
* \file cmac.c
*
* \brief NIST SP800-38B compliant CMAC implementation for AES and 3DES
*
* Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of mbed TLS (https://tls.mbed.org)
*/
/*
* References:
*
* - NIST SP 800-38B Recommendation for Block Cipher Modes of Operation: The
* CMAC Mode for Authentication
* http://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-38b.pdf
*
* - RFC 4493 - The AES-CMAC Algorithm
* https://tools.ietf.org/html/rfc4493
*
* - RFC 4615 - The Advanced Encryption Standard-Cipher-based Message
* Authentication Code-Pseudo-Random Function-128 (AES-CMAC-PRF-128)
* Algorithm for the Internet Key Exchange Protocol (IKE)
* https://tools.ietf.org/html/rfc4615
*
* Additional test vectors: ISO/IEC 9797-1
*
*/
#if !defined(MBEDTLS_CONFIG_FILE)
#include "mbedtls/config.h"
#else
#include MBEDTLS_CONFIG_FILE
#endif
#if defined(MBEDTLS_CMAC_C)
#include "mbedtls/cmac.h"
#include <string.h>
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
#else
#include <stdlib.h>
#define mbedtls_calloc calloc
#define mbedtls_free free
#if defined(MBEDTLS_SELF_TEST)
#include <stdio.h>
#define mbedtls_printf printf
#endif
/* MBEDTLS_SELF_TEST */
#endif
/* MBEDTLS_PLATFORM_C */
#if !defined(MBEDTLS_CMAC_ALT) || defined(MBEDTLS_SELF_TEST)
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
/*
* Multiplication by u in the Galois field of GF(2^n)
*
* As explained in NIST SP 800-38B, this can be computed:
*
* If MSB(p) = 0, then p = (p << 1)
* If MSB(p) = 1, then p = (p << 1) ^ R_n
* with R_64 = 0x1B and R_128 = 0x87
*
* Input and output MUST NOT point to the same buffer
* Block size must be 8 bytes or 16 bytes - the block sizes for DES and AES.
*/
static
int
cmac_multiply_by_u
(
unsigned
char
*
output
,
const
unsigned
char
*
input
,
size_t
blocksize
)
{
const
unsigned
char
R_128
=
0x87
;
const
unsigned
char
R_64
=
0x1B
;
unsigned
char
R_n
,
mask
;
unsigned
char
overflow
=
0x00
;
int
i
;
if
(
blocksize
==
MBEDTLS_AES_BLOCK_SIZE
)
{
R_n
=
R_128
;
}
else
if
(
blocksize
==
MBEDTLS_DES3_BLOCK_SIZE
)
{
R_n
=
R_64
;
}
else
{
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
}
for
(
i
=
(
int
)
blocksize
-
1
;
i
>=
0
;
i
--
)
{
output
[
i
]
=
input
[
i
]
<<
1
|
overflow
;
overflow
=
input
[
i
]
>>
7
;
}
/* mask = ( input[0] >> 7 ) ? 0xff : 0x00
* using bit operations to avoid branches */
/* MSVC has a warning about unary minus on unsigned, but this is
* well-defined and precisely what we want to do here */
#if defined(_MSC_VER)
#pragma warning( push )
#pragma warning( disable : 4146 )
#endif
mask
=
-
(
input
[
0
]
>>
7
);
#if defined(_MSC_VER)
#pragma warning( pop )
#endif
output
[
blocksize
-
1
]
^=
R_n
&
mask
;
return
(
0
);
}
/*
* Generate subkeys
*
* - as specified by RFC 4493, section 2.3 Subkey Generation Algorithm
*/
static
int
cmac_generate_subkeys
(
mbedtls_cipher_context_t
*
ctx
,
unsigned
char
*
K1
,
unsigned
char
*
K2
)
{
int
ret
;
unsigned
char
L
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
size_t
olen
,
block_size
;
mbedtls_zeroize
(
L
,
sizeof
(
L
)
);
block_size
=
ctx
->
cipher_info
->
block_size
;
/* Calculate Ek(0) */
if
(
(
ret
=
mbedtls_cipher_update
(
ctx
,
L
,
block_size
,
L
,
&
olen
)
)
!=
0
)
goto
exit
;
/*
* Generate K1 and K2
*/
if
(
(
ret
=
cmac_multiply_by_u
(
K1
,
L
,
block_size
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
cmac_multiply_by_u
(
K2
,
K1
,
block_size
)
)
!=
0
)
goto
exit
;
exit:
mbedtls_zeroize
(
L
,
sizeof
(
L
)
);
return
(
ret
);
}
#endif
/* !defined(MBEDTLS_CMAC_ALT) || defined(MBEDTLS_SELF_TEST) */
#if !defined(MBEDTLS_CMAC_ALT)
static
void
cmac_xor_block
(
unsigned
char
*
output
,
const
unsigned
char
*
input1
,
const
unsigned
char
*
input2
,
const
size_t
block_size
)
{
size_t
idx
;
for
(
idx
=
0
;
idx
<
block_size
;
idx
++
)
output
[
idx
]
=
input1
[
idx
]
^
input2
[
idx
];
}
/*
* Create padded last block from (partial) last block.
*
* We can't use the padding option from the cipher layer, as it only works for
* CBC and we use ECB mode, and anyway we need to XOR K1 or K2 in addition.
*/
static
void
cmac_pad
(
unsigned
char
padded_block
[
MBEDTLS_CIPHER_BLKSIZE_MAX
],
size_t
padded_block_len
,
const
unsigned
char
*
last_block
,
size_t
last_block_len
)
{
size_t
j
;
for
(
j
=
0
;
j
<
padded_block_len
;
j
++
)
{
if
(
j
<
last_block_len
)
padded_block
[
j
]
=
last_block
[
j
];
else
if
(
j
==
last_block_len
)
padded_block
[
j
]
=
0x80
;
else
padded_block
[
j
]
=
0x00
;
}
}
int
mbedtls_cipher_cmac_starts
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
key
,
size_t
keybits
)
{
mbedtls_cipher_type_t
type
;
mbedtls_cmac_context_t
*
cmac_ctx
;
int
retval
;
if
(
ctx
==
NULL
||
ctx
->
cipher_info
==
NULL
||
key
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
if
(
(
retval
=
mbedtls_cipher_setkey
(
ctx
,
key
,
(
int
)
keybits
,
MBEDTLS_ENCRYPT
)
)
!=
0
)
return
(
retval
);
type
=
ctx
->
cipher_info
->
type
;
switch
(
type
)
{
case
MBEDTLS_CIPHER_AES_128_ECB
:
case
MBEDTLS_CIPHER_AES_192_ECB
:
case
MBEDTLS_CIPHER_AES_256_ECB
:
case
MBEDTLS_CIPHER_DES_EDE3_ECB
:
break
;
default:
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
}
/* Allocated and initialise in the cipher context memory for the CMAC
* context */
cmac_ctx
=
mbedtls_calloc
(
1
,
sizeof
(
mbedtls_cmac_context_t
)
);
if
(
cmac_ctx
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_ALLOC_FAILED
);
ctx
->
cmac_ctx
=
cmac_ctx
;
mbedtls_zeroize
(
cmac_ctx
->
state
,
sizeof
(
cmac_ctx
->
state
)
);
return
0
;
}
int
mbedtls_cipher_cmac_update
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_cmac_context_t
*
cmac_ctx
;
unsigned
char
*
state
;
int
ret
=
0
;
size_t
n
,
j
,
olen
,
block_size
;
if
(
ctx
==
NULL
||
ctx
->
cipher_info
==
NULL
||
input
==
NULL
||
ctx
->
cmac_ctx
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
cmac_ctx
=
ctx
->
cmac_ctx
;
block_size
=
ctx
->
cipher_info
->
block_size
;
state
=
ctx
->
cmac_ctx
->
state
;
/* Is there data still to process from the last call, that's greater in
* size than a block? */
if
(
cmac_ctx
->
unprocessed_len
>
0
&&
ilen
>
block_size
-
cmac_ctx
->
unprocessed_len
)
{
memcpy
(
&
cmac_ctx
->
unprocessed_block
[
cmac_ctx
->
unprocessed_len
],
input
,
block_size
-
cmac_ctx
->
unprocessed_len
);
cmac_xor_block
(
state
,
cmac_ctx
->
unprocessed_block
,
state
,
block_size
);
if
(
(
ret
=
mbedtls_cipher_update
(
ctx
,
state
,
block_size
,
state
,
&
olen
)
)
!=
0
)
{
goto
exit
;
}
input
+=
block_size
-
cmac_ctx
->
unprocessed_len
;
ilen
-=
block_size
-
cmac_ctx
->
unprocessed_len
;
cmac_ctx
->
unprocessed_len
=
0
;
}
/* n is the number of blocks including any final partial block */
n
=
(
ilen
+
block_size
-
1
)
/
block_size
;
/* Iterate across the input data in block sized chunks, excluding any
* final partial or complete block */
for
(
j
=
1
;
j
<
n
;
j
++
)
{
cmac_xor_block
(
state
,
input
,
state
,
block_size
);
if
(
(
ret
=
mbedtls_cipher_update
(
ctx
,
state
,
block_size
,
state
,
&
olen
)
)
!=
0
)
goto
exit
;
ilen
-=
block_size
;
input
+=
block_size
;
}
/* If there is data left over that wasn't aligned to a block */
if
(
ilen
>
0
)
{
memcpy
(
&
cmac_ctx
->
unprocessed_block
[
cmac_ctx
->
unprocessed_len
],
input
,
ilen
);
cmac_ctx
->
unprocessed_len
+=
ilen
;
}
exit:
return
(
ret
);
}
int
mbedtls_cipher_cmac_finish
(
mbedtls_cipher_context_t
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_cmac_context_t
*
cmac_ctx
;
unsigned
char
*
state
,
*
last_block
;
unsigned
char
K1
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
unsigned
char
K2
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
unsigned
char
M_last
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
int
ret
;
size_t
olen
,
block_size
;
if
(
ctx
==
NULL
||
ctx
->
cipher_info
==
NULL
||
ctx
->
cmac_ctx
==
NULL
||
output
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
cmac_ctx
=
ctx
->
cmac_ctx
;
block_size
=
ctx
->
cipher_info
->
block_size
;
state
=
cmac_ctx
->
state
;
mbedtls_zeroize
(
K1
,
sizeof
(
K1
)
);
mbedtls_zeroize
(
K2
,
sizeof
(
K2
)
);
cmac_generate_subkeys
(
ctx
,
K1
,
K2
);
last_block
=
cmac_ctx
->
unprocessed_block
;
/* Calculate last block */
if
(
cmac_ctx
->
unprocessed_len
<
block_size
)
{
cmac_pad
(
M_last
,
block_size
,
last_block
,
cmac_ctx
->
unprocessed_len
);
cmac_xor_block
(
M_last
,
M_last
,
K2
,
block_size
);
}
else
{
/* Last block is complete block */
cmac_xor_block
(
M_last
,
last_block
,
K1
,
block_size
);
}
cmac_xor_block
(
state
,
M_last
,
state
,
block_size
);
if
(
(
ret
=
mbedtls_cipher_update
(
ctx
,
state
,
block_size
,
state
,
&
olen
)
)
!=
0
)
{
goto
exit
;
}
memcpy
(
output
,
state
,
block_size
);
exit:
/* Wipe the generated keys on the stack, and any other transients to avoid
* side channel leakage */
mbedtls_zeroize
(
K1
,
sizeof
(
K1
)
);
mbedtls_zeroize
(
K2
,
sizeof
(
K2
)
);
cmac_ctx
->
unprocessed_len
=
0
;
mbedtls_zeroize
(
cmac_ctx
->
unprocessed_block
,
sizeof
(
cmac_ctx
->
unprocessed_block
)
);
mbedtls_zeroize
(
state
,
MBEDTLS_CIPHER_BLKSIZE_MAX
);
return
(
ret
);
}
int
mbedtls_cipher_cmac_reset
(
mbedtls_cipher_context_t
*
ctx
)
{
mbedtls_cmac_context_t
*
cmac_ctx
;
if
(
ctx
==
NULL
||
ctx
->
cipher_info
==
NULL
||
ctx
->
cmac_ctx
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
cmac_ctx
=
ctx
->
cmac_ctx
;
/* Reset the internal state */
cmac_ctx
->
unprocessed_len
=
0
;
mbedtls_zeroize
(
cmac_ctx
->
unprocessed_block
,
sizeof
(
cmac_ctx
->
unprocessed_block
)
);
mbedtls_zeroize
(
cmac_ctx
->
state
,
sizeof
(
cmac_ctx
->
state
)
);
return
(
0
);
}
int
mbedtls_cipher_cmac
(
const
mbedtls_cipher_info_t
*
cipher_info
,
const
unsigned
char
*
key
,
size_t
keylen
,
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_cipher_context_t
ctx
;
int
ret
;
if
(
cipher_info
==
NULL
||
key
==
NULL
||
input
==
NULL
||
output
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
mbedtls_cipher_init
(
&
ctx
);
if
(
(
ret
=
mbedtls_cipher_setup
(
&
ctx
,
cipher_info
)
)
!=
0
)
goto
exit
;
ret
=
mbedtls_cipher_cmac_starts
(
&
ctx
,
key
,
keylen
);
if
(
ret
!=
0
)
goto
exit
;
ret
=
mbedtls_cipher_cmac_update
(
&
ctx
,
input
,
ilen
);
if
(
ret
!=
0
)
goto
exit
;
ret
=
mbedtls_cipher_cmac_finish
(
&
ctx
,
output
);
exit:
mbedtls_cipher_free
(
&
ctx
);
return
(
ret
);
}
#if defined(MBEDTLS_AES_C)
/*
* Implementation of AES-CMAC-PRF-128 defined in RFC 4615
*/
int
mbedtls_aes_cmac_prf_128
(
const
unsigned
char
*
key
,
size_t
key_length
,
const
unsigned
char
*
input
,
size_t
in_len
,
unsigned
char
*
output
)
{
int
ret
;
const
mbedtls_cipher_info_t
*
cipher_info
;
unsigned
char
zero_key
[
MBEDTLS_AES_BLOCK_SIZE
];
unsigned
char
int_key
[
MBEDTLS_AES_BLOCK_SIZE
];
if
(
key
==
NULL
||
input
==
NULL
||
output
==
NULL
)
return
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
);
cipher_info
=
mbedtls_cipher_info_from_type
(
MBEDTLS_CIPHER_AES_128_ECB
);
if
(
cipher_info
==
NULL
)
{
/* Failing at this point must be due to a build issue */
ret
=
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
;
goto
exit
;
}
if
(
key_length
==
MBEDTLS_AES_BLOCK_SIZE
)
{
/* Use key as is */
memcpy
(
int_key
,
key
,
MBEDTLS_AES_BLOCK_SIZE
);
}
else
{
memset
(
zero_key
,
0
,
MBEDTLS_AES_BLOCK_SIZE
);
ret
=
mbedtls_cipher_cmac
(
cipher_info
,
zero_key
,
128
,
key
,
key_length
,
int_key
);
if
(
ret
!=
0
)
goto
exit
;
}
ret
=
mbedtls_cipher_cmac
(
cipher_info
,
int_key
,
128
,
input
,
in_len
,
output
);
exit:
mbedtls_zeroize
(
int_key
,
sizeof
(
int_key
)
);
return
(
ret
);
}
#endif
/* MBEDTLS_AES_C */
#endif
/* !MBEDTLS_CMAC_ALT */
#if defined(MBEDTLS_SELF_TEST)
/*
* CMAC test data for SP800-38B
* http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/AES_CMAC.pdf
* http://csrc.nist.gov/groups/ST/toolkit/documents/Examples/TDES_CMAC.pdf
*
* AES-CMAC-PRF-128 test data from RFC 4615
* https://tools.ietf.org/html/rfc4615#page-4
*/
#define NB_CMAC_TESTS_PER_KEY 4
#define NB_PRF_TESTS 3
#if defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C)
/* All CMAC test inputs are truncated from the same 64 byte buffer. */
static
const
unsigned
char
test_message
[]
=
{
/* PT */
0x6b
,
0xc1
,
0xbe
,
0xe2
,
0x2e
,
0x40
,
0x9f
,
0x96
,
0xe9
,
0x3d
,
0x7e
,
0x11
,
0x73
,
0x93
,
0x17
,
0x2a
,
0xae
,
0x2d
,
0x8a
,
0x57
,
0x1e
,
0x03
,
0xac
,
0x9c
,
0x9e
,
0xb7
,
0x6f
,
0xac
,
0x45
,
0xaf
,
0x8e
,
0x51
,
0x30
,
0xc8
,
0x1c
,
0x46
,
0xa3
,
0x5c
,
0xe4
,
0x11
,
0xe5
,
0xfb
,
0xc1
,
0x19
,
0x1a
,
0x0a
,
0x52
,
0xef
,
0xf6
,
0x9f
,
0x24
,
0x45
,
0xdf
,
0x4f
,
0x9b
,
0x17
,
0xad
,
0x2b
,
0x41
,
0x7b
,
0xe6
,
0x6c
,
0x37
,
0x10
};
#endif
/* MBEDTLS_AES_C || MBEDTLS_DES_C */
#if defined(MBEDTLS_AES_C)
/* Truncation point of message for AES CMAC tests */
static
const
unsigned
int
aes_message_lengths
[
NB_CMAC_TESTS_PER_KEY
]
=
{
/* Mlen */
0
,
16
,
20
,
64
};
/* CMAC-AES128 Test Data */
static
const
unsigned
char
aes_128_key
[
16
]
=
{
0x2b
,
0x7e
,
0x15
,
0x16
,
0x28
,
0xae
,
0xd2
,
0xa6
,
0xab
,
0xf7
,
0x15
,
0x88
,
0x09
,
0xcf
,
0x4f
,
0x3c
};
static
const
unsigned
char
aes_128_subkeys
[
2
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* K1 */
0xfb
,
0xee
,
0xd6
,
0x18
,
0x35
,
0x71
,
0x33
,
0x66
,
0x7c
,
0x85
,
0xe0
,
0x8f
,
0x72
,
0x36
,
0xa8
,
0xde
},
{
/* K2 */
0xf7
,
0xdd
,
0xac
,
0x30
,
0x6a
,
0xe2
,
0x66
,
0xcc
,
0xf9
,
0x0b
,
0xc1
,
0x1e
,
0xe4
,
0x6d
,
0x51
,
0x3b
}
};
static
const
unsigned
char
aes_128_expected_result
[
NB_CMAC_TESTS_PER_KEY
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* Example #1 */
0xbb
,
0x1d
,
0x69
,
0x29
,
0xe9
,
0x59
,
0x37
,
0x28
,
0x7f
,
0xa3
,
0x7d
,
0x12
,
0x9b
,
0x75
,
0x67
,
0x46
},
{
/* Example #2 */
0x07
,
0x0a
,
0x16
,
0xb4
,
0x6b
,
0x4d
,
0x41
,
0x44
,
0xf7
,
0x9b
,
0xdd
,
0x9d
,
0xd0
,
0x4a
,
0x28
,
0x7c
},
{
/* Example #3 */
0x7d
,
0x85
,
0x44
,
0x9e
,
0xa6
,
0xea
,
0x19
,
0xc8
,
0x23
,
0xa7
,
0xbf
,
0x78
,
0x83
,
0x7d
,
0xfa
,
0xde
},
{
/* Example #4 */
0x51
,
0xf0
,
0xbe
,
0xbf
,
0x7e
,
0x3b
,
0x9d
,
0x92
,
0xfc
,
0x49
,
0x74
,
0x17
,
0x79
,
0x36
,
0x3c
,
0xfe
}
};
/* CMAC-AES192 Test Data */
static
const
unsigned
char
aes_192_key
[
24
]
=
{
0x8e
,
0x73
,
0xb0
,
0xf7
,
0xda
,
0x0e
,
0x64
,
0x52
,
0xc8
,
0x10
,
0xf3
,
0x2b
,
0x80
,
0x90
,
0x79
,
0xe5
,
0x62
,
0xf8
,
0xea
,
0xd2
,
0x52
,
0x2c
,
0x6b
,
0x7b
};
static
const
unsigned
char
aes_192_subkeys
[
2
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* K1 */
0x44
,
0x8a
,
0x5b
,
0x1c
,
0x93
,
0x51
,
0x4b
,
0x27
,
0x3e
,
0xe6
,
0x43
,
0x9d
,
0xd4
,
0xda
,
0xa2
,
0x96
},
{
/* K2 */
0x89
,
0x14
,
0xb6
,
0x39
,
0x26
,
0xa2
,
0x96
,
0x4e
,
0x7d
,
0xcc
,
0x87
,
0x3b
,
0xa9
,
0xb5
,
0x45
,
0x2c
}
};
static
const
unsigned
char
aes_192_expected_result
[
NB_CMAC_TESTS_PER_KEY
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* Example #1 */
0xd1
,
0x7d
,
0xdf
,
0x46
,
0xad
,
0xaa
,
0xcd
,
0xe5
,
0x31
,
0xca
,
0xc4
,
0x83
,
0xde
,
0x7a
,
0x93
,
0x67
},
{
/* Example #2 */
0x9e
,
0x99
,
0xa7
,
0xbf
,
0x31
,
0xe7
,
0x10
,
0x90
,
0x06
,
0x62
,
0xf6
,
0x5e
,
0x61
,
0x7c
,
0x51
,
0x84
},
{
/* Example #3 */
0x3d
,
0x75
,
0xc1
,
0x94
,
0xed
,
0x96
,
0x07
,
0x04
,
0x44
,
0xa9
,
0xfa
,
0x7e
,
0xc7
,
0x40
,
0xec
,
0xf8
},
{
/* Example #4 */
0xa1
,
0xd5
,
0xdf
,
0x0e
,
0xed
,
0x79
,
0x0f
,
0x79
,
0x4d
,
0x77
,
0x58
,
0x96
,
0x59
,
0xf3
,
0x9a
,
0x11
}
};
/* CMAC-AES256 Test Data */
static
const
unsigned
char
aes_256_key
[
32
]
=
{
0x60
,
0x3d
,
0xeb
,
0x10
,
0x15
,
0xca
,
0x71
,
0xbe
,
0x2b
,
0x73
,
0xae
,
0xf0
,
0x85
,
0x7d
,
0x77
,
0x81
,
0x1f
,
0x35
,
0x2c
,
0x07
,
0x3b
,
0x61
,
0x08
,
0xd7
,
0x2d
,
0x98
,
0x10
,
0xa3
,
0x09
,
0x14
,
0xdf
,
0xf4
};
static
const
unsigned
char
aes_256_subkeys
[
2
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* K1 */
0xca
,
0xd1
,
0xed
,
0x03
,
0x29
,
0x9e
,
0xed
,
0xac
,
0x2e
,
0x9a
,
0x99
,
0x80
,
0x86
,
0x21
,
0x50
,
0x2f
},
{
/* K2 */
0x95
,
0xa3
,
0xda
,
0x06
,
0x53
,
0x3d
,
0xdb
,
0x58
,
0x5d
,
0x35
,
0x33
,
0x01
,
0x0c
,
0x42
,
0xa0
,
0xd9
}
};
static
const
unsigned
char
aes_256_expected_result
[
NB_CMAC_TESTS_PER_KEY
][
MBEDTLS_AES_BLOCK_SIZE
]
=
{
{
/* Example #1 */
0x02
,
0x89
,
0x62
,
0xf6
,
0x1b
,
0x7b
,
0xf8
,
0x9e
,
0xfc
,
0x6b
,
0x55
,
0x1f
,
0x46
,
0x67
,
0xd9
,
0x83
},
{
/* Example #2 */
0x28
,
0xa7
,
0x02
,
0x3f
,
0x45
,
0x2e
,
0x8f
,
0x82
,
0xbd
,
0x4b
,
0xf2
,
0x8d
,
0x8c
,
0x37
,
0xc3
,
0x5c
},
{
/* Example #3 */
0x15
,
0x67
,
0x27
,
0xdc
,
0x08
,
0x78
,
0x94
,
0x4a
,
0x02
,
0x3c
,
0x1f
,
0xe0
,
0x3b
,
0xad
,
0x6d
,
0x93
},
{
/* Example #4 */
0xe1
,
0x99
,
0x21
,
0x90
,
0x54
,
0x9f
,
0x6e
,
0xd5
,
0x69
,
0x6a
,
0x2c
,
0x05
,
0x6c
,
0x31
,
0x54
,
0x10
}
};
#endif
/* MBEDTLS_AES_C */
#if defined(MBEDTLS_DES_C)
/* Truncation point of message for 3DES CMAC tests */
static
const
unsigned
int
des3_message_lengths
[
NB_CMAC_TESTS_PER_KEY
]
=
{
0
,
16
,
20
,
32
};
/* CMAC-TDES (Generation) - 2 Key Test Data */
static
const
unsigned
char
des3_2key_key
[
24
]
=
{
/* Key1 */
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
/* Key2 */
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xEF
,
0x01
,
/* Key3 */
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
};
static
const
unsigned
char
des3_2key_subkeys
[
2
][
8
]
=
{
{
/* K1 */
0x0d
,
0xd2
,
0xcb
,
0x7a
,
0x3d
,
0x88
,
0x88
,
0xd9
},
{
/* K2 */
0x1b
,
0xa5
,
0x96
,
0xf4
,
0x7b
,
0x11
,
0x11
,
0xb2
}
};
static
const
unsigned
char
des3_2key_expected_result
[
NB_CMAC_TESTS_PER_KEY
][
MBEDTLS_DES3_BLOCK_SIZE
]
=
{
{
/* Sample #1 */
0x79
,
0xce
,
0x52
,
0xa7
,
0xf7
,
0x86
,
0xa9
,
0x60
},
{
/* Sample #2 */
0xcc
,
0x18
,
0xa0
,
0xb7
,
0x9a
,
0xf2
,
0x41
,
0x3b
},
{
/* Sample #3 */
0xc0
,
0x6d
,
0x37
,
0x7e
,
0xcd
,
0x10
,
0x19
,
0x69
},
{
/* Sample #4 */
0x9c
,
0xd3
,
0x35
,
0x80
,
0xf9
,
0xb6
,
0x4d
,
0xfb
}
};
/* CMAC-TDES (Generation) - 3 Key Test Data */
static
const
unsigned
char
des3_3key_key
[
24
]
=
{
/* Key1 */
0x01
,
0x23
,
0x45
,
0x67
,
0x89
,
0xaa
,
0xcd
,
0xef
,
/* Key2 */
0x23
,
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0x01
,
/* Key3 */
0x45
,
0x67
,
0x89
,
0xab
,
0xcd
,
0xef
,
0x01
,
0x23
};
static
const
unsigned
char
des3_3key_subkeys
[
2
][
8
]
=
{
{
/* K1 */
0x9d
,
0x74
,
0xe7
,
0x39
,
0x33
,
0x17
,
0x96
,
0xc0
},
{
/* K2 */
0x3a
,
0xe9
,
0xce
,
0x72
,
0x66
,
0x2f
,
0x2d
,
0x9b
}
};
static
const
unsigned
char
des3_3key_expected_result
[
NB_CMAC_TESTS_PER_KEY
][
MBEDTLS_DES3_BLOCK_SIZE
]
=
{
{
/* Sample #1 */
0x7d
,
0xb0
,
0xd3
,
0x7d
,
0xf9
,
0x36
,
0xc5
,
0x50
},
{
/* Sample #2 */
0x30
,
0x23
,
0x9c
,
0xf1
,
0xf5
,
0x2e
,
0x66
,
0x09
},
{
/* Sample #3 */
0x6c
,
0x9f
,
0x3e
,
0xe4
,
0x92
,
0x3f
,
0x6b
,
0xe2
},
{
/* Sample #4 */
0x99
,
0x42
,
0x9b
,
0xd0
,
0xbF
,
0x79
,
0x04
,
0xe5
}
};
#endif
/* MBEDTLS_DES_C */
#if defined(MBEDTLS_AES_C)
/* AES AES-CMAC-PRF-128 Test Data */
static
const
unsigned
char
PRFK
[]
=
{
/* Key */
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0xed
,
0xcb
};
/* Sizes in bytes */
static
const
size_t
PRFKlen
[
NB_PRF_TESTS
]
=
{
18
,
16
,
10
};
/* Message */
static
const
unsigned
char
PRFM
[]
=
{
0x00
,
0x01
,
0x02
,
0x03
,
0x04
,
0x05
,
0x06
,
0x07
,
0x08
,
0x09
,
0x0a
,
0x0b
,
0x0c
,
0x0d
,
0x0e
,
0x0f
,
0x10
,
0x11
,
0x12
,
0x13
};
static
const
unsigned
char
PRFT
[
NB_PRF_TESTS
][
16
]
=
{
{
0x84
,
0xa3
,
0x48
,
0xa4
,
0xa4
,
0x5d
,
0x23
,
0x5b
,
0xab
,
0xff
,
0xfc
,
0x0d
,
0x2b
,
0x4d
,
0xa0
,
0x9a
},
{
0x98
,
0x0a
,
0xe8
,
0x7b
,
0x5f
,
0x4c
,
0x9c
,
0x52
,
0x14
,
0xf5
,
0xb6
,
0xa8
,
0x45
,
0x5e
,
0x4c
,
0x2d
},
{
0x29
,
0x0d
,
0x9e
,
0x11
,
0x2e
,
0xdb
,
0x09
,
0xee
,
0x14
,
0x1f
,
0xcf
,
0x64
,
0xc0
,
0xb7
,
0x2f
,
0x3d
}
};
#endif
/* MBEDTLS_AES_C */
static
int
cmac_test_subkeys
(
int
verbose
,
const
char
*
testname
,
const
unsigned
char
*
key
,
int
keybits
,
const
unsigned
char
*
subkeys
,
mbedtls_cipher_type_t
cipher_type
,
int
block_size
,
int
num_tests
)
{
int
i
,
ret
;
mbedtls_cipher_context_t
ctx
;
const
mbedtls_cipher_info_t
*
cipher_info
;
unsigned
char
K1
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
unsigned
char
K2
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
cipher_info
=
mbedtls_cipher_info_from_type
(
cipher_type
);
if
(
cipher_info
==
NULL
)
{
/* Failing at this point must be due to a build issue */
return
(
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
);
}
for
(
i
=
0
;
i
<
num_tests
;
i
++
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
" %s CMAC subkey #%u: "
,
testname
,
i
+
1
);
mbedtls_cipher_init
(
&
ctx
);
if
(
(
ret
=
mbedtls_cipher_setup
(
&
ctx
,
cipher_info
)
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"test execution failed
\n
"
);
goto
cleanup
;
}
if
(
(
ret
=
mbedtls_cipher_setkey
(
&
ctx
,
key
,
keybits
,
MBEDTLS_ENCRYPT
)
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"test execution failed
\n
"
);
goto
cleanup
;
}
ret
=
cmac_generate_subkeys
(
&
ctx
,
K1
,
K2
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
goto
cleanup
;
}
if
(
(
ret
=
memcmp
(
K1
,
subkeys
,
block_size
)
)
!=
0
||
(
ret
=
memcmp
(
K2
,
&
subkeys
[
block_size
],
block_size
)
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
goto
cleanup
;
}
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_cipher_free
(
&
ctx
);
}
goto
exit
;
cleanup:
mbedtls_cipher_free
(
&
ctx
);
exit:
return
(
ret
);
}
static
int
cmac_test_wth_cipher
(
int
verbose
,
const
char
*
testname
,
const
unsigned
char
*
key
,
int
keybits
,
const
unsigned
char
*
messages
,
const
unsigned
int
message_lengths
[
4
],
const
unsigned
char
*
expected_result
,
mbedtls_cipher_type_t
cipher_type
,
int
block_size
,
int
num_tests
)
{
const
mbedtls_cipher_info_t
*
cipher_info
;
int
i
,
ret
;
unsigned
char
output
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
cipher_info
=
mbedtls_cipher_info_from_type
(
cipher_type
);
if
(
cipher_info
==
NULL
)
{
/* Failing at this point must be due to a build issue */
ret
=
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
;
goto
exit
;
}
for
(
i
=
0
;
i
<
num_tests
;
i
++
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
" %s CMAC #%u: "
,
testname
,
i
+
1
);
if
(
(
ret
=
mbedtls_cipher_cmac
(
cipher_info
,
key
,
keybits
,
messages
,
message_lengths
[
i
],
output
)
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
goto
exit
;
}
if
(
(
ret
=
memcmp
(
output
,
&
expected_result
[
i
*
block_size
],
block_size
)
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
goto
exit
;
}
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
}
exit:
return
(
ret
);
}
#if defined(MBEDTLS_AES_C)
static
int
test_aes128_cmac_prf
(
int
verbose
)
{
int
i
;
int
ret
;
unsigned
char
output
[
MBEDTLS_AES_BLOCK_SIZE
];
for
(
i
=
0
;
i
<
NB_PRF_TESTS
;
i
++
)
{
mbedtls_printf
(
" AES CMAC 128 PRF #%u: "
,
i
);
ret
=
mbedtls_aes_cmac_prf_128
(
PRFK
,
PRFKlen
[
i
],
PRFM
,
20
,
output
);
if
(
ret
!=
0
||
memcmp
(
output
,
PRFT
[
i
],
MBEDTLS_AES_BLOCK_SIZE
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
ret
);
}
else
if
(
verbose
!=
0
)
{
mbedtls_printf
(
"passed
\n
"
);
}
}
return
(
ret
);
}
#endif
/* MBEDTLS_AES_C */
int
mbedtls_cmac_self_test
(
int
verbose
)
{
int
ret
;
#if defined(MBEDTLS_AES_C)
/* AES-128 */
if
(
(
ret
=
cmac_test_subkeys
(
verbose
,
"AES 128"
,
aes_128_key
,
128
,
(
const
unsigned
char
*
)
aes_128_subkeys
,
MBEDTLS_CIPHER_AES_128_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
cmac_test_wth_cipher
(
verbose
,
"AES 128"
,
aes_128_key
,
128
,
test_message
,
aes_message_lengths
,
(
const
unsigned
char
*
)
aes_128_expected_result
,
MBEDTLS_CIPHER_AES_128_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
/* AES-192 */
if
(
(
ret
=
cmac_test_subkeys
(
verbose
,
"AES 192"
,
aes_192_key
,
192
,
(
const
unsigned
char
*
)
aes_192_subkeys
,
MBEDTLS_CIPHER_AES_192_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
cmac_test_wth_cipher
(
verbose
,
"AES 192"
,
aes_192_key
,
192
,
test_message
,
aes_message_lengths
,
(
const
unsigned
char
*
)
aes_192_expected_result
,
MBEDTLS_CIPHER_AES_192_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
/* AES-256 */
if
(
(
ret
=
cmac_test_subkeys
(
verbose
,
"AES 256"
,
aes_256_key
,
256
,
(
const
unsigned
char
*
)
aes_256_subkeys
,
MBEDTLS_CIPHER_AES_256_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
cmac_test_wth_cipher
(
verbose
,
"AES 256"
,
aes_256_key
,
256
,
test_message
,
aes_message_lengths
,
(
const
unsigned
char
*
)
aes_256_expected_result
,
MBEDTLS_CIPHER_AES_256_ECB
,
MBEDTLS_AES_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
#endif
/* MBEDTLS_AES_C */
#if defined(MBEDTLS_DES_C)
/* 3DES 2 key */
if
(
(
ret
=
cmac_test_subkeys
(
verbose
,
"3DES 2 key"
,
des3_2key_key
,
192
,
(
const
unsigned
char
*
)
des3_2key_subkeys
,
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_DES3_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
cmac_test_wth_cipher
(
verbose
,
"3DES 2 key"
,
des3_2key_key
,
192
,
test_message
,
des3_message_lengths
,
(
const
unsigned
char
*
)
des3_2key_expected_result
,
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_DES3_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
/* 3DES 3 key */
if
(
(
ret
=
cmac_test_subkeys
(
verbose
,
"3DES 3 key"
,
des3_3key_key
,
192
,
(
const
unsigned
char
*
)
des3_3key_subkeys
,
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_DES3_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
cmac_test_wth_cipher
(
verbose
,
"3DES 3 key"
,
des3_3key_key
,
192
,
test_message
,
des3_message_lengths
,
(
const
unsigned
char
*
)
des3_3key_expected_result
,
MBEDTLS_CIPHER_DES_EDE3_ECB
,
MBEDTLS_DES3_BLOCK_SIZE
,
NB_CMAC_TESTS_PER_KEY
)
)
!=
0
)
{
return
(
ret
);
}
#endif
/* MBEDTLS_DES_C */
#if defined(MBEDTLS_AES_C)
if
(
(
ret
=
test_aes128_cmac_prf
(
verbose
)
)
!=
0
)
return
(
ret
);
#endif
/* MBEDTLS_AES_C */
if
(
verbose
!=
0
)
mbedtls_printf
(
"
\n
"
);
return
(
0
);
}
#endif
/* MBEDTLS_SELF_TEST */
#endif
/* MBEDTLS_CMAC_C */
app/mbedtls/library/ctr_drbg.c
View file @
67027c0d
...
@@ -67,8 +67,8 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx )
...
@@ -67,8 +67,8 @@ void mbedtls_ctr_drbg_init( mbedtls_ctr_drbg_context *ctx )
}
}
/*
/*
* Non-public function wrapped by ctr_
c
rbg_
init
(). Necessary to allow
NIST
* Non-public function wrapped by
mbedtls_
ctr_
d
rbg_
seed
(). Necessary to allow
* tests to succeed (which require known length fixed entropy)
*
NIST
tests to succeed (which require known length fixed entropy)
*/
*/
int
mbedtls_ctr_drbg_seed_entropy_len
(
int
mbedtls_ctr_drbg_seed_entropy_len
(
mbedtls_ctr_drbg_context
*
ctx
,
mbedtls_ctr_drbg_context
*
ctx
,
...
@@ -94,11 +94,15 @@ int mbedtls_ctr_drbg_seed_entropy_len(
...
@@ -94,11 +94,15 @@ int mbedtls_ctr_drbg_seed_entropy_len(
/*
/*
* Initialize with an empty key
* Initialize with an empty key
*/
*/
mbedtls_aes_setkey_enc
(
&
ctx
->
aes_ctx
,
key
,
MBEDTLS_CTR_DRBG_KEYBITS
);
if
(
(
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
->
aes_ctx
,
key
,
MBEDTLS_CTR_DRBG_KEYBITS
)
)
!=
0
)
{
return
(
ret
);
}
if
(
(
ret
=
mbedtls_ctr_drbg_reseed
(
ctx
,
custom
,
len
)
)
!=
0
)
if
(
(
ret
=
mbedtls_ctr_drbg_reseed
(
ctx
,
custom
,
len
)
)
!=
0
)
{
return
(
ret
);
return
(
ret
);
}
return
(
0
);
return
(
0
);
}
}
...
@@ -148,6 +152,7 @@ static int block_cipher_df( unsigned char *output,
...
@@ -148,6 +152,7 @@ static int block_cipher_df( unsigned char *output,
unsigned
char
chain
[
MBEDTLS_CTR_DRBG_BLOCKSIZE
];
unsigned
char
chain
[
MBEDTLS_CTR_DRBG_BLOCKSIZE
];
unsigned
char
*
p
,
*
iv
;
unsigned
char
*
p
,
*
iv
;
mbedtls_aes_context
aes_ctx
;
mbedtls_aes_context
aes_ctx
;
int
ret
=
0
;
int
i
,
j
;
int
i
,
j
;
size_t
buf_len
,
use_len
;
size_t
buf_len
,
use_len
;
...
@@ -180,7 +185,10 @@ static int block_cipher_df( unsigned char *output,
...
@@ -180,7 +185,10 @@ static int block_cipher_df( unsigned char *output,
for
(
i
=
0
;
i
<
MBEDTLS_CTR_DRBG_KEYSIZE
;
i
++
)
for
(
i
=
0
;
i
<
MBEDTLS_CTR_DRBG_KEYSIZE
;
i
++
)
key
[
i
]
=
i
;
key
[
i
]
=
i
;
mbedtls_aes_setkey_enc
(
&
aes_ctx
,
key
,
MBEDTLS_CTR_DRBG_KEYBITS
);
if
(
(
ret
=
mbedtls_aes_setkey_enc
(
&
aes_ctx
,
key
,
MBEDTLS_CTR_DRBG_KEYBITS
)
)
!=
0
)
{
goto
exit
;
}
/*
/*
* Reduce data to MBEDTLS_CTR_DRBG_SEEDLEN bytes of data
* Reduce data to MBEDTLS_CTR_DRBG_SEEDLEN bytes of data
...
@@ -199,7 +207,10 @@ static int block_cipher_df( unsigned char *output,
...
@@ -199,7 +207,10 @@ static int block_cipher_df( unsigned char *output,
use_len
-=
(
use_len
>=
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
?
use_len
-=
(
use_len
>=
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
?
MBEDTLS_CTR_DRBG_BLOCKSIZE
:
use_len
;
MBEDTLS_CTR_DRBG_BLOCKSIZE
:
use_len
;
mbedtls_aes_crypt_ecb
(
&
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
chain
,
chain
);
if
(
(
ret
=
mbedtls_aes_crypt_ecb
(
&
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
chain
,
chain
)
)
!=
0
)
{
goto
exit
;
}
}
}
memcpy
(
tmp
+
j
,
chain
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
memcpy
(
tmp
+
j
,
chain
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
...
@@ -213,20 +224,40 @@ static int block_cipher_df( unsigned char *output,
...
@@ -213,20 +224,40 @@ static int block_cipher_df( unsigned char *output,
/*
/*
* Do final encryption with reduced data
* Do final encryption with reduced data
*/
*/
mbedtls_aes_setkey_enc
(
&
aes_ctx
,
tmp
,
MBEDTLS_CTR_DRBG_KEYBITS
);
if
(
(
ret
=
mbedtls_aes_setkey_enc
(
&
aes_ctx
,
tmp
,
MBEDTLS_CTR_DRBG_KEYBITS
)
)
!=
0
)
{
goto
exit
;
}
iv
=
tmp
+
MBEDTLS_CTR_DRBG_KEYSIZE
;
iv
=
tmp
+
MBEDTLS_CTR_DRBG_KEYSIZE
;
p
=
output
;
p
=
output
;
for
(
j
=
0
;
j
<
MBEDTLS_CTR_DRBG_SEEDLEN
;
j
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
for
(
j
=
0
;
j
<
MBEDTLS_CTR_DRBG_SEEDLEN
;
j
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
{
{
mbedtls_aes_crypt_ecb
(
&
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
iv
,
iv
);
if
(
(
ret
=
mbedtls_aes_crypt_ecb
(
&
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
iv
,
iv
)
)
!=
0
)
{
goto
exit
;
}
memcpy
(
p
,
iv
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
memcpy
(
p
,
iv
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
p
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
;
p
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
;
}
}
exit:
mbedtls_aes_free
(
&
aes_ctx
);
mbedtls_aes_free
(
&
aes_ctx
);
/*
* tidy up the stack
*/
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
mbedtls_zeroize
(
tmp
,
sizeof
(
tmp
)
);
mbedtls_zeroize
(
key
,
sizeof
(
key
)
);
mbedtls_zeroize
(
chain
,
sizeof
(
chain
)
);
if
(
0
!=
ret
)
{
/*
* wipe partial seed from memory
*/
mbedtls_zeroize
(
output
,
MBEDTLS_CTR_DRBG_SEEDLEN
);
}
return
(
0
);
return
(
ret
);
}
}
static
int
ctr_drbg_update_internal
(
mbedtls_ctr_drbg_context
*
ctx
,
static
int
ctr_drbg_update_internal
(
mbedtls_ctr_drbg_context
*
ctx
,
...
@@ -235,6 +266,7 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
...
@@ -235,6 +266,7 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
unsigned
char
tmp
[
MBEDTLS_CTR_DRBG_SEEDLEN
];
unsigned
char
tmp
[
MBEDTLS_CTR_DRBG_SEEDLEN
];
unsigned
char
*
p
=
tmp
;
unsigned
char
*
p
=
tmp
;
int
i
,
j
;
int
i
,
j
;
int
ret
=
0
;
memset
(
tmp
,
0
,
MBEDTLS_CTR_DRBG_SEEDLEN
);
memset
(
tmp
,
0
,
MBEDTLS_CTR_DRBG_SEEDLEN
);
...
@@ -250,7 +282,10 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
...
@@ -250,7 +282,10 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
/*
/*
* Crypt counter block
* Crypt counter block
*/
*/
mbedtls_aes_crypt_ecb
(
&
ctx
->
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
ctx
->
counter
,
p
);
if
(
(
ret
=
mbedtls_aes_crypt_ecb
(
&
ctx
->
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
ctx
->
counter
,
p
)
)
!=
0
)
{
return
(
ret
);
}
p
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
;
p
+=
MBEDTLS_CTR_DRBG_BLOCKSIZE
;
}
}
...
@@ -261,7 +296,10 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
...
@@ -261,7 +296,10 @@ static int ctr_drbg_update_internal( mbedtls_ctr_drbg_context *ctx,
/*
/*
* Update key and counter
* Update key and counter
*/
*/
mbedtls_aes_setkey_enc
(
&
ctx
->
aes_ctx
,
tmp
,
MBEDTLS_CTR_DRBG_KEYBITS
);
if
(
(
ret
=
mbedtls_aes_setkey_enc
(
&
ctx
->
aes_ctx
,
tmp
,
MBEDTLS_CTR_DRBG_KEYBITS
)
)
!=
0
)
{
return
(
ret
);
}
memcpy
(
ctx
->
counter
,
tmp
+
MBEDTLS_CTR_DRBG_KEYSIZE
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
memcpy
(
ctx
->
counter
,
tmp
+
MBEDTLS_CTR_DRBG_KEYSIZE
,
MBEDTLS_CTR_DRBG_BLOCKSIZE
);
return
(
0
);
return
(
0
);
...
@@ -289,8 +327,10 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
...
@@ -289,8 +327,10 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
{
{
unsigned
char
seed
[
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
];
unsigned
char
seed
[
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
];
size_t
seedlen
=
0
;
size_t
seedlen
=
0
;
int
ret
;
if
(
ctx
->
entropy_len
+
len
>
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
)
if
(
ctx
->
entropy_len
>
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
||
len
>
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
-
ctx
->
entropy_len
)
return
(
MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
);
return
(
MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
);
memset
(
seed
,
0
,
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
);
memset
(
seed
,
0
,
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
);
...
@@ -318,12 +358,18 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
...
@@ -318,12 +358,18 @@ int mbedtls_ctr_drbg_reseed( mbedtls_ctr_drbg_context *ctx,
/*
/*
* Reduce to 384 bits
* Reduce to 384 bits
*/
*/
block_cipher_df
(
seed
,
seed
,
seedlen
);
if
(
(
ret
=
block_cipher_df
(
seed
,
seed
,
seedlen
)
)
!=
0
)
{
return
(
ret
);
}
/*
/*
* Update state
* Update state
*/
*/
ctr_drbg_update_internal
(
ctx
,
seed
);
if
(
(
ret
=
ctr_drbg_update_internal
(
ctx
,
seed
)
)
!=
0
)
{
return
(
ret
);
}
ctx
->
reseed_counter
=
1
;
ctx
->
reseed_counter
=
1
;
return
(
0
);
return
(
0
);
...
@@ -353,15 +399,22 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
...
@@ -353,15 +399,22 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
ctx
->
prediction_resistance
)
ctx
->
prediction_resistance
)
{
{
if
(
(
ret
=
mbedtls_ctr_drbg_reseed
(
ctx
,
additional
,
add_len
)
)
!=
0
)
if
(
(
ret
=
mbedtls_ctr_drbg_reseed
(
ctx
,
additional
,
add_len
)
)
!=
0
)
{
return
(
ret
);
return
(
ret
);
}
add_len
=
0
;
add_len
=
0
;
}
}
if
(
add_len
>
0
)
if
(
add_len
>
0
)
{
{
block_cipher_df
(
add_input
,
additional
,
add_len
);
if
(
(
ret
=
block_cipher_df
(
add_input
,
additional
,
add_len
)
)
!=
0
)
ctr_drbg_update_internal
(
ctx
,
add_input
);
{
return
(
ret
);
}
if
(
(
ret
=
ctr_drbg_update_internal
(
ctx
,
add_input
)
)
!=
0
)
{
return
(
ret
);
}
}
}
while
(
output_len
>
0
)
while
(
output_len
>
0
)
...
@@ -376,7 +429,10 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
...
@@ -376,7 +429,10 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
/*
/*
* Crypt counter block
* Crypt counter block
*/
*/
mbedtls_aes_crypt_ecb
(
&
ctx
->
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
ctx
->
counter
,
tmp
);
if
(
(
ret
=
mbedtls_aes_crypt_ecb
(
&
ctx
->
aes_ctx
,
MBEDTLS_AES_ENCRYPT
,
ctx
->
counter
,
tmp
)
)
!=
0
)
{
return
(
ret
);
}
use_len
=
(
output_len
>
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
?
MBEDTLS_CTR_DRBG_BLOCKSIZE
:
use_len
=
(
output_len
>
MBEDTLS_CTR_DRBG_BLOCKSIZE
)
?
MBEDTLS_CTR_DRBG_BLOCKSIZE
:
output_len
;
output_len
;
...
@@ -388,7 +444,10 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
...
@@ -388,7 +444,10 @@ int mbedtls_ctr_drbg_random_with_add( void *p_rng,
output_len
-=
use_len
;
output_len
-=
use_len
;
}
}
ctr_drbg_update_internal
(
ctx
,
add_input
);
if
(
(
ret
=
ctr_drbg_update_internal
(
ctx
,
add_input
)
)
!=
0
)
{
return
(
ret
);
}
ctx
->
reseed_counter
++
;
ctx
->
reseed_counter
++
;
...
@@ -429,20 +488,20 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char
...
@@ -429,20 +488,20 @@ int mbedtls_ctr_drbg_write_seed_file( mbedtls_ctr_drbg_context *ctx, const char
goto
exit
;
goto
exit
;
if
(
fwrite
(
buf
,
1
,
MBEDTLS_CTR_DRBG_MAX_INPUT
,
f
)
!=
MBEDTLS_CTR_DRBG_MAX_INPUT
)
if
(
fwrite
(
buf
,
1
,
MBEDTLS_CTR_DRBG_MAX_INPUT
,
f
)
!=
MBEDTLS_CTR_DRBG_MAX_INPUT
)
{
ret
=
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
;
ret
=
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
;
goto
exit
;
else
}
ret
=
0
;
ret
=
0
;
exit:
exit:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
fclose
(
f
);
fclose
(
f
);
return
(
ret
);
return
(
ret
);
}
}
int
mbedtls_ctr_drbg_update_seed_file
(
mbedtls_ctr_drbg_context
*
ctx
,
const
char
*
path
)
int
mbedtls_ctr_drbg_update_seed_file
(
mbedtls_ctr_drbg_context
*
ctx
,
const
char
*
path
)
{
{
int
ret
=
0
;
FILE
*
f
;
FILE
*
f
;
size_t
n
;
size_t
n
;
unsigned
char
buf
[
MBEDTLS_CTR_DRBG_MAX_INPUT
];
unsigned
char
buf
[
MBEDTLS_CTR_DRBG_MAX_INPUT
];
...
@@ -461,14 +520,16 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char
...
@@ -461,14 +520,16 @@ int mbedtls_ctr_drbg_update_seed_file( mbedtls_ctr_drbg_context *ctx, const char
}
}
if
(
fread
(
buf
,
1
,
n
,
f
)
!=
n
)
if
(
fread
(
buf
,
1
,
n
,
f
)
!=
n
)
{
ret
=
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
;
fclose
(
f
);
else
return
(
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
);
mbedtls_ctr_drbg_update
(
ctx
,
buf
,
n
);
}
fclose
(
f
);
fclose
(
f
);
mbedtls_ctr_drbg_update
(
ctx
,
buf
,
n
);
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
if
(
ret
!=
0
)
return
(
ret
);
return
(
mbedtls_ctr_drbg_write_seed_file
(
ctx
,
path
)
);
return
(
mbedtls_ctr_drbg_write_seed_file
(
ctx
,
path
)
);
}
}
...
...
app/mbedtls/library/debug.c
View file @
67027c0d
...
@@ -27,21 +27,22 @@
...
@@ -27,21 +27,22 @@
#if defined(MBEDTLS_DEBUG_C)
#if defined(MBEDTLS_DEBUG_C)
#include "mbedtls/debug.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#if defined(MBEDTLS_PLATFORM_C)
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
#include "mbedtls/platform.h"
#else
#else
#include <stdlib.h>
#include <stdlib.h>
#define mbedtls_calloc calloc
#define mbedtls_calloc calloc
#define mbedtls_free free
#define mbedtls_free free
#define mbedtls_time_t time_t
#define mbedtls_snprintf snprintf
#define mbedtls_snprintf snprintf
#endif
#endif
#include "mbedtls/debug.h"
#include <stdarg.h>
#include <stdio.h>
#include <string.h>
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
!defined(inline) && !defined(__cplusplus)
!defined(inline) && !defined(__cplusplus)
#define inline __inline
#define inline __inline
...
@@ -70,7 +71,7 @@ static inline void debug_send_line( const mbedtls_ssl_context *ssl, int level,
...
@@ -70,7 +71,7 @@ static inline void debug_send_line( const mbedtls_ssl_context *ssl, int level,
*/
*/
#if defined(MBEDTLS_THREADING_C)
#if defined(MBEDTLS_THREADING_C)
char
idstr
[
20
+
DEBUG_BUF_SIZE
];
/* 0x + 16 nibbles + ': ' */
char
idstr
[
20
+
DEBUG_BUF_SIZE
];
/* 0x + 16 nibbles + ': ' */
mbedtls_snprintf
(
idstr
,
sizeof
(
idstr
),
"%p: %s"
,
ssl
,
str
);
mbedtls_snprintf
(
idstr
,
sizeof
(
idstr
),
"%p: %s"
,
(
void
*
)
ssl
,
str
);
ssl
->
conf
->
f_dbg
(
ssl
->
conf
->
p_dbg
,
level
,
file
,
line
,
idstr
);
ssl
->
conf
->
f_dbg
(
ssl
->
conf
->
p_dbg
,
level
,
file
,
line
,
idstr
);
#else
#else
ssl
->
conf
->
f_dbg
(
ssl
->
conf
->
p_dbg
,
level
,
file
,
line
,
str
);
ssl
->
conf
->
f_dbg
(
ssl
->
conf
->
p_dbg
,
level
,
file
,
line
,
str
);
...
@@ -85,7 +86,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level,
...
@@ -85,7 +86,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level,
char
str
[
DEBUG_BUF_SIZE
];
char
str
[
DEBUG_BUF_SIZE
];
int
ret
;
int
ret
;
if
(
ssl
->
conf
==
NULL
||
ssl
->
conf
->
f_dbg
==
NULL
||
level
>
debug_threshold
)
if
(
NULL
==
ssl
||
NULL
==
ssl
->
conf
||
NULL
==
ssl
->
conf
->
f_dbg
||
level
>
debug_threshold
)
return
;
return
;
va_start
(
argp
,
format
);
va_start
(
argp
,
format
);
...
@@ -101,7 +102,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level,
...
@@ -101,7 +102,7 @@ void mbedtls_debug_print_msg( const mbedtls_ssl_context *ssl, int level,
}
}
#endif
#endif
#else
#else
ret
=
vsnprintf
(
str
,
DEBUG_BUF_SIZE
,
format
,
argp
);
ret
=
mbedtls_
vsnprintf
(
str
,
DEBUG_BUF_SIZE
,
format
,
argp
);
#endif
#endif
va_end
(
argp
);
va_end
(
argp
);
...
...
app/mbedtls/library/des.c
View file @
67027c0d
...
@@ -50,7 +50,7 @@
...
@@ -50,7 +50,7 @@
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
(
unsigned
char
*
)
v
;
while
(
n
--
)
*
p
++
=
0
;
}
}
/*
/*
...
...
app/mbedtls/library/dhm.c
View file @
67027c0d
...
@@ -19,9 +19,12 @@
...
@@ -19,9 +19,12 @@
* This file is part of mbed TLS (https://tls.mbed.org)
* This file is part of mbed TLS (https://tls.mbed.org)
*/
*/
/*
/*
* Reference:
* The following sources were referenced in the design of this implementation
* of the Diffie-Hellman-Merkle algorithm:
*
* [1] Handbook of Applied Cryptography - 1997, Chapter 12
* Menezes, van Oorschot and Vanstone
*
*
* http://www.cacr.math.uwaterloo.ca/hac/ (chapter 12)
*/
*/
#if !defined(MBEDTLS_CONFIG_FILE)
#if !defined(MBEDTLS_CONFIG_FILE)
...
@@ -54,6 +57,7 @@
...
@@ -54,6 +57,7 @@
#define mbedtls_free free
#define mbedtls_free free
#endif
#endif
#if !defined(MBEDTLS_DHM_ALT)
/* Implementation that should never be optimized out by the compiler */
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
...
@@ -90,6 +94,9 @@ static int dhm_read_bignum( mbedtls_mpi *X,
...
@@ -90,6 +94,9 @@ static int dhm_read_bignum( mbedtls_mpi *X,
*
*
* Parameter should be: 2 <= public_param <= P - 2
* Parameter should be: 2 <= public_param <= P - 2
*
*
* This means that we need to return an error if
* public_param < 2 or public_param > P-2
*
* For more information on the attack, see:
* For more information on the attack, see:
* http://www.cl.cam.ac.uk/~rja14/Papers/psandqs.pdf
* http://www.cl.cam.ac.uk/~rja14/Papers/psandqs.pdf
* http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-2643
* http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2005-2643
...
@@ -97,17 +104,17 @@ static int dhm_read_bignum( mbedtls_mpi *X,
...
@@ -97,17 +104,17 @@ static int dhm_read_bignum( mbedtls_mpi *X,
static
int
dhm_check_range
(
const
mbedtls_mpi
*
param
,
const
mbedtls_mpi
*
P
)
static
int
dhm_check_range
(
const
mbedtls_mpi
*
param
,
const
mbedtls_mpi
*
P
)
{
{
mbedtls_mpi
L
,
U
;
mbedtls_mpi
L
,
U
;
int
ret
=
MBEDTLS_ERR_DHM_BAD_INPUT_DATA
;
int
ret
=
0
;
mbedtls_mpi_init
(
&
L
);
mbedtls_mpi_init
(
&
U
);
mbedtls_mpi_init
(
&
L
);
mbedtls_mpi_init
(
&
U
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_lset
(
&
L
,
2
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_lset
(
&
L
,
2
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_sub_int
(
&
U
,
P
,
2
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_sub_int
(
&
U
,
P
,
2
)
);
if
(
mbedtls_mpi_cmp_mpi
(
param
,
&
L
)
>=
0
&&
if
(
mbedtls_mpi_cmp_mpi
(
param
,
&
L
)
<
0
||
mbedtls_mpi_cmp_mpi
(
param
,
&
U
)
<=
0
)
mbedtls_mpi_cmp_mpi
(
param
,
&
U
)
>
0
)
{
{
ret
=
0
;
ret
=
MBEDTLS_ERR_DHM_BAD_INPUT_DATA
;
}
}
cleanup:
cleanup:
...
@@ -162,7 +169,7 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size,
...
@@ -162,7 +169,7 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size,
*/
*/
do
do
{
{
mbedtls_mpi_fill_random
(
&
ctx
->
X
,
x_size
,
f_rng
,
p_rng
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
&
ctx
->
X
,
x_size
,
f_rng
,
p_rng
)
);
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
X
,
&
ctx
->
P
)
>=
0
)
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
X
,
&
ctx
->
P
)
>=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
X
,
1
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
X
,
1
)
);
...
@@ -184,10 +191,15 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size,
...
@@ -184,10 +191,15 @@ int mbedtls_dhm_make_params( mbedtls_dhm_context *ctx, int x_size,
/*
/*
* export P, G, GX
* export P, G, GX
*/
*/
#define DHM_MPI_EXPORT(X,n) \
#define DHM_MPI_EXPORT( X, n ) \
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( X, p + 2, n ) ); \
do { \
*p++ = (unsigned char)( n >> 8 ); \
MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( ( X ), \
*p++ = (unsigned char)( n ); p += n;
p + 2, \
( n ) ) ); \
*p++ = (unsigned char)( ( n ) >> 8 ); \
*p++ = (unsigned char)( ( n ) ); \
p += ( n ); \
} while( 0 )
n1
=
mbedtls_mpi_size
(
&
ctx
->
P
);
n1
=
mbedtls_mpi_size
(
&
ctx
->
P
);
n2
=
mbedtls_mpi_size
(
&
ctx
->
G
);
n2
=
mbedtls_mpi_size
(
&
ctx
->
G
);
...
@@ -210,6 +222,28 @@ cleanup:
...
@@ -210,6 +222,28 @@ cleanup:
return
(
0
);
return
(
0
);
}
}
/*
* Set prime modulus and generator
*/
int
mbedtls_dhm_set_group
(
mbedtls_dhm_context
*
ctx
,
const
mbedtls_mpi
*
P
,
const
mbedtls_mpi
*
G
)
{
int
ret
;
if
(
ctx
==
NULL
||
P
==
NULL
||
G
==
NULL
)
return
(
MBEDTLS_ERR_DHM_BAD_INPUT_DATA
);
if
(
(
ret
=
mbedtls_mpi_copy
(
&
ctx
->
P
,
P
)
)
!=
0
||
(
ret
=
mbedtls_mpi_copy
(
&
ctx
->
G
,
G
)
)
!=
0
)
{
return
(
MBEDTLS_ERR_DHM_SET_GROUP_FAILED
+
ret
);
}
ctx
->
len
=
mbedtls_mpi_size
(
&
ctx
->
P
);
return
(
0
);
}
/*
/*
* Import the peer's public value G^Y
* Import the peer's public value G^Y
*/
*/
...
@@ -248,7 +282,7 @@ int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size,
...
@@ -248,7 +282,7 @@ int mbedtls_dhm_make_public( mbedtls_dhm_context *ctx, int x_size,
*/
*/
do
do
{
{
mbedtls_mpi_fill_random
(
&
ctx
->
X
,
x_size
,
f_rng
,
p_rng
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
&
ctx
->
X
,
x_size
,
f_rng
,
p_rng
)
);
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
X
,
&
ctx
->
P
)
>=
0
)
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
X
,
&
ctx
->
P
)
>=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
X
,
1
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
X
,
1
)
);
...
@@ -321,7 +355,7 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx,
...
@@ -321,7 +355,7 @@ static int dhm_update_blinding( mbedtls_dhm_context *ctx,
count
=
0
;
count
=
0
;
do
do
{
{
mbedtls_mpi_fill_random
(
&
ctx
->
Vi
,
mbedtls_mpi_size
(
&
ctx
->
P
),
f_rng
,
p_rng
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
&
ctx
->
Vi
,
mbedtls_mpi_size
(
&
ctx
->
P
),
f_rng
,
p_rng
)
);
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
Vi
,
&
ctx
->
P
)
>=
0
)
while
(
mbedtls_mpi_cmp_mpi
(
&
ctx
->
Vi
,
&
ctx
->
P
)
>=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
Vi
,
1
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
ctx
->
Vi
,
1
)
);
...
@@ -397,10 +431,11 @@ cleanup:
...
@@ -397,10 +431,11 @@ cleanup:
*/
*/
void
mbedtls_dhm_free
(
mbedtls_dhm_context
*
ctx
)
void
mbedtls_dhm_free
(
mbedtls_dhm_context
*
ctx
)
{
{
mbedtls_mpi_free
(
&
ctx
->
pX
);
mbedtls_mpi_free
(
&
ctx
->
Vf
);
mbedtls_mpi_free
(
&
ctx
->
Vi
);
mbedtls_mpi_free
(
&
ctx
->
pX
);
mbedtls_mpi_free
(
&
ctx
->
Vf
);
mbedtls_mpi_free
(
&
ctx
->
RP
);
mbedtls_mpi_free
(
&
ctx
->
K
);
mbedtls_mpi_free
(
&
ctx
->
GY
);
mbedtls_mpi_free
(
&
ctx
->
Vi
);
mbedtls_mpi_free
(
&
ctx
->
RP
);
mbedtls_mpi_free
(
&
ctx
->
GX
);
mbedtls_mpi_free
(
&
ctx
->
X
);
mbedtls_mpi_free
(
&
ctx
->
G
);
mbedtls_mpi_free
(
&
ctx
->
K
);
mbedtls_mpi_free
(
&
ctx
->
GY
);
mbedtls_mpi_free
(
&
ctx
->
P
);
mbedtls_mpi_free
(
&
ctx
->
GX
);
mbedtls_mpi_free
(
&
ctx
->
X
);
mbedtls_mpi_free
(
&
ctx
->
G
);
mbedtls_mpi_free
(
&
ctx
->
P
);
mbedtls_zeroize
(
ctx
,
sizeof
(
mbedtls_dhm_context
)
);
mbedtls_zeroize
(
ctx
,
sizeof
(
mbedtls_dhm_context
)
);
}
}
...
@@ -539,7 +574,10 @@ static int load_file( const char *path, unsigned char **buf, size_t *n )
...
@@ -539,7 +574,10 @@ static int load_file( const char *path, unsigned char **buf, size_t *n )
if
(
fread
(
*
buf
,
1
,
*
n
,
f
)
!=
*
n
)
if
(
fread
(
*
buf
,
1
,
*
n
,
f
)
!=
*
n
)
{
{
fclose
(
f
);
fclose
(
f
);
mbedtls_zeroize
(
*
buf
,
*
n
+
1
);
mbedtls_free
(
*
buf
);
mbedtls_free
(
*
buf
);
return
(
MBEDTLS_ERR_DHM_FILE_IO_ERROR
);
return
(
MBEDTLS_ERR_DHM_FILE_IO_ERROR
);
}
}
...
@@ -574,6 +612,7 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path )
...
@@ -574,6 +612,7 @@ int mbedtls_dhm_parse_dhmfile( mbedtls_dhm_context *dhm, const char *path )
}
}
#endif
/* MBEDTLS_FS_IO */
#endif
/* MBEDTLS_FS_IO */
#endif
/* MBEDTLS_ASN1_PARSE_C */
#endif
/* MBEDTLS_ASN1_PARSE_C */
#endif
/* MBEDTLS_DHM_ALT */
#if defined(MBEDTLS_SELF_TEST)
#if defined(MBEDTLS_SELF_TEST)
...
...
Prev
1
2
3
4
5
6
7
8
9
10
…
15
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