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
291
Hide whitespace changes
Inline
Side-by-side
Too many changes to show.
To preserve performance only
291 of 291+
files are displayed.
Plain diff
Email patch
app/mbedtls/library/ecdh.c
View file @
67027c0d
...
...
@@ -38,6 +38,7 @@
#include <string.h>
#if !defined(MBEDTLS_ECDH_GEN_PUBLIC_ALT)
/*
* Generate public key: simple wrapper around mbedtls_ecp_gen_keypair
*/
...
...
@@ -47,7 +48,9 @@ int mbedtls_ecdh_gen_public( mbedtls_ecp_group *grp, mbedtls_mpi *d, mbedtls_ecp
{
return
mbedtls_ecp_gen_keypair
(
grp
,
d
,
Q
,
f_rng
,
p_rng
);
}
#endif
/* MBEDTLS_ECDH_GEN_PUBLIC_ALT */
#if !defined(MBEDTLS_ECDH_COMPUTE_SHARED_ALT)
/*
* Compute shared secret (SEC1 3.3.1)
*/
...
...
@@ -81,6 +84,7 @@ cleanup:
return
(
ret
);
}
#endif
/* MBEDTLS_ECDH_COMPUTE_SHARED_ALT */
/*
* Initialize context
...
...
app/mbedtls/library/ecdsa.c
View file @
67027c0d
...
...
@@ -65,6 +65,7 @@ cleanup:
return
(
ret
);
}
#if !defined(MBEDTLS_ECDSA_SIGN_ALT)
/*
* Compute ECDSA signature of a hashed message (SEC1 4.1.3)
* Obviously, compared to SEC1 4.1.3, we skip step 4 (hash message)
...
...
@@ -81,6 +82,10 @@ int mbedtls_ecdsa_sign( mbedtls_ecp_group *grp, mbedtls_mpi *r, mbedtls_mpi *s,
if
(
grp
->
N
.
p
==
NULL
)
return
(
MBEDTLS_ERR_ECP_BAD_INPUT_DATA
);
/* Make sure d is in range 1..n-1 */
if
(
mbedtls_mpi_cmp_int
(
d
,
1
)
<
0
||
mbedtls_mpi_cmp_mpi
(
d
,
&
grp
->
N
)
>=
0
)
return
(
MBEDTLS_ERR_ECP_INVALID_KEY
);
mbedtls_ecp_point_init
(
&
R
);
mbedtls_mpi_init
(
&
k
);
mbedtls_mpi_init
(
&
e
);
mbedtls_mpi_init
(
&
t
);
...
...
@@ -153,6 +158,7 @@ cleanup:
return
(
ret
);
}
#endif
/* MBEDTLS_ECDSA_SIGN_ALT */
#if defined(MBEDTLS_ECDSA_DETERMINISTIC)
/*
...
...
@@ -192,6 +198,7 @@ cleanup:
}
#endif
/* MBEDTLS_ECDSA_DETERMINISTIC */
#if !defined(MBEDTLS_ECDSA_VERIFY_ALT)
/*
* Verify ECDSA signature of hashed message (SEC1 4.1.4)
* Obviously, compared to SEC1 4.1.3, we skip step 2 (hash message)
...
...
@@ -277,6 +284,7 @@ cleanup:
return
(
ret
);
}
#endif
/* MBEDTLS_ECDSA_VERIFY_ALT */
/*
* Convert a signature (given by context) to ASN.1
...
...
@@ -402,6 +410,7 @@ cleanup:
return
(
ret
);
}
#if !defined(MBEDTLS_ECDSA_GENKEY_ALT)
/*
* Generate key pair
*/
...
...
@@ -411,6 +420,7 @@ int mbedtls_ecdsa_genkey( mbedtls_ecdsa_context *ctx, mbedtls_ecp_group_id gid,
return
(
mbedtls_ecp_group_load
(
&
ctx
->
grp
,
gid
)
||
mbedtls_ecp_gen_keypair
(
&
ctx
->
grp
,
&
ctx
->
d
,
&
ctx
->
Q
,
f_rng
,
p_rng
)
);
}
#endif
/* MBEDTLS_ECDSA_GENKEY_ALT */
/*
* Set context from an mbedtls_ecp_keypair
...
...
app/mbedtls/library/ecjpake.c
View file @
67027c0d
...
...
@@ -36,6 +36,8 @@
#include <string.h>
#if !defined(MBEDTLS_ECJPAKE_ALT)
/*
* Convert a mbedtls_ecjpake_role to identifier string
*/
...
...
@@ -764,6 +766,7 @@ cleanup:
#undef ID_MINE
#undef ID_PEER
#endif
/* ! MBEDTLS_ECJPAKE_ALT */
#if defined(MBEDTLS_SELF_TEST)
...
...
app/mbedtls/library/ecp.c
View file @
67027c0d
...
...
@@ -49,9 +49,12 @@
#if defined(MBEDTLS_ECP_C)
#include "mbedtls/ecp.h"
#include "mbedtls/threading.h"
#include <string.h>
#if !defined(MBEDTLS_ECP_ALT)
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
#else
...
...
@@ -62,6 +65,8 @@
#define mbedtls_free free
#endif
#include "mbedtls/ecp_internal.h"
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
!defined(inline) && !defined(__cplusplus)
#define inline __inline
...
...
@@ -748,6 +753,12 @@ static int ecp_normalize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p
if
(
mbedtls_mpi_cmp_int
(
&
pt
->
Z
,
0
)
==
0
)
return
(
0
);
#if defined(MBEDTLS_ECP_NORMALIZE_JAC_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_normalize_jac
(
grp
,
pt
);
}
#endif
/* MBEDTLS_ECP_NORMALIZE_JAC_ALT */
mbedtls_mpi_init
(
&
Zi
);
mbedtls_mpi_init
(
&
ZZi
);
/*
...
...
@@ -796,6 +807,13 @@ static int ecp_normalize_jac_many( const mbedtls_ecp_group *grp,
if
(
t_len
<
2
)
return
(
ecp_normalize_jac
(
grp
,
*
T
)
);
#if defined(MBEDTLS_ECP_NORMALIZE_JAC_MANY_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_normalize_jac_many
(
grp
,
T
,
t_len
);
}
#endif
if
(
(
c
=
mbedtls_calloc
(
t_len
,
sizeof
(
mbedtls_mpi
)
)
)
==
NULL
)
return
(
MBEDTLS_ERR_ECP_ALLOC_FAILED
);
...
...
@@ -912,6 +930,13 @@ static int ecp_double_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
dbl_count
++
;
#endif
#if defined(MBEDTLS_ECP_DOUBLE_JAC_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_double_jac
(
grp
,
R
,
P
);
}
#endif
/* MBEDTLS_ECP_DOUBLE_JAC_ALT */
mbedtls_mpi_init
(
&
M
);
mbedtls_mpi_init
(
&
S
);
mbedtls_mpi_init
(
&
T
);
mbedtls_mpi_init
(
&
U
);
/* Special case for A = -3 */
...
...
@@ -1003,6 +1028,13 @@ static int ecp_add_mixed( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
add_count
++
;
#endif
#if defined(MBEDTLS_ECP_ADD_MIXED_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_add_mixed
(
grp
,
R
,
P
,
Q
);
}
#endif
/* MBEDTLS_ECP_ADD_MIXED_ALT */
/*
* Trivial cases: P == 0 or Q == 0 (case 1)
*/
...
...
@@ -1080,15 +1112,23 @@ static int ecp_randomize_jac( const mbedtls_ecp_group *grp, mbedtls_ecp_point *p
{
int
ret
;
mbedtls_mpi
l
,
ll
;
size_t
p_size
=
(
grp
->
pbits
+
7
)
/
8
;
size_t
p_size
;
int
count
=
0
;
#if defined(MBEDTLS_ECP_RANDOMIZE_JAC_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_randomize_jac
(
grp
,
pt
,
f_rng
,
p_rng
);
}
#endif
/* MBEDTLS_ECP_RANDOMIZE_JAC_ALT */
p_size
=
(
grp
->
pbits
+
7
)
/
8
;
mbedtls_mpi_init
(
&
l
);
mbedtls_mpi_init
(
&
ll
);
/* Generate l such that 1 < l < p */
do
{
mbedtls_mpi_fill_random
(
&
l
,
p_size
,
f_rng
,
p_rng
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
&
l
,
p_size
,
f_rng
,
p_rng
)
);
while
(
mbedtls_mpi_cmp_mpi
(
&
l
,
&
grp
->
P
)
>=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
l
,
1
)
);
...
...
@@ -1234,6 +1274,7 @@ static int ecp_precompute_comb( const mbedtls_ecp_group *grp,
MBEDTLS_MPI_CHK
(
ecp_normalize_jac_many
(
grp
,
TT
,
k
)
);
cleanup:
return
(
ret
);
}
...
...
@@ -1297,6 +1338,7 @@ static int ecp_mul_comb_core( const mbedtls_ecp_group *grp, mbedtls_ecp_point *R
}
cleanup:
mbedtls_ecp_point_free
(
&
Txi
);
return
(
ret
);
...
...
@@ -1441,6 +1483,13 @@ static int ecp_normalize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P
{
int
ret
;
#if defined(MBEDTLS_ECP_NORMALIZE_MXZ_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_normalize_mxz
(
grp
,
P
);
}
#endif
/* MBEDTLS_ECP_NORMALIZE_MXZ_ALT */
MBEDTLS_MPI_CHK
(
mbedtls_mpi_inv_mod
(
&
P
->
Z
,
&
P
->
Z
,
&
grp
->
P
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_mul_mpi
(
&
P
->
X
,
&
P
->
X
,
&
P
->
Z
)
);
MOD_MUL
(
P
->
X
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_lset
(
&
P
->
Z
,
1
)
);
...
...
@@ -1462,15 +1511,23 @@ static int ecp_randomize_mxz( const mbedtls_ecp_group *grp, mbedtls_ecp_point *P
{
int
ret
;
mbedtls_mpi
l
;
size_t
p_size
=
(
grp
->
pbits
+
7
)
/
8
;
size_t
p_size
;
int
count
=
0
;
#if defined(MBEDTLS_ECP_RANDOMIZE_MXZ_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_randomize_mxz
(
grp
,
P
,
f_rng
,
p_rng
);
}
#endif
/* MBEDTLS_ECP_RANDOMIZE_MXZ_ALT */
p_size
=
(
grp
->
pbits
+
7
)
/
8
;
mbedtls_mpi_init
(
&
l
);
/* Generate l such that 1 < l < p */
do
{
mbedtls_mpi_fill_random
(
&
l
,
p_size
,
f_rng
,
p_rng
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
&
l
,
p_size
,
f_rng
,
p_rng
)
);
while
(
mbedtls_mpi_cmp_mpi
(
&
l
,
&
grp
->
P
)
>=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
l
,
1
)
);
...
...
@@ -1512,6 +1569,13 @@ static int ecp_double_add_mxz( const mbedtls_ecp_group *grp,
int
ret
;
mbedtls_mpi
A
,
AA
,
B
,
BB
,
E
,
C
,
D
,
DA
,
CB
;
#if defined(MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT)
if
(
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
return
mbedtls_internal_ecp_double_add_mxz
(
grp
,
R
,
S
,
P
,
Q
,
d
);
}
#endif
/* MBEDTLS_ECP_DOUBLE_ADD_MXZ_ALT */
mbedtls_mpi_init
(
&
A
);
mbedtls_mpi_init
(
&
AA
);
mbedtls_mpi_init
(
&
B
);
mbedtls_mpi_init
(
&
BB
);
mbedtls_mpi_init
(
&
E
);
mbedtls_mpi_init
(
&
C
);
mbedtls_mpi_init
(
&
D
);
mbedtls_mpi_init
(
&
DA
);
mbedtls_mpi_init
(
&
CB
);
...
...
@@ -1612,7 +1676,10 @@ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
const
mbedtls_mpi
*
m
,
const
mbedtls_ecp_point
*
P
,
int
(
*
f_rng
)(
void
*
,
unsigned
char
*
,
size_t
),
void
*
p_rng
)
{
int
ret
;
int
ret
=
MBEDTLS_ERR_ECP_BAD_INPUT_DATA
;
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
char
is_grp_capable
=
0
;
#endif
/* Common sanity checks */
if
(
mbedtls_mpi_cmp_int
(
&
P
->
Z
,
1
)
!=
0
)
...
...
@@ -1622,15 +1689,33 @@ int mbedtls_ecp_mul( mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
(
ret
=
mbedtls_ecp_check_pubkey
(
grp
,
P
)
)
!=
0
)
return
(
ret
);
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
if
(
is_grp_capable
=
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
MBEDTLS_MPI_CHK
(
mbedtls_internal_ecp_init
(
grp
)
);
}
#endif
/* MBEDTLS_ECP_INTERNAL_ALT */
#if defined(ECP_MONTGOMERY)
if
(
ecp_get_type
(
grp
)
==
ECP_TYPE_MONTGOMERY
)
return
(
ecp_mul_mxz
(
grp
,
R
,
m
,
P
,
f_rng
,
p_rng
)
);
ret
=
ecp_mul_mxz
(
grp
,
R
,
m
,
P
,
f_rng
,
p_rng
);
#endif
#if defined(ECP_SHORTWEIERSTRASS)
if
(
ecp_get_type
(
grp
)
==
ECP_TYPE_SHORT_WEIERSTRASS
)
return
(
ecp_mul_comb
(
grp
,
R
,
m
,
P
,
f_rng
,
p_rng
)
);
ret
=
ecp_mul_comb
(
grp
,
R
,
m
,
P
,
f_rng
,
p_rng
);
#endif
return
(
MBEDTLS_ERR_ECP_BAD_INPUT_DATA
);
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
cleanup:
if
(
is_grp_capable
)
{
mbedtls_internal_ecp_free
(
grp
);
}
#endif
/* MBEDTLS_ECP_INTERNAL_ALT */
return
(
ret
);
}
#if defined(ECP_SHORTWEIERSTRASS)
...
...
@@ -1723,6 +1808,9 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
{
int
ret
;
mbedtls_ecp_point
mP
;
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
char
is_grp_capable
=
0
;
#endif
if
(
ecp_get_type
(
grp
)
!=
ECP_TYPE_SHORT_WEIERSTRASS
)
return
(
MBEDTLS_ERR_ECP_FEATURE_UNAVAILABLE
);
...
...
@@ -1732,10 +1820,25 @@ int mbedtls_ecp_muladd( mbedtls_ecp_group *grp, mbedtls_ecp_point *R,
MBEDTLS_MPI_CHK
(
mbedtls_ecp_mul_shortcuts
(
grp
,
&
mP
,
m
,
P
)
);
MBEDTLS_MPI_CHK
(
mbedtls_ecp_mul_shortcuts
(
grp
,
R
,
n
,
Q
)
);
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
if
(
is_grp_capable
=
mbedtls_internal_ecp_grp_capable
(
grp
)
)
{
MBEDTLS_MPI_CHK
(
mbedtls_internal_ecp_init
(
grp
)
);
}
#endif
/* MBEDTLS_ECP_INTERNAL_ALT */
MBEDTLS_MPI_CHK
(
ecp_add_mixed
(
grp
,
R
,
&
mP
,
R
)
);
MBEDTLS_MPI_CHK
(
ecp_normalize_jac
(
grp
,
R
)
);
cleanup:
#if defined(MBEDTLS_ECP_INTERNAL_ALT)
if
(
is_grp_capable
)
{
mbedtls_internal_ecp_free
(
grp
);
}
#endif
/* MBEDTLS_ECP_INTERNAL_ALT */
mbedtls_ecp_point_free
(
&
mP
);
return
(
ret
);
...
...
@@ -1827,7 +1930,9 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
/* [M225] page 5 */
size_t
b
;
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
d
,
n_size
,
f_rng
,
p_rng
)
);
do
{
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
d
,
n_size
,
f_rng
,
p_rng
)
);
}
while
(
mbedtls_mpi_bitlen
(
d
)
==
0
);
/* Make sure the most significant bit is nbits */
b
=
mbedtls_mpi_bitlen
(
d
)
-
1
;
/* mbedtls_mpi_bitlen is one-based */
...
...
@@ -1848,7 +1953,6 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
{
/* SEC1 3.2.1: Generate d such that 1 <= n < N */
int
count
=
0
;
unsigned
char
rnd
[
MBEDTLS_ECP_MAX_BYTES
];
/*
* Match the procedure given in RFC 6979 (deterministic ECDSA):
...
...
@@ -1859,8 +1963,7 @@ int mbedtls_ecp_gen_keypair_base( mbedtls_ecp_group *grp,
*/
do
{
MBEDTLS_MPI_CHK
(
f_rng
(
p_rng
,
rnd
,
n_size
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_read_binary
(
d
,
rnd
,
n_size
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_fill_random
(
d
,
n_size
,
f_rng
,
p_rng
)
);
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
d
,
8
*
n_size
-
grp
->
nbits
)
);
/*
...
...
@@ -2087,4 +2190,6 @@ cleanup:
#endif
/* MBEDTLS_SELF_TEST */
#endif
/* !MBEDTLS_ECP_ALT */
#endif
/* MBEDTLS_ECP_C */
app/mbedtls/library/ecp_curves.c
View file @
67027c0d
...
...
@@ -31,6 +31,8 @@
#include <string.h>
#if !defined(MBEDTLS_ECP_ALT)
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
!defined(inline) && !defined(__cplusplus)
#define inline __inline
...
...
@@ -1213,7 +1215,7 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t
int
ret
;
size_t
i
;
mbedtls_mpi
M
,
R
;
mbedtls_mpi_uint
Mp
[
P_KOBLITZ_MAX
+
P_KOBLITZ_R
];
mbedtls_mpi_uint
Mp
[
P_KOBLITZ_MAX
+
P_KOBLITZ_R
+
1
];
if
(
N
->
n
<
p_limbs
)
return
(
0
);
...
...
@@ -1235,7 +1237,7 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t
memcpy
(
Mp
,
N
->
p
+
p_limbs
-
adjust
,
M
.
n
*
sizeof
(
mbedtls_mpi_uint
)
);
if
(
shift
!=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
M
,
shift
)
);
M
.
n
+=
R
.
n
-
adjust
;
/* Make room for multiplication by R */
M
.
n
+=
R
.
n
;
/* Make room for multiplication by R */
/* N = A0 */
if
(
mask
!=
0
)
...
...
@@ -1257,7 +1259,7 @@ static inline int ecp_mod_koblitz( mbedtls_mpi *N, mbedtls_mpi_uint *Rp, size_t
memcpy
(
Mp
,
N
->
p
+
p_limbs
-
adjust
,
M
.
n
*
sizeof
(
mbedtls_mpi_uint
)
);
if
(
shift
!=
0
)
MBEDTLS_MPI_CHK
(
mbedtls_mpi_shift_r
(
&
M
,
shift
)
);
M
.
n
+=
R
.
n
-
adjust
;
/* Make room for multiplication by R */
M
.
n
+=
R
.
n
;
/* Make room for multiplication by R */
/* N = A0 */
if
(
mask
!=
0
)
...
...
@@ -1322,4 +1324,6 @@ static int ecp_mod_p256k1( mbedtls_mpi *N )
}
#endif
/* MBEDTLS_ECP_DP_SECP256K1_ENABLED */
#endif
/* !MBEDTLS_ECP_ALT */
#endif
/* MBEDTLS_ECP_C */
app/mbedtls/library/entropy.c
View file @
67027c0d
/*
* Entropy accumulator implementation
*
* Copyright (C) 2006-201
5
, ARM Limited, All Rights Reserved
* Copyright (C) 2006-201
6
, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -27,6 +27,12 @@
#if defined(MBEDTLS_ENTROPY_C)
#if defined(MBEDTLS_TEST_NULL_ENTROPY)
#warning "**** WARNING! MBEDTLS_TEST_NULL_ENTROPY defined! "
#warning "**** THIS BUILD HAS NO DEFINED ENTROPY SOURCES "
#warning "**** THIS BUILD IS *NOT* SUITABLE FOR PRODUCTION USE "
#endif
#include "mbedtls/entropy.h"
#include "mbedtls/entropy_poll.h"
...
...
@@ -36,6 +42,10 @@
#include <stdio.h>
#endif
#if defined(MBEDTLS_ENTROPY_NV_SEED)
#include "mbedtls/platform.h"
#endif
#if defined(MBEDTLS_SELF_TEST)
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
...
...
@@ -58,21 +68,31 @@ static void mbedtls_zeroize( void *v, size_t n ) {
void
mbedtls_entropy_init
(
mbedtls_entropy_context
*
ctx
)
{
memset
(
ctx
,
0
,
sizeof
(
mbedtls_entropy_context
)
);
ctx
->
source_count
=
0
;
memset
(
ctx
->
source
,
0
,
sizeof
(
ctx
->
source
)
);
#if defined(MBEDTLS_THREADING_C)
mbedtls_mutex_init
(
&
ctx
->
mutex
);
#endif
ctx
->
accumulator_started
=
0
;
#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
mbedtls_sha512_
starts
(
&
ctx
->
accumulator
,
0
);
mbedtls_sha512_
init
(
&
ctx
->
accumulator
);
#else
mbedtls_sha256_
starts
(
&
ctx
->
accumulator
,
0
);
mbedtls_sha256_
init
(
&
ctx
->
accumulator
);
#endif
#if defined(MBEDTLS_HAVEGE_C)
mbedtls_havege_init
(
&
ctx
->
havege_data
);
#endif
/* Reminder: Update ENTROPY_HAVE_STRONG in the test files
* when adding more strong entropy sources here. */
#if defined(MBEDTLS_TEST_NULL_ENTROPY)
mbedtls_entropy_add_source
(
ctx
,
mbedtls_null_entropy_poll
,
NULL
,
1
,
MBEDTLS_ENTROPY_SOURCE_STRONG
);
#endif
#if !defined(MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES)
#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY)
mbedtls_entropy_add_source
(
ctx
,
mbedtls_platform_entropy_poll
,
NULL
,
...
...
@@ -94,6 +114,12 @@ void mbedtls_entropy_init( mbedtls_entropy_context *ctx )
MBEDTLS_ENTROPY_MIN_HARDWARE
,
MBEDTLS_ENTROPY_SOURCE_STRONG
);
#endif
#if defined(MBEDTLS_ENTROPY_NV_SEED)
mbedtls_entropy_add_source
(
ctx
,
mbedtls_nv_seed_poll
,
NULL
,
MBEDTLS_ENTROPY_BLOCK_SIZE
,
MBEDTLS_ENTROPY_SOURCE_STRONG
);
ctx
->
initial_entropy_run
=
0
;
#endif
#endif
/* MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES */
}
...
...
@@ -105,31 +131,41 @@ void mbedtls_entropy_free( mbedtls_entropy_context *ctx )
#if defined(MBEDTLS_THREADING_C)
mbedtls_mutex_free
(
&
ctx
->
mutex
);
#endif
mbedtls_zeroize
(
ctx
,
sizeof
(
mbedtls_entropy_context
)
);
#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
mbedtls_sha512_free
(
&
ctx
->
accumulator
);
#else
mbedtls_sha256_free
(
&
ctx
->
accumulator
);
#endif
#if defined(MBEDTLS_ENTROPY_NV_SEED)
ctx
->
initial_entropy_run
=
0
;
#endif
ctx
->
source_count
=
0
;
mbedtls_zeroize
(
ctx
->
source
,
sizeof
(
ctx
->
source
)
);
ctx
->
accumulator_started
=
0
;
}
int
mbedtls_entropy_add_source
(
mbedtls_entropy_context
*
ctx
,
mbedtls_entropy_f_source_ptr
f_source
,
void
*
p_source
,
size_t
threshold
,
int
strong
)
{
int
i
nde
x
,
ret
=
0
;
int
i
d
x
,
ret
=
0
;
#if defined(MBEDTLS_THREADING_C)
if
(
(
ret
=
mbedtls_mutex_lock
(
&
ctx
->
mutex
)
)
!=
0
)
return
(
ret
);
#endif
i
nde
x
=
ctx
->
source_count
;
if
(
i
nde
x
>=
MBEDTLS_ENTROPY_MAX_SOURCES
)
i
d
x
=
ctx
->
source_count
;
if
(
i
d
x
>=
MBEDTLS_ENTROPY_MAX_SOURCES
)
{
ret
=
MBEDTLS_ERR_ENTROPY_MAX_SOURCES
;
goto
exit
;
}
ctx
->
source
[
i
nde
x
].
f_source
=
f_source
;
ctx
->
source
[
i
nde
x
].
p_source
=
p_source
;
ctx
->
source
[
i
nde
x
].
threshold
=
threshold
;
ctx
->
source
[
i
nde
x
].
strong
=
strong
;
ctx
->
source
[
i
d
x
].
f_source
=
f_source
;
ctx
->
source
[
i
d
x
].
p_source
=
p_source
;
ctx
->
source
[
i
d
x
].
threshold
=
threshold
;
ctx
->
source
[
i
d
x
].
strong
=
strong
;
ctx
->
source_count
++
;
...
...
@@ -152,13 +188,16 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id
unsigned
char
tmp
[
MBEDTLS_ENTROPY_BLOCK_SIZE
];
size_t
use_len
=
len
;
const
unsigned
char
*
p
=
data
;
int
ret
=
0
;
if
(
use_len
>
MBEDTLS_ENTROPY_BLOCK_SIZE
)
{
#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
mbedtls_sha512
(
data
,
len
,
tmp
,
0
);
if
(
(
ret
=
mbedtls_sha512_ret
(
data
,
len
,
tmp
,
0
)
)
!=
0
)
goto
cleanup
;
#else
mbedtls_sha256
(
data
,
len
,
tmp
,
0
);
if
(
(
ret
=
mbedtls_sha256_ret
(
data
,
len
,
tmp
,
0
)
)
!=
0
)
goto
cleanup
;
#endif
p
=
tmp
;
use_len
=
MBEDTLS_ENTROPY_BLOCK_SIZE
;
...
...
@@ -167,15 +206,35 @@ static int entropy_update( mbedtls_entropy_context *ctx, unsigned char source_id
header
[
0
]
=
source_id
;
header
[
1
]
=
use_len
&
0xFF
;
/*
* Start the accumulator if this has not already happened. Note that
* it is sufficient to start the accumulator here only because all calls to
* gather entropy eventually execute this code.
*/
#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
mbedtls_sha512_update
(
&
ctx
->
accumulator
,
header
,
2
);
mbedtls_sha512_update
(
&
ctx
->
accumulator
,
p
,
use_len
);
if
(
ctx
->
accumulator_started
==
0
&&
(
ret
=
mbedtls_sha512_starts_ret
(
&
ctx
->
accumulator
,
0
)
)
!=
0
)
goto
cleanup
;
else
ctx
->
accumulator_started
=
1
;
if
(
(
ret
=
mbedtls_sha512_update_ret
(
&
ctx
->
accumulator
,
header
,
2
)
)
!=
0
)
goto
cleanup
;
ret
=
mbedtls_sha512_update_ret
(
&
ctx
->
accumulator
,
p
,
use_len
);
#else
mbedtls_sha256_update
(
&
ctx
->
accumulator
,
header
,
2
);
mbedtls_sha256_update
(
&
ctx
->
accumulator
,
p
,
use_len
);
if
(
ctx
->
accumulator_started
==
0
&&
(
ret
=
mbedtls_sha256_starts_ret
(
&
ctx
->
accumulator
,
0
)
)
!=
0
)
goto
cleanup
;
else
ctx
->
accumulator_started
=
1
;
if
(
(
ret
=
mbedtls_sha256_update_ret
(
&
ctx
->
accumulator
,
header
,
2
)
)
!=
0
)
goto
cleanup
;
ret
=
mbedtls_sha256_update_ret
(
&
ctx
->
accumulator
,
p
,
use_len
);
#endif
return
(
0
);
cleanup:
mbedtls_zeroize
(
tmp
,
sizeof
(
tmp
)
);
return
(
ret
);
}
int
mbedtls_entropy_update_manual
(
mbedtls_entropy_context
*
ctx
,
...
...
@@ -222,7 +281,7 @@ static int entropy_gather_internal( mbedtls_entropy_context *ctx )
if
(
(
ret
=
ctx
->
source
[
i
].
f_source
(
ctx
->
source
[
i
].
p_source
,
buf
,
MBEDTLS_ENTROPY_MAX_GATHER
,
&
olen
)
)
!=
0
)
{
return
(
ret
)
;
goto
cleanup
;
}
/*
...
...
@@ -230,15 +289,20 @@ static int entropy_gather_internal( mbedtls_entropy_context *ctx )
*/
if
(
olen
>
0
)
{
entropy_update
(
ctx
,
(
unsigned
char
)
i
,
buf
,
olen
);
if
(
(
ret
=
entropy_update
(
ctx
,
(
unsigned
char
)
i
,
buf
,
olen
)
)
!=
0
)
return
(
ret
);
ctx
->
source
[
i
].
size
+=
olen
;
}
}
if
(
have_one_strong
==
0
)
ret
urn
(
MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE
)
;
ret
=
MBEDTLS_ERR_ENTROPY_NO_STRONG_SOURCE
;
return
(
0
);
cleanup:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
return
(
ret
);
}
/*
...
...
@@ -272,6 +336,18 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len )
if
(
len
>
MBEDTLS_ENTROPY_BLOCK_SIZE
)
return
(
MBEDTLS_ERR_ENTROPY_SOURCE_FAILED
);
#if defined(MBEDTLS_ENTROPY_NV_SEED)
/* Update the NV entropy seed before generating any entropy for outside
* use.
*/
if
(
ctx
->
initial_entropy_run
==
0
)
{
ctx
->
initial_entropy_run
=
1
;
if
(
(
ret
=
mbedtls_entropy_update_nv_seed
(
ctx
)
)
!=
0
)
return
(
ret
);
}
#endif
#if defined(MBEDTLS_THREADING_C)
if
(
(
ret
=
mbedtls_mutex_lock
(
&
ctx
->
mutex
)
)
!=
0
)
return
(
ret
);
...
...
@@ -301,33 +377,52 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len )
memset
(
buf
,
0
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
#if defined(MBEDTLS_ENTROPY_SHA512_ACCUMULATOR)
mbedtls_sha512_finish
(
&
ctx
->
accumulator
,
buf
);
/*
* Note that at this stage it is assumed that the accumulator was started
* in a previous call to entropy_update(). If this is not guaranteed, the
* code below will fail.
*/
if
(
(
ret
=
mbedtls_sha512_finish_ret
(
&
ctx
->
accumulator
,
buf
)
)
!=
0
)
goto
exit
;
/*
* Reset accumulator and counters and recycle existing entropy
*/
memset
(
&
ctx
->
accumulator
,
0
,
sizeof
(
mbedtls_sha512_context
)
);
mbedtls_sha512_starts
(
&
ctx
->
accumulator
,
0
);
mbedtls_sha512_update
(
&
ctx
->
accumulator
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
mbedtls_sha512_free
(
&
ctx
->
accumulator
);
mbedtls_sha512_init
(
&
ctx
->
accumulator
);
if
(
(
ret
=
mbedtls_sha512_starts_ret
(
&
ctx
->
accumulator
,
0
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_sha512_update_ret
(
&
ctx
->
accumulator
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
)
)
!=
0
)
goto
exit
;
/*
* Perform second SHA-512 on entropy
*/
mbedtls_sha512
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
,
buf
,
0
);
if
(
(
ret
=
mbedtls_sha512_ret
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
,
buf
,
0
)
)
!=
0
)
goto
exit
;
#else
/* MBEDTLS_ENTROPY_SHA512_ACCUMULATOR */
mbedtls_sha256_finish
(
&
ctx
->
accumulator
,
buf
);
if
(
(
ret
=
mbedtls_sha256_finish_ret
(
&
ctx
->
accumulator
,
buf
)
)
!=
0
)
goto
exit
;
/*
* Reset accumulator and counters and recycle existing entropy
*/
memset
(
&
ctx
->
accumulator
,
0
,
sizeof
(
mbedtls_sha256_context
)
);
mbedtls_sha256_starts
(
&
ctx
->
accumulator
,
0
);
mbedtls_sha256_update
(
&
ctx
->
accumulator
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
mbedtls_sha256_free
(
&
ctx
->
accumulator
);
mbedtls_sha256_init
(
&
ctx
->
accumulator
);
if
(
(
ret
=
mbedtls_sha256_starts_ret
(
&
ctx
->
accumulator
,
0
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_sha256_update_ret
(
&
ctx
->
accumulator
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
)
)
!=
0
)
goto
exit
;
/*
* Perform second SHA-256 on entropy
*/
mbedtls_sha256
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
,
buf
,
0
);
if
(
(
ret
=
mbedtls_sha256_ret
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
,
buf
,
0
)
)
!=
0
)
goto
exit
;
#endif
/* MBEDTLS_ENTROPY_SHA512_ACCUMULATOR */
for
(
i
=
0
;
i
<
ctx
->
source_count
;
i
++
)
...
...
@@ -338,6 +433,8 @@ int mbedtls_entropy_func( void *data, unsigned char *output, size_t len )
ret
=
0
;
exit:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
#if defined(MBEDTLS_THREADING_C)
if
(
mbedtls_mutex_unlock
(
&
ctx
->
mutex
)
!=
0
)
return
(
MBEDTLS_ERR_THREADING_MUTEX_ERROR
);
...
...
@@ -346,6 +443,27 @@ exit:
return
(
ret
);
}
#if defined(MBEDTLS_ENTROPY_NV_SEED)
int
mbedtls_entropy_update_nv_seed
(
mbedtls_entropy_context
*
ctx
)
{
int
ret
=
MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR
;
unsigned
char
buf
[
MBEDTLS_ENTROPY_BLOCK_SIZE
];
/* Read new seed and write it to NV */
if
(
(
ret
=
mbedtls_entropy_func
(
ctx
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
)
)
!=
0
)
return
(
ret
);
if
(
mbedtls_nv_seed_write
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
)
<
0
)
return
(
MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR
);
/* Manually update the remaining stream with a separator value to diverge */
memset
(
buf
,
0
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
ret
=
mbedtls_entropy_update_manual
(
ctx
,
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
return
(
ret
);
}
#endif
/* MBEDTLS_ENTROPY_NV_SEED */
#if defined(MBEDTLS_FS_IO)
int
mbedtls_entropy_write_seed_file
(
mbedtls_entropy_context
*
ctx
,
const
char
*
path
)
{
...
...
@@ -368,12 +486,15 @@ int mbedtls_entropy_write_seed_file( mbedtls_entropy_context *ctx, const char *p
ret
=
0
;
exit:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
fclose
(
f
);
return
(
ret
);
}
int
mbedtls_entropy_update_seed_file
(
mbedtls_entropy_context
*
ctx
,
const
char
*
path
)
{
int
ret
=
0
;
FILE
*
f
;
size_t
n
;
unsigned
char
buf
[
MBEDTLS_ENTROPY_MAX_SEED_SIZE
];
...
...
@@ -389,20 +510,23 @@ int mbedtls_entropy_update_seed_file( mbedtls_entropy_context *ctx, const char *
n
=
MBEDTLS_ENTROPY_MAX_SEED_SIZE
;
if
(
fread
(
buf
,
1
,
n
,
f
)
!=
n
)
{
fclose
(
f
);
return
(
MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR
);
}
ret
=
MBEDTLS_ERR_ENTROPY_FILE_IO_ERROR
;
else
ret
=
mbedtls_entropy_update_manual
(
ctx
,
buf
,
n
);
fclose
(
f
);
mbedtls_entropy_update_manual
(
ctx
,
buf
,
n
);
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
if
(
ret
!=
0
)
return
(
ret
);
return
(
mbedtls_entropy_write_seed_file
(
ctx
,
path
)
);
}
#endif
/* MBEDTLS_FS_IO */
#if defined(MBEDTLS_SELF_TEST)
#if !defined(MBEDTLS_TEST_NULL_ENTROPY)
/*
* Dummy source function
*/
...
...
@@ -416,6 +540,105 @@ static int entropy_dummy_source( void *data, unsigned char *output,
return
(
0
);
}
#endif
/* !MBEDTLS_TEST_NULL_ENTROPY */
#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
static
int
mbedtls_entropy_source_self_test_gather
(
unsigned
char
*
buf
,
size_t
buf_len
)
{
int
ret
=
0
;
size_t
entropy_len
=
0
;
size_t
olen
=
0
;
size_t
attempts
=
buf_len
;
while
(
attempts
>
0
&&
entropy_len
<
buf_len
)
{
if
(
(
ret
=
mbedtls_hardware_poll
(
NULL
,
buf
+
entropy_len
,
buf_len
-
entropy_len
,
&
olen
)
)
!=
0
)
return
(
ret
);
entropy_len
+=
olen
;
attempts
--
;
}
if
(
entropy_len
<
buf_len
)
{
ret
=
1
;
}
return
(
ret
);
}
static
int
mbedtls_entropy_source_self_test_check_bits
(
const
unsigned
char
*
buf
,
size_t
buf_len
)
{
unsigned
char
set
=
0xFF
;
unsigned
char
unset
=
0x00
;
size_t
i
;
for
(
i
=
0
;
i
<
buf_len
;
i
++
)
{
set
&=
buf
[
i
];
unset
|=
buf
[
i
];
}
return
(
set
==
0xFF
||
unset
==
0x00
);
}
/*
* A test to ensure hat the entropy sources are functioning correctly
* and there is no obvious failure. The test performs the following checks:
* - The entropy source is not providing only 0s (all bits unset) or 1s (all
* bits set).
* - The entropy source is not providing values in a pattern. Because the
* hardware could be providing data in an arbitrary length, this check polls
* the hardware entropy source twice and compares the result to ensure they
* are not equal.
* - The error code returned by the entropy source is not an error.
*/
int
mbedtls_entropy_source_self_test
(
int
verbose
)
{
int
ret
=
0
;
unsigned
char
buf0
[
2
*
sizeof
(
unsigned
long
long
int
)];
unsigned
char
buf1
[
2
*
sizeof
(
unsigned
long
long
int
)];
if
(
verbose
!=
0
)
mbedtls_printf
(
" ENTROPY_BIAS test: "
);
memset
(
buf0
,
0x00
,
sizeof
(
buf0
)
);
memset
(
buf1
,
0x00
,
sizeof
(
buf1
)
);
if
(
(
ret
=
mbedtls_entropy_source_self_test_gather
(
buf0
,
sizeof
(
buf0
)
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
mbedtls_entropy_source_self_test_gather
(
buf1
,
sizeof
(
buf1
)
)
)
!=
0
)
goto
cleanup
;
/* Make sure that the returned values are not all 0 or 1 */
if
(
(
ret
=
mbedtls_entropy_source_self_test_check_bits
(
buf0
,
sizeof
(
buf0
)
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
mbedtls_entropy_source_self_test_check_bits
(
buf1
,
sizeof
(
buf1
)
)
)
!=
0
)
goto
cleanup
;
/* Make sure that the entropy source is not returning values in a
* pattern */
ret
=
memcmp
(
buf0
,
buf1
,
sizeof
(
buf0
)
)
==
0
;
cleanup:
if
(
verbose
!=
0
)
{
if
(
ret
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
else
mbedtls_printf
(
"passed
\n
"
);
mbedtls_printf
(
"
\n
"
);
}
return
(
ret
!=
0
);
}
#endif
/* MBEDTLS_ENTROPY_HARDWARE_ALT */
/*
* The actual entropy quality is hard to test, but we can at least
...
...
@@ -424,15 +647,18 @@ static int entropy_dummy_source( void *data, unsigned char *output,
*/
int
mbedtls_entropy_self_test
(
int
verbose
)
{
int
ret
=
0
;
int
ret
=
1
;
#if !defined(MBEDTLS_TEST_NULL_ENTROPY)
mbedtls_entropy_context
ctx
;
unsigned
char
buf
[
MBEDTLS_ENTROPY_BLOCK_SIZE
]
=
{
0
};
unsigned
char
acc
[
MBEDTLS_ENTROPY_BLOCK_SIZE
]
=
{
0
};
size_t
i
,
j
;
#endif
/* !MBEDTLS_TEST_NULL_ENTROPY */
if
(
verbose
!=
0
)
mbedtls_printf
(
" ENTROPY test: "
);
#if !defined(MBEDTLS_TEST_NULL_ENTROPY)
mbedtls_entropy_init
(
&
ctx
);
/* First do a gather to make sure we have default sources */
...
...
@@ -473,8 +699,14 @@ int mbedtls_entropy_self_test( int verbose )
}
}
#if defined(MBEDTLS_ENTROPY_HARDWARE_ALT)
if
(
(
ret
=
mbedtls_entropy_source_self_test
(
0
)
)
!=
0
)
goto
cleanup
;
#endif
cleanup:
mbedtls_entropy_free
(
&
ctx
);
#endif
/* !MBEDTLS_TEST_NULL_ENTROPY */
if
(
verbose
!=
0
)
{
...
...
app/mbedtls/library/entropy_poll.c
View file @
67027c0d
/*
* Platform-specific and custom entropy polling functions
*
* Copyright (C) 2006-201
5
, ARM Limited, All Rights Reserved
* Copyright (C) 2006-201
6
, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -37,8 +37,17 @@
#if defined(MBEDTLS_HAVEGE_C)
#include "mbedtls/havege.h"
#endif
#if defined(MBEDTLS_ENTROPY_NV_SEED)
#include "mbedtls/platform.h"
#endif
#if !defined(MBEDTLS_NO_PLATFORM_ENTROPY)
#if !defined(unix) && !defined(__unix__) && !defined(__unix) && \
!defined(__APPLE__) && !defined(_WIN32)
#error "Platform entropy sources only work on Unix and Windows, see MBEDTLS_NO_PLATFORM_ENTROPY in config.h"
#endif
#if defined(_WIN32) && !defined(EFIX64) && !defined(EFI32)
#if !defined(_WIN32_WINNT)
...
...
@@ -61,7 +70,10 @@ int mbedtls_platform_entropy_poll( void *data, unsigned char *output, size_t len
}
if
(
CryptGenRandom
(
provider
,
(
DWORD
)
len
,
output
)
==
FALSE
)
{
CryptReleaseContext
(
provider
,
0
);
return
(
MBEDTLS_ERR_ENTROPY_SOURCE_FAILED
);
}
CryptReleaseContext
(
provider
,
0
);
*
olen
=
len
;
...
...
@@ -179,6 +191,23 @@ int mbedtls_platform_entropy_poll( void *data,
#endif
/* _WIN32 && !EFIX64 && !EFI32 */
#endif
/* !MBEDTLS_NO_PLATFORM_ENTROPY */
#if defined(MBEDTLS_TEST_NULL_ENTROPY)
int
mbedtls_null_entropy_poll
(
void
*
data
,
unsigned
char
*
output
,
size_t
len
,
size_t
*
olen
)
{
((
void
)
data
);
((
void
)
output
);
*
olen
=
0
;
if
(
len
<
sizeof
(
unsigned
char
)
)
return
(
0
);
*
olen
=
sizeof
(
unsigned
char
);
return
(
0
);
}
#endif
#if defined(MBEDTLS_TIMING_C)
int
mbedtls_hardclock_poll
(
void
*
data
,
unsigned
char
*
output
,
size_t
len
,
size_t
*
olen
)
...
...
@@ -213,4 +242,27 @@ int mbedtls_havege_poll( void *data,
}
#endif
/* MBEDTLS_HAVEGE_C */
#if defined(MBEDTLS_ENTROPY_NV_SEED)
int
mbedtls_nv_seed_poll
(
void
*
data
,
unsigned
char
*
output
,
size_t
len
,
size_t
*
olen
)
{
unsigned
char
buf
[
MBEDTLS_ENTROPY_BLOCK_SIZE
];
size_t
use_len
=
MBEDTLS_ENTROPY_BLOCK_SIZE
;
((
void
)
data
);
memset
(
buf
,
0
,
MBEDTLS_ENTROPY_BLOCK_SIZE
);
if
(
mbedtls_nv_seed_read
(
buf
,
MBEDTLS_ENTROPY_BLOCK_SIZE
)
<
0
)
return
(
MBEDTLS_ERR_ENTROPY_SOURCE_FAILED
);
if
(
len
<
use_len
)
use_len
=
len
;
memcpy
(
output
,
buf
,
use_len
);
*
olen
=
use_len
;
return
(
0
);
}
#endif
/* MBEDTLS_ENTROPY_NV_SEED */
#endif
/* MBEDTLS_ENTROPY_C */
app/mbedtls/library/error.c
View file @
67027c0d
...
...
@@ -34,6 +34,7 @@
#include "mbedtls/platform.h"
#else
#define mbedtls_snprintf snprintf
#define mbedtls_time_t time_t
#endif
#if defined(MBEDTLS_ERROR_C)
...
...
@@ -44,6 +45,10 @@
#include "mbedtls/aes.h"
#endif
#if defined(MBEDTLS_ARC4_C)
#include "mbedtls/arc4.h"
#endif
#if defined(MBEDTLS_BASE64_C)
#include "mbedtls/base64.h"
#endif
...
...
@@ -68,6 +73,10 @@
#include "mbedtls/cipher.h"
#endif
#if defined(MBEDTLS_CMAC_C)
#include "mbedtls/cmac.h"
#endif
#if defined(MBEDTLS_CTR_DRBG_C)
#include "mbedtls/ctr_drbg.h"
#endif
...
...
@@ -100,8 +109,20 @@
#include "mbedtls/md.h"
#endif
#if defined(MBEDTLS_MD2_C)
#include "mbedtls/md2.h"
#endif
#if defined(MBEDTLS_MD4_C)
#include "mbedtls/md4.h"
#endif
#if defined(MBEDTLS_MD5_C)
#include "mbedtls/md5.h"
#endif
#if defined(MBEDTLS_NET_C)
#include "mbedtls/net.h"
#include "mbedtls/net
_sockets
.h"
#endif
#if defined(MBEDTLS_OID_C)
...
...
@@ -128,10 +149,26 @@
#include "mbedtls/pkcs5.h"
#endif
#if defined(MBEDTLS_RIPEMD160_C)
#include "mbedtls/ripemd160.h"
#endif
#if defined(MBEDTLS_RSA_C)
#include "mbedtls/rsa.h"
#endif
#if defined(MBEDTLS_SHA1_C)
#include "mbedtls/sha1.h"
#endif
#if defined(MBEDTLS_SHA256_C)
#include "mbedtls/sha256.h"
#endif
#if defined(MBEDTLS_SHA512_C)
#include "mbedtls/sha512.h"
#endif
#if defined(MBEDTLS_SSL_TLS_C)
#include "mbedtls/ssl.h"
#endif
...
...
@@ -173,7 +210,7 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - The selected feature is not available"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Bad input parameters
to function
"
);
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Bad input parameters"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_ALLOC_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Failed to allocate memory"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_INVALID_PADDING
)
)
...
...
@@ -182,11 +219,15 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Decryption of block requires a full block"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_AUTH_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Authentication failed (for AEAD modes)"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_INVALID_CONTEXT
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - The context is invalid. For example, because it was freed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CIPHER_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CIPHER - Cipher hardware accelerator failed"
);
#endif
/* MBEDTLS_CIPHER_C */
#if defined(MBEDTLS_DHM_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_BAD_INPUT_DATA
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Bad input parameters
to function
"
);
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Bad input parameters"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_READ_PARAMS_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Reading of the DHM parameters failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_MAKE_PARAMS_FAILED
)
)
...
...
@@ -202,7 +243,11 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_ALLOC_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Allocation of memory failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_FILE_IO_ERROR
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Read/write of file failed"
);
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Read or write of file failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - DHM hardware accelerator failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DHM_SET_GROUP_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DHM - Setting the modulus and generator failed"
);
#endif
/* MBEDTLS_DHM_C */
#if defined(MBEDTLS_ECP_C)
...
...
@@ -222,6 +267,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"ECP - Invalid private or public key"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_ECP_SIG_LEN_MISMATCH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"ECP - Signature is valid but shorter than the user-supplied length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_ECP_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"ECP - ECP hardware accelerator failed"
);
#endif
/* MBEDTLS_ECP_C */
#if defined(MBEDTLS_MD_C)
...
...
@@ -233,6 +280,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"MD - Failed to allocate memory"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_MD_FILE_IO_ERROR
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"MD - Opening or reading of file failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_MD_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"MD - MD hardware accelerator failed"
);
#endif
/* MBEDTLS_MD_C */
#if defined(MBEDTLS_PEM_PARSE_C) || defined(MBEDTLS_PEM_WRITE_C)
...
...
@@ -285,6 +334,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"PK - Unavailable feature, e.g. RSA disabled for RSA key"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_PK_SIG_LEN_MISMATCH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"PK - The signature is valid but its length is less than expected"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_PK_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"PK - PK hardware accelerator failed"
);
#endif
/* MBEDTLS_PK_C */
#if defined(MBEDTLS_PKCS12_C)
...
...
@@ -317,7 +368,7 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_KEY_GEN_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - Something failed during generation of a key"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_KEY_CHECK_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - Key failed to pass the
library's
validity check"
);
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - Key failed to pass the validity check
of the library
"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_PUBLIC_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - The public key operation failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_PRIVATE_FAILED
)
)
...
...
@@ -328,6 +379,10 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - The output buffer for decryption is not large enough"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_RNG_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - The random generator failed to generate non-zeros"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_UNSUPPORTED_OPERATION
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - The implementation does not offer the requested operation, for example, because of security violations or lack of functionality"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_RSA_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RSA - RSA hardware accelerator failed"
);
#endif
/* MBEDTLS_RSA_C */
#if defined(MBEDTLS_SSL_TLS_C)
...
...
@@ -432,6 +487,10 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"SSL - The client initiated a reconnect from the same port"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_SSL_UNEXPECTED_RECORD
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SSL - Record header looks valid but is not expected"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_SSL_NON_FATAL
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SSL - The alert message received indicates a non-fatal error"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SSL - Couldn't set the hash for verifying CertificateVerify"
);
#endif
/* MBEDTLS_SSL_TLS_C */
#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C)
...
...
@@ -473,6 +532,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"X509 - Read/write of file failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_X509_BUFFER_TOO_SMALL
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"X509 - Destination buffer is too small"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_X509_FATAL_ERROR
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"X509 - A fatal error occured, eg the chain is too long or the vrfy callback failed"
);
#endif
/* MBEDTLS_X509_USE_C || MBEDTLS_X509_CREATE_C */
// END generated code
...
...
@@ -509,8 +570,17 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"AES - Invalid key length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"AES - Invalid data input length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"AES - Feature not available. For example, an unsupported AES key size"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_AES_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"AES - AES hardware accelerator failed"
);
#endif
/* MBEDTLS_AES_C */
#if defined(MBEDTLS_ARC4_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"ARC4 - ARC4 hardware accelerator failed"
);
#endif
/* MBEDTLS_ARC4_C */
#if defined(MBEDTLS_ASN1_PARSE_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_ASN1_OUT_OF_DATA
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"ASN1 - Out of data when parsing an ASN1 data structure"
);
...
...
@@ -557,6 +627,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
#if defined(MBEDTLS_BLOWFISH_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"BLOWFISH - Invalid key length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"BLOWFISH - Blowfish hardware accelerator failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"BLOWFISH - Invalid data input length"
);
#endif
/* MBEDTLS_BLOWFISH_C */
...
...
@@ -566,29 +638,40 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"CAMELLIA - Invalid key length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CAMELLIA - Invalid data input length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CAMELLIA - Camellia hardware accelerator failed"
);
#endif
/* MBEDTLS_CAMELLIA_C */
#if defined(MBEDTLS_CCM_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_CCM_BAD_INPUT
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CCM - Bad input parameters to function"
);
mbedtls_snprintf
(
buf
,
buflen
,
"CCM - Bad input parameters to
the
function"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CCM_AUTH_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CCM - Authenticated decryption failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CCM_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CCM - CCM hardware accelerator failed"
);
#endif
/* MBEDTLS_CCM_C */
#if defined(MBEDTLS_CMAC_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_CMAC_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CMAC - CMAC hardware accelerator failed"
);
#endif
/* MBEDTLS_CMAC_C */
#if defined(MBEDTLS_CTR_DRBG_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG - The entropy source failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG - T
oo many random requested in single call
"
);
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG - T
he requested random buffer length is too big
"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG -
Input too large (E
ntropy + additional
)
"
);
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG -
The input (e
ntropy + additional
data) is too large
"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG - Read
/
write error in file"
);
mbedtls_snprintf
(
buf
,
buflen
,
"CTR_DRBG - Read
or
write error in file"
);
#endif
/* MBEDTLS_CTR_DRBG_C */
#if defined(MBEDTLS_DES_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DES - The data input has an invalid length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_DES_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"DES - DES hardware accelerator failed"
);
#endif
/* MBEDTLS_DES_C */
#if defined(MBEDTLS_ENTROPY_C)
...
...
@@ -607,6 +690,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
#if defined(MBEDTLS_GCM_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_GCM_AUTH_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"GCM - Authenticated decryption failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_GCM_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"GCM - GCM hardware accelerator failed"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_GCM_BAD_INPUT
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"GCM - Bad input parameters to function"
);
#endif
/* MBEDTLS_GCM_C */
...
...
@@ -622,6 +707,21 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"HMAC_DRBG - The entropy source failed"
);
#endif
/* MBEDTLS_HMAC_DRBG_C */
#if defined(MBEDTLS_MD2_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_MD2_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"MD2 - MD2 hardware accelerator failed"
);
#endif
/* MBEDTLS_MD2_C */
#if defined(MBEDTLS_MD4_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_MD4_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"MD4 - MD4 hardware accelerator failed"
);
#endif
/* MBEDTLS_MD4_C */
#if defined(MBEDTLS_MD5_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_MD5_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"MD5 - MD5 hardware accelerator failed"
);
#endif
/* MBEDTLS_MD5_C */
#if defined(MBEDTLS_NET_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_NET_SOCKET_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"NET - Failed to open a socket"
);
...
...
@@ -659,6 +759,26 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
mbedtls_snprintf
(
buf
,
buflen
,
"PADLOCK - Input data should be aligned"
);
#endif
/* MBEDTLS_PADLOCK_C */
#if defined(MBEDTLS_RIPEMD160_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_RIPEMD160_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"RIPEMD160 - RIPEMD160 hardware accelerator failed"
);
#endif
/* MBEDTLS_RIPEMD160_C */
#if defined(MBEDTLS_SHA1_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_SHA1_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SHA1 - SHA-1 hardware accelerator failed"
);
#endif
/* MBEDTLS_SHA1_C */
#if defined(MBEDTLS_SHA256_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_SHA256_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SHA256 - SHA-256 hardware accelerator failed"
);
#endif
/* MBEDTLS_SHA256_C */
#if defined(MBEDTLS_SHA512_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_SHA512_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"SHA512 - SHA-512 hardware accelerator failed"
);
#endif
/* MBEDTLS_SHA512_C */
#if defined(MBEDTLS_THREADING_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_THREADING_FEATURE_UNAVAILABLE
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"THREADING - The selected feature is not available"
);
...
...
@@ -671,6 +791,8 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen )
#if defined(MBEDTLS_XTEA_C)
if
(
use_ret
==
-
(
MBEDTLS_ERR_XTEA_INVALID_INPUT_LENGTH
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"XTEA - The data input has an invalid length"
);
if
(
use_ret
==
-
(
MBEDTLS_ERR_XTEA_HW_ACCEL_FAILED
)
)
mbedtls_snprintf
(
buf
,
buflen
,
"XTEA - XTEA hardware accelerator failed"
);
#endif
/* MBEDTLS_XTEA_C */
// END generated code
...
...
app/mbedtls/library/gcm.c
View file @
67027c0d
...
...
@@ -46,6 +46,7 @@
#endif
#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
#include "mbedtls/aes.h"
#if defined(MBEDTLS_PLATFORM_C)
#include "mbedtls/platform.h"
#else
...
...
@@ -54,6 +55,8 @@
#endif
/* MBEDTLS_PLATFORM_C */
#endif
/* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */
#if !defined(MBEDTLS_GCM_ALT)
/*
* 32-bit integer manipulation macros (big endian)
*/
...
...
@@ -277,8 +280,10 @@ int mbedtls_gcm_starts( mbedtls_gcm_context *ctx,
size_t
use_len
,
olen
=
0
;
/* IV and AD are limited to 2^64 bits, so 2^61 bytes */
if
(
(
(
uint64_t
)
iv_len
)
>>
61
!=
0
||
(
(
uint64_t
)
add_len
)
>>
61
!=
0
)
/* IV is not allowed to be zero length */
if
(
iv_len
==
0
||
(
(
uint64_t
)
iv_len
)
>>
61
!=
0
||
(
(
uint64_t
)
add_len
)
>>
61
!=
0
)
{
return
(
MBEDTLS_ERR_GCM_BAD_INPUT
);
}
...
...
@@ -415,8 +420,7 @@ int mbedtls_gcm_finish( mbedtls_gcm_context *ctx,
if
(
tag_len
>
16
||
tag_len
<
4
)
return
(
MBEDTLS_ERR_GCM_BAD_INPUT
);
if
(
tag_len
!=
0
)
memcpy
(
tag
,
ctx
->
base_ectr
,
tag_len
);
memcpy
(
tag
,
ctx
->
base_ectr
,
tag_len
);
if
(
orig_len
||
orig_add_len
)
{
...
...
@@ -507,6 +511,8 @@ void mbedtls_gcm_free( mbedtls_gcm_context *ctx )
mbedtls_zeroize
(
ctx
,
sizeof
(
mbedtls_gcm_context
)
);
}
#endif
/* !MBEDTLS_GCM_ALT */
#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
/*
* AES-GCM test vectors from:
...
...
@@ -743,34 +749,48 @@ int mbedtls_gcm_self_test( int verbose )
int
i
,
j
,
ret
;
mbedtls_cipher_id_t
cipher
=
MBEDTLS_CIPHER_ID_AES
;
mbedtls_gcm_init
(
&
ctx
);
for
(
j
=
0
;
j
<
3
;
j
++
)
{
int
key_len
=
128
+
64
*
j
;
for
(
i
=
0
;
i
<
MAX_TESTS
;
i
++
)
{
mbedtls_gcm_init
(
&
ctx
);
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-GCM-%3d #%d (%s): "
,
key_len
,
i
,
"enc"
);
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
key_len
,
i
,
"enc"
);
ret
=
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
/*
* 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
&&
key_len
==
192
)
{
mbedtls_printf
(
"skipped
\n
"
);
break
;
}
else
if
(
ret
!=
0
)
{
goto
exit
;
}
ret
=
mbedtls_gcm_crypt_and_tag
(
&
ctx
,
MBEDTLS_GCM_ENCRYPT
,
pt_len
[
i
],
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
],
pt
[
pt_index
[
i
]],
buf
,
16
,
tag_buf
);
pt_len
[
i
],
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
],
pt
[
pt_index
[
i
]],
buf
,
16
,
tag_buf
);
if
(
ret
!=
0
)
goto
exit
;
if
(
ret
!=
0
||
memcmp
(
buf
,
ct
[
j
*
6
+
i
],
pt_len
[
i
]
)
!=
0
||
memcmp
(
tag_buf
,
tag
[
j
*
6
+
i
],
16
)
!=
0
)
if
(
memcmp
(
buf
,
ct
[
j
*
6
+
i
],
pt_len
[
i
]
)
!=
0
||
memcmp
(
tag_buf
,
tag
[
j
*
6
+
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
exit
;
}
mbedtls_gcm_free
(
&
ctx
);
...
...
@@ -778,26 +798,31 @@ int mbedtls_gcm_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_gcm_init
(
&
ctx
);
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-GCM-%3d #%d (%s): "
,
key_len
,
i
,
"dec"
);
key_len
,
i
,
"dec"
);
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
ret
=
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
if
(
ret
!=
0
)
goto
exit
;
ret
=
mbedtls_gcm_crypt_and_tag
(
&
ctx
,
MBEDTLS_GCM_DECRYPT
,
pt_len
[
i
],
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
],
ct
[
j
*
6
+
i
],
buf
,
16
,
tag_buf
);
pt_len
[
i
],
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
],
ct
[
j
*
6
+
i
],
buf
,
16
,
tag_buf
);
if
(
ret
!=
0
)
goto
exit
;
if
(
ret
!=
0
||
memcmp
(
buf
,
pt
[
pt_index
[
i
]],
pt_len
[
i
]
)
!=
0
||
if
(
memcmp
(
buf
,
pt
[
pt_index
[
i
]],
pt_len
[
i
]
)
!=
0
||
memcmp
(
tag_buf
,
tag
[
j
*
6
+
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
exit
;
}
mbedtls_gcm_free
(
&
ctx
);
...
...
@@ -805,66 +830,51 @@ int mbedtls_gcm_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_gcm_init
(
&
ctx
);
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-GCM-%3d #%d split (%s): "
,
key_len
,
i
,
"enc"
);
key_len
,
i
,
"enc"
);
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
ret
=
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
if
(
ret
!=
0
)
goto
exit
;
ret
=
mbedtls_gcm_starts
(
&
ctx
,
MBEDTLS_GCM_ENCRYPT
,
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
]
);
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
]
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
if
(
pt_len
[
i
]
>
32
)
{
size_t
rest_len
=
pt_len
[
i
]
-
32
;
ret
=
mbedtls_gcm_update
(
&
ctx
,
32
,
pt
[
pt_index
[
i
]],
buf
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
ret
=
mbedtls_gcm_update
(
&
ctx
,
rest_len
,
pt
[
pt_index
[
i
]]
+
32
,
buf
+
32
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
}
else
{
ret
=
mbedtls_gcm_update
(
&
ctx
,
pt_len
[
i
],
pt
[
pt_index
[
i
]],
buf
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
}
ret
=
mbedtls_gcm_finish
(
&
ctx
,
tag_buf
,
16
);
if
(
ret
!=
0
||
memcmp
(
buf
,
ct
[
j
*
6
+
i
],
pt_len
[
i
]
)
!=
0
||
if
(
ret
!=
0
)
goto
exit
;
if
(
memcmp
(
buf
,
ct
[
j
*
6
+
i
],
pt_len
[
i
]
)
!=
0
||
memcmp
(
tag_buf
,
tag
[
j
*
6
+
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
exit
;
}
mbedtls_gcm_free
(
&
ctx
);
...
...
@@ -872,80 +882,75 @@ int mbedtls_gcm_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
mbedtls_gcm_init
(
&
ctx
);
if
(
verbose
!=
0
)
mbedtls_printf
(
" AES-GCM-%3d #%d split (%s): "
,
key_len
,
i
,
"dec"
);
key_len
,
i
,
"dec"
);
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
ret
=
mbedtls_gcm_setkey
(
&
ctx
,
cipher
,
key
[
key_index
[
i
]],
key_len
);
if
(
ret
!=
0
)
goto
exit
;
ret
=
mbedtls_gcm_starts
(
&
ctx
,
MBEDTLS_GCM_DECRYPT
,
iv
[
iv_index
[
i
]],
iv_len
[
i
],
additional
[
add_index
[
i
]],
add_len
[
i
]
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
if
(
pt_len
[
i
]
>
32
)
{
size_t
rest_len
=
pt_len
[
i
]
-
32
;
ret
=
mbedtls_gcm_update
(
&
ctx
,
32
,
ct
[
j
*
6
+
i
],
buf
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
ret
=
mbedtls_gcm_update
(
&
ctx
,
rest_len
,
ct
[
j
*
6
+
i
]
+
32
,
buf
+
32
);
buf
+
32
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
}
else
{
ret
=
mbedtls_gcm_update
(
&
ctx
,
pt_len
[
i
],
ct
[
j
*
6
+
i
],
buf
);
ret
=
mbedtls_gcm_update
(
&
ctx
,
pt_len
[
i
],
ct
[
j
*
6
+
i
],
buf
);
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
}
goto
exit
;
}
ret
=
mbedtls_gcm_finish
(
&
ctx
,
tag_buf
,
16
);
if
(
ret
!=
0
||
memcmp
(
buf
,
pt
[
pt_index
[
i
]],
pt_len
[
i
]
)
!=
0
||
if
(
ret
!=
0
)
goto
exit
;
if
(
memcmp
(
buf
,
pt
[
pt_index
[
i
]],
pt_len
[
i
]
)
!=
0
||
memcmp
(
tag_buf
,
tag
[
j
*
6
+
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
exit
;
}
mbedtls_gcm_free
(
&
ctx
);
if
(
verbose
!=
0
)
mbedtls_printf
(
"passed
\n
"
);
}
}
if
(
verbose
!=
0
)
mbedtls_printf
(
"
\n
"
);
return
(
0
);
ret
=
0
;
exit:
if
(
ret
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
mbedtls_gcm_free
(
&
ctx
);
}
return
(
ret
);
}
#endif
/* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */
...
...
app/mbedtls/library/havege.c
View file @
67027c0d
...
...
@@ -174,6 +174,8 @@ static void havege_fill( mbedtls_havege_state *hs )
PTX
=
U1
=
0
;
PTY
=
U2
=
0
;
(
void
)
PTX
;
memset
(
RES
,
0
,
sizeof
(
RES
)
);
while
(
n
<
MBEDTLS_HAVEGE_COLLECT_SIZE
*
4
)
...
...
app/mbedtls/library/hmac_drbg.c
View file @
67027c0d
...
...
@@ -364,11 +364,14 @@ int mbedtls_hmac_drbg_write_seed_file( mbedtls_hmac_drbg_context *ctx, const cha
exit:
fclose
(
f
);
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
return
(
ret
);
}
int
mbedtls_hmac_drbg_update_seed_file
(
mbedtls_hmac_drbg_context
*
ctx
,
const
char
*
path
)
{
int
ret
=
0
;
FILE
*
f
;
size_t
n
;
unsigned
char
buf
[
MBEDTLS_HMAC_DRBG_MAX_INPUT
];
...
...
@@ -387,14 +390,16 @@ int mbedtls_hmac_drbg_update_seed_file( mbedtls_hmac_drbg_context *ctx, const ch
}
if
(
fread
(
buf
,
1
,
n
,
f
)
!=
n
)
{
fclose
(
f
);
return
(
MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR
);
}
ret
=
MBEDTLS_ERR_HMAC_DRBG_FILE_IO_ERROR
;
else
mbedtls_hmac_drbg_update
(
ctx
,
buf
,
n
);
fclose
(
f
);
mbedtls_hmac_drbg_update
(
ctx
,
buf
,
n
);
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
if
(
ret
!=
0
)
return
(
ret
);
return
(
mbedtls_hmac_drbg_write_seed_file
(
ctx
,
path
)
);
}
...
...
app/mbedtls/library/md.c
View file @
67027c0d
...
...
@@ -56,7 +56,7 @@ static void mbedtls_zeroize( void *v, size_t n ) {
/*
* Reminder: update profiles in x509_crt.c when adding a new hash!
*/
static
const
int
supported_digests
[]
ICACHE_RODATA_ATTR
=
{
static
const
int
supported_digests
[]
=
{
#if defined(MBEDTLS_SHA512_C)
MBEDTLS_MD_SHA512
,
...
...
@@ -250,9 +250,7 @@ int mbedtls_md_starts( mbedtls_md_context_t *ctx )
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
);
return
(
0
);
return
(
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
);
}
int
mbedtls_md_update
(
mbedtls_md_context_t
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
...
...
@@ -260,9 +258,7 @@ int mbedtls_md_update( mbedtls_md_context_t *ctx, const unsigned char *input, si
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
input
,
ilen
);
return
(
0
);
return
(
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
input
,
ilen
)
);
}
int
mbedtls_md_finish
(
mbedtls_md_context_t
*
ctx
,
unsigned
char
*
output
)
...
...
@@ -270,9 +266,7 @@ int mbedtls_md_finish( mbedtls_md_context_t *ctx, unsigned char *output )
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
output
);
return
(
0
);
return
(
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
output
)
);
}
int
mbedtls_md
(
const
mbedtls_md_info_t
*
md_info
,
const
unsigned
char
*
input
,
size_t
ilen
,
...
...
@@ -281,9 +275,7 @@ int mbedtls_md( const mbedtls_md_info_t *md_info, const unsigned char *input, si
if
(
md_info
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
md_info
->
digest_func
(
input
,
ilen
,
output
);
return
(
0
);
return
(
md_info
->
digest_func
(
input
,
ilen
,
output
)
);
}
#if defined(MBEDTLS_FS_IO)
...
...
@@ -306,20 +298,20 @@ int mbedtls_md_file( const mbedtls_md_info_t *md_info, const char *path, unsigne
if
(
(
ret
=
mbedtls_md_setup
(
&
ctx
,
md_info
,
0
)
)
!=
0
)
goto
cleanup
;
md_info
->
starts_func
(
ctx
.
md_ctx
);
if
(
(
ret
=
md_info
->
starts_func
(
ctx
.
md_ctx
)
)
!=
0
)
goto
cleanup
;
while
(
(
n
=
fread
(
buf
,
1
,
sizeof
(
buf
),
f
)
)
>
0
)
md_info
->
update_func
(
ctx
.
md_ctx
,
buf
,
n
);
if
(
(
ret
=
md_info
->
update_func
(
ctx
.
md_ctx
,
buf
,
n
)
)
!=
0
)
goto
cleanup
;
if
(
ferror
(
f
)
!=
0
)
{
ret
=
MBEDTLS_ERR_MD_FILE_IO_ERROR
;
goto
cleanup
;
}
md_info
->
finish_func
(
ctx
.
md_ctx
,
output
);
else
ret
=
md_info
->
finish_func
(
ctx
.
md_ctx
,
output
);
cleanup:
mbedtls_zeroize
(
buf
,
sizeof
(
buf
)
);
fclose
(
f
);
mbedtls_md_free
(
&
ctx
);
...
...
@@ -329,6 +321,7 @@ cleanup:
int
mbedtls_md_hmac_starts
(
mbedtls_md_context_t
*
ctx
,
const
unsigned
char
*
key
,
size_t
keylen
)
{
int
ret
;
unsigned
char
sum
[
MBEDTLS_MD_MAX_SIZE
];
unsigned
char
*
ipad
,
*
opad
;
size_t
i
;
...
...
@@ -338,9 +331,12 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key,
if
(
keylen
>
(
size_t
)
ctx
->
md_info
->
block_size
)
{
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
key
,
keylen
);
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
sum
);
if
(
(
ret
=
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
key
,
keylen
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
sum
)
)
!=
0
)
goto
cleanup
;
keylen
=
ctx
->
md_info
->
size
;
key
=
sum
;
...
...
@@ -358,12 +354,16 @@ int mbedtls_md_hmac_starts( mbedtls_md_context_t *ctx, const unsigned char *key,
opad
[
i
]
=
(
unsigned
char
)(
opad
[
i
]
^
key
[
i
]
);
}
mbedtls_zeroize
(
sum
,
sizeof
(
sum
)
);
if
(
(
ret
=
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
ipad
,
ctx
->
md_info
->
block_size
)
)
!=
0
)
goto
cleanup
;
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
ipad
,
ctx
->
md_info
->
block_size
);
cleanup:
mbedtls_zeroize
(
sum
,
sizeof
(
sum
)
);
return
(
0
);
return
(
ret
);
}
int
mbedtls_md_hmac_update
(
mbedtls_md_context_t
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
...
...
@@ -371,13 +371,12 @@ int mbedtls_md_hmac_update( mbedtls_md_context_t *ctx, const unsigned char *inpu
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
||
ctx
->
hmac_ctx
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
input
,
ilen
);
return
(
0
);
return
(
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
input
,
ilen
)
);
}
int
mbedtls_md_hmac_finish
(
mbedtls_md_context_t
*
ctx
,
unsigned
char
*
output
)
{
int
ret
;
unsigned
char
tmp
[
MBEDTLS_MD_MAX_SIZE
];
unsigned
char
*
opad
;
...
...
@@ -386,17 +385,22 @@ int mbedtls_md_hmac_finish( mbedtls_md_context_t *ctx, unsigned char *output )
opad
=
(
unsigned
char
*
)
ctx
->
hmac_ctx
+
ctx
->
md_info
->
block_size
;
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
tmp
);
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
opad
,
ctx
->
md_info
->
block_size
);
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
tmp
,
ctx
->
md_info
->
size
);
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
output
);
return
(
0
);
if
(
(
ret
=
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
tmp
)
)
!=
0
)
return
(
ret
);
if
(
(
ret
=
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
)
!=
0
)
return
(
ret
);
if
(
(
ret
=
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
opad
,
ctx
->
md_info
->
block_size
)
)
!=
0
)
return
(
ret
);
if
(
(
ret
=
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
tmp
,
ctx
->
md_info
->
size
)
)
!=
0
)
return
(
ret
);
return
(
ctx
->
md_info
->
finish_func
(
ctx
->
md_ctx
,
output
)
);
}
int
mbedtls_md_hmac_reset
(
mbedtls_md_context_t
*
ctx
)
{
int
ret
;
unsigned
char
*
ipad
;
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
||
ctx
->
hmac_ctx
==
NULL
)
...
...
@@ -404,15 +408,16 @@ int mbedtls_md_hmac_reset( mbedtls_md_context_t *ctx )
ipad
=
(
unsigned
char
*
)
ctx
->
hmac_ctx
;
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
;
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
ipad
,
ctx
->
md_info
->
block_size
);
return
(
0
);
if
(
(
ret
=
ctx
->
md_info
->
starts_func
(
ctx
->
md_ctx
)
)
!=
0
)
return
(
ret
);
return
(
ctx
->
md_info
->
update_func
(
ctx
->
md_ctx
,
ipad
,
ctx
->
md_info
->
block_size
)
);
}
int
mbedtls_md_hmac
(
const
mbedtls_md_info_t
*
md_info
,
const
unsigned
char
*
key
,
size_t
keylen
,
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
int
mbedtls_md_hmac
(
const
mbedtls_md_info_t
*
md_info
,
const
unsigned
char
*
key
,
size_t
keylen
,
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_md_context_t
ctx
;
int
ret
;
...
...
@@ -423,15 +428,19 @@ int mbedtls_md_hmac( const mbedtls_md_info_t *md_info, const unsigned char *key,
mbedtls_md_init
(
&
ctx
);
if
(
(
ret
=
mbedtls_md_setup
(
&
ctx
,
md_info
,
1
)
)
!=
0
)
return
(
ret
)
;
goto
cleanup
;
mbedtls_md_hmac_starts
(
&
ctx
,
key
,
keylen
);
mbedtls_md_hmac_update
(
&
ctx
,
input
,
ilen
);
mbedtls_md_hmac_finish
(
&
ctx
,
output
);
if
(
(
ret
=
mbedtls_md_hmac_starts
(
&
ctx
,
key
,
keylen
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
mbedtls_md_hmac_update
(
&
ctx
,
input
,
ilen
)
)
!=
0
)
goto
cleanup
;
if
(
(
ret
=
mbedtls_md_hmac_finish
(
&
ctx
,
output
)
)
!=
0
)
goto
cleanup
;
cleanup:
mbedtls_md_free
(
&
ctx
);
return
(
0
);
return
(
ret
);
}
int
mbedtls_md_process
(
mbedtls_md_context_t
*
ctx
,
const
unsigned
char
*
data
)
...
...
@@ -439,12 +448,10 @@ int mbedtls_md_process( mbedtls_md_context_t *ctx, const unsigned char *data )
if
(
ctx
==
NULL
||
ctx
->
md_info
==
NULL
)
return
(
MBEDTLS_ERR_MD_BAD_INPUT_DATA
);
ctx
->
md_info
->
process_func
(
ctx
->
md_ctx
,
data
);
return
(
0
);
return
(
ctx
->
md_info
->
process_func
(
ctx
->
md_ctx
,
data
)
);
}
int
mbedtls_md_get_size
(
const
mbedtls_md_info_t
*
md_info
)
unsigned
char
mbedtls_md_get_size
(
const
mbedtls_md_info_t
*
md_info
)
{
if
(
md_info
==
NULL
)
return
(
0
);
...
...
app/mbedtls/library/md2.c
View file @
67027c0d
...
...
@@ -105,16 +105,18 @@ void mbedtls_md2_clone( mbedtls_md2_context *dst,
/*
* MD2 context setup
*/
void
mbedtls_md2_starts
(
mbedtls_md2_context
*
ctx
)
int
mbedtls_md2_starts
_ret
(
mbedtls_md2_context
*
ctx
)
{
memset
(
ctx
->
cksum
,
0
,
16
);
memset
(
ctx
->
state
,
0
,
46
);
memset
(
ctx
->
buffer
,
0
,
16
);
ctx
->
left
=
0
;
return
(
0
);
}
#if !defined(MBEDTLS_MD2_PROCESS_ALT)
void
mbedtls_md2_process
(
mbedtls_md2_context
*
ctx
)
int
mbedtls_
internal_
md2_process
(
mbedtls_md2_context
*
ctx
)
{
int
i
,
j
;
unsigned
char
t
=
0
;
...
...
@@ -146,19 +148,24 @@ void mbedtls_md2_process( mbedtls_md2_context *ctx )
(
ctx
->
cksum
[
i
]
^
PI_SUBST
[
ctx
->
buffer
[
i
]
^
t
]
);
t
=
ctx
->
cksum
[
i
];
}
return
(
0
);
}
#endif
/* !MBEDTLS_MD2_PROCESS_ALT */
/*
* MD2 process buffer
*/
void
mbedtls_md2_update
(
mbedtls_md2_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
int
mbedtls_md2_update_ret
(
mbedtls_md2_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
int
ret
;
size_t
fill
;
while
(
ilen
>
0
)
{
if
(
ctx
->
left
+
ilen
>
16
)
if
(
ilen
>
16
-
ctx
->
left
)
fill
=
16
-
ctx
->
left
;
else
fill
=
ilen
;
...
...
@@ -172,16 +179,21 @@ void mbedtls_md2_update( mbedtls_md2_context *ctx, const unsigned char *input, s
if
(
ctx
->
left
==
16
)
{
ctx
->
left
=
0
;
mbedtls_md2_process
(
ctx
);
if
(
(
ret
=
mbedtls_internal_md2_process
(
ctx
)
)
!=
0
)
return
(
ret
);
}
}
return
(
0
);
}
/*
* MD2 final digest
*/
void
mbedtls_md2_finish
(
mbedtls_md2_context
*
ctx
,
unsigned
char
output
[
16
]
)
int
mbedtls_md2_finish_ret
(
mbedtls_md2_context
*
ctx
,
unsigned
char
output
[
16
]
)
{
int
ret
;
size_t
i
;
unsigned
char
x
;
...
...
@@ -190,12 +202,16 @@ void mbedtls_md2_finish( mbedtls_md2_context *ctx, unsigned char output[16] )
for
(
i
=
ctx
->
left
;
i
<
16
;
i
++
)
ctx
->
buffer
[
i
]
=
x
;
mbedtls_md2_process
(
ctx
);
if
(
(
ret
=
mbedtls_internal_md2_process
(
ctx
)
)
!=
0
)
return
(
ret
);
memcpy
(
ctx
->
buffer
,
ctx
->
cksum
,
16
);
mbedtls_md2_process
(
ctx
);
if
(
(
ret
=
mbedtls_internal_md2_process
(
ctx
)
)
!=
0
)
return
(
ret
);
memcpy
(
output
,
ctx
->
state
,
16
);
return
(
0
);
}
#endif
/* !MBEDTLS_MD2_ALT */
...
...
@@ -203,15 +219,28 @@ void mbedtls_md2_finish( mbedtls_md2_context *ctx, unsigned char output[16] )
/*
* output = MD2( input buffer )
*/
void
mbedtls_md2
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
int
mbedtls_md2_ret
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
{
int
ret
;
mbedtls_md2_context
ctx
;
mbedtls_md2_init
(
&
ctx
);
mbedtls_md2_starts
(
&
ctx
);
mbedtls_md2_update
(
&
ctx
,
input
,
ilen
);
mbedtls_md2_finish
(
&
ctx
,
output
);
if
(
(
ret
=
mbedtls_md2_starts_ret
(
&
ctx
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md2_update_ret
(
&
ctx
,
input
,
ilen
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md2_finish_ret
(
&
ctx
,
output
)
)
!=
0
)
goto
exit
;
exit:
mbedtls_md2_free
(
&
ctx
);
return
(
ret
);
}
#if defined(MBEDTLS_SELF_TEST)
...
...
@@ -219,7 +248,7 @@ void mbedtls_md2( const unsigned char *input, size_t ilen, unsigned char output[
/*
* RFC 1319 test vectors
*/
static
const
char
md2_test_str
[
7
][
81
]
=
static
const
unsigned
char
md2_test_str
[
7
][
81
]
=
{
{
""
},
{
"a"
},
...
...
@@ -227,10 +256,15 @@ static const char md2_test_str[7][81] =
{
"message digest"
},
{
"abcdefghijklmnopqrstuvwxyz"
},
{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
},
{
"12345678901234567890123456789012345678901234567890123456789012"
\
{
"12345678901234567890123456789012345678901234567890123456789012"
"345678901234567890"
}
};
static
const
size_t
md2_test_strlen
[
7
]
=
{
0
,
1
,
3
,
14
,
26
,
62
,
80
};
static
const
unsigned
char
md2_test_sum
[
7
][
16
]
=
{
{
0x83
,
0x50
,
0xE5
,
0xA3
,
0xE2
,
0x4C
,
0x15
,
0x3D
,
...
...
@@ -254,7 +288,7 @@ static const unsigned char md2_test_sum[7][16] =
*/
int
mbedtls_md2_self_test
(
int
verbose
)
{
int
i
;
int
i
,
ret
=
0
;
unsigned
char
md2sum
[
16
];
for
(
i
=
0
;
i
<
7
;
i
++
)
...
...
@@ -262,15 +296,14 @@ int mbedtls_md2_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
" MD2 test #%d: "
,
i
+
1
);
mbedtls_md2
(
(
unsigned
char
*
)
md2_test_str
[
i
],
strlen
(
md2_test_str
[
i
]
),
md2sum
);
ret
=
mbedtls_md2_ret
(
md2_test_str
[
i
],
md2_test_strlen
[
i
],
md2sum
);
if
(
ret
!=
0
)
goto
fail
;
if
(
memcmp
(
md2sum
,
md2_test_sum
[
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
fail
;
}
if
(
verbose
!=
0
)
...
...
@@ -281,6 +314,12 @@ int mbedtls_md2_self_test( int verbose )
mbedtls_printf
(
"
\n
"
);
return
(
0
);
fail:
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
ret
);
}
#endif
/* MBEDTLS_SELF_TEST */
...
...
app/mbedtls/library/md4.c
View file @
67027c0d
...
...
@@ -98,7 +98,7 @@ void mbedtls_md4_clone( mbedtls_md4_context *dst,
/*
* MD4 context setup
*/
void
mbedtls_md4_starts
(
mbedtls_md4_context
*
ctx
)
int
mbedtls_md4_starts
_ret
(
mbedtls_md4_context
*
ctx
)
{
ctx
->
total
[
0
]
=
0
;
ctx
->
total
[
1
]
=
0
;
...
...
@@ -107,10 +107,13 @@ void mbedtls_md4_starts( mbedtls_md4_context *ctx )
ctx
->
state
[
1
]
=
0xEFCDAB89
;
ctx
->
state
[
2
]
=
0x98BADCFE
;
ctx
->
state
[
3
]
=
0x10325476
;
return
(
0
);
}
#if !defined(MBEDTLS_MD4_PROCESS_ALT)
void
mbedtls_md4_process
(
mbedtls_md4_context
*
ctx
,
const
unsigned
char
data
[
64
]
)
int
mbedtls_internal_md4_process
(
mbedtls_md4_context
*
ctx
,
const
unsigned
char
data
[
64
]
)
{
uint32_t
X
[
16
],
A
,
B
,
C
,
D
;
...
...
@@ -211,19 +214,24 @@ void mbedtls_md4_process( mbedtls_md4_context *ctx, const unsigned char data[64]
ctx
->
state
[
1
]
+=
B
;
ctx
->
state
[
2
]
+=
C
;
ctx
->
state
[
3
]
+=
D
;
return
(
0
);
}
#endif
/* !MBEDTLS_MD4_PROCESS_ALT */
/*
* MD4 process buffer
*/
void
mbedtls_md4_update
(
mbedtls_md4_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
int
mbedtls_md4_update_ret
(
mbedtls_md4_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
int
ret
;
size_t
fill
;
uint32_t
left
;
if
(
ilen
==
0
)
return
;
return
(
0
)
;
left
=
ctx
->
total
[
0
]
&
0x3F
;
fill
=
64
-
left
;
...
...
@@ -238,7 +246,10 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s
{
memcpy
(
(
void
*
)
(
ctx
->
buffer
+
left
),
(
void
*
)
input
,
fill
);
mbedtls_md4_process
(
ctx
,
ctx
->
buffer
);
if
(
(
ret
=
mbedtls_internal_md4_process
(
ctx
,
ctx
->
buffer
)
)
!=
0
)
return
(
ret
);
input
+=
fill
;
ilen
-=
fill
;
left
=
0
;
...
...
@@ -246,7 +257,9 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s
while
(
ilen
>=
64
)
{
mbedtls_md4_process
(
ctx
,
input
);
if
(
(
ret
=
mbedtls_internal_md4_process
(
ctx
,
input
)
)
!=
0
)
return
(
ret
);
input
+=
64
;
ilen
-=
64
;
}
...
...
@@ -256,6 +269,8 @@ void mbedtls_md4_update( mbedtls_md4_context *ctx, const unsigned char *input, s
memcpy
(
(
void
*
)
(
ctx
->
buffer
+
left
),
(
void
*
)
input
,
ilen
);
}
return
(
0
);
}
static
const
unsigned
char
md4_padding
[
64
]
=
...
...
@@ -269,8 +284,10 @@ static const unsigned char md4_padding[64] =
/*
* MD4 final digest
*/
void
mbedtls_md4_finish
(
mbedtls_md4_context
*
ctx
,
unsigned
char
output
[
16
]
)
int
mbedtls_md4_finish_ret
(
mbedtls_md4_context
*
ctx
,
unsigned
char
output
[
16
]
)
{
int
ret
;
uint32_t
last
,
padn
;
uint32_t
high
,
low
;
unsigned
char
msglen
[
8
];
...
...
@@ -285,13 +302,20 @@ void mbedtls_md4_finish( mbedtls_md4_context *ctx, unsigned char output[16] )
last
=
ctx
->
total
[
0
]
&
0x3F
;
padn
=
(
last
<
56
)
?
(
56
-
last
)
:
(
120
-
last
);
mbedtls_md4_update
(
ctx
,
(
unsigned
char
*
)
md4_padding
,
padn
);
mbedtls_md4_update
(
ctx
,
msglen
,
8
);
ret
=
mbedtls_md4_update_ret
(
ctx
,
(
unsigned
char
*
)
md4_padding
,
padn
);
if
(
ret
!=
0
)
return
(
ret
);
if
(
(
ret
=
mbedtls_md4_update_ret
(
ctx
,
msglen
,
8
)
)
!=
0
)
return
(
ret
);
PUT_UINT32_LE
(
ctx
->
state
[
0
],
output
,
0
);
PUT_UINT32_LE
(
ctx
->
state
[
1
],
output
,
4
);
PUT_UINT32_LE
(
ctx
->
state
[
2
],
output
,
8
);
PUT_UINT32_LE
(
ctx
->
state
[
3
],
output
,
12
);
return
(
0
);
}
#endif
/* !MBEDTLS_MD4_ALT */
...
...
@@ -299,15 +323,28 @@ void mbedtls_md4_finish( mbedtls_md4_context *ctx, unsigned char output[16] )
/*
* output = MD4( input buffer )
*/
void
mbedtls_md4
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
int
mbedtls_md4_ret
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
{
int
ret
;
mbedtls_md4_context
ctx
;
mbedtls_md4_init
(
&
ctx
);
mbedtls_md4_starts
(
&
ctx
);
mbedtls_md4_update
(
&
ctx
,
input
,
ilen
);
mbedtls_md4_finish
(
&
ctx
,
output
);
if
(
(
ret
=
mbedtls_md4_starts_ret
(
&
ctx
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md4_update_ret
(
&
ctx
,
input
,
ilen
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md4_finish_ret
(
&
ctx
,
output
)
)
!=
0
)
goto
exit
;
exit:
mbedtls_md4_free
(
&
ctx
);
return
(
ret
);
}
#if defined(MBEDTLS_SELF_TEST)
...
...
@@ -315,7 +352,7 @@ void mbedtls_md4( const unsigned char *input, size_t ilen, unsigned char output[
/*
* RFC 1320 test vectors
*/
static
const
char
md4_test_str
[
7
][
81
]
=
static
const
unsigned
char
md4_test_str
[
7
][
81
]
=
{
{
""
},
{
"a"
},
...
...
@@ -323,10 +360,15 @@ static const char md4_test_str[7][81] =
{
"message digest"
},
{
"abcdefghijklmnopqrstuvwxyz"
},
{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
},
{
"12345678901234567890123456789012345678901234567890123456789012"
\
{
"12345678901234567890123456789012345678901234567890123456789012"
"345678901234567890"
}
};
static
const
size_t
md4_test_strlen
[
7
]
=
{
0
,
1
,
3
,
14
,
26
,
62
,
80
};
static
const
unsigned
char
md4_test_sum
[
7
][
16
]
=
{
{
0x31
,
0xD6
,
0xCF
,
0xE0
,
0xD1
,
0x6A
,
0xE9
,
0x31
,
...
...
@@ -350,7 +392,7 @@ static const unsigned char md4_test_sum[7][16] =
*/
int
mbedtls_md4_self_test
(
int
verbose
)
{
int
i
;
int
i
,
ret
=
0
;
unsigned
char
md4sum
[
16
];
for
(
i
=
0
;
i
<
7
;
i
++
)
...
...
@@ -358,15 +400,14 @@ int mbedtls_md4_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
" MD4 test #%d: "
,
i
+
1
);
mbedtls_md4
(
(
unsigned
char
*
)
md4_test_str
[
i
],
strlen
(
md4_test_str
[
i
]
),
md4sum
);
ret
=
mbedtls_md4_ret
(
md4_test_str
[
i
],
md4_test_strlen
[
i
],
md4sum
);
if
(
ret
!=
0
)
goto
fail
;
if
(
memcmp
(
md4sum
,
md4_test_sum
[
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
fail
;
}
if
(
verbose
!=
0
)
...
...
@@ -377,6 +418,12 @@ int mbedtls_md4_self_test( int verbose )
mbedtls_printf
(
"
\n
"
);
return
(
0
);
fail:
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
ret
);
}
#endif
/* MBEDTLS_SELF_TEST */
...
...
app/mbedtls/library/md5.c
View file @
67027c0d
...
...
@@ -97,7 +97,7 @@ void mbedtls_md5_clone( mbedtls_md5_context *dst,
/*
* MD5 context setup
*/
void
mbedtls_md5_starts
(
mbedtls_md5_context
*
ctx
)
int
mbedtls_md5_starts
_ret
(
mbedtls_md5_context
*
ctx
)
{
ctx
->
total
[
0
]
=
0
;
ctx
->
total
[
1
]
=
0
;
...
...
@@ -106,10 +106,13 @@ void mbedtls_md5_starts( mbedtls_md5_context *ctx )
ctx
->
state
[
1
]
=
0xEFCDAB89
;
ctx
->
state
[
2
]
=
0x98BADCFE
;
ctx
->
state
[
3
]
=
0x10325476
;
return
(
0
);
}
#if !defined(MBEDTLS_MD5_PROCESS_ALT)
void
mbedtls_md5_process
(
mbedtls_md5_context
*
ctx
,
const
unsigned
char
data
[
64
]
)
int
mbedtls_internal_md5_process
(
mbedtls_md5_context
*
ctx
,
const
unsigned
char
data
[
64
]
)
{
uint32_t
X
[
16
],
A
,
B
,
C
,
D
;
...
...
@@ -230,19 +233,24 @@ void mbedtls_md5_process( mbedtls_md5_context *ctx, const unsigned char data[64]
ctx
->
state
[
1
]
+=
B
;
ctx
->
state
[
2
]
+=
C
;
ctx
->
state
[
3
]
+=
D
;
return
(
0
);
}
#endif
/* !MBEDTLS_MD5_PROCESS_ALT */
/*
* MD5 process buffer
*/
void
mbedtls_md5_update
(
mbedtls_md5_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
int
mbedtls_md5_update_ret
(
mbedtls_md5_context
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
int
ret
;
size_t
fill
;
uint32_t
left
;
if
(
ilen
==
0
)
return
;
return
(
0
)
;
left
=
ctx
->
total
[
0
]
&
0x3F
;
fill
=
64
-
left
;
...
...
@@ -256,7 +264,9 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s
if
(
left
&&
ilen
>=
fill
)
{
memcpy
(
(
void
*
)
(
ctx
->
buffer
+
left
),
input
,
fill
);
mbedtls_md5_process
(
ctx
,
ctx
->
buffer
);
if
(
(
ret
=
mbedtls_internal_md5_process
(
ctx
,
ctx
->
buffer
)
)
!=
0
)
return
(
ret
);
input
+=
fill
;
ilen
-=
fill
;
left
=
0
;
...
...
@@ -264,7 +274,9 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s
while
(
ilen
>=
64
)
{
mbedtls_md5_process
(
ctx
,
input
);
if
(
(
ret
=
mbedtls_internal_md5_process
(
ctx
,
input
)
)
!=
0
)
return
(
ret
);
input
+=
64
;
ilen
-=
64
;
}
...
...
@@ -273,9 +285,11 @@ void mbedtls_md5_update( mbedtls_md5_context *ctx, const unsigned char *input, s
{
memcpy
(
(
void
*
)
(
ctx
->
buffer
+
left
),
input
,
ilen
);
}
return
(
0
);
}
static
const
unsigned
char
md5_padding
[
64
]
ICACHE_RODATA_ATTR
=
static
const
unsigned
char
md5_padding
[
64
]
=
{
0x80
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
0
,
...
...
@@ -286,14 +300,13 @@ static const unsigned char md5_padding[64] ICACHE_RODATA_ATTR =
/*
* MD5 final digest
*/
void
mbedtls_md5_finish
(
mbedtls_md5_context
*
ctx
,
unsigned
char
output
[
16
]
)
int
mbedtls_md5_finish_ret
(
mbedtls_md5_context
*
ctx
,
unsigned
char
output
[
16
]
)
{
int
ret
;
uint32_t
last
,
padn
;
uint32_t
high
,
low
;
unsigned
char
msglen
[
8
];
unsigned
char
md5_padding_local
[
64
];
memcpy
(
md5_padding_local
,
md5_padding
,
64
);
high
=
(
ctx
->
total
[
0
]
>>
29
)
|
(
ctx
->
total
[
1
]
<<
3
);
...
...
@@ -305,13 +318,18 @@ void mbedtls_md5_finish( mbedtls_md5_context *ctx, unsigned char output[16] )
last
=
ctx
->
total
[
0
]
&
0x3F
;
padn
=
(
last
<
56
)
?
(
56
-
last
)
:
(
120
-
last
);
mbedtls_md5_update
(
ctx
,
md5_padding_local
,
padn
);
mbedtls_md5_update
(
ctx
,
msglen
,
8
);
if
(
(
ret
=
mbedtls_md5_update_ret
(
ctx
,
md5_padding
,
padn
)
)
!=
0
)
return
(
ret
);
if
(
(
ret
=
mbedtls_md5_update_ret
(
ctx
,
msglen
,
8
)
)
!=
0
)
return
(
ret
);
PUT_UINT32_LE
(
ctx
->
state
[
0
],
output
,
0
);
PUT_UINT32_LE
(
ctx
->
state
[
1
],
output
,
4
);
PUT_UINT32_LE
(
ctx
->
state
[
2
],
output
,
8
);
PUT_UINT32_LE
(
ctx
->
state
[
3
],
output
,
12
);
return
(
0
);
}
#endif
/* !MBEDTLS_MD5_ALT */
...
...
@@ -319,15 +337,28 @@ void mbedtls_md5_finish( mbedtls_md5_context *ctx, unsigned char output[16] )
/*
* output = MD5( input buffer )
*/
void
mbedtls_md5
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
int
mbedtls_md5_ret
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
output
[
16
]
)
{
int
ret
;
mbedtls_md5_context
ctx
;
mbedtls_md5_init
(
&
ctx
);
mbedtls_md5_starts
(
&
ctx
);
mbedtls_md5_update
(
&
ctx
,
input
,
ilen
);
mbedtls_md5_finish
(
&
ctx
,
output
);
if
(
(
ret
=
mbedtls_md5_starts_ret
(
&
ctx
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
ctx
,
input
,
ilen
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_finish_ret
(
&
ctx
,
output
)
)
!=
0
)
goto
exit
;
exit:
mbedtls_md5_free
(
&
ctx
);
return
(
ret
);
}
#if defined(MBEDTLS_SELF_TEST)
...
...
@@ -342,11 +373,11 @@ static const unsigned char md5_test_buf[7][81] =
{
"message digest"
},
{
"abcdefghijklmnopqrstuvwxyz"
},
{
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"
},
{
"12345678901234567890123456789012345678901234567890123456789012"
\
{
"12345678901234567890123456789012345678901234567890123456789012"
"345678901234567890"
}
};
static
const
in
t
md5_test_buflen
[
7
]
=
static
const
size_
t
md5_test_buflen
[
7
]
=
{
0
,
1
,
3
,
14
,
26
,
62
,
80
};
...
...
@@ -374,7 +405,7 @@ static const unsigned char md5_test_sum[7][16] =
*/
int
mbedtls_md5_self_test
(
int
verbose
)
{
int
i
;
int
i
,
ret
=
0
;
unsigned
char
md5sum
[
16
];
for
(
i
=
0
;
i
<
7
;
i
++
)
...
...
@@ -382,14 +413,14 @@ int mbedtls_md5_self_test( int verbose )
if
(
verbose
!=
0
)
mbedtls_printf
(
" MD5 test #%d: "
,
i
+
1
);
mbedtls_md5
(
md5_test_buf
[
i
],
md5_test_buflen
[
i
],
md5sum
);
ret
=
mbedtls_md5_ret
(
md5_test_buf
[
i
],
md5_test_buflen
[
i
],
md5sum
);
if
(
ret
!=
0
)
goto
fail
;
if
(
memcmp
(
md5sum
,
md5_test_sum
[
i
],
16
)
!=
0
)
{
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
1
);
ret
=
1
;
goto
fail
;
}
if
(
verbose
!=
0
)
...
...
@@ -400,6 +431,12 @@ int mbedtls_md5_self_test( int verbose )
mbedtls_printf
(
"
\n
"
);
return
(
0
);
fail:
if
(
verbose
!=
0
)
mbedtls_printf
(
"failed
\n
"
);
return
(
ret
);
}
#endif
/* MBEDTLS_SELF_TEST */
...
...
app/mbedtls/library/md_wrap.c
View file @
67027c0d
...
...
@@ -71,20 +71,20 @@
#if defined(MBEDTLS_MD2_C)
static
void
md2_starts_wrap
(
void
*
ctx
)
static
int
md2_starts_wrap
(
void
*
ctx
)
{
mbedtls_md2_starts
(
(
mbedtls_md2_context
*
)
ctx
);
return
(
mbedtls_md2_starts
_ret
(
(
mbedtls_md2_context
*
)
ctx
)
);
}
static
void
md2_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
md2_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_md2_update
(
(
mbedtls_md2_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_md2_update
_ret
(
(
mbedtls_md2_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
md2_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
md2_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_md2_finish
(
(
mbedtls_md2_context
*
)
ctx
,
output
);
return
(
mbedtls_md2_finish
_ret
(
(
mbedtls_md2_context
*
)
ctx
,
output
)
);
}
static
void
*
md2_ctx_alloc
(
void
)
...
...
@@ -109,11 +109,11 @@ static void md2_clone_wrap( void *dst, const void *src )
(
const
mbedtls_md2_context
*
)
src
);
}
static
void
md2_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
md2_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
((
void
)
data
);
mbedtls
_md2_process
(
(
mbedtls_md2_context
*
)
ctx
);
return
(
mbedtls_internal
_md2_process
(
(
mbedtls_md2_context
*
)
ctx
)
);
}
const
mbedtls_md_info_t
mbedtls_md2_info
=
{
...
...
@@ -124,7 +124,7 @@ const mbedtls_md_info_t mbedtls_md2_info = {
md2_starts_wrap
,
md2_update_wrap
,
md2_finish_wrap
,
mbedtls_md2
,
mbedtls_md2
_ret
,
md2_ctx_alloc
,
md2_ctx_free
,
md2_clone_wrap
,
...
...
@@ -135,20 +135,20 @@ const mbedtls_md_info_t mbedtls_md2_info = {
#if defined(MBEDTLS_MD4_C)
static
void
md4_starts_wrap
(
void
*
ctx
)
static
int
md4_starts_wrap
(
void
*
ctx
)
{
mbedtls_md4_starts
(
(
mbedtls_md4_context
*
)
ctx
);
return
(
mbedtls_md4_starts
_ret
(
(
mbedtls_md4_context
*
)
ctx
)
);
}
static
void
md4_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
md4_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_md4_update
(
(
mbedtls_md4_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_md4_update
_ret
(
(
mbedtls_md4_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
md4_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
md4_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_md4_finish
(
(
mbedtls_md4_context
*
)
ctx
,
output
);
return
(
mbedtls_md4_finish
_ret
(
(
mbedtls_md4_context
*
)
ctx
,
output
)
);
}
static
void
*
md4_ctx_alloc
(
void
)
...
...
@@ -170,12 +170,12 @@ static void md4_ctx_free( void *ctx )
static
void
md4_clone_wrap
(
void
*
dst
,
const
void
*
src
)
{
mbedtls_md4_clone
(
(
mbedtls_md4_context
*
)
dst
,
(
const
mbedtls_md4_context
*
)
src
);
(
const
mbedtls_md4_context
*
)
src
);
}
static
void
md4_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
md4_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls
_md4_process
(
(
mbedtls_md4_context
*
)
ctx
,
data
);
return
(
mbedtls_internal
_md4_process
(
(
mbedtls_md4_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_md4_info
=
{
...
...
@@ -186,7 +186,7 @@ const mbedtls_md_info_t mbedtls_md4_info = {
md4_starts_wrap
,
md4_update_wrap
,
md4_finish_wrap
,
mbedtls_md4
,
mbedtls_md4
_ret
,
md4_ctx_alloc
,
md4_ctx_free
,
md4_clone_wrap
,
...
...
@@ -197,20 +197,20 @@ const mbedtls_md_info_t mbedtls_md4_info = {
#if defined(MBEDTLS_MD5_C)
static
void
md5_starts_wrap
(
void
*
ctx
)
static
int
md5_starts_wrap
(
void
*
ctx
)
{
mbedtls_md5_starts
(
(
mbedtls_md5_context
*
)
ctx
);
return
(
mbedtls_md5_starts
_ret
(
(
mbedtls_md5_context
*
)
ctx
)
);
}
static
void
md5_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
md5_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_md5_update
(
(
mbedtls_md5_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_md5_update
_ret
(
(
mbedtls_md5_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
md5_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
md5_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_md5_finish
(
(
mbedtls_md5_context
*
)
ctx
,
output
);
return
(
mbedtls_md5_finish
_ret
(
(
mbedtls_md5_context
*
)
ctx
,
output
)
);
}
static
void
*
md5_ctx_alloc
(
void
)
...
...
@@ -232,15 +232,15 @@ static void md5_ctx_free( void *ctx )
static
void
md5_clone_wrap
(
void
*
dst
,
const
void
*
src
)
{
mbedtls_md5_clone
(
(
mbedtls_md5_context
*
)
dst
,
(
const
mbedtls_md5_context
*
)
src
);
(
const
mbedtls_md5_context
*
)
src
);
}
static
void
md5_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
md5_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls
_md5_process
(
(
mbedtls_md5_context
*
)
ctx
,
data
);
return
(
mbedtls_internal
_md5_process
(
(
mbedtls_md5_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_md5_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_md5_info
=
{
MBEDTLS_MD_MD5
,
"MD5"
,
16
,
...
...
@@ -248,7 +248,7 @@ const mbedtls_md_info_t mbedtls_md5_info ICACHE_RODATA_ATTR = {
md5_starts_wrap
,
md5_update_wrap
,
md5_finish_wrap
,
mbedtls_md5
,
mbedtls_md5
_ret
,
md5_ctx_alloc
,
md5_ctx_free
,
md5_clone_wrap
,
...
...
@@ -259,20 +259,22 @@ const mbedtls_md_info_t mbedtls_md5_info ICACHE_RODATA_ATTR = {
#if defined(MBEDTLS_RIPEMD160_C)
static
void
ripemd160_starts_wrap
(
void
*
ctx
)
static
int
ripemd160_starts_wrap
(
void
*
ctx
)
{
mbedtls_ripemd160_starts
(
(
mbedtls_ripemd160_context
*
)
ctx
);
return
(
mbedtls_ripemd160_starts
_ret
(
(
mbedtls_ripemd160_context
*
)
ctx
)
);
}
static
void
ripemd160_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
ripemd160_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_ripemd160_update
(
(
mbedtls_ripemd160_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_ripemd160_update_ret
(
(
mbedtls_ripemd160_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
ripemd160_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
ripemd160_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_ripemd160_finish
(
(
mbedtls_ripemd160_context
*
)
ctx
,
output
);
return
(
mbedtls_ripemd160_finish_ret
(
(
mbedtls_ripemd160_context
*
)
ctx
,
output
)
);
}
static
void
*
ripemd160_ctx_alloc
(
void
)
...
...
@@ -297,9 +299,10 @@ static void ripemd160_clone_wrap( void *dst, const void *src )
(
const
mbedtls_ripemd160_context
*
)
src
);
}
static
void
ripemd160_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
ripemd160_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls_ripemd160_process
(
(
mbedtls_ripemd160_context
*
)
ctx
,
data
);
return
(
mbedtls_internal_ripemd160_process
(
(
mbedtls_ripemd160_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_ripemd160_info
=
{
...
...
@@ -310,7 +313,7 @@ const mbedtls_md_info_t mbedtls_ripemd160_info = {
ripemd160_starts_wrap
,
ripemd160_update_wrap
,
ripemd160_finish_wrap
,
mbedtls_ripemd160
,
mbedtls_ripemd160
_ret
,
ripemd160_ctx_alloc
,
ripemd160_ctx_free
,
ripemd160_clone_wrap
,
...
...
@@ -321,20 +324,21 @@ const mbedtls_md_info_t mbedtls_ripemd160_info = {
#if defined(MBEDTLS_SHA1_C)
static
void
sha1_starts_wrap
(
void
*
ctx
)
static
int
sha1_starts_wrap
(
void
*
ctx
)
{
mbedtls_sha1_starts
(
(
mbedtls_sha1_context
*
)
ctx
);
return
(
mbedtls_sha1_starts
_ret
(
(
mbedtls_sha1_context
*
)
ctx
)
);
}
static
void
sha1_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
sha1_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_sha1_update
(
(
mbedtls_sha1_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_sha1_update_ret
(
(
mbedtls_sha1_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
sha1_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
sha1_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_sha1_finish
(
(
mbedtls_sha1_context
*
)
ctx
,
output
);
return
(
mbedtls_sha1_finish
_ret
(
(
mbedtls_sha1_context
*
)
ctx
,
output
)
);
}
static
void
*
sha1_ctx_alloc
(
void
)
...
...
@@ -359,12 +363,13 @@ static void sha1_ctx_free( void *ctx )
mbedtls_free
(
ctx
);
}
static
void
sha1_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
sha1_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls_sha1_process
(
(
mbedtls_sha1_context
*
)
ctx
,
data
);
return
(
mbedtls_internal_sha1_process
(
(
mbedtls_sha1_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_sha1_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_sha1_info
=
{
MBEDTLS_MD_SHA1
,
"SHA1"
,
20
,
...
...
@@ -372,7 +377,7 @@ const mbedtls_md_info_t mbedtls_sha1_info ICACHE_RODATA_ATTR = {
sha1_starts_wrap
,
sha1_update_wrap
,
sha1_finish_wrap
,
mbedtls_sha1
,
mbedtls_sha1
_ret
,
sha1_ctx_alloc
,
sha1_ctx_free
,
sha1_clone_wrap
,
...
...
@@ -386,26 +391,28 @@ const mbedtls_md_info_t mbedtls_sha1_info ICACHE_RODATA_ATTR = {
*/
#if defined(MBEDTLS_SHA256_C)
static
void
sha224_starts_wrap
(
void
*
ctx
)
static
int
sha224_starts_wrap
(
void
*
ctx
)
{
mbedtls_sha256_starts
(
(
mbedtls_sha256_context
*
)
ctx
,
1
);
return
(
mbedtls_sha256_starts
_ret
(
(
mbedtls_sha256_context
*
)
ctx
,
1
)
);
}
static
void
sha224_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
static
int
sha224_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_sha256_update
(
(
mbedtls_sha256_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_sha256_update_ret
(
(
mbedtls_sha256_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
sha224_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
sha224_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_sha256_finish
(
(
mbedtls_sha256_context
*
)
ctx
,
output
);
return
(
mbedtls_sha256_finish_ret
(
(
mbedtls_sha256_context
*
)
ctx
,
output
)
);
}
static
void
sha224_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
static
int
sha224_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_sha256
(
input
,
ilen
,
output
,
1
);
return
(
mbedtls_sha256
_ret
(
input
,
ilen
,
output
,
1
)
);
}
static
void
*
sha224_ctx_alloc
(
void
)
...
...
@@ -430,12 +437,13 @@ static void sha224_clone_wrap( void *dst, const void *src )
(
const
mbedtls_sha256_context
*
)
src
);
}
static
void
sha224_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
sha224_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls_sha256_process
(
(
mbedtls_sha256_context
*
)
ctx
,
data
);
return
(
mbedtls_internal_sha256_process
(
(
mbedtls_sha256_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_sha224_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_sha224_info
=
{
MBEDTLS_MD_SHA224
,
"SHA224"
,
28
,
...
...
@@ -450,18 +458,18 @@ const mbedtls_md_info_t mbedtls_sha224_info ICACHE_RODATA_ATTR = {
sha224_process_wrap
,
};
static
void
sha256_starts_wrap
(
void
*
ctx
)
static
int
sha256_starts_wrap
(
void
*
ctx
)
{
mbedtls_sha256_starts
(
(
mbedtls_sha256_context
*
)
ctx
,
0
);
return
(
mbedtls_sha256_starts
_ret
(
(
mbedtls_sha256_context
*
)
ctx
,
0
)
);
}
static
void
sha256_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
static
int
sha256_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_sha256
(
input
,
ilen
,
output
,
0
);
return
(
mbedtls_sha256
_ret
(
input
,
ilen
,
output
,
0
)
);
}
const
mbedtls_md_info_t
mbedtls_sha256_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_sha256_info
=
{
MBEDTLS_MD_SHA256
,
"SHA256"
,
32
,
...
...
@@ -480,26 +488,28 @@ const mbedtls_md_info_t mbedtls_sha256_info ICACHE_RODATA_ATTR = {
#if defined(MBEDTLS_SHA512_C)
static
void
sha384_starts_wrap
(
void
*
ctx
)
static
int
sha384_starts_wrap
(
void
*
ctx
)
{
mbedtls_sha512_starts
(
(
mbedtls_sha512_context
*
)
ctx
,
1
);
return
(
mbedtls_sha512_starts
_ret
(
(
mbedtls_sha512_context
*
)
ctx
,
1
)
);
}
static
void
sha384_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
static
int
sha384_update_wrap
(
void
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
)
{
mbedtls_sha512_update
(
(
mbedtls_sha512_context
*
)
ctx
,
input
,
ilen
);
return
(
mbedtls_sha512_update_ret
(
(
mbedtls_sha512_context
*
)
ctx
,
input
,
ilen
)
);
}
static
void
sha384_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
static
int
sha384_finish_wrap
(
void
*
ctx
,
unsigned
char
*
output
)
{
mbedtls_sha512_finish
(
(
mbedtls_sha512_context
*
)
ctx
,
output
);
return
(
mbedtls_sha512_finish_ret
(
(
mbedtls_sha512_context
*
)
ctx
,
output
)
);
}
static
void
sha384_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
static
int
sha384_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_sha512
(
input
,
ilen
,
output
,
1
);
return
(
mbedtls_sha512
_ret
(
input
,
ilen
,
output
,
1
)
);
}
static
void
*
sha384_ctx_alloc
(
void
)
...
...
@@ -524,12 +534,13 @@ static void sha384_clone_wrap( void *dst, const void *src )
(
const
mbedtls_sha512_context
*
)
src
);
}
static
void
sha384_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
static
int
sha384_process_wrap
(
void
*
ctx
,
const
unsigned
char
*
data
)
{
mbedtls_sha512_process
(
(
mbedtls_sha512_context
*
)
ctx
,
data
);
return
(
mbedtls_internal_sha512_process
(
(
mbedtls_sha512_context
*
)
ctx
,
data
)
);
}
const
mbedtls_md_info_t
mbedtls_sha384_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_sha384_info
=
{
MBEDTLS_MD_SHA384
,
"SHA384"
,
48
,
...
...
@@ -544,18 +555,18 @@ const mbedtls_md_info_t mbedtls_sha384_info ICACHE_RODATA_ATTR = {
sha384_process_wrap
,
};
static
void
sha512_starts_wrap
(
void
*
ctx
)
static
int
sha512_starts_wrap
(
void
*
ctx
)
{
mbedtls_sha512_starts
(
(
mbedtls_sha512_context
*
)
ctx
,
0
);
return
(
mbedtls_sha512_starts
_ret
(
(
mbedtls_sha512_context
*
)
ctx
,
0
)
);
}
static
void
sha512_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
static
int
sha512_wrap
(
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
)
{
mbedtls_sha512
(
input
,
ilen
,
output
,
0
);
return
(
mbedtls_sha512
_ret
(
input
,
ilen
,
output
,
0
)
);
}
const
mbedtls_md_info_t
mbedtls_sha512_info
ICACHE_RODATA_ATTR
=
{
const
mbedtls_md_info_t
mbedtls_sha512_info
=
{
MBEDTLS_MD_SHA512
,
"SHA512"
,
64
,
...
...
app/mbedtls/library/memory_buffer_alloc.c
View file @
67027c0d
...
...
@@ -417,6 +417,12 @@ static void buffer_alloc_free( void *ptr )
heap
.
total_used
-=
hdr
->
size
;
#endif
#if defined(MBEDTLS_MEMORY_BACKTRACE)
free
(
hdr
->
trace
);
hdr
->
trace
=
NULL
;
hdr
->
trace_count
=
0
;
#endif
// Regroup with block before
//
if
(
hdr
->
prev
!=
NULL
&&
hdr
->
prev
->
alloc
==
0
)
...
...
@@ -432,9 +438,6 @@ static void buffer_alloc_free( void *ptr )
if
(
hdr
->
next
!=
NULL
)
hdr
->
next
->
prev
=
hdr
;
#if defined(MBEDTLS_MEMORY_BACKTRACE)
free
(
old
->
trace
);
#endif
memset
(
old
,
0
,
sizeof
(
memory_header
)
);
}
...
...
@@ -474,9 +477,6 @@ static void buffer_alloc_free( void *ptr )
if
(
hdr
->
next
!=
NULL
)
hdr
->
next
->
prev
=
hdr
;
#if defined(MBEDTLS_MEMORY_BACKTRACE)
free
(
old
->
trace
);
#endif
memset
(
old
,
0
,
sizeof
(
memory_header
)
);
}
...
...
@@ -491,11 +491,6 @@ static void buffer_alloc_free( void *ptr )
heap
.
first_free
=
hdr
;
}
#if defined(MBEDTLS_MEMORY_BACKTRACE)
hdr
->
trace
=
NULL
;
hdr
->
trace_count
=
0
;
#endif
if
(
(
heap
.
verify
&
MBEDTLS_MEMORY_VERIFY_FREE
)
&&
verify_chain
()
!=
0
)
mbedtls_exit
(
1
);
}
...
...
app/mbedtls/library/oid.c
View file @
67027c0d
...
...
@@ -152,6 +152,7 @@ int FN_NAME( ATTR1_TYPE ATTR1, ATTR2_TYPE ATTR2, const char **oid , \
return( MBEDTLS_ERR_OID_NOT_FOUND ); \
}
#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C)
/*
* For X520 attribute types
*/
...
...
@@ -160,7 +161,7 @@ typedef struct {
const
char
*
short_name
;
}
oid_x520_attr_t
;
static
const
oid_x520_attr_t
oid_x520_attr_type
[]
ICACHE_RODATA_ATTR
=
static
const
oid_x520_attr_t
oid_x520_attr_type
[]
=
{
{
{
ADD_LEN
(
MBEDTLS_OID_AT_CN
),
"id-at-commonName"
,
"Common Name"
},
...
...
@@ -247,7 +248,6 @@ static const oid_x520_attr_t oid_x520_attr_type[] ICACHE_RODATA_ATTR =
FN_OID_TYPED_FROM_ASN1
(
oid_x520_attr_t
,
x520_attr
,
oid_x520_attr_type
)
FN_OID_GET_ATTR1
(
mbedtls_oid_get_attr_short_name
,
oid_x520_attr_t
,
x520_attr
,
const
char
*
,
short_name
)
#if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C)
/*
* For X509 extensions
*/
...
...
@@ -256,7 +256,7 @@ typedef struct {
int
ext_type
;
}
oid_x509_ext_t
;
static
const
oid_x509_ext_t
oid_x509_ext
[]
ICACHE_RODATA_ATTR
=
static
const
oid_x509_ext_t
oid_x509_ext
[]
=
{
{
{
ADD_LEN
(
MBEDTLS_OID_BASIC_CONSTRAINTS
),
"id-ce-basicConstraints"
,
"Basic Constraints"
},
...
...
@@ -287,7 +287,7 @@ static const oid_x509_ext_t oid_x509_ext[] ICACHE_RODATA_ATTR =
FN_OID_TYPED_FROM_ASN1
(
oid_x509_ext_t
,
x509_ext
,
oid_x509_ext
)
FN_OID_GET_ATTR1
(
mbedtls_oid_get_x509_ext_type
,
oid_x509_ext_t
,
x509_ext
,
int
,
ext_type
)
static
const
mbedtls_oid_descriptor_t
oid_ext_key_usage
[]
ICACHE_RODATA_ATTR
=
static
const
mbedtls_oid_descriptor_t
oid_ext_key_usage
[]
=
{
{
ADD_LEN
(
MBEDTLS_OID_SERVER_AUTH
),
"id-kp-serverAuth"
,
"TLS Web Server Authentication"
},
{
ADD_LEN
(
MBEDTLS_OID_CLIENT_AUTH
),
"id-kp-clientAuth"
,
"TLS Web Client Authentication"
},
...
...
@@ -312,24 +312,34 @@ typedef struct {
mbedtls_pk_type_t
pk_alg
;
}
oid_sig_alg_t
;
static
const
oid_sig_alg_t
oid_sig_alg
[]
ICACHE_RODATA_ATTR
=
static
const
oid_sig_alg_t
oid_sig_alg
[]
=
{
#if defined(MBEDTLS_RSA_C)
#if defined(MBEDTLS_MD2_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_MD2
),
"md2WithRSAEncryption"
,
"RSA with MD2"
},
MBEDTLS_MD_MD2
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_MD2_C */
#if defined(MBEDTLS_MD4_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_MD4
),
"md4WithRSAEncryption"
,
"RSA with MD4"
},
MBEDTLS_MD_MD4
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_MD4_C */
#if defined(MBEDTLS_MD5_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_MD5
),
"md5WithRSAEncryption"
,
"RSA with MD5"
},
MBEDTLS_MD_MD5
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_MD5_C */
#if defined(MBEDTLS_SHA1_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_SHA1
),
"sha-1WithRSAEncryption"
,
"RSA with SHA1"
},
MBEDTLS_MD_SHA1
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_SHA1_C */
#if defined(MBEDTLS_SHA256_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_SHA224
),
"sha224WithRSAEncryption"
,
"RSA with SHA-224"
},
MBEDTLS_MD_SHA224
,
MBEDTLS_PK_RSA
,
...
...
@@ -338,6 +348,8 @@ static const oid_sig_alg_t oid_sig_alg[] ICACHE_RODATA_ATTR =
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_SHA256
),
"sha256WithRSAEncryption"
,
"RSA with SHA-256"
},
MBEDTLS_MD_SHA256
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_SHA256_C */
#if defined(MBEDTLS_SHA512_C)
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_SHA384
),
"sha384WithRSAEncryption"
,
"RSA with SHA-384"
},
MBEDTLS_MD_SHA384
,
MBEDTLS_PK_RSA
,
...
...
@@ -346,34 +358,48 @@ static const oid_sig_alg_t oid_sig_alg[] ICACHE_RODATA_ATTR =
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_SHA512
),
"sha512WithRSAEncryption"
,
"RSA with SHA-512"
},
MBEDTLS_MD_SHA512
,
MBEDTLS_PK_RSA
,
},
#endif
/* MBEDTLS_SHA512_C */
#if defined(MBEDTLS_SHA1_C)
{
{
ADD_LEN
(
MBEDTLS_OID_RSA_SHA_OBS
),
"sha-1WithRSAEncryption"
,
"RSA with SHA1"
},
MBEDTLS_MD_SHA1
,
MBEDTLS_PK_RSA
,
},
// {
// { ADD_LEN( MBEDTLS_OID_ECDSA_SHA1 ), "ecdsa-with-SHA1", "ECDSA with SHA1" },
// MBEDTLS_MD_SHA1, MBEDTLS_PK_ECDSA,
// },
// {
// { ADD_LEN( MBEDTLS_OID_ECDSA_SHA224 ), "ecdsa-with-SHA224", "ECDSA with SHA224" },
// MBEDTLS_MD_SHA224, MBEDTLS_PK_ECDSA,
// },
// {
// { ADD_LEN( MBEDTLS_OID_ECDSA_SHA256 ), "ecdsa-with-SHA256", "ECDSA with SHA256" },
// MBEDTLS_MD_SHA256, MBEDTLS_PK_ECDSA,
// },
// {
// { ADD_LEN( MBEDTLS_OID_ECDSA_SHA384 ), "ecdsa-with-SHA384", "ECDSA with SHA384" },
// MBEDTLS_MD_SHA384, MBEDTLS_PK_ECDSA,
// },
// {
// { ADD_LEN( MBEDTLS_OID_ECDSA_SHA512 ), "ecdsa-with-SHA512", "ECDSA with SHA512" },
// MBEDTLS_MD_SHA512, MBEDTLS_PK_ECDSA,
// },
#endif
/* MBEDTLS_SHA1_C */
#endif
/* MBEDTLS_RSA_C */
#if defined(MBEDTLS_ECDSA_C)
#if defined(MBEDTLS_SHA1_C)
{
{
ADD_LEN
(
MBEDTLS_OID_ECDSA_SHA1
),
"ecdsa-with-SHA1"
,
"ECDSA with SHA1"
},
MBEDTLS_MD_SHA1
,
MBEDTLS_PK_ECDSA
,
},
#endif
/* MBEDTLS_SHA1_C */
#if defined(MBEDTLS_SHA256_C)
{
{
ADD_LEN
(
MBEDTLS_OID_ECDSA_SHA224
),
"ecdsa-with-SHA224"
,
"ECDSA with SHA224"
},
MBEDTLS_MD_SHA224
,
MBEDTLS_PK_ECDSA
,
},
{
{
ADD_LEN
(
MBEDTLS_OID_ECDSA_SHA256
),
"ecdsa-with-SHA256"
,
"ECDSA with SHA256"
},
MBEDTLS_MD_SHA256
,
MBEDTLS_PK_ECDSA
,
},
#endif
/* MBEDTLS_SHA256_C */
#if defined(MBEDTLS_SHA512_C)
{
{
ADD_LEN
(
MBEDTLS_OID_ECDSA_SHA384
),
"ecdsa-with-SHA384"
,
"ECDSA with SHA384"
},
MBEDTLS_MD_SHA384
,
MBEDTLS_PK_ECDSA
,
},
{
{
ADD_LEN
(
MBEDTLS_OID_ECDSA_SHA512
),
"ecdsa-with-SHA512"
,
"ECDSA with SHA512"
},
MBEDTLS_MD_SHA512
,
MBEDTLS_PK_ECDSA
,
},
#endif
/* MBEDTLS_SHA512_C */
#endif
/* MBEDTLS_ECDSA_C */
#if defined(MBEDTLS_RSA_C)
{
{
ADD_LEN
(
MBEDTLS_OID_RSASSA_PSS
),
"RSASSA-PSS"
,
"RSASSA-PSS"
},
MBEDTLS_MD_NONE
,
MBEDTLS_PK_RSASSA_PSS
,
},
#endif
/* MBEDTLS_RSA_C */
{
{
NULL
,
0
,
NULL
,
NULL
},
MBEDTLS_MD_NONE
,
MBEDTLS_PK_NONE
,
...
...
@@ -394,7 +420,7 @@ typedef struct {
mbedtls_pk_type_t
pk_alg
;
}
oid_pk_alg_t
;
static
const
oid_pk_alg_t
oid_pk_alg
[]
ICACHE_RODATA_ATTR
=
static
const
oid_pk_alg_t
oid_pk_alg
[]
=
{
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS1_RSA
),
"rsaEncryption"
,
"RSA"
},
...
...
@@ -427,52 +453,74 @@ typedef struct {
mbedtls_ecp_group_id
grp_id
;
}
oid_ecp_grp_t
;
static
const
oid_ecp_grp_t
oid_ecp_grp
[]
ICACHE_RODATA_ATTR
=
static
const
oid_ecp_grp_t
oid_ecp_grp
[]
=
{
#if defined(MBEDTLS_ECP_DP_SECP192R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP192R1
),
"secp192r1"
,
"secp192r1"
},
MBEDTLS_ECP_DP_SECP192R1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP192R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP224R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP224R1
),
"secp224r1"
,
"secp224r1"
},
MBEDTLS_ECP_DP_SECP224R1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP224R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP256R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP256R1
),
"secp256r1"
,
"secp256r1"
},
MBEDTLS_ECP_DP_SECP256R1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP256R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP384R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP384R1
),
"secp384r1"
,
"secp384r1"
},
MBEDTLS_ECP_DP_SECP384R1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP384R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP521R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP521R1
),
"secp521r1"
,
"secp521r1"
},
MBEDTLS_ECP_DP_SECP521R1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP521R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP192K1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP192K1
),
"secp192k1"
,
"secp192k1"
},
MBEDTLS_ECP_DP_SECP192K1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP192K1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP224K1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP224K1
),
"secp224k1"
,
"secp224k1"
},
MBEDTLS_ECP_DP_SECP224K1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP224K1_ENABLED */
#if defined(MBEDTLS_ECP_DP_SECP256K1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_SECP256K1
),
"secp256k1"
,
"secp256k1"
},
MBEDTLS_ECP_DP_SECP256K1
,
},
#endif
/* MBEDTLS_ECP_DP_SECP256K1_ENABLED */
#if defined(MBEDTLS_ECP_DP_BP256R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_BP256R1
),
"brainpoolP256r1"
,
"brainpool256r1"
},
MBEDTLS_ECP_DP_BP256R1
,
},
#endif
/* MBEDTLS_ECP_DP_BP256R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_BP384R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_BP384R1
),
"brainpoolP384r1"
,
"brainpool384r1"
},
MBEDTLS_ECP_DP_BP384R1
,
},
#endif
/* MBEDTLS_ECP_DP_BP384R1_ENABLED */
#if defined(MBEDTLS_ECP_DP_BP512R1_ENABLED)
{
{
ADD_LEN
(
MBEDTLS_OID_EC_GRP_BP512R1
),
"brainpoolP512r1"
,
"brainpool512r1"
},
MBEDTLS_ECP_DP_BP512R1
,
},
#endif
/* MBEDTLS_ECP_DP_BP512R1_ENABLED */
{
{
NULL
,
0
,
NULL
,
NULL
},
MBEDTLS_ECP_DP_NONE
,
...
...
@@ -493,7 +541,7 @@ typedef struct {
mbedtls_cipher_type_t
cipher_alg
;
}
oid_cipher_alg_t
;
static
const
oid_cipher_alg_t
oid_cipher_alg
[]
ICACHE_RODATA_ATTR
=
static
const
oid_cipher_alg_t
oid_cipher_alg
[]
=
{
{
{
ADD_LEN
(
MBEDTLS_OID_DES_CBC
),
"desCBC"
,
"DES-CBC"
},
...
...
@@ -522,24 +570,33 @@ typedef struct {
mbedtls_md_type_t
md_alg
;
}
oid_md_alg_t
;
static
const
oid_md_alg_t
oid_md_alg
[]
ICACHE_RODATA_ATTR
=
static
const
oid_md_alg_t
oid_md_alg
[]
=
{
#if defined(MBEDTLS_MD2_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_MD2
),
"id-md2"
,
"MD2"
},
MBEDTLS_MD_MD2
,
},
#endif
/* MBEDTLS_MD2_C */
#if defined(MBEDTLS_MD4_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_MD4
),
"id-md4"
,
"MD4"
},
MBEDTLS_MD_MD4
,
},
#endif
/* MBEDTLS_MD4_C */
#if defined(MBEDTLS_MD5_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_MD5
),
"id-md5"
,
"MD5"
},
MBEDTLS_MD_MD5
,
},
#endif
/* MBEDTLS_MD5_C */
#if defined(MBEDTLS_SHA1_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_SHA1
),
"id-sha1"
,
"SHA-1"
},
MBEDTLS_MD_SHA1
,
},
#endif
/* MBEDTLS_SHA1_C */
#if defined(MBEDTLS_SHA256_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_SHA224
),
"id-sha224"
,
"SHA-224"
},
MBEDTLS_MD_SHA224
,
...
...
@@ -548,6 +605,8 @@ static const oid_md_alg_t oid_md_alg[] ICACHE_RODATA_ATTR =
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_SHA256
),
"id-sha256"
,
"SHA-256"
},
MBEDTLS_MD_SHA256
,
},
#endif
/* MBEDTLS_SHA256_C */
#if defined(MBEDTLS_SHA512_C)
{
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_SHA384
),
"id-sha384"
,
"SHA-384"
},
MBEDTLS_MD_SHA384
,
...
...
@@ -556,6 +615,7 @@ static const oid_md_alg_t oid_md_alg[] ICACHE_RODATA_ATTR =
{
ADD_LEN
(
MBEDTLS_OID_DIGEST_ALG_SHA512
),
"id-sha512"
,
"SHA-512"
},
MBEDTLS_MD_SHA512
,
},
#endif
/* MBEDTLS_SHA512_C */
{
{
NULL
,
0
,
NULL
,
NULL
},
MBEDTLS_MD_NONE
,
...
...
@@ -577,7 +637,7 @@ typedef struct {
mbedtls_cipher_type_t
cipher_alg
;
}
oid_pkcs12_pbe_alg_t
;
static
const
oid_pkcs12_pbe_alg_t
oid_pkcs12_pbe_alg
[]
ICACHE_RODATA_ATTR
=
static
const
oid_pkcs12_pbe_alg_t
oid_pkcs12_pbe_alg
[]
=
{
{
{
ADD_LEN
(
MBEDTLS_OID_PKCS12_PBE_SHA1_DES3_EDE_CBC
),
"pbeWithSHAAnd3-KeyTripleDES-CBC"
,
"PBE with SHA1 and 3-Key 3DES"
},
...
...
app/mbedtls/library/pem.c
View file @
67027c0d
...
...
@@ -44,12 +44,12 @@
#define mbedtls_free free
#endif
#if defined(MBEDTLS_PEM_PARSE_C)
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
}
#if defined(MBEDTLS_PEM_PARSE_C)
void
mbedtls_pem_init
(
mbedtls_pem_context
*
ctx
)
{
memset
(
ctx
,
0
,
sizeof
(
mbedtls_pem_context
)
);
...
...
@@ -82,31 +82,33 @@ static int pem_get_iv( const unsigned char *s, unsigned char *iv,
return
(
0
);
}
static
void
pem_pbkdf1
(
unsigned
char
*
key
,
size_t
keylen
,
unsigned
char
*
iv
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
static
int
pem_pbkdf1
(
unsigned
char
*
key
,
size_t
keylen
,
unsigned
char
*
iv
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
{
mbedtls_md5_context
md5_ctx
;
unsigned
char
md5sum
[
16
];
size_t
use_len
;
int
ret
;
mbedtls_md5_init
(
&
md5_ctx
);
/*
* key[ 0..15] = MD5(pwd || IV)
*/
mbedtls_md5_starts
(
&
md5_ctx
);
mbedtls_md5_update
(
&
md5_ctx
,
pwd
,
pwdlen
);
mbedtls_md5_update
(
&
md5_ctx
,
iv
,
8
);
mbedtls_md5_finish
(
&
md5_ctx
,
md5sum
);
if
(
(
ret
=
mbedtls_md5_starts_ret
(
&
md5_ctx
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
md5_ctx
,
pwd
,
pwdlen
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
md5_ctx
,
iv
,
8
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_finish_ret
(
&
md5_ctx
,
md5sum
)
)
!=
0
)
goto
exit
;
if
(
keylen
<=
16
)
{
memcpy
(
key
,
md5sum
,
keylen
);
mbedtls_md5_free
(
&
md5_ctx
);
mbedtls_zeroize
(
md5sum
,
16
);
return
;
goto
exit
;
}
memcpy
(
key
,
md5sum
,
16
);
...
...
@@ -114,11 +116,16 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen,
/*
* key[16..23] = MD5(key[ 0..15] || pwd || IV])
*/
mbedtls_md5_starts
(
&
md5_ctx
);
mbedtls_md5_update
(
&
md5_ctx
,
md5sum
,
16
);
mbedtls_md5_update
(
&
md5_ctx
,
pwd
,
pwdlen
);
mbedtls_md5_update
(
&
md5_ctx
,
iv
,
8
);
mbedtls_md5_finish
(
&
md5_ctx
,
md5sum
);
if
(
(
ret
=
mbedtls_md5_starts_ret
(
&
md5_ctx
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
md5_ctx
,
md5sum
,
16
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
md5_ctx
,
pwd
,
pwdlen
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_update_ret
(
&
md5_ctx
,
iv
,
8
)
)
!=
0
)
goto
exit
;
if
(
(
ret
=
mbedtls_md5_finish_ret
(
&
md5_ctx
,
md5sum
)
)
!=
0
)
goto
exit
;
use_len
=
16
;
if
(
keylen
<
32
)
...
...
@@ -126,53 +133,68 @@ static void pem_pbkdf1( unsigned char *key, size_t keylen,
memcpy
(
key
+
16
,
md5sum
,
use_len
);
exit:
mbedtls_md5_free
(
&
md5_ctx
);
mbedtls_zeroize
(
md5sum
,
16
);
return
(
ret
);
}
#if defined(MBEDTLS_DES_C)
/*
* Decrypt with DES-CBC, using PBKDF1 for key derivation
*/
static
void
pem_des_decrypt
(
unsigned
char
des_iv
[
8
],
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
static
int
pem_des_decrypt
(
unsigned
char
des_iv
[
8
],
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
{
mbedtls_des_context
des_ctx
;
unsigned
char
des_key
[
8
];
int
ret
;
mbedtls_des_init
(
&
des_ctx
);
pem_pbkdf1
(
des_key
,
8
,
des_iv
,
pwd
,
pwdlen
);
if
(
(
ret
=
pem_pbkdf1
(
des_key
,
8
,
des_iv
,
pwd
,
pwdlen
)
)
!=
0
)
goto
exit
;
mbedtls_des_setkey_dec
(
&
des_ctx
,
des_key
);
mbedtls_des_crypt_cbc
(
&
des_ctx
,
MBEDTLS_DES_DECRYPT
,
buflen
,
if
(
(
ret
=
mbedtls_des_setkey_dec
(
&
des_ctx
,
des_key
)
)
!=
0
)
goto
exit
;
ret
=
mbedtls_des_crypt_cbc
(
&
des_ctx
,
MBEDTLS_DES_DECRYPT
,
buflen
,
des_iv
,
buf
,
buf
);
exit:
mbedtls_des_free
(
&
des_ctx
);
mbedtls_zeroize
(
des_key
,
8
);
return
(
ret
);
}
/*
* Decrypt with 3DES-CBC, using PBKDF1 for key derivation
*/
static
void
pem_des3_decrypt
(
unsigned
char
des3_iv
[
8
],
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
static
int
pem_des3_decrypt
(
unsigned
char
des3_iv
[
8
],
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
{
mbedtls_des3_context
des3_ctx
;
unsigned
char
des3_key
[
24
];
int
ret
;
mbedtls_des3_init
(
&
des3_ctx
);
pem_pbkdf1
(
des3_key
,
24
,
des3_iv
,
pwd
,
pwdlen
);
if
(
(
ret
=
pem_pbkdf1
(
des3_key
,
24
,
des3_iv
,
pwd
,
pwdlen
)
)
!=
0
)
goto
exit
;
mbedtls_des3_set3key_dec
(
&
des3_ctx
,
des3_key
);
mbedtls_des3_crypt_cbc
(
&
des3_ctx
,
MBEDTLS_DES_DECRYPT
,
buflen
,
if
(
(
ret
=
mbedtls_des3_set3key_dec
(
&
des3_ctx
,
des3_key
)
)
!=
0
)
goto
exit
;
ret
=
mbedtls_des3_crypt_cbc
(
&
des3_ctx
,
MBEDTLS_DES_DECRYPT
,
buflen
,
des3_iv
,
buf
,
buf
);
exit:
mbedtls_des3_free
(
&
des3_ctx
);
mbedtls_zeroize
(
des3_key
,
24
);
return
(
ret
);
}
#endif
/* MBEDTLS_DES_C */
...
...
@@ -180,23 +202,29 @@ static void pem_des3_decrypt( unsigned char des3_iv[8],
/*
* Decrypt with AES-XXX-CBC, using PBKDF1 for key derivation
*/
static
void
pem_aes_decrypt
(
unsigned
char
aes_iv
[
16
],
unsigned
int
keylen
,
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
static
int
pem_aes_decrypt
(
unsigned
char
aes_iv
[
16
],
unsigned
int
keylen
,
unsigned
char
*
buf
,
size_t
buflen
,
const
unsigned
char
*
pwd
,
size_t
pwdlen
)
{
mbedtls_aes_context
aes_ctx
;
unsigned
char
aes_key
[
32
];
int
ret
;
mbedtls_aes_init
(
&
aes_ctx
);
pem_pbkdf1
(
aes_key
,
keylen
,
aes_iv
,
pwd
,
pwdlen
);
if
(
(
ret
=
pem_pbkdf1
(
aes_key
,
keylen
,
aes_iv
,
pwd
,
pwdlen
)
)
!=
0
)
goto
exit
;
mbedtls_aes_setkey_dec
(
&
aes_ctx
,
aes_key
,
keylen
*
8
);
mbedtls_aes_crypt_cbc
(
&
aes_ctx
,
MBEDTLS_AES_DECRYPT
,
buflen
,
if
(
(
ret
=
mbedtls_aes_setkey_dec
(
&
aes_ctx
,
aes_key
,
keylen
*
8
)
)
!=
0
)
goto
exit
;
ret
=
mbedtls_aes_crypt_cbc
(
&
aes_ctx
,
MBEDTLS_AES_DECRYPT
,
buflen
,
aes_iv
,
buf
,
buf
);
exit:
mbedtls_aes_free
(
&
aes_ctx
);
mbedtls_zeroize
(
aes_key
,
keylen
);
return
(
ret
);
}
#endif
/* MBEDTLS_AES_C */
...
...
@@ -249,7 +277,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
enc
=
0
;
if
(
memcmp
(
s1
,
"Proc-Type: 4,ENCRYPTED"
,
22
)
==
0
)
if
(
s2
-
s1
>=
22
&&
memcmp
(
s1
,
"Proc-Type: 4,ENCRYPTED"
,
22
)
==
0
)
{
#if defined(MBEDTLS_MD5_C) && defined(MBEDTLS_CIPHER_MODE_CBC) && \
( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) )
...
...
@@ -262,22 +290,22 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
#if defined(MBEDTLS_DES_C)
if
(
memcmp
(
s1
,
"DEK-Info: DES-EDE3-CBC,"
,
23
)
==
0
)
if
(
s2
-
s1
>=
23
&&
memcmp
(
s1
,
"DEK-Info: DES-EDE3-CBC,"
,
23
)
==
0
)
{
enc_alg
=
MBEDTLS_CIPHER_DES_EDE3_CBC
;
s1
+=
23
;
if
(
pem_get_iv
(
s1
,
pem_iv
,
8
)
!=
0
)
if
(
s2
-
s1
<
16
||
pem_get_iv
(
s1
,
pem_iv
,
8
)
!=
0
)
return
(
MBEDTLS_ERR_PEM_INVALID_ENC_IV
);
s1
+=
16
;
}
else
if
(
memcmp
(
s1
,
"DEK-Info: DES-CBC,"
,
18
)
==
0
)
else
if
(
s2
-
s1
>=
18
&&
memcmp
(
s1
,
"DEK-Info: DES-CBC,"
,
18
)
==
0
)
{
enc_alg
=
MBEDTLS_CIPHER_DES_CBC
;
s1
+=
18
;
if
(
pem_get_iv
(
s1
,
pem_iv
,
8
)
!=
0
)
if
(
s2
-
s1
<
16
||
pem_get_iv
(
s1
,
pem_iv
,
8
)
!=
0
)
return
(
MBEDTLS_ERR_PEM_INVALID_ENC_IV
);
s1
+=
16
;
...
...
@@ -285,9 +313,11 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
#endif
/* MBEDTLS_DES_C */
#if defined(MBEDTLS_AES_C)
if
(
memcmp
(
s1
,
"DEK-Info: AES-"
,
14
)
==
0
)
if
(
s2
-
s1
>=
14
&&
memcmp
(
s1
,
"DEK-Info: AES-"
,
14
)
==
0
)
{
if
(
memcmp
(
s1
,
"DEK-Info: AES-128-CBC,"
,
22
)
==
0
)
if
(
s2
-
s1
<
22
)
return
(
MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG
);
else
if
(
memcmp
(
s1
,
"DEK-Info: AES-128-CBC,"
,
22
)
==
0
)
enc_alg
=
MBEDTLS_CIPHER_AES_128_CBC
;
else
if
(
memcmp
(
s1
,
"DEK-Info: AES-192-CBC,"
,
22
)
==
0
)
enc_alg
=
MBEDTLS_CIPHER_AES_192_CBC
;
...
...
@@ -297,7 +327,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
return
(
MBEDTLS_ERR_PEM_UNKNOWN_ENC_ALG
);
s1
+=
22
;
if
(
pem_get_iv
(
s1
,
pem_iv
,
16
)
!=
0
)
if
(
s2
-
s1
<
32
||
pem_get_iv
(
s1
,
pem_iv
,
16
)
!=
0
)
return
(
MBEDTLS_ERR_PEM_INVALID_ENC_IV
);
s1
+=
32
;
...
...
@@ -316,7 +346,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
( MBEDTLS_AES_C || MBEDTLS_DES_C ) */
}
if
(
s1
=
=
s2
)
if
(
s1
>
=
s2
)
return
(
MBEDTLS_ERR_PEM_INVALID_DATA
);
ret
=
mbedtls_base64_decode
(
NULL
,
0
,
&
len
,
s1
,
s2
-
s1
);
...
...
@@ -329,6 +359,7 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
if
(
(
ret
=
mbedtls_base64_decode
(
buf
,
len
,
&
len
,
s1
,
s2
-
s1
)
)
!=
0
)
{
mbedtls_zeroize
(
buf
,
len
);
mbedtls_free
(
buf
);
return
(
MBEDTLS_ERR_PEM_INVALID_DATA
+
ret
);
}
...
...
@@ -339,26 +370,35 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
( defined(MBEDTLS_DES_C) || defined(MBEDTLS_AES_C) )
if
(
pwd
==
NULL
)
{
mbedtls_zeroize
(
buf
,
len
);
mbedtls_free
(
buf
);
return
(
MBEDTLS_ERR_PEM_PASSWORD_REQUIRED
);
}
ret
=
0
;
#if defined(MBEDTLS_DES_C)
if
(
enc_alg
==
MBEDTLS_CIPHER_DES_EDE3_CBC
)
pem_des3_decrypt
(
pem_iv
,
buf
,
len
,
pwd
,
pwdlen
);
ret
=
pem_des3_decrypt
(
pem_iv
,
buf
,
len
,
pwd
,
pwdlen
);
else
if
(
enc_alg
==
MBEDTLS_CIPHER_DES_CBC
)
pem_des_decrypt
(
pem_iv
,
buf
,
len
,
pwd
,
pwdlen
);
ret
=
pem_des_decrypt
(
pem_iv
,
buf
,
len
,
pwd
,
pwdlen
);
#endif
/* MBEDTLS_DES_C */
#if defined(MBEDTLS_AES_C)
if
(
enc_alg
==
MBEDTLS_CIPHER_AES_128_CBC
)
pem_aes_decrypt
(
pem_iv
,
16
,
buf
,
len
,
pwd
,
pwdlen
);
ret
=
pem_aes_decrypt
(
pem_iv
,
16
,
buf
,
len
,
pwd
,
pwdlen
);
else
if
(
enc_alg
==
MBEDTLS_CIPHER_AES_192_CBC
)
pem_aes_decrypt
(
pem_iv
,
24
,
buf
,
len
,
pwd
,
pwdlen
);
ret
=
pem_aes_decrypt
(
pem_iv
,
24
,
buf
,
len
,
pwd
,
pwdlen
);
else
if
(
enc_alg
==
MBEDTLS_CIPHER_AES_256_CBC
)
pem_aes_decrypt
(
pem_iv
,
32
,
buf
,
len
,
pwd
,
pwdlen
);
ret
=
pem_aes_decrypt
(
pem_iv
,
32
,
buf
,
len
,
pwd
,
pwdlen
);
#endif
/* MBEDTLS_AES_C */
if
(
ret
!=
0
)
{
mbedtls_free
(
buf
);
return
(
ret
);
}
/*
* The result will be ASN.1 starting with a SEQUENCE tag, with 1 to 3
* length bytes (allow 4 to be sure) in all known use cases.
...
...
@@ -367,10 +407,12 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
*/
if
(
len
<=
2
||
buf
[
0
]
!=
0x30
||
buf
[
1
]
>
0x83
)
{
mbedtls_zeroize
(
buf
,
len
);
mbedtls_free
(
buf
);
return
(
MBEDTLS_ERR_PEM_PASSWORD_MISMATCH
);
}
#else
mbedtls_zeroize
(
buf
,
len
);
mbedtls_free
(
buf
);
return
(
MBEDTLS_ERR_PEM_FEATURE_UNAVAILABLE
);
#endif
/* MBEDTLS_MD5_C && MBEDTLS_CIPHER_MODE_CBC &&
...
...
@@ -385,6 +427,8 @@ int mbedtls_pem_read_buffer( mbedtls_pem_context *ctx, const char *header, const
void
mbedtls_pem_free
(
mbedtls_pem_context
*
ctx
)
{
if
(
ctx
->
buf
!=
NULL
)
mbedtls_zeroize
(
ctx
->
buf
,
ctx
->
buflen
);
mbedtls_free
(
ctx
->
buf
);
mbedtls_free
(
ctx
->
info
);
...
...
app/mbedtls/library/pk.c
View file @
67027c0d
...
...
@@ -39,6 +39,9 @@
#include "mbedtls/ecdsa.h"
#endif
#include <limits.h>
#include <stdint.h>
/* Implementation that should never be optimized out by the compiler */
static
void
mbedtls_zeroize
(
void
*
v
,
size_t
n
)
{
volatile
unsigned
char
*
p
=
v
;
while
(
n
--
)
*
p
++
=
0
;
...
...
@@ -209,6 +212,11 @@ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options,
int
ret
;
const
mbedtls_pk_rsassa_pss_options
*
pss_opts
;
#if SIZE_MAX > UINT_MAX
if
(
md_alg
==
MBEDTLS_MD_NONE
&&
UINT_MAX
<
hash_len
)
return
(
MBEDTLS_ERR_PK_BAD_INPUT_DATA
);
#endif
/* SIZE_MAX > UINT_MAX */
if
(
options
==
NULL
)
return
(
MBEDTLS_ERR_PK_BAD_INPUT_DATA
);
...
...
@@ -232,7 +240,7 @@ int mbedtls_pk_verify_ext( mbedtls_pk_type_t type, const void *options,
return
(
0
);
#else
return
(
MBEDTLS_ERR_PK_FEATURE_UNAVAILABLE
);
#endif
#endif
/* MBEDTLS_RSA_C && MBEDTLS_PKCS1_V21 */
}
/* General case: no options */
...
...
Prev
1
…
3
4
5
6
7
8
9
10
11
…
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