Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
ruanhaishen
Nodemcu Firmware
Commits
c7673b02
Commit
c7673b02
authored
Mar 12, 2018
by
Luiz Felipe Silva
Browse files
Merge remote-tracking branch 'upstream/dev' into dev
parents
ba9a938e
5c8af3c4
Changes
114
Hide whitespace changes
Inline
Side-by-side
app/include/mbedtls/aes.h
View file @
c7673b02
/**
* \file aes.h
*
* \brief AES block cipher
*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* \brief The Advanced Encryption Standard (AES) specifies a FIPS-approved
* cryptographic algorithm that can be used to protect electronic
* data.
*
* The AES algorithm is a symmetric block cipher that can
* encrypt and decrypt information. For more information, see
* <em>FIPS Publication 197: Advanced Encryption Standard</em> and
* <em>ISO/IEC 18033-2:2006: Information technology -- Security
* techniques -- Encryption algorithms -- Part 2: Asymmetric
* ciphers</em>.
*/
/* Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved.
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -18,8 +27,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of
m
bed TLS (https://tls.mbed.org)
* This file is part of
M
bed TLS (https://tls.mbed.org)
*/
#ifndef MBEDTLS_AES_H
#define MBEDTLS_AES_H
...
...
@@ -33,12 +43,17 @@
#include <stdint.h>
/* padlock.c and aesni.c rely on these values! */
#define MBEDTLS_AES_ENCRYPT 1
#define MBEDTLS_AES_DECRYPT 0
#define MBEDTLS_AES_ENCRYPT 1
/**< AES encryption. */
#define MBEDTLS_AES_DECRYPT 0
/**< AES decryption. */
/* Error codes in range 0x0020-0x0022 */
#define MBEDTLS_ERR_AES_INVALID_KEY_LENGTH -0x0020
/**< Invalid key length. */
#define MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH -0x0022
/**< Invalid data input length. */
/* Error codes in range 0x0023-0x0025 */
#define MBEDTLS_ERR_AES_FEATURE_UNAVAILABLE -0x0023
/**< Feature not available. For example, an unsupported AES key size. */
#define MBEDTLS_ERR_AES_HW_ACCEL_FAILED -0x0025
/**< AES hardware accelerator failed. */
#if ( defined(__ARMCC_VERSION) || defined(_MSC_VER) ) && \
!defined(inline) && !defined(__cplusplus)
#define inline __inline
...
...
@@ -53,68 +68,90 @@ extern "C" {
#endif
/**
* \brief AES context structure
*
* \note buf is able to hold 32 extra bytes, which can be used:
* - for alignment purposes if VIA padlock is used, and/or
* - to simplify key expansion in the 256-bit case by
* generating an extra round key
* \brief The AES context-type definition.
*/
typedef
struct
{
int
nr
;
/*!< number of rounds */
uint32_t
*
rk
;
/*!< AES round keys */
uint32_t
buf
[
68
];
/*!< unaligned data */
int
nr
;
/*!< The number of rounds. */
uint32_t
*
rk
;
/*!< AES round keys. */
uint32_t
buf
[
68
];
/*!< Unaligned data buffer. This buffer can
hold 32 extra Bytes, which can be used for
one of the following purposes:
<ul><li>Alignment if VIA padlock is
used.</li>
<li>Simplifying key expansion in the 256-bit
case by generating an extra round key.
</li></ul> */
}
mbedtls_aes_context
;
/**
* \brief
Initialize
AES context
* \brief
This function initializes the specified
AES context
.
*
* \param ctx AES context to be initialized
* It must be the first API called before using
* the context.
*
* \param ctx The AES context to initialize.
*/
void
mbedtls_aes_init
(
mbedtls_aes_context
*
ctx
);
/**
* \brief
Clear
AES context
* \brief
This function releases and clears the specified
AES context
.
*
* \param ctx AES context to
be
clear
ed
* \param ctx
The
AES context to clear
.
*/
void
mbedtls_aes_free
(
mbedtls_aes_context
*
ctx
);
/**
* \brief
AES key schedule (
encryption
)
* \brief
This function sets the
encryption
key.
*
* \param ctx AES context to be initialized
* \param key encryption key
* \param keybits must be 128, 192 or 256
* \param ctx The AES context to which the key should be bound.
* \param key The encryption key.
* \param keybits The size of data passed in bits. Valid options are:
* <ul><li>128 bits</li>
* <li>192 bits</li>
* <li>256 bits</li></ul>
*
* \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
* \return \c 0 on success or #MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
* on failure.
*/
int
mbedtls_aes_setkey_enc
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
*
key
,
unsigned
int
keybits
);
/**
* \brief
AES key schedule (
decryption
)
* \brief
This function sets the
decryption
key.
*
* \param ctx AES context to be initialized
* \param key decryption key
* \param keybits must be 128, 192 or 256
* \param ctx The AES context to which the key should be bound.
* \param key The decryption key.
* \param keybits The size of data passed. Valid options are:
* <ul><li>128 bits</li>
* <li>192 bits</li>
* <li>256 bits</li></ul>
*
* \return
0 if
success
ful
, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
* \return
\c 0 on
success, or
#
MBEDTLS_ERR_AES_INVALID_KEY_LENGTH
on failure.
*/
int
mbedtls_aes_setkey_dec
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
*
key
,
unsigned
int
keybits
);
/**
* \brief AES-ECB block encryption/decryption
*
* \param ctx AES context
* \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
* \param input 16-byte input block
* \param output 16-byte output block
*
* \return 0 if successful
* \brief This function performs an AES single-block encryption or
* decryption operation.
*
* It performs the operation defined in the \p mode parameter
* (encrypt or decrypt), on the input data buffer defined in
* the \p input parameter.
*
* mbedtls_aes_init(), and either mbedtls_aes_setkey_enc() or
* mbedtls_aes_setkey_dec() must be called before the first
* call to this API with the same context.
*
* \param ctx The AES context to use for encryption or decryption.
* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or
* #MBEDTLS_AES_DECRYPT.
* \param input The 16-Byte buffer holding the input data.
* \param output The 16-Byte buffer holding the output data.
* \return \c 0 on success.
*/
int
mbedtls_aes_crypt_ecb
(
mbedtls_aes_context
*
ctx
,
int
mode
,
...
...
@@ -123,26 +160,40 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx,
#if defined(MBEDTLS_CIPHER_MODE_CBC)
/**
* \brief AES-CBC buffer encryption/decryption
* Length should be a multiple of the block
* size (16 bytes)
*
* \note Upon exit, the content of the IV is updated so that you can
* call the function same function again on the following
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If on the other hand you need to retain the contents of the
* IV, you should either save it manually or use the cipher
* module instead.
*
* \param ctx AES context
* \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
* \param length length of the input data
* \param iv initialization vector (updated after use)
* \param input buffer holding the input data
* \param output buffer holding the output data
*
* \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
* \brief This function performs an AES-CBC encryption or decryption operation
* on full blocks.
*
* It performs the operation defined in the \p mode
* parameter (encrypt/decrypt), on the input data buffer defined in
* the \p input parameter.
*
* It can be called as many times as needed, until all the input
* data is processed. mbedtls_aes_init(), and either
* mbedtls_aes_setkey_enc() or mbedtls_aes_setkey_dec() must be called
* before the first call to this API with the same context.
*
* \note This function operates on aligned blocks, that is, the input size
* must be a multiple of the AES block size of 16 Bytes.
*
* \note Upon exit, the content of the IV is updated so that you can
* call the same function again on the next
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If you need to retain the contents of the IV, you should
* either save it manually or use the cipher module instead.
*
*
* \param ctx The AES context to use for encryption or decryption.
* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or
* #MBEDTLS_AES_DECRYPT.
* \param length The length of the input data in Bytes. This must be a
* multiple of the block size (16 Bytes).
* \param iv Initialization vector (updated after use).
* \param input The buffer holding the input data.
* \param output The buffer holding the output data.
*
* \return \c 0 on success, or #MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
* on failure.
*/
int
mbedtls_aes_crypt_cbc
(
mbedtls_aes_context
*
ctx
,
int
mode
,
...
...
@@ -154,29 +205,38 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx,
#if defined(MBEDTLS_CIPHER_MODE_CFB)
/**
* \brief AES-CFB128 buffer encryption/decryption.
*
* Note: Due to the nature of CFB you should use the same key schedule for
* both encryption and decryption. So a context initialized with
* mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
*
* \note Upon exit, the content of the IV is updated so that you can
* call the function same function again on the following
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If on the other hand you need to retain the contents of the
* IV, you should either save it manually or use the cipher
* module instead.
*
* \param ctx AES context
* \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
* \param length length of the input data
* \param iv_off offset in IV (updated after use)
* \param iv initialization vector (updated after use)
* \param input buffer holding the input data
* \param output buffer holding the output data
*
* \return 0 if successful
* \brief This function performs an AES-CFB128 encryption or decryption
* operation.
*
* It performs the operation defined in the \p mode
* parameter (encrypt or decrypt), on the input data buffer
* defined in the \p input parameter.
*
* For CFB, you must set up the context with mbedtls_aes_setkey_enc(),
* regardless of whether you are performing an encryption or decryption
* operation, that is, regardless of the \p mode parameter. This is
* because CFB mode uses the same key schedule for encryption and
* decryption.
*
* \note Upon exit, the content of the IV is updated so that you can
* call the same function again on the next
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If you need to retain the contents of the
* IV, you must either save it manually or use the cipher
* module instead.
*
*
* \param ctx The AES context to use for encryption or decryption.
* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or
* #MBEDTLS_AES_DECRYPT.
* \param length The length of the input data.
* \param iv_off The offset in IV (updated after use).
* \param iv The initialization vector (updated after use).
* \param input The buffer holding the input data.
* \param output The buffer holding the output data.
*
* \return \c 0 on success.
*/
int
mbedtls_aes_crypt_cfb128
(
mbedtls_aes_context
*
ctx
,
int
mode
,
...
...
@@ -187,28 +247,36 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx,
unsigned
char
*
output
);
/**
* \brief AES-CFB8 buffer encryption/decryption.
*
* Note: Due to the nature of CFB you should use the same key schedule for
* both encryption and decryption. So a context initialized with
* mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
*
* \note Upon exit, the content of the IV is updated so that you can
* call the function same function again on the following
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If on the other hand you need to retain the contents of the
* IV, you should either save it manually or use the cipher
* module instead.
*
* \param ctx AES context
* \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT
* \param length length of the input data
* \param iv initialization vector (updated after use)
* \param input buffer holding the input data
* \param output buffer holding the output data
*
* \return 0 if successful
* \brief This function performs an AES-CFB8 encryption or decryption
* operation.
*
* It performs the operation defined in the \p mode
* parameter (encrypt/decrypt), on the input data buffer defined
* in the \p input parameter.
*
* Due to the nature of CFB, you must use the same key schedule for
* both encryption and decryption operations. Therefore, you must
* use the context initialized with mbedtls_aes_setkey_enc() for
* both #MBEDTLS_AES_ENCRYPT and #MBEDTLS_AES_DECRYPT.
*
* \note Upon exit, the content of the IV is updated so that you can
* call the same function again on the next
* block(s) of data and get the same result as if it was
* encrypted in one call. This allows a "streaming" usage.
* If you need to retain the contents of the
* IV, you should either save it manually or use the cipher
* module instead.
*
*
* \param ctx The AES context to use for encryption or decryption.
* \param mode The AES operation: #MBEDTLS_AES_ENCRYPT or
* #MBEDTLS_AES_DECRYPT
* \param length The length of the input data.
* \param iv The initialization vector (updated after use).
* \param input The buffer holding the input data.
* \param output The buffer holding the output data.
*
* \return \c 0 on success.
*/
int
mbedtls_aes_crypt_cfb8
(
mbedtls_aes_context
*
ctx
,
int
mode
,
...
...
@@ -220,26 +288,32 @@ int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx,
#if defined(MBEDTLS_CIPHER_MODE_CTR)
/**
* \brief AES-CTR buffer encryption/decryption
*
* Warning: You have to keep the maximum use of your counter in mind!
*
* Note: Due to the nature of CTR you should use the same key schedule for
* both encryption and decryption. So a context initialized with
* mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT.
*
* \param ctx AES context
* \param length The length of the data
* \param nc_off The offset in the current stream_block (for resuming
* within current cipher stream). The offset pointer to
* should be 0 at the start of a stream.
* \param nonce_counter The 128-bit nonce and counter.
* \param stream_block The saved stream-block for resuming. Is overwritten
* by the function.
* \param input The input data stream
* \param output The output data stream
*
* \return 0 if successful
* \brief This function performs an AES-CTR encryption or decryption
* operation.
*
* This function performs the operation defined in the \p mode
* parameter (encrypt/decrypt), on the input data buffer
* defined in the \p input parameter.
*
* Due to the nature of CTR, you must use the same key schedule
* for both encryption and decryption operations. Therefore, you
* must use the context initialized with mbedtls_aes_setkey_enc()
* for both #MBEDTLS_AES_ENCRYPT and #MBEDTLS_AES_DECRYPT.
*
* \warning You must keep the maximum use of your counter in mind.
*
* \param ctx The AES context to use for encryption or decryption.
* \param length The length of the input data.
* \param nc_off The offset in the current \p stream_block, for
* resuming within the current cipher stream. The
* offset pointer should be 0 at the start of a stream.
* \param nonce_counter The 128-bit nonce and counter.
* \param stream_block The saved stream block for resuming. This is
* overwritten by the function.
* \param input The buffer holding the input data.
* \param output The buffer holding the output data.
*
* \return \c 0 on success.
*/
int
mbedtls_aes_crypt_ctr
(
mbedtls_aes_context
*
ctx
,
size_t
length
,
...
...
@@ -251,30 +325,30 @@ int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx,
#endif
/* MBEDTLS_CIPHER_MODE_CTR */
/**
* \brief Internal AES block encryption function
*
(Only
exposed to allow overriding it
,
*
see
MBEDTLS_AES_ENCRYPT_ALT
)
* \brief Internal AES block encryption function
. This is only
* exposed to allow overriding it
using
*
\c
MBEDTLS_AES_ENCRYPT_ALT
.
*
* \param ctx AES context
* \param input
P
laintext block
* \param output
O
utput (ciphertext) block
* \param ctx
The
AES context
to use for encryption.
* \param input
The p
laintext block
.
* \param output
The o
utput (ciphertext) block
.
*
* \return
0 if
success
ful
* \return
\c 0 on
success
.
*/
int
mbedtls_internal_aes_encrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
unsigned
char
output
[
16
]
);
/**
* \brief Internal AES block decryption function
*
(Only
exposed to allow overriding it
,
*
see
MBEDTLS_AES_DECRYPT_ALT
)
* \brief Internal AES block decryption function
. This is only
* exposed to allow overriding it
using see
*
\c
MBEDTLS_AES_DECRYPT_ALT
.
*
* \param ctx AES context
* \param input
C
iphertext block
* \param output
O
utput (plaintext) block
* \param ctx
The
AES context
to use for decryption.
* \param input
The c
iphertext block
.
* \param output
The o
utput (plaintext) block
.
*
* \return
0 if
success
ful
* \return
\c 0 on
success
.
*/
int
mbedtls_internal_aes_decrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
...
...
@@ -290,11 +364,11 @@ int mbedtls_internal_aes_decrypt( mbedtls_aes_context *ctx,
* \brief Deprecated internal AES block encryption function
* without return value.
*
* \deprecated Superseded by mbedtls_aes_encrypt_ext() in 2.5.0
* \deprecated Superseded by mbedtls_aes_encrypt_ext() in 2.5.0
.
*
* \param ctx AES context
* \param input Plaintext block
* \param output Output (ciphertext) block
* \param ctx
The
AES context
to use for encryption.
* \param input Plaintext block
.
* \param output Output (ciphertext) block
.
*/
MBEDTLS_DEPRECATED
void
mbedtls_aes_encrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
...
...
@@ -304,11 +378,11 @@ MBEDTLS_DEPRECATED void mbedtls_aes_encrypt( mbedtls_aes_context *ctx,
* \brief Deprecated internal AES block decryption function
* without return value.
*
* \deprecated Superseded by mbedtls_aes_decrypt_ext() in 2.5.0
* \deprecated Superseded by mbedtls_aes_decrypt_ext() in 2.5.0
.
*
* \param ctx AES context
* \param input Ciphertext block
* \param output Output (plaintext) block
* \param ctx
The
AES context
to use for decryption.
* \param input Ciphertext block
.
* \param output Output (plaintext) block
.
*/
MBEDTLS_DEPRECATED
void
mbedtls_aes_decrypt
(
mbedtls_aes_context
*
ctx
,
const
unsigned
char
input
[
16
],
...
...
@@ -330,9 +404,9 @@ extern "C" {
#endif
/**
* \brief Checkup routine
* \brief Checkup routine
.
*
* \return
0 if
success
ful
, or
1 if the test
fail
ed
* \return
\c 0 on
success, or
\c 1 on
fail
ure.
*/
int
mbedtls_aes_self_test
(
int
verbose
);
...
...
app/include/mbedtls/aesni.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file aesni.h
*
* \brief AES-NI for hardware AES acceleration on some Intel processors
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/arc4.h
View file @
c7673b02
...
...
@@ -3,6 +3,10 @@
*
* \brief The ARCFOUR stream cipher
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers instead.
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -19,6 +23,7 @@
* limitations under the License.
*
* This file is part of mbed TLS (https://tls.mbed.org)
*
*/
#ifndef MBEDTLS_ARC4_H
#define MBEDTLS_ARC4_H
...
...
@@ -31,6 +36,8 @@
#include <stddef.h>
#define MBEDTLS_ERR_ARC4_HW_ACCEL_FAILED -0x0019
/**< ARC4 hardware accelerator failed. */
#if !defined(MBEDTLS_ARC4_ALT)
// Regular implementation
//
...
...
@@ -40,7 +47,11 @@ extern "C" {
#endif
/**
* \brief ARC4 context structure
* \brief ARC4 context structure
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers instead.
*
*/
typedef
struct
{
...
...
@@ -54,6 +65,11 @@ mbedtls_arc4_context;
* \brief Initialize ARC4 context
*
* \param ctx ARC4 context to be initialized
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers
* instead.
*
*/
void
mbedtls_arc4_init
(
mbedtls_arc4_context
*
ctx
);
...
...
@@ -61,6 +77,11 @@ void mbedtls_arc4_init( mbedtls_arc4_context *ctx );
* \brief Clear ARC4 context
*
* \param ctx ARC4 context to be cleared
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers
* instead.
*
*/
void
mbedtls_arc4_free
(
mbedtls_arc4_context
*
ctx
);
...
...
@@ -70,6 +91,11 @@ void mbedtls_arc4_free( mbedtls_arc4_context *ctx );
* \param ctx ARC4 context to be setup
* \param key the secret key
* \param keylen length of the key, in bytes
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers
* instead.
*
*/
void
mbedtls_arc4_setup
(
mbedtls_arc4_context
*
ctx
,
const
unsigned
char
*
key
,
unsigned
int
keylen
);
...
...
@@ -83,6 +109,11 @@ void mbedtls_arc4_setup( mbedtls_arc4_context *ctx, const unsigned char *key,
* \param output buffer for the output data
*
* \return 0 if successful
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers
* instead.
*
*/
int
mbedtls_arc4_crypt
(
mbedtls_arc4_context
*
ctx
,
size_t
length
,
const
unsigned
char
*
input
,
unsigned
char
*
output
);
...
...
@@ -103,6 +134,11 @@ extern "C" {
* \brief Checkup routine
*
* \return 0 if successful, or 1 if the test failed
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers
* instead.
*
*/
int
mbedtls_arc4_self_test
(
int
verbose
);
...
...
app/include/mbedtls/asn1.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file asn1.h
*
* \brief Generic ASN.1 parsing
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -59,7 +60,7 @@
/**
* \name DER constants
* These constants comply with DER encoded
the ANS
1 type tags.
* These constants comply with
the
DER encoded
ASN.
1 type tags.
* DER encoding uses hexadecimal representation.
* An example DER sequence is:\n
* - 0x02 -- tag indicating INTEGER
...
...
app/include/mbedtls/asn1write.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file asn1write.h
*
* \brief ASN.1 buffer writing functionality
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/base64.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file base64.h
*
* \brief RFC 1521 base64 encoding/decoding
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/bignum.h
View file @
c7673b02
/**
* \file bignum.h
*
* \brief Multi-precision integer library
*
* \brief Multi-precision integer library
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -70,7 +71,7 @@
* Maximum size of MPIs allowed in bits and bytes for user-MPIs.
* ( Default: 512 bytes => 4096 bits, Maximum tested: 2048 bytes => 16384 bits )
*
* Note: Calculations can
results
temporarily in larger MPIs. So the number
* Note: Calculations can temporarily
result
in larger MPIs. So the number
* of limbs required (MBEDTLS_MPI_MAX_LIMBS) is higher.
*/
#define MBEDTLS_MPI_MAX_SIZE 1024
/**< Maximum number of bytes for usable MPIs. */
...
...
@@ -683,6 +684,10 @@ int mbedtls_mpi_exp_mod( mbedtls_mpi *X, const mbedtls_mpi *A, const mbedtls_mpi
*
* \return 0 if successful,
* MBEDTLS_ERR_MPI_ALLOC_FAILED if memory allocation failed
*
* \note The bytes obtained from the PRNG are interpreted
* as a big-endian representation of an MPI; this can
* be relevant in applications like deterministic ECDSA.
*/
int
mbedtls_mpi_fill_random
(
mbedtls_mpi
*
X
,
size_t
size
,
int
(
*
f_rng
)(
void
*
,
unsigned
char
*
,
size_t
),
...
...
app/include/mbedtls/blowfish.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file blowfish.h
*
* \brief Blowfish block cipher
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -40,6 +41,7 @@
#define MBEDTLS_BLOWFISH_BLOCKSIZE 8
/* Blowfish uses 64 bit blocks */
#define MBEDTLS_ERR_BLOWFISH_INVALID_KEY_LENGTH -0x0016
/**< Invalid key length. */
#define MBEDTLS_ERR_BLOWFISH_HW_ACCEL_FAILED -0x0017
/**< Blowfish hardware accelerator failed. */
#define MBEDTLS_ERR_BLOWFISH_INVALID_INPUT_LENGTH -0x0018
/**< Invalid data input length. */
#if !defined(MBEDTLS_BLOWFISH_ALT)
...
...
app/include/mbedtls/bn_mul.h
View file @
c7673b02
/**
* \file bn_mul.h
*
* \brief Multi-precision integer library
*
* \brief Multi-precision integer library
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/camellia.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file camellia.h
*
* \brief Camellia block cipher
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -37,6 +38,7 @@
#define MBEDTLS_ERR_CAMELLIA_INVALID_KEY_LENGTH -0x0024
/**< Invalid key length. */
#define MBEDTLS_ERR_CAMELLIA_INVALID_INPUT_LENGTH -0x0026
/**< Invalid data input length. */
#define MBEDTLS_ERR_CAMELLIA_HW_ACCEL_FAILED -0x0027
/**< Camellia hardware accelerator failed. */
#if !defined(MBEDTLS_CAMELLIA_ALT)
// Regular implementation
...
...
app/include/mbedtls/ccm.h
View file @
c7673b02
/**
* \file ccm.h
*
* \brief Counter with CBC-MAC (CCM) for 128-bit block ciphers
* \brief CCM combines Counter mode encryption with CBC-MAC authentication
* for 128-bit block ciphers.
*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* Input to CCM includes the following elements:
* <ul><li>Payload - data that is both authenticated and encrypted.</li>
* <li>Associated data (Adata) - data that is authenticated but not
* encrypted, For example, a header.</li>
* <li>Nonce - A unique value that is assigned to the payload and the
* associated data.</li></ul>
*
*/
/*
* Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -18,46 +28,54 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of
m
bed TLS (https://tls.mbed.org)
* This file is part of
M
bed TLS (https://tls.mbed.org)
*/
#ifndef MBEDTLS_CCM_H
#define MBEDTLS_CCM_H
#include "cipher.h"
#define MBEDTLS_ERR_CCM_BAD_INPUT -0x000D
/**< Bad input parameters to function. */
#define MBEDTLS_ERR_CCM_AUTH_FAILED -0x000F
/**< Authenticated decryption failed. */
#define MBEDTLS_ERR_CCM_BAD_INPUT -0x000D
/**< Bad input parameters to the function. */
#define MBEDTLS_ERR_CCM_AUTH_FAILED -0x000F
/**< Authenticated decryption failed. */
#define MBEDTLS_ERR_CCM_HW_ACCEL_FAILED -0x0011
/**< CCM hardware accelerator failed. */
#if !defined(MBEDTLS_CCM_ALT)
// Regular implementation
//
#ifdef __cplusplus
extern
"C"
{
#endif
/**
* \brief CCM context structure
* \brief The CCM context-type definition. The CCM context is passed
* to the APIs called.
*/
typedef
struct
{
mbedtls_cipher_context_t
cipher_ctx
;
/*!< cipher context used */
mbedtls_cipher_context_t
cipher_ctx
;
/*!<
The
cipher context used
.
*/
}
mbedtls_ccm_context
;
/**
* \brief
Initialize CCM context (just makes references valid)
*
Makes the context ready for mbedtls_ccm_setkey() or
* mbedtls_ccm_free().
* \brief
This function initializes the specified CCM context,
*
to make references valid, and prepare the context
*
for mbedtls_ccm_setkey() or
mbedtls_ccm_free().
*
* \param ctx CCM context to initialize
* \param ctx
The
CCM context to initialize
.
*/
void
mbedtls_ccm_init
(
mbedtls_ccm_context
*
ctx
);
/**
* \brief CCM initialization (encryption and decryption)
* \brief This function initializes the CCM context set in the
* \p ctx parameter and sets the encryption key.
*
* \param ctx CCM context to
be
initialize
d
* \param cipher
cipher to use (a
128-bit block cipher
)
* \param key encryption key
* \param keybits key size in bits
(
must be acceptable by the cipher
)
* \param ctx
The
CCM context to initialize
.
* \param cipher
The
128-bit block cipher
to use.
* \param key
The
encryption key
.
* \param keybits
The
key size in bits
. This
must be acceptable by the cipher
.
*
* \return
0 if
success
ful
, or a cipher
specific error code
* \return
\c 0 on
success, or a cipher
-
specific error code
.
*/
int
mbedtls_ccm_setkey
(
mbedtls_ccm_context
*
ctx
,
mbedtls_cipher_id_t
cipher
,
...
...
@@ -65,36 +83,37 @@ int mbedtls_ccm_setkey( mbedtls_ccm_context *ctx,
unsigned
int
keybits
);
/**
* \brief Free a CCM context and underlying cipher sub-context
* \brief This function releases and clears the specified CCM context
* and underlying cipher sub-context.
*
* \param ctx CCM context to
free
* \param ctx
The
CCM context to
clear.
*/
void
mbedtls_ccm_free
(
mbedtls_ccm_context
*
ctx
);
/**
* \brief
CCM buffer encryption
*
* \param ctx CCM context
* \param length length of the input data in
b
ytes
* \param iv
nonce (i
nitialization vector
)
* \param iv_len length of IV in
b
ytes
*
must be 2, 3, 4, 5, 6, 7 or 8
* \param add
additional data
*
\param add_len length of additional data in bytes
*
must be less than 2^16 - 2^8
* \param
in
put buffer holding the
in
put data
*
\param output buffer for holdi
ng
th
e output data
*
must be at least 'le
ngth
' bytes wide
* \param tag
buffer for holding the tag
*
\param tag_len length of the tag to generate in bytes
*
must be 4, 6, 8, 10, 14 or 16
*
*
\note
T
he tag
is written to a separate buffer. To get the tag
*
concatena
te
d
with
the output as in the CCM spec
, use
* tag = output + length and make sure th
e output buffer is
* at least length + tag_len wide.
*
* \return
0 if
success
ful
* \brief
This function encrypts a buffer using CCM.
*
* \param ctx
The
CCM context
to use for encryption.
* \param length
The
length of the input data in
B
ytes
.
* \param iv
I
nitialization vector
(nonce).
* \param iv_len
The
length of
the
IV in
B
ytes
: 7, 8, 9, 10, 11, 12, or 13.
*
\param add The additional data field.
* \param add
_len The length of
additional data
in Bytes.
*
Must be less than 2^16 - 2^8.
*
\param input The buffer holding the input data.
* \param
out
put
The
buffer holding the
out
put data
.
*
Must be at least \p le
ngth
Bytes wide.
*
\param tag The buffer holdi
ng
th
e tag.
* \param tag
_len The length of the tag to generate in Bytes:
*
4, 6, 8, 10, 14 or 16.
*
*
\note The tag is written to a separate buffer. To concatenate
*
t
he
\p
tag
with the \p output, as done in <em>RFC-3610:
*
Coun
te
r
with
CBC-MAC (CCM)</em>
, use
*
\p
tag =
\p
output +
\p
length
,
and make sure th
at the
*
output buffer is
at least
\p
length +
\p
tag_len wide.
*
* \return
\c 0 on
success
.
*/
int
mbedtls_ccm_encrypt_and_tag
(
mbedtls_ccm_context
*
ctx
,
size_t
length
,
const
unsigned
char
*
iv
,
size_t
iv_len
,
...
...
@@ -103,21 +122,22 @@ int mbedtls_ccm_encrypt_and_tag( mbedtls_ccm_context *ctx, size_t length,
unsigned
char
*
tag
,
size_t
tag_len
);
/**
* \brief CCM buffer authenticated decryption
*
* \param ctx CCM context
* \param length length of the input data
* \param iv initialization vector
* \param iv_len length of IV
* \param add additional data
* \param add_len length of additional data
* \param input buffer holding the input data
* \param output buffer for holding the output data
* \param tag buffer holding the tag
* \param tag_len length of the tag
*
* \return 0 if successful and authenticated,
* MBEDTLS_ERR_CCM_AUTH_FAILED if tag does not match
* \brief This function performs a CCM authenticated decryption of a
* buffer.
*
* \param ctx The CCM context to use for decryption.
* \param length The length of the input data in Bytes.
* \param iv Initialization vector.
* \param iv_len The length of the IV in Bytes: 7, 8, 9, 10, 11, 12, or 13.
* \param add The additional data field.
* \param add_len The length of additional data in Bytes.
* \param input The buffer holding the input data.
* \param output The buffer holding the output data.
* \param tag The buffer holding the tag.
* \param tag_len The length of the tag in Bytes.
*
* \return 0 if successful and authenticated, or
* #MBEDTLS_ERR_CCM_AUTH_FAILED if the tag does not match.
*/
int
mbedtls_ccm_auth_decrypt
(
mbedtls_ccm_context
*
ctx
,
size_t
length
,
const
unsigned
char
*
iv
,
size_t
iv_len
,
...
...
@@ -125,11 +145,23 @@ int mbedtls_ccm_auth_decrypt( mbedtls_ccm_context *ctx, size_t length,
const
unsigned
char
*
input
,
unsigned
char
*
output
,
const
unsigned
char
*
tag
,
size_t
tag_len
);
#ifdef __cplusplus
}
#endif
#else
/* MBEDTLS_CCM_ALT */
#include "ccm_alt.h"
#endif
/* MBEDTLS_CCM_ALT */
#ifdef __cplusplus
extern
"C"
{
#endif
#if defined(MBEDTLS_SELF_TEST) && defined(MBEDTLS_AES_C)
/**
* \brief
C
heckup routine
* \brief
The CCM c
heckup routine
.
*
* \return
0 if
success
ful
, or
1 if the test
fail
ed
* \return
\c 0 on
success, or
\c 1 on
fail
ure.
*/
int
mbedtls_ccm_self_test
(
int
verbose
);
#endif
/* MBEDTLS_SELF_TEST && MBEDTLS_AES_C */
...
...
app/include/mbedtls/certs.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file certs.h
*
* \brief Sample certificates and DHM parameters for testing
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/check_config.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file check_config.h
*
* \brief Consistency checks for configuration options
*
*/
/*
* Copyright (C) 2006-2016, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/cipher.h
View file @
c7673b02
/**
* \file cipher.h
*
* \brief
G
eneric cipher wrapper.
* \brief
The g
eneric cipher wrapper.
*
* \author Adriaan de Jong <dejong@fox-it.com>
*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
*/
/*
* Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -20,7 +21,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of
m
bed TLS (https://tls.mbed.org)
* This file is part of
M
bed TLS (https://tls.mbed.org)
*/
#ifndef MBEDTLS_CIPHER_H
...
...
@@ -51,21 +52,29 @@
#define inline __inline
#endif
#define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080
/**< The selected feature is not available. */
#define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100
/**< Bad input parameters to function. */
#define MBEDTLS_ERR_CIPHER_ALLOC_FAILED -0x6180
/**< Failed to allocate memory. */
#define MBEDTLS_ERR_CIPHER_INVALID_PADDING -0x6200
/**< Input data contains invalid padding and is rejected. */
#define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280
/**< Decryption of block requires a full block. */
#define MBEDTLS_ERR_CIPHER_AUTH_FAILED -0x6300
/**< Authentication failed (for AEAD modes). */
#define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT -0x6380
/**< The context is invalid, eg because it was free()ed. */
#define MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE -0x6080
/**< The selected feature is not available. */
#define MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA -0x6100
/**< Bad input parameters. */
#define MBEDTLS_ERR_CIPHER_ALLOC_FAILED -0x6180
/**< Failed to allocate memory. */
#define MBEDTLS_ERR_CIPHER_INVALID_PADDING -0x6200
/**< Input data contains invalid padding and is rejected. */
#define MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED -0x6280
/**< Decryption of block requires a full block. */
#define MBEDTLS_ERR_CIPHER_AUTH_FAILED -0x6300
/**< Authentication failed (for AEAD modes). */
#define MBEDTLS_ERR_CIPHER_INVALID_CONTEXT -0x6380
/**< The context is invalid. For example, because it was freed. */
#define MBEDTLS_ERR_CIPHER_HW_ACCEL_FAILED -0x6400
/**< Cipher hardware accelerator failed. */
#define MBEDTLS_CIPHER_VARIABLE_IV_LEN 0x01
/**< Cipher accepts IVs of variable length */
#define MBEDTLS_CIPHER_VARIABLE_KEY_LEN 0x02
/**< Cipher accepts keys of variable length */
#define MBEDTLS_CIPHER_VARIABLE_IV_LEN 0x01
/**< Cipher accepts IVs of variable length
.
*/
#define MBEDTLS_CIPHER_VARIABLE_KEY_LEN 0x02
/**< Cipher accepts keys of variable length
.
*/
#ifdef __cplusplus
extern
"C"
{
#endif
/**
* \brief An enumeration of supported ciphers.
*
* \warning ARC4 and DES are considered weak ciphers and their use
* constitutes a security risk. We recommend considering stronger
* ciphers instead.
*/
typedef
enum
{
MBEDTLS_CIPHER_ID_NONE
=
0
,
MBEDTLS_CIPHER_ID_NULL
,
...
...
@@ -77,6 +86,13 @@ typedef enum {
MBEDTLS_CIPHER_ID_ARC4
,
}
mbedtls_cipher_id_t
;
/**
* \brief An enumeration of supported (cipher, mode) pairs.
*
* \warning ARC4 and DES are considered weak ciphers and their use
* constitutes a security risk. We recommend considering stronger
* ciphers instead.
*/
typedef
enum
{
MBEDTLS_CIPHER_NONE
=
0
,
MBEDTLS_CIPHER_NULL
,
...
...
@@ -129,6 +145,7 @@ typedef enum {
MBEDTLS_CIPHER_CAMELLIA_256_CCM
,
}
mbedtls_cipher_type_t
;
/** Supported cipher modes. */
typedef
enum
{
MBEDTLS_MODE_NONE
=
0
,
MBEDTLS_MODE_ECB
,
...
...
@@ -141,14 +158,16 @@ typedef enum {
MBEDTLS_MODE_CCM
,
}
mbedtls_cipher_mode_t
;
/** Supported cipher padding types. */
typedef
enum
{
MBEDTLS_PADDING_PKCS7
=
0
,
/**< PKCS7 padding (default) */
MBEDTLS_PADDING_ONE_AND_ZEROS
,
/**< ISO/IEC 7816-4 padding */
MBEDTLS_PADDING_ZEROS_AND_LEN
,
/**< ANSI X.923 padding */
MBEDTLS_PADDING_ZEROS
,
/**< zero padding (not reversible
!
) */
MBEDTLS_PADDING_NONE
,
/**< never pad (full blocks only) */
MBEDTLS_PADDING_PKCS7
=
0
,
/**< PKCS7 padding (default)
.
*/
MBEDTLS_PADDING_ONE_AND_ZEROS
,
/**< ISO/IEC 7816-4 padding
.
*/
MBEDTLS_PADDING_ZEROS_AND_LEN
,
/**< ANSI X.923 padding
.
*/
MBEDTLS_PADDING_ZEROS
,
/**< zero padding (not reversible)
.
*/
MBEDTLS_PADDING_NONE
,
/**< never pad (full blocks only)
.
*/
}
mbedtls_cipher_padding_t
;
/** Type of operation. */
typedef
enum
{
MBEDTLS_OPERATION_NONE
=
-
1
,
MBEDTLS_DECRYPT
=
0
,
...
...
@@ -156,19 +175,19 @@ typedef enum {
}
mbedtls_operation_t
;
enum
{
/** Undefined key length */
/** Undefined key length
.
*/
MBEDTLS_KEY_LENGTH_NONE
=
0
,
/** Key length, in bits (including parity), for DES keys */
/** Key length, in bits (including parity), for DES keys
.
*/
MBEDTLS_KEY_LENGTH_DES
=
64
,
/** Key length
,
in bits
(
including parity
)
, for DES in two
key EDE */
/** Key length in bits
,
including parity, for DES in two
-
key EDE
.
*/
MBEDTLS_KEY_LENGTH_DES_EDE
=
128
,
/** Key length
,
in bits
(
including parity
)
, for DES in three-key EDE */
/** Key length in bits
,
including parity, for DES in three-key EDE
.
*/
MBEDTLS_KEY_LENGTH_DES_EDE3
=
192
,
};
/** Maximum length of any IV, in
b
ytes */
/** Maximum length of any IV, in
B
ytes
.
*/
#define MBEDTLS_MAX_IV_LENGTH 16
/** Maximum block size of any cipher, in
b
ytes */
/** Maximum block size of any cipher, in
B
ytes
.
*/
#define MBEDTLS_MAX_BLOCK_LENGTH 16
/**
...
...
@@ -182,33 +201,40 @@ typedef struct mbedtls_cipher_base_t mbedtls_cipher_base_t;
typedef
struct
mbedtls_cmac_context_t
mbedtls_cmac_context_t
;
/**
* Cipher information. Allows cipher functions to be called in a generic way.
* Cipher information. Allows calling cipher functions
* in a generic way.
*/
typedef
struct
{
/** Full cipher identifier (e.g. MBEDTLS_CIPHER_AES_256_CBC) */
/** Full cipher identifier. For example,
* MBEDTLS_CIPHER_AES_256_CBC.
*/
mbedtls_cipher_type_t
type
;
/**
C
ipher mode
(e.g.
MBEDTLS_MODE_CBC
)
*/
/**
The c
ipher mode
. For example,
MBEDTLS_MODE_CBC
.
*/
mbedtls_cipher_mode_t
mode
;
/** Cipher key length, in bits (default length for variable sized ciphers)
* (Includes parity bits for ciphers like DES) */
/** The cipher key length, in bits. This is the
* default length for variable sized ciphers.
* Includes parity bits for ciphers like DES.
*/
unsigned
int
key_bitlen
;
/** Name of the cipher */
/** Name of the cipher
.
*/
const
char
*
name
;
/** IV/NONCE size, in bytes.
* For cipher that accept many sizes: recommended size */
/** IV or nonce size, in Bytes.
* For ciphers that accept variable IV sizes,
* this is the recommended size.
*/
unsigned
int
iv_size
;
/** Flags
for
variable IV size
,
variable key size
, etc
. */
/** Flags
to set. For example, if the cipher supports
variable IV size
s or
variable key size
s
. */
int
flags
;
/** block size, in
b
ytes */
/**
The
block size, in
B
ytes
.
*/
unsigned
int
block_size
;
/**
B
ase cipher information and functions */
/**
Struct for b
ase cipher information and functions
.
*/
const
mbedtls_cipher_base_t
*
base
;
}
mbedtls_cipher_info_t
;
...
...
@@ -217,125 +243,133 @@ typedef struct {
* Generic cipher context.
*/
typedef
struct
{
/** Information about the associated cipher */
/** Information about the associated cipher
.
*/
const
mbedtls_cipher_info_t
*
cipher_info
;
/** Key length to use */
/** Key length to use
.
*/
int
key_bitlen
;
/** Operation that the context's key has been initialised for */
/** Operation that the key of the context has been
* initialized for.
*/
mbedtls_operation_t
operation
;
#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
/** Padding functions to use, if relevant for cipher mode */
/** Padding functions to use, if relevant for
* the specific cipher mode.
*/
void
(
*
add_padding
)(
unsigned
char
*
output
,
size_t
olen
,
size_t
data_len
);
int
(
*
get_padding
)(
unsigned
char
*
input
,
size_t
ilen
,
size_t
*
data_len
);
#endif
/** Buffer for
data
that has
n'
t been
encrypt
ed yet */
/** Buffer for
input
that has
no
t been
process
ed yet
.
*/
unsigned
char
unprocessed_data
[
MBEDTLS_MAX_BLOCK_LENGTH
];
/** Number of
b
ytes that
still n
ee
d
process
ing
*/
/** Number of
B
ytes that
have not b
ee
n
process
ed yet.
*/
size_t
unprocessed_len
;
/** Current IV or NONCE_COUNTER for CTR-mode */
/** Current IV or NONCE_COUNTER for CTR-mode
.
*/
unsigned
char
iv
[
MBEDTLS_MAX_IV_LENGTH
];
/** IV size in
b
ytes
(
for ciphers with variable-length IVs
)
*/
/** IV size in
B
ytes
,
for ciphers with variable-length IVs
.
*/
size_t
iv_size
;
/**
C
ipher-specific context */
/**
The c
ipher-specific context
.
*/
void
*
cipher_ctx
;
#if defined(MBEDTLS_CMAC_C)
/** CMAC
S
pecific context */
/** CMAC
-s
pecific context
.
*/
mbedtls_cmac_context_t
*
cmac_ctx
;
#endif
}
mbedtls_cipher_context_t
;
/**
* \brief Returns the list of ciphers supported by the generic cipher module.
* \brief This function retrieves the list of ciphers supported by the generic
* cipher module.
*
* \return
a
statically
allocated array of ciphers
, t
he last entry
*
is 0
.
* \return
A
statically
-
allocated array of ciphers
. T
he last entry
*
is zero
.
*/
const
int
*
mbedtls_cipher_list
(
void
);
/**
* \brief
Return
s the cipher
information
structure associated
* with the given cipher name.
* \brief
This function retrieve
s the cipher
-
information
*
structure associated
with the given cipher name.
*
* \param cipher_name Name of the cipher to search for.
*
* \return
t
he cipher information structure associated with the
* given cipher_name, or NULL if not found.
* \return
T
he cipher information structure associated with the
* given
\p
cipher_name, or NULL if not found.
*/
const
mbedtls_cipher_info_t
*
mbedtls_cipher_info_from_string
(
const
char
*
cipher_name
);
/**
* \brief
Return
s the cipher
information
structure associated
* with the given cipher type.
* \brief
This function retrieve
s the cipher
-
information
*
structure associated
with the given cipher type.
*
* \param cipher_type Type of the cipher to search for.
*
* \return
t
he cipher information structure associated with the
* given cipher_type, or NULL if not found.
* \return
T
he cipher information structure associated with the
* given
\p
cipher_type, or NULL if not found.
*/
const
mbedtls_cipher_info_t
*
mbedtls_cipher_info_from_type
(
const
mbedtls_cipher_type_t
cipher_type
);
/**
* \brief Returns the cipher information structure associated
* with the given cipher id, key size and mode.
* \brief This function retrieves the cipher-information
* structure associated with the given cipher ID,
* key size and mode.
*
* \param cipher_id
Id
of the cipher to search for
*
(e.g.
MBEDTLS_CIPHER_ID_AES
)
* \param key_bitlen
L
ength of the key in bits
* \param mode
C
ipher mode
(e.g.
MBEDTLS_MODE_CBC
)
* \param cipher_id
The ID
of the cipher to search for
. For example,
*
#
MBEDTLS_CIPHER_ID_AES
.
* \param key_bitlen
The l
ength of the key in bits
.
* \param mode
The c
ipher mode
. For example, #
MBEDTLS_MODE_CBC
.
*
* \return
t
he cipher information structure associated with the
* given cipher_
type
, or NULL if not found.
* \return
T
he cipher information structure associated with the
* given
\p
cipher_
id
, or NULL if not found.
*/
const
mbedtls_cipher_info_t
*
mbedtls_cipher_info_from_values
(
const
mbedtls_cipher_id_t
cipher_id
,
int
key_bitlen
,
const
mbedtls_cipher_mode_t
mode
);
/**
* \brief
I
nitialize a cipher_context
(
as NONE
)
* \brief
This function i
nitialize
s
a
\p
cipher_context as NONE
.
*/
void
mbedtls_cipher_init
(
mbedtls_cipher_context_t
*
ctx
);
/**
* \brief
F
ree and clear the cipher-specific
context of ctx.
* Freeing ctx itself remains the
responsibility of the
* caller.
* \brief
This function f
ree
s
and clear
s
the cipher-specific
*
context of \p ctx.
Freeing
\p
ctx itself remains the
*
responsibility of the
caller.
*/
void
mbedtls_cipher_free
(
mbedtls_cipher_context_t
*
ctx
);
/**
* \brief Initialises and fills the cipher context structure with
* the appropriate values.
*
* \note Currently also clears structure. In future versions you
* will be required to call mbedtls_cipher_init() on the structure
* first.
* \brief This function initializes and fills the cipher-context
* structure with the appropriate values. It also clears
* the structure.
*
* \param ctx context to initiali
s
e. May not be NULL.
* \param cipher_info cipher to use.
* \param ctx
The
context to initiali
z
e. May not be NULL.
* \param cipher_info
The
cipher to use.
*
* \return 0 on success,
* MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure,
* MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
* \return
\c
0 on success,
*
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA on parameter failure,
*
#
MBEDTLS_ERR_CIPHER_ALLOC_FAILED if allocation of the
* cipher-specific context failed.
*
* \internal Currently, the function also clears the structure.
* In future versions, the caller will be required to call
* mbedtls_cipher_init() on the structure first.
*/
int
mbedtls_cipher_setup
(
mbedtls_cipher_context_t
*
ctx
,
const
mbedtls_cipher_info_t
*
cipher_info
);
/**
* \brief
R
eturns the block size of the given cipher.
* \brief
This function r
eturns the block size of the given cipher.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return
size of the cipher's blocks, or 0 if ctx has not been
*
initiali
s
ed.
* \return
The size of the blocks of the cipher, or zero if \p ctx
*
has not been
initiali
z
ed.
*/
static
inline
unsigned
int
mbedtls_cipher_get_block_size
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -346,13 +380,13 @@ static inline unsigned int mbedtls_cipher_get_block_size( const mbedtls_cipher_c
}
/**
* \brief
R
eturns the mode of operation for
the cipher.
*
(e.g.
MBEDTLS_MODE_CBC
)
* \brief
This function r
eturns the mode of operation for
*
the cipher. For example,
MBEDTLS_MODE_CBC
.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return
mode of operation, or MBEDTLS_MODE_NONE if
ctx
*
has not been initiali
s
ed.
* \return
The
mode of operation, or
#
MBEDTLS_MODE_NONE if
*
\p ctx
has not been initiali
z
ed.
*/
static
inline
mbedtls_cipher_mode_t
mbedtls_cipher_get_cipher_mode
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -363,13 +397,14 @@ static inline mbedtls_cipher_mode_t mbedtls_cipher_get_cipher_mode( const mbedtl
}
/**
* \brief Returns the size of the cipher's IV/NONCE in bytes.
* \brief This function returns the size of the IV or nonce
* of the cipher, in Bytes.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return
If
IV has
not
been set
yet: (
recommended
)
IV size
*
(
0 for ciphers not using IV
/NONCE).
*
If IV has already been set: actual size.
* \return
<ul><li>If no
IV has been set
: the
recommended IV size
.
* 0 for ciphers not using IV
or nonce.</li>
*
<li>
If IV has already been set:
the
actual size.
</li></ul>
*/
static
inline
int
mbedtls_cipher_get_iv_size
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -383,12 +418,12 @@ static inline int mbedtls_cipher_get_iv_size( const mbedtls_cipher_context_t *ct
}
/**
* \brief
R
eturns the type of the given cipher.
* \brief
This function r
eturns the type of the given cipher.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return type of the cipher, or MBEDTLS_CIPHER_NONE if
ctx has
* not been initiali
s
ed.
* \return
The
type of the cipher, or
#
MBEDTLS_CIPHER_NONE if
*
\p ctx has
not been initiali
z
ed.
*/
static
inline
mbedtls_cipher_type_t
mbedtls_cipher_get_type
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -399,11 +434,13 @@ static inline mbedtls_cipher_type_t mbedtls_cipher_get_type( const mbedtls_ciphe
}
/**
* \brief Returns the name of the given cipher, as a string.
* \brief This function returns the name of the given cipher
* as a string.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return name of the cipher, or NULL if ctx was not initialised.
* \return The name of the cipher, or NULL if \p ctx has not
* been not initialized.
*/
static
inline
const
char
*
mbedtls_cipher_get_name
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -414,13 +451,13 @@ static inline const char *mbedtls_cipher_get_name( const mbedtls_cipher_context_
}
/**
* \brief
R
eturns the key length of the cipher.
* \brief
This function r
eturns the key length of the cipher.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return
cipher's
key length
,
in bits, or
* MBEDTLS_KEY_LENGTH_NONE if ctx has not been
* initiali
s
ed.
* \return
The
key length
of the cipher
in bits, or
*
#
MBEDTLS_KEY_LENGTH_NONE if ctx
\p
has not been
* initiali
z
ed.
*/
static
inline
int
mbedtls_cipher_get_key_bitlen
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -431,13 +468,13 @@ static inline int mbedtls_cipher_get_key_bitlen( const mbedtls_cipher_context_t
}
/**
* \brief
R
eturns the operation of the given cipher.
* \brief
This function r
eturns the operation of the given cipher.
*
* \param ctx
cipher's context. Must have been
initiali
s
ed.
* \param ctx
The context of the cipher. Must be
initiali
z
ed.
*
* \return
operation
(
MBEDTLS_ENCRYPT or
MBEDTLS_DECRYPT),
*
or MBEDTLS_OPERATION_NONE if ctx
has not been
*
initiali
s
ed.
* \return
The type of
operation
: #
MBEDTLS_ENCRYPT or
*
#MBEDTLS_DECRYPT,
or
#
MBEDTLS_OPERATION_NONE if
\p
ctx
*
has not been
initiali
z
ed.
*/
static
inline
mbedtls_operation_t
mbedtls_cipher_get_operation
(
const
mbedtls_cipher_context_t
*
ctx
)
{
...
...
@@ -448,18 +485,18 @@ static inline mbedtls_operation_t mbedtls_cipher_get_operation( const mbedtls_ci
}
/**
* \brief
S
et the key to use with the given context.
* \brief
This function s
et
s
the key to use with the given context.
*
* \param ctx generic cipher context. May not be NULL. Must have
been
* initiali
s
ed using
cipher_context
_from_type
or
*
cipher_context
_from_string.
* \param ctx
The
generic cipher context. May not be NULL. Must have
*
been
initiali
z
ed using
mbedtls_cipher_info
_from_type
()
*
or mbedtls_cipher_info
_from_string
()
.
* \param key The key to use.
* \param key_bitlen key length to use, in bits.
* \param operation
O
peration that the key will be used for
, either
* MBEDTLS_ENCRYPT or MBEDTLS_DECRYPT.
* \param key_bitlen
The
key length to use, in bits.
* \param operation
The o
peration that the key will be used for
:
*
#
MBEDTLS_ENCRYPT or
#
MBEDTLS_DECRYPT.
*
* \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* parameter verification fails or a cipher
specific
* \returns
\c
0 on success,
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* parameter verification fails
,
or a cipher
-
specific
* error code.
*/
int
mbedtls_cipher_setkey
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
key
,
...
...
@@ -467,170 +504,176 @@ int mbedtls_cipher_setkey( mbedtls_cipher_context_t *ctx, const unsigned char *k
#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
/**
* \brief Set padding mode, for cipher modes that use padding.
* (Default: PKCS7 padding.)
* \brief This function sets the padding mode, for cipher modes
* that use padding.
*
* The default passing mode is PKCS7 padding.
*
* \param ctx generic cipher context
* \param mode padding mode
* \param ctx
The
generic cipher context
.
* \param mode
The
padding mode
.
*
* \returns 0 on success, MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
* if selected padding mode is not supported, or
* MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
* \returns
\c
0 on success,
#
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE
* if
the
selected padding mode is not supported, or
*
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if the cipher mode
* does not support padding.
*/
int
mbedtls_cipher_set_padding_mode
(
mbedtls_cipher_context_t
*
ctx
,
mbedtls_cipher_padding_t
mode
);
#endif
/* MBEDTLS_CIPHER_MODE_WITH_PADDING */
/**
* \brief Set the initialization vector (IV) or nonce
* \brief This function sets the initialization vector (IV)
* or nonce.
*
* \param ctx
generic cipher context
* \param iv
IV to use
(
or NONCE_COUNTER for CTR-mode ciphers
)
* \param iv_len
IV length for ciphers with variable-size IV
;
*
discarded by ciphers with fixed-size IV.
* \param ctx
The
generic cipher context
.
* \param iv
The
IV to use
,
or NONCE_COUNTER for CTR-mode ciphers
.
* \param iv_len
The
IV length for ciphers with variable-size IV
.
*
This parameter is
discarded by ciphers with fixed-size IV.
*
* \returns
0 on success, or MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
* \returns
\c
0 on success, or
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
*
* \note
Some ciphers do
n'
t use IVs nor
NONCE
. For these
*
ciphers, this function has no effect.
* \note Some ciphers do
no
t use IVs nor
nonce
. For these
* ciphers, this function has no effect.
*/
int
mbedtls_cipher_set_iv
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
iv
,
size_t
iv_len
);
/**
* \brief
Finish preparation of the given context
* \brief
This function resets the cipher state.
*
* \param ctx
generic cipher context
* \param ctx
The
generic cipher context
.
*
* \returns
0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
*
if parameter verification fails.
* \returns
\c
0 on success,
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA
* if parameter verification fails.
*/
int
mbedtls_cipher_reset
(
mbedtls_cipher_context_t
*
ctx
);
#if defined(MBEDTLS_GCM_C)
/**
* \brief
A
dd additional data
(
for AEAD ciphers
)
.
*
Currently o
nly supported with GCM.
*
Must be called
exactly once, after mbedtls_cipher_reset().
* \brief
This function a
dd
s
additional data for AEAD ciphers.
*
O
nly supported with GCM.
Must be called
* exactly once, after mbedtls_cipher_reset().
*
* \param ctx generic cipher context
* \param ad
A
dditional data to use.
* \param ad_len Length of ad.
* \param ctx
The
generic cipher context
.
* \param ad
The a
dditional data to use.
* \param ad_len
the
Length of
\p
ad.
*
* \return 0 on success, or a specific error code.
* \return
\c
0 on success, or a specific error code
on failure
.
*/
int
mbedtls_cipher_update_ad
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
ad
,
size_t
ad_len
);
#endif
/* MBEDTLS_GCM_C */
/**
* \brief
G
eneric cipher update function.
E
ncrypts
/decrypts
* using the given cipher context. Writes as
many block
* size
'
d blocks of data as possible to output.
Any data
* that cannot be written immediately
will
either
be added
* to the next block, or flushed when
cipher_final is
* called.
* Exception:
f
or MBEDTLS_MODE_ECB, expects single block
*
in size (e.g.
16
b
ytes for AES
)
*
* \param ctx generic cipher context
* \param input buffer holding the input data
* \param ilen length of the input data
* \param output buffer for the output data.
Should
be able to hold at
* least ilen + block_size.
Can
not be the same buffer
as
* input
!
* \param olen length of the output data,
will be fill
ed with the
* actual number of
b
ytes written.
*
* \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* \brief
The g
eneric cipher update function.
It e
ncrypts
or
*
decrypts
using the given cipher context. Writes as
*
many block-
sized blocks of data as possible to output.
*
Any data
that cannot be written immediately
is
either
*
added
to the next block, or flushed when
*
mbedtls_cipher_finish() is
called.
* Exception:
F
or MBEDTLS_MODE_ECB, expects
a
single block
*
in size. For example,
16
B
ytes for AES
.
*
* \param ctx
The
generic cipher context
.
* \param input
The
buffer holding the input data
.
* \param ilen
The
length of the input data
.
* \param output
The
buffer for the output data.
Must
be able to hold at
* least
\p
ilen + block_size.
Must
not be the same buffer
*
as
input
.
* \param olen
The
length of the output data,
to be updat
ed with the
* actual number of
B
ytes written.
*
* \returns
\c
0 on success,
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* parameter verification fails,
* MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
* unsupported mode for a cipher or a cipher
specific
*
#
MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE on an
* unsupported mode for a cipher
,
or a cipher
-
specific
* error code.
*
* \note If the underlying cipher is GCM, all calls to this
* function, except the last one before mbedtls_cipher_finish(),
* must have ilen a multiple of the block size.
* function, except the last one before
* mbedtls_cipher_finish(). Must have \p ilen as a
* multiple of the block_size.
*/
int
mbedtls_cipher_update
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
,
unsigned
char
*
output
,
size_t
*
olen
);
/**
* \brief
G
eneric cipher finali
s
ation function. If data still
* needs to be flushed from an incomplete block, data
* contained
with
in it
will be
padded
with
the size of
* the last block, and written to the output buffer.
* \brief
The g
eneric cipher finali
z
ation function. If data still
* needs to be flushed from an incomplete block,
the
data
* contained in it
is
padded
to
the size of
* the last block, and written to the
\p
output buffer.
*
* \param ctx
G
eneric cipher context
* \param output buffer to write data to. Needs block_size available.
* \param olen length of the data written to the output buffer.
* \param ctx
The g
eneric cipher context
.
* \param output
The
buffer to write data to. Needs block_size available.
* \param olen
The
length of the data written to the
\p
output buffer.
*
* \returns 0 on success, MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* \returns
\c
0 on success,
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA if
* parameter verification fails,
* MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption
*
#
MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption
* expected a full block but was not provided one,
* MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
* while decrypting or a cipher specific error code.
* #MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
* while decrypting, or a cipher-specific error code
* on failure for any other reason.
*/
int
mbedtls_cipher_finish
(
mbedtls_cipher_context_t
*
ctx
,
unsigned
char
*
output
,
size_t
*
olen
);
#if defined(MBEDTLS_GCM_C)
/**
* \brief
W
rite tag for AEAD ciphers.
*
Currently o
nly supported with GCM.
* \brief
This function w
rite
s a
tag for AEAD ciphers.
*
O
nly supported with GCM.
* Must be called after mbedtls_cipher_finish().
*
* \param ctx
G
eneric cipher context
* \param tag buffer to write the tag
* \param tag_len
L
ength of the tag to write
* \param ctx
The g
eneric cipher context
.
* \param tag
The
buffer to write the tag
to.
* \param tag_len
The l
ength of the tag to write
.
*
* \return 0 on success, or a specific error code.
* \return
\c
0 on success, or a specific error code
on failure
.
*/
int
mbedtls_cipher_write_tag
(
mbedtls_cipher_context_t
*
ctx
,
unsigned
char
*
tag
,
size_t
tag_len
);
/**
* \brief
Check
tag for AEAD ciphers.
*
Currently o
nly supported with GCM.
* \brief
This function checks the
tag for AEAD ciphers.
*
O
nly supported with GCM.
* Must be called after mbedtls_cipher_finish().
*
* \param ctx
G
eneric cipher context
* \param tag
B
uffer holding the tag
* \param tag_len
L
ength of the tag to check
* \param ctx
The g
eneric cipher context
.
* \param tag
The b
uffer holding the tag
.
* \param tag_len
The l
ength of the tag to check
.
*
* \return 0 on success, or a specific error code.
* \return
\c
0 on success, or a specific error code
on failure
.
*/
int
mbedtls_cipher_check_tag
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
tag
,
size_t
tag_len
);
#endif
/* MBEDTLS_GCM_C */
/**
* \brief Generic all-in-one encryption/decryption
* (for all ciphers except AEAD constructs).
*
* \param ctx generic cipher context
* \param iv IV to use (or NONCE_COUNTER for CTR-mode ciphers)
* \param iv_len IV length for ciphers with variable-size IV;
* discarded by ciphers with fixed-size IV.
* \param input buffer holding the input data
* \param ilen length of the input data
* \param output buffer for the output data. Should be able to hold at
* least ilen + block_size. Cannot be the same buffer as
* input!
* \param olen length of the output data, will be filled with the
* actual number of bytes written.
*
* \note Some ciphers don't use IVs nor NONCE. For these
* ciphers, use iv = NULL and iv_len = 0.
*
* \returns 0 on success, or
* MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
* MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption
* \brief The generic all-in-one encryption/decryption function,
* for all ciphers except AEAD constructs.
*
* \param ctx The generic cipher context.
* \param iv The IV to use, or NONCE_COUNTER for CTR-mode ciphers.
* \param iv_len The IV length for ciphers with variable-size IV.
* This parameter is discarded by ciphers with fixed-size
* IV.
* \param input The buffer holding the input data.
* \param ilen The length of the input data.
* \param output The buffer for the output data. Must be able to hold at
* least \p ilen + block_size. Must not be the same buffer
* as input.
* \param olen The length of the output data, to be updated with the
* actual number of Bytes written.
*
* \note Some ciphers do not use IVs nor nonce. For these
* ciphers, use \p iv = NULL and \p iv_len = 0.
*
* \returns \c 0 on success, or
* #MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
* #MBEDTLS_ERR_CIPHER_FULL_BLOCK_EXPECTED if decryption
* expected a full block but was not provided one, or
* MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
* while decrypting, or
*
a cipher specific error code
.
*
#
MBEDTLS_ERR_CIPHER_INVALID_PADDING on invalid padding
* while decrypting, or
a cipher-specific error code on
*
failure for any other reason
.
*/
int
mbedtls_cipher_crypt
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
iv
,
size_t
iv_len
,
...
...
@@ -639,26 +682,26 @@ int mbedtls_cipher_crypt( mbedtls_cipher_context_t *ctx,
#if defined(MBEDTLS_CIPHER_MODE_AEAD)
/**
* \brief
G
eneric autenticated encryption (AEAD
ciphers)
.
*
* \param ctx generic cipher context
* \param iv IV to use
(
or NONCE_COUNTER for CTR-mode ciphers
)
* \param iv_len IV length for ciphers with variable-size IV
;
* discarded by ciphers with fixed-size IV.
* \param ad
A
dditional data to authenticate.
* \param ad_len
L
ength of ad.
* \param input buffer holding the input data
* \param ilen length of the input data
* \param output buffer for the output data.
*
Should
be able to hold at least ilen.
* \param olen length of the output data,
will be fill
ed with the
* actual number of
b
ytes written.
* \param tag buffer for the authentication tag
* \param tag_len desired
tag
length
*
* \returns 0 on success, or
* MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
* a cipher
specific error code.
* \brief
The g
eneric autenticated encryption (AEAD
) function
.
*
* \param ctx
The
generic cipher context
.
* \param iv
The
IV to use
,
or NONCE_COUNTER for CTR-mode ciphers
.
* \param iv_len
The
IV length for ciphers with variable-size IV
.
*
This parameter is
discarded by ciphers with fixed-size IV.
* \param ad
The a
dditional data to authenticate.
* \param ad_len
The l
ength of
\p
ad.
* \param input
The
buffer holding the input data
.
* \param ilen
The
length of the input data
.
* \param output
The
buffer for the output data.
*
Must
be able to hold at least
\p
ilen.
* \param olen
The
length of the output data,
to be updat
ed with the
* actual number of
B
ytes written.
* \param tag
The
buffer for the authentication tag
.
* \param tag_len
The
desired length
of the authentication tag.
*
* \returns
\c
0 on success, or
*
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
* a cipher
-
specific error code.
*/
int
mbedtls_cipher_auth_encrypt
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
iv
,
size_t
iv_len
,
...
...
@@ -668,31 +711,31 @@ int mbedtls_cipher_auth_encrypt( mbedtls_cipher_context_t *ctx,
unsigned
char
*
tag
,
size_t
tag_len
);
/**
* \brief
G
eneric autenticated decryption (AEAD
ciphers)
.
*
* \param ctx generic cipher context
* \param iv IV to use
(
or NONCE_COUNTER for CTR-mode ciphers
)
* \param iv_len IV length for ciphers with variable-size IV
;
* discarded by ciphers with fixed-size IV.
* \param ad
A
dditional data to be authenticated.
* \param ad_len
L
ength of ad.
* \param input buffer holding the input data
* \param ilen length of the input data
* \param output buffer for the output data.
*
Should
be able to hold at least ilen.
* \param olen length of the output data,
will be fill
ed with the
* actual number of
b
ytes written.
* \param tag buffer holding the authentication tag
* \param tag_len length of the authentication tag
*
* \returns 0 on success, or
* MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
* MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is
n'
t authentic,
* or a cipher
specific error code.
* \brief
The g
eneric autenticated decryption (AEAD
) function
.
*
* \param ctx
The
generic cipher context
.
* \param iv
The
IV to use
,
or NONCE_COUNTER for CTR-mode ciphers
.
* \param iv_len
The
IV length for ciphers with variable-size IV
.
*
This parameter is
discarded by ciphers with fixed-size IV.
* \param ad
The a
dditional data to be authenticated.
* \param ad_len
The l
ength of
\p
ad.
* \param input
The
buffer holding the input data
.
* \param ilen
The
length of the input data
.
* \param output
The
buffer for the output data.
*
Must
be able to hold at least
\p
ilen.
* \param olen
The
length of the output data,
to be updat
ed with the
* actual number of
B
ytes written.
* \param tag
The
buffer holding the authentication tag
.
* \param tag_len
The
length of the authentication tag
.
*
* \returns
\c
0 on success, or
*
#
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA, or
*
#
MBEDTLS_ERR_CIPHER_AUTH_FAILED if data is
no
t authentic,
* or a cipher
-
specific error code
on failure for any other reason
.
*
* \note If the data is not authentic, then the output buffer
* is zeroed out to prevent the unauthentic plaintext
to
*
be
used
by mistake
, making this interface safer.
* is zeroed out to prevent the unauthentic plaintext
being
* used, making this interface safer.
*/
int
mbedtls_cipher_auth_decrypt
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
iv
,
size_t
iv_len
,
...
...
app/include/mbedtls/cipher_internal.h
View file @
c7673b02
...
...
@@ -4,7 +4,8 @@
* \brief Cipher wrappers.
*
* \author Adriaan de Jong <dejong@fox-it.com>
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/cmac.h
View file @
c7673b02
/**
* \file cmac.h
*
* \brief Cipher-based Message Authentication Code (CMAC) Mode for
* Authentication
*
* Copyright (C) 2015-2016, ARM Limited, All Rights Reserved
* \brief The Cipher-based Message Authentication Code (CMAC) Mode for
* Authentication.
*/
/*
* Copyright (C) 2015-2018, Arm Limited (or its affiliates), All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -19,8 +20,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of
m
bed TLS (https://tls.mbed.org)
* This file is part of
M
bed TLS (https://tls.mbed.org)
*/
#ifndef MBEDTLS_CMAC_H
#define MBEDTLS_CMAC_H
...
...
@@ -30,106 +32,125 @@
extern
"C"
{
#endif
#define MBEDTLS_ERR_CMAC_HW_ACCEL_FAILED -0x007A
/**< CMAC hardware accelerator failed. */
#define MBEDTLS_AES_BLOCK_SIZE 16
#define MBEDTLS_DES3_BLOCK_SIZE 8
#if defined(MBEDTLS_AES_C)
#define MBEDTLS_CIPHER_BLKSIZE_MAX 16
/* longest used by CMAC is AES */
#define MBEDTLS_CIPHER_BLKSIZE_MAX 16
/*
The
longest
block
used by CMAC is
that of
AES
.
*/
#else
#define MBEDTLS_CIPHER_BLKSIZE_MAX 8
/* longest used by CMAC is 3DES */
#define MBEDTLS_CIPHER_BLKSIZE_MAX 8
/*
The
longest
block
used by CMAC is
that of
3DES
.
*/
#endif
#if !defined(MBEDTLS_CMAC_ALT)
/**
* CMAC context structure
- Contains internal state information only
*
The
CMAC context structure
.
*/
struct
mbedtls_cmac_context_t
{
/**
I
nternal state of the CMAC algorithm */
/**
The i
nternal state of the CMAC algorithm
.
*/
unsigned
char
state
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
/** Unprocessed data - either data that was not block aligned and is still
* pending
to be
process
ed
, or the final block */
* pending process
ing
, or the final block
.
*/
unsigned
char
unprocessed_block
[
MBEDTLS_CIPHER_BLKSIZE_MAX
];
/**
L
ength of data pending
to be
process
ed
*/
/**
The l
ength of data pending process
ing.
*/
size_t
unprocessed_len
;
};
/**
* \brief Set the CMAC key and prepare to authenticate the input
* data.
* Should be called with an initialized cipher context.
*
* \param ctx Cipher context. This should be a cipher context,
* initialized to be one of the following types:
* MBEDTLS_CIPHER_AES_128_ECB, MBEDTLS_CIPHER_AES_192_ECB,
* MBEDTLS_CIPHER_AES_256_ECB or
* MBEDTLS_CIPHER_DES_EDE3_ECB.
* \param key CMAC key
* \param keybits length of the CMAC key in bits
* (must be acceptable by the cipher)
*
* \return 0 if successful, or a cipher specific error code
* \brief This function sets the CMAC key, and prepares to authenticate
* the input data.
* Must be called with an initialized cipher context.
*
* \param ctx The cipher context used for the CMAC operation, initialized
* as one of the following types:<ul>
* <li>MBEDTLS_CIPHER_AES_128_ECB</li>
* <li>MBEDTLS_CIPHER_AES_192_ECB</li>
* <li>MBEDTLS_CIPHER_AES_256_ECB</li>
* <li>MBEDTLS_CIPHER_DES_EDE3_ECB</li></ul>
* \param key The CMAC key.
* \param keybits The length of the CMAC key in bits.
* Must be supported by the cipher.
*
* \return \c 0 on success, or a cipher-specific error code.
*/
int
mbedtls_cipher_cmac_starts
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
key
,
size_t
keybits
);
/**
* \brief Generic CMAC process buffer.
* Called between mbedtls_cipher_cmac_starts() or
* mbedtls_cipher_cmac_reset() and
* mbedtls_cipher_cmac_finish().
* May be called repeatedly.
*
* \param ctx CMAC context
* \param input buffer holding the data
* \param ilen length of the input data
*
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
* verification fails.
* \brief This function feeds an input buffer into an ongoing CMAC
* computation.
*
* It is called between mbedtls_cipher_cmac_starts() or
* mbedtls_cipher_cmac_reset(), and mbedtls_cipher_cmac_finish().
* Can be called repeatedly.
*
* \param ctx The cipher context used for the CMAC operation.
* \param input The buffer holding the input data.
* \param ilen The length of the input data.
*
* \returns \c 0 on success, or #MBEDTLS_ERR_MD_BAD_INPUT_DATA
* if parameter verification fails.
*/
int
mbedtls_cipher_cmac_update
(
mbedtls_cipher_context_t
*
ctx
,
const
unsigned
char
*
input
,
size_t
ilen
);
/**
* \brief Output CMAC.
* Called after mbedtls_cipher_cmac_update().
* Usually followed by mbedtls_cipher_cmac_reset(), then
* mbedtls_cipher_cmac_starts(), or mbedtls_cipher_free().
* \brief This function finishes the CMAC operation, and writes
* the result to the output buffer.
*
* It is called after mbedtls_cipher_cmac_update().
* It can be followed by mbedtls_cipher_cmac_reset() and
* mbedtls_cipher_cmac_update(), or mbedtls_cipher_free().
*
* \param ctx
CMAC context
* \param output
Generic
CMAC checksum result
* \param ctx
The cipher context used for the CMAC operation.
* \param output
The output buffer for the
CMAC checksum result
.
*
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA
if parameter
* verification fails.
* \returns
\c
0 on success,
or #
MBEDTLS_ERR_MD_BAD_INPUT_DATA
*
if parameter
verification fails.
*/
int
mbedtls_cipher_cmac_finish
(
mbedtls_cipher_context_t
*
ctx
,
unsigned
char
*
output
);
/**
* \brief
P
repare t
o
authenticat
e a new message with the same key.
*
Called after mbedtls_cipher_cmac_finish() and before
*
mbedtls_cipher_cmac_update()
.
* \brief
This function p
repare
s
t
he
authenticat
ion of another
*
message with the same key as the previous CMAC
*
operation
.
*
* \param ctx CMAC context to be reset
* It is called after mbedtls_cipher_cmac_finish()
* and before mbedtls_cipher_cmac_update().
*
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
* verification fails.
* \param ctx The cipher context used for the CMAC operation.
*
* \returns \c 0 on success, or #MBEDTLS_ERR_MD_BAD_INPUT_DATA
* if parameter verification fails.
*/
int
mbedtls_cipher_cmac_reset
(
mbedtls_cipher_context_t
*
ctx
);
/**
* \brief Output = Generic_CMAC( cmac key, input buffer )
* \brief This function calculates the full generic CMAC
* on the input buffer with the provided key.
*
* The function allocates the context, performs the
* calculation, and frees the context.
*
* The CMAC result is calculated as
* output = generic CMAC(cmac key, input buffer).
*
* \param cipher_info message digest info
* \param key CMAC key
* \param keylen length of the CMAC key in bits
* \param input buffer holding the data
* \param ilen length of the input data
* \param output Generic CMAC-result
*
* \returns 0 on success, MBEDTLS_ERR_MD_BAD_INPUT_DATA if parameter
* verification fails.
* \param cipher_info The cipher information.
* \param key The CMAC key.
* \param keylen The length of the CMAC key in bits.
* \param input The buffer holding the input data.
* \param ilen The length of the input data.
* \param output The buffer for the generic CMAC result.
*
* \returns \c 0 on success, or #MBEDTLS_ERR_MD_BAD_INPUT_DATA
* if parameter verification fails.
*/
int
mbedtls_cipher_cmac
(
const
mbedtls_cipher_info_t
*
cipher_info
,
const
unsigned
char
*
key
,
size_t
keylen
,
...
...
@@ -138,27 +159,44 @@ int mbedtls_cipher_cmac( const mbedtls_cipher_info_t *cipher_info,
#if defined(MBEDTLS_AES_C)
/**
* \brief AES-CMAC-128-PRF
* Implementation of (AES-CMAC-PRF-128), as defined in RFC 4615
*
* \param key PRF key
* \param key_len PRF key length in bytes
* \param input buffer holding the input data
* \param in_len length of the input data in bytes
* \param output buffer holding the generated pseudorandom output (16 bytes)
*
* \return 0 if successful
* \brief This function implements the AES-CMAC-PRF-128 pseudorandom
* function, as defined in
* <em>RFC-4615: The Advanced Encryption Standard-Cipher-based
* Message Authentication Code-Pseudo-Random Function-128
* (AES-CMAC-PRF-128) Algorithm for the Internet Key
* Exchange Protocol (IKE).</em>
*
* \param key The key to use.
* \param key_len The key length in Bytes.
* \param input The buffer holding the input data.
* \param in_len The length of the input data in Bytes.
* \param output The buffer holding the generated 16 Bytes of
* pseudorandom output.
*
* \return \c 0 on success.
*/
int
mbedtls_aes_cmac_prf_128
(
const
unsigned
char
*
key
,
size_t
key_len
,
const
unsigned
char
*
input
,
size_t
in_len
,
unsigned
char
output
[
16
]
);
#endif
/* MBEDTLS_AES_C */
#ifdef __cplusplus
}
#endif
#else
/* !MBEDTLS_CMAC_ALT */
#include "cmac_alt.h"
#endif
/* !MBEDTLS_CMAC_ALT */
#ifdef __cplusplus
extern
"C"
{
#endif
#if defined(MBEDTLS_SELF_TEST) && ( defined(MBEDTLS_AES_C) || defined(MBEDTLS_DES_C) )
/**
* \brief
C
heckup routine
* \brief
The CMAC c
heckup routine
.
*
* \return
0 if
success
ful
, or
1 if the test
fail
ed
* \return
\c 0 on
success, or
\c 1 on
fail
ure.
*/
int
mbedtls_cmac_self_test
(
int
verbose
);
#endif
/* MBEDTLS_SELF_TEST && ( MBEDTLS_AES_C || MBEDTLS_DES_C ) */
...
...
app/include/mbedtls/compat-1.3.h
View file @
c7673b02
...
...
@@ -5,7 +5,8 @@
* for the PolarSSL naming conventions.
*
* \deprecated Use the new names directly instead
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
app/include/mbedtls/config.h
View file @
c7673b02
...
...
@@ -6,7 +6,8 @@
* This set of compile-time options may be used to enable
* or disable features selectively, and reduce the global
* memory footprint.
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
@@ -261,20 +262,32 @@
*
* Uncomment a macro to enable alternate implementation of the corresponding
* module.
*
* \warning MD2, MD4, MD5, ARC4, DES and SHA-1 are considered weak and their
* use constitutes a security risk. If possible, we recommend
* avoiding dependencies on them, and considering stronger message
* digests and ciphers instead.
*
*/
//#define MBEDTLS_AES_ALT
//#define MBEDTLS_ARC4_ALT
//#define MBEDTLS_BLOWFISH_ALT
//#define MBEDTLS_CAMELLIA_ALT
//#define MBEDTLS_CCM_ALT
//#define MBEDTLS_CMAC_ALT
//#define MBEDTLS_DES_ALT
//#define MBEDTLS_XTEA_ALT
//#define MBEDTLS_DHM_ALT
//#define MBEDTLS_ECJPAKE_ALT
//#define MBEDTLS_GCM_ALT
//#define MBEDTLS_MD2_ALT
//#define MBEDTLS_MD4_ALT
//#define MBEDTLS_MD5_ALT
//#define MBEDTLS_RIPEMD160_ALT
//#define MBEDTLS_RSA_ALT
//#define MBEDTLS_SHA1_ALT
//#define MBEDTLS_SHA256_ALT
//#define MBEDTLS_SHA512_ALT
//#define MBEDTLS_XTEA_ALT
/*
* When replacing the elliptic curve module, pleace consider, that it is
* implemented with two .c files:
...
...
@@ -314,6 +327,12 @@
*
* Uncomment a macro to enable alternate implementation of the corresponding
* function.
*
* \warning MD2, MD4, MD5, DES and SHA-1 are considered weak and their use
* constitutes a security risk. If possible, we recommend avoiding
* dependencies on them, and considering stronger message digests
* and ciphers instead.
*
*/
//#define MBEDTLS_MD2_PROCESS_ALT
//#define MBEDTLS_MD4_PROCESS_ALT
...
...
@@ -329,6 +348,11 @@
//#define MBEDTLS_AES_SETKEY_DEC_ALT
//#define MBEDTLS_AES_ENCRYPT_ALT
//#define MBEDTLS_AES_DECRYPT_ALT
//#define MBEDTLS_ECDH_GEN_PUBLIC_ALT
//#define MBEDTLS_ECDH_COMPUTE_SHARED_ALT
//#define MBEDTLS_ECDSA_VERIFY_ALT
//#define MBEDTLS_ECDSA_SIGN_ALT
//#define MBEDTLS_ECDSA_GENKEY_ALT
/**
* \def MBEDTLS_ECP_INTERNAL_ALT
...
...
@@ -513,6 +537,9 @@
* MBEDTLS_TLS_DHE_RSA_WITH_DES_CBC_SHA
*
* Uncomment this macro to enable weak ciphersuites
*
* \warning DES is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers instead.
*/
//#define MBEDTLS_ENABLE_WEAK_CIPHERSUITES
...
...
@@ -618,6 +645,13 @@
* MBEDTLS_TLS_DHE_PSK_WITH_CAMELLIA_128_CBC_SHA256
* MBEDTLS_TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA
* MBEDTLS_TLS_DHE_PSK_WITH_RC4_128_SHA
*
* \warning Using DHE constitutes a security risk as it
* is not possible to validate custom DH parameters.
* If possible, it is recommended users should consider
* preferring other methods of key exchange.
* See dhm.h for more details.
*
*/
#define MBEDTLS_KEY_EXCHANGE_DHE_PSK_ENABLED
...
...
@@ -717,6 +751,13 @@
* MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256
* MBEDTLS_TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA
* MBEDTLS_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA
*
* \warning Using DHE constitutes a security risk as it
* is not possible to validate custom DH parameters.
* If possible, it is recommended users should consider
* preferring other methods of key exchange.
* See dhm.h for more details.
*
*/
#define MBEDTLS_KEY_EXCHANGE_DHE_RSA_ENABLED
...
...
@@ -1155,6 +1196,13 @@
* misuse/misunderstand.
*
* Comment this to disable support for renegotiation.
*
* \note Even if this option is disabled, both client and server are aware
* of the Renegotiation Indication Extension (RFC 5746) used to
* prevent the SSL renegotiation attack (see RFC 5746 Sect. 1).
* (See \c mbedtls_ssl_conf_legacy_renegotiation for the
* configuration of this extension).
*
*/
#define MBEDTLS_SSL_RENEGOTIATION
...
...
@@ -1596,6 +1644,11 @@
* MBEDTLS_TLS_RSA_WITH_RC4_128_MD5
* MBEDTLS_TLS_RSA_PSK_WITH_RC4_128_SHA
* MBEDTLS_TLS_PSK_WITH_RC4_128_SHA
*
* \warning ARC4 is considered a weak cipher and its use constitutes a
* security risk. If possible, we recommend avoidng dependencies on
* it, and considering stronger ciphers instead.
*
*/
#define MBEDTLS_ARC4_C
...
...
@@ -1649,6 +1702,7 @@
* library/ecp.c
* library/ecdsa.c
* library/rsa.c
* library/rsa_internal.c
* library/ssl_tls.c
*
* This module is required for RSA, DHM and ECC (ECDH, ECDSA) support.
...
...
@@ -1821,6 +1875,9 @@
* MBEDTLS_TLS_PSK_WITH_3DES_EDE_CBC_SHA
*
* PEM_PARSE uses DES/3DES for decrypting encrypted keys.
*
* \warning DES is considered a weak cipher and its use constitutes a
* security risk. We recommend considering stronger ciphers instead.
*/
#define MBEDTLS_DES_C
...
...
@@ -1835,6 +1892,13 @@
*
* This module is used by the following key exchanges:
* DHE-RSA, DHE-PSK
*
* \warning Using DHE constitutes a security risk as it
* is not possible to validate custom DH parameters.
* If possible, it is recommended users should consider
* preferring other methods of key exchange.
* See dhm.h for more details.
*
*/
#define MBEDTLS_DHM_C
...
...
@@ -2000,6 +2064,11 @@
* Caller:
*
* Uncomment to enable support for (rare) MD2-signed X.509 certs.
*
* \warning MD2 is considered a weak message digest and its use constitutes a
* security risk. If possible, we recommend avoiding dependencies on
* it, and considering stronger message digests instead.
*
*/
//#define MBEDTLS_MD2_C
...
...
@@ -2012,6 +2081,11 @@
* Caller:
*
* Uncomment to enable support for (rare) MD4-signed X.509 certs.
*
* \warning MD4 is considered a weak message digest and its use constitutes a
* security risk. If possible, we recommend avoiding dependencies on
* it, and considering stronger message digests instead.
*
*/
//#define MBEDTLS_MD4_C
...
...
@@ -2025,8 +2099,15 @@
* library/pem.c
* library/ssl_tls.c
*
* This module is required for SSL/TLS and X.509.
* PEM_PARSE uses MD5 for decrypting encrypted keys.
* This module is required for SSL/TLS up to version 1.1, and for TLS 1.2
* depending on the handshake parameters. Further, it is used for checking
* MD5-signed certificates, and for PBKDF1 when decrypting PEM-encoded
* encrypted keys.
*
* \warning MD5 is considered a weak message digest and its use constitutes a
* security risk. If possible, we recommend avoiding dependencies on
* it, and considering stronger message digests instead.
*
*/
#define MBEDTLS_MD5_C
...
...
@@ -2262,6 +2343,7 @@
* Enable the RSA public-key cryptosystem.
*
* Module: library/rsa.c
* library/rsa_internal.c
* Caller: library/ssl_cli.c
* library/ssl_srv.c
* library/ssl_tls.c
...
...
@@ -2288,6 +2370,11 @@
*
* This module is required for SSL/TLS up to version 1.1, for TLS 1.2
* depending on the handshake parameters, and for SHA1-signed certificates.
*
* \warning SHA-1 is considered a weak message digest and its use constitutes
* a security risk. If possible, we recommend avoiding dependencies
* on it, and considering stronger message digests instead.
*
*/
#define MBEDTLS_SHA1_C
...
...
@@ -2676,8 +2763,13 @@
* Allow SHA-1 in the default TLS configuration for certificate signing.
* Without this build-time option, SHA-1 support must be activated explicitly
* through mbedtls_ssl_conf_cert_profile. Turning on this option is not
* recommended because of it is possible to generte SHA-1 collisions, however
* recommended because of it is possible to gener
a
te SHA-1 collisions, however
* this may be safe for legacy infrastructure where additional controls apply.
*
* \warning SHA-1 is considered a weak message digest and its use constitutes
* a security risk. If possible, we recommend avoiding dependencies
* on it, and considering stronger message digests instead.
*
*/
// #define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_CERTIFICATES
...
...
@@ -2688,7 +2780,13 @@
* The use of SHA-1 in TLS <= 1.1 and in HMAC-SHA-1 is always allowed by
* default. At the time of writing, there is no practical attack on the use
* of SHA-1 in handshake signatures, hence this option is turned on by default
* for compatibility with existing peers.
* to preserve compatibility with existing peers, but the general
* warning applies nonetheless:
*
* \warning SHA-1 is considered a weak message digest and its use constitutes
* a security risk. If possible, we recommend avoiding dependencies
* on it, and considering stronger message digests instead.
*
*/
#define MBEDTLS_TLS_DEFAULT_ALLOW_SHA1_IN_KEY_EXCHANGE
...
...
app/include/mbedtls/ctr_drbg.h
View file @
c7673b02
/**
* \file ctr_drbg.h
*
* \brief CTR_DRBG based on AES-256 (NIST SP 800-90)
* \brief CTR_DRBG is based on AES-256, as defined in <em>NIST SP 800-90A:
* Recommendation for Random Number Generation Using Deterministic
* Random Bit Generators</em>.
*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
*/
/*
* Copyright (C) 2006-2018, Arm Limited (or its affiliates), All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
...
...
@@ -18,8 +22,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
* This file is part of
m
bed TLS (https://tls.mbed.org)
* This file is part of
M
bed TLS (https://tls.mbed.org)
*/
#ifndef MBEDTLS_CTR_DRBG_H
#define MBEDTLS_CTR_DRBG_H
...
...
@@ -30,78 +35,95 @@
#endif
#define MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED -0x0034
/**< The entropy source failed. */
#define MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036
/**< T
oo many random requested in single call
. */
#define MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG -0x0038
/**<
Input too large (E
ntropy + additional
)
. */
#define MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR -0x003A
/**< Read
/
write error in file. */
#define MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG -0x0036
/**< T
he requested random buffer length is too big
. */
#define MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG -0x0038
/**<
The input (e
ntropy + additional
data) is too large
. */
#define MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR -0x003A
/**< Read
or
write error in file. */
#define MBEDTLS_CTR_DRBG_BLOCKSIZE 16
/**< Block size used by the cipher */
#define MBEDTLS_CTR_DRBG_KEYSIZE 32
/**< Key size used by the cipher */
#define MBEDTLS_CTR_DRBG_KEYBITS ( MBEDTLS_CTR_DRBG_KEYSIZE * 8 )
#define MBEDTLS_CTR_DRBG_SEEDLEN ( MBEDTLS_CTR_DRBG_KEYSIZE + MBEDTLS_CTR_DRBG_BLOCKSIZE )
/**< The seed length (counter + AES key) */
#define MBEDTLS_CTR_DRBG_BLOCKSIZE 16
/**< The block size used by the cipher. */
#define MBEDTLS_CTR_DRBG_KEYSIZE 32
/**< The key size used by the cipher. */
#define MBEDTLS_CTR_DRBG_KEYBITS ( MBEDTLS_CTR_DRBG_KEYSIZE * 8 )
/**< The key size for the DRBG operation, in bits. */
#define MBEDTLS_CTR_DRBG_SEEDLEN ( MBEDTLS_CTR_DRBG_KEYSIZE + MBEDTLS_CTR_DRBG_BLOCKSIZE )
/**< The seed length, calculated as (counter + AES key). */
/**
* \name SECTION: Module settings
*
* The configuration options you can set for this module are in this section.
* Either change them in config.h or define them on the compiler command line.
* Either change them in config.h or define them using the compiler command
* line.
* \{
*/
#if !defined(MBEDTLS_CTR_DRBG_ENTROPY_LEN)
#if defined(MBEDTLS_SHA512_C) && !defined(MBEDTLS_ENTROPY_FORCE_SHA256)
#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48
/**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */
#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 48
/**< The amount of entropy used per seed by default:
* <ul><li>48 with SHA-512.</li>
* <li>32 with SHA-256.</li></ul>
*/
#else
#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 32
/**< Amount of entropy used per seed by default (48 with SHA-512, 32 with SHA-256) */
#define MBEDTLS_CTR_DRBG_ENTROPY_LEN 32
/**< Amount of entropy used per seed by default:
* <ul><li>48 with SHA-512.</li>
* <li>32 with SHA-256.</li></ul>
*/
#endif
#endif
#if !defined(MBEDTLS_CTR_DRBG_RESEED_INTERVAL)
#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000
/**< Interval before reseed is performed by default */
#define MBEDTLS_CTR_DRBG_RESEED_INTERVAL 10000
/**< The interval before reseed is performed by default. */
#endif
#if !defined(MBEDTLS_CTR_DRBG_MAX_INPUT)
#define MBEDTLS_CTR_DRBG_MAX_INPUT 256
/**< Maximum number of additional input bytes */
#define MBEDTLS_CTR_DRBG_MAX_INPUT 256
/**< The maximum number of additional input Bytes. */
#endif
#if !defined(MBEDTLS_CTR_DRBG_MAX_REQUEST)
#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024
/**< Maximum number of requested bytes per call */
#define MBEDTLS_CTR_DRBG_MAX_REQUEST 1024
/**< The maximum number of requested Bytes per call. */
#endif
#if !defined(MBEDTLS_CTR_DRBG_MAX_SEED_INPUT)
#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384
/**< Maximum size of (re)seed buffer */
#define MBEDTLS_CTR_DRBG_MAX_SEED_INPUT 384
/**< The maximum size of seed or reseed buffer. */
#endif
/* \} name SECTION: Module settings */
#define MBEDTLS_CTR_DRBG_PR_OFF 0
/**< No prediction resistance */
#define MBEDTLS_CTR_DRBG_PR_ON 1
/**< Prediction resistance enabled */
#define MBEDTLS_CTR_DRBG_PR_OFF 0
/**< Prediction resistance is disabled. */
#define MBEDTLS_CTR_DRBG_PR_ON 1
/**< Prediction resistance is enabled. */
#ifdef __cplusplus
extern
"C"
{
#endif
/**
* \brief CTR_DRBG context structure
* \brief
The
CTR_DRBG context structure
.
*/
typedef
struct
{
unsigned
char
counter
[
16
];
/*!< counter (V) */
int
reseed_counter
;
/*!< reseed counter */
int
prediction_resistance
;
/*!< enable prediction resistance (Automatic
reseed before every random generation) */
size_t
entropy_len
;
/*!< amount of entropy grabbed on each
(re)seed */
int
reseed_interval
;
/*!< reseed interval */
mbedtls_aes_context
aes_ctx
;
/*!< AES context */
unsigned
char
counter
[
16
];
/*!< The counter (V). */
int
reseed_counter
;
/*!< The reseed counter. */
int
prediction_resistance
;
/*!< This determines whether prediction
resistance is enabled, that is
whether to systematically reseed before
each random generation. */
size_t
entropy_len
;
/*!< The amount of entropy grabbed on each
seed or reseed operation. */
int
reseed_interval
;
/*!< The reseed interval. */
mbedtls_aes_context
aes_ctx
;
/*!< The AES context. */
/*
* Callbacks (Entropy)
*/
int
(
*
f_entropy
)(
void
*
,
unsigned
char
*
,
size_t
);
/*!< The entropy callback function. */
void
*
p_entropy
;
/*!< context for the entropy function */
void
*
p_entropy
;
/*!<
The
context for the entropy function
.
*/
#if defined(MBEDTLS_THREADING_C)
mbedtls_threading_mutex_t
mutex
;
...
...
@@ -110,31 +132,32 @@ typedef struct
mbedtls_ctr_drbg_context
;
/**
* \brief
CTR_DRBG context initialization
*
Makes the context ready
for mbedtls_ctr_drbg_seed()
or
* mbedtls_ctr_drbg_free().
* \brief
This function initializes the CTR_DRBG context,
*
and prepares it
for mbedtls_ctr_drbg_seed()
*
or
mbedtls_ctr_drbg_free().
*
* \param ctx CTR_DRBG context to
be
initialize
d
* \param ctx
The
CTR_DRBG context to initialize
.
*/
void
mbedtls_ctr_drbg_init
(
mbedtls_ctr_drbg_context
*
ctx
);
/**
* \brief
CTR_DRBG initial seeding
*
Seed and setup
entropy source for future reseeds.
* \brief
This function seeds and sets up the CTR_DRBG
* entropy source for future reseeds.
*
*
N
ote
:
Personalization data can be provided in addition to the more generic
* entropy source to make this instantiation as unique as possible.
*
\n
ote Personalization data can be provided in addition to the more generic
* entropy source
,
to make this instantiation as unique as possible.
*
* \param ctx CTR_DRBG context to be seeded
* \param f_entropy Entropy callback (p_entropy, buffer to fill, buffer
* length)
* \param p_entropy Entropy context
* \param custom Personalization data (Device specific identifiers)
* (Can be NULL)
* \param len Length of personalization data
* \param ctx The CTR_DRBG context to seed.
* \param f_entropy The entropy callback, taking as arguments the
* \p p_entropy context, the buffer to fill, and the
length of the buffer.
* \param p_entropy The entropy context.
* \param custom Personalization data, that is device-specific
identifiers. Can be NULL.
* \param len The length of the personalization data.
*
* \return
0 if
success
ful
, or
* MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
* \return
\c 0 on
success, or
*
#
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
on failure.
*/
int
mbedtls_ctr_drbg_seed
(
mbedtls_ctr_drbg_context
*
ctx
,
int
(
*
f_entropy
)(
void
*
,
unsigned
char
*
,
size_t
),
...
...
@@ -143,138 +166,147 @@ int mbedtls_ctr_drbg_seed( mbedtls_ctr_drbg_context *ctx,
size_t
len
);
/**
* \brief
C
lear CTR_CRBG context data
* \brief
This function c
lear
s
CTR_CRBG context data
.
*
* \param ctx CTR_DRBG context to clear
* \param ctx
The
CTR_DRBG context to clear
.
*/
void
mbedtls_ctr_drbg_free
(
mbedtls_ctr_drbg_context
*
ctx
);
/**
* \brief Enable / disable prediction resistance (Default: Off)
* \brief This function turns prediction resistance on or off.
* The default value is off.
*
* Note: If enabled, entropy is used for ctx->entropy_len before each call!
* Only use this if you have ample supply of good entropy!
* \note If enabled, entropy is gathered at the beginning of
* every call to mbedtls_ctr_drbg_random_with_add().
* Only use this if your entropy source has sufficient
* throughput.
*
* \param ctx CTR_DRBG context
* \param resistance MBEDTLS_CTR_DRBG_PR_ON or MBEDTLS_CTR_DRBG_PR_OFF
* \param ctx
The
CTR_DRBG context
.
* \param resistance
#
MBEDTLS_CTR_DRBG_PR_ON or
#
MBEDTLS_CTR_DRBG_PR_OFF
.
*/
void
mbedtls_ctr_drbg_set_prediction_resistance
(
mbedtls_ctr_drbg_context
*
ctx
,
int
resistance
);
/**
* \brief Set the amount of entropy grabbed on each (re)seed
* (Default: MBEDTLS_CTR_DRBG_ENTROPY_LEN)
* \brief This function sets the amount of entropy grabbed on each
* seed or reseed. The default value is
* #MBEDTLS_CTR_DRBG_ENTROPY_LEN.
*
* \param ctx CTR_DRBG context
* \param len
A
mount of entropy to grab
* \param ctx
The
CTR_DRBG context
.
* \param len
The a
mount of entropy to grab
.
*/
void
mbedtls_ctr_drbg_set_entropy_len
(
mbedtls_ctr_drbg_context
*
ctx
,
size_t
len
);
/**
* \brief
S
et the reseed interval
*
(D
efault
:
MBEDTLS_CTR_DRBG_RESEED_INTERVAL
)
* \brief
This function s
et
s
the reseed interval
.
*
The d
efault
value is #
MBEDTLS_CTR_DRBG_RESEED_INTERVAL
.
*
* \param ctx CTR_DRBG context
* \param interval
R
eseed interval
* \param ctx
The
CTR_DRBG context
.
* \param interval
The r
eseed interval
.
*/
void
mbedtls_ctr_drbg_set_reseed_interval
(
mbedtls_ctr_drbg_context
*
ctx
,
int
interval
);
/**
* \brief CTR_DRBG reseeding (extracts data from entropy source)
* \brief This function reseeds the CTR_DRBG context, that is
* extracts data from the entropy source.
*
* \param ctx CTR_DRBG context
* \param additional Additional data to add to state
(
Can be NULL
)
* \param len
L
ength of additional data
* \param ctx
The
CTR_DRBG context
.
* \param additional Additional data to add to
the
state
.
Can be NULL
.
* \param len
The l
ength of
the
additional data
.
*
* \return
0
if
success
ful
, or
*
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
* \return
\c
0
on
success, or
*
#
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
on failure.
*/
int
mbedtls_ctr_drbg_reseed
(
mbedtls_ctr_drbg_context
*
ctx
,
const
unsigned
char
*
additional
,
size_t
len
);
/**
* \brief
CTR_DRBG
update state
* \brief
This function
update
s the
state
of the CTR_DRBG context.
*
* \param ctx CTR_DRBG context
* \param additional
Additional
data to update state with
* \param add_len Length of additional data
* \param ctx
The
CTR_DRBG context
.
* \param additional
The
data to update
the
state with
.
* \param add_len Length of
\p
additional data
.
*
* \note
If
add_len is greater than MBEDTLS_CTR_DRBG_MAX_SEED_INPUT,
*
only the first MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
b
ytes are used
,
*
t
he remaining
on
es are silently discarded.
* \note
If \p
add_len is greater than
#
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT,
* only the first
#
MBEDTLS_CTR_DRBG_MAX_SEED_INPUT
B
ytes are used
.
*
T
he remaining
Byt
es are silently discarded.
*/
void
mbedtls_ctr_drbg_update
(
mbedtls_ctr_drbg_context
*
ctx
,
const
unsigned
char
*
additional
,
size_t
add_len
);
/**
* \brief CTR_DRBG generate random with additional update input
* \brief This function updates a CTR_DRBG instance with additional
* data and uses it to generate random data.
*
*
N
ote
: A
utomatically reseeds if reseed
_
counter is
reach
ed.
*
\n
ote
The function a
utomatically reseeds if
the
reseed
counter is
exceed
ed.
*
* \param p_rng CTR_DRBG context
* \param output Buffer to fill
* \param output_len Length of the buffer
* \param additional Additional data to update with (Can be NULL)
* \param add_len Length of additional data
* \param p_rng The CTR_DRBG context. This must be a pointer to a
* #mbedtls_ctr_drbg_context structure.
* \param output The buffer to fill.
* \param output_len The length of the buffer.
* \param additional Additional data to update. Can be NULL.
* \param add_len The length of the additional data.
*
* \return
0
if
success
ful
, or
*
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
,
or
*
MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
* \return
\c
0
on
success, or
*
#
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or
*
#
MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
on failure.
*/
int
mbedtls_ctr_drbg_random_with_add
(
void
*
p_rng
,
unsigned
char
*
output
,
size_t
output_len
,
const
unsigned
char
*
additional
,
size_t
add_len
);
/**
* \brief
CTR_DRBG generate random
* \brief
This function uses
CTR_DRBG
to
generate random
data.
*
*
N
ote
: A
utomatically reseeds if reseed
_
counter is
reach
ed.
*
\n
ote
The function a
utomatically reseeds if
the
reseed
counter is
exceed
ed.
*
* \param p_rng CTR_DRBG context
* \param output Buffer to fill
* \param output_len Length of the buffer
* \param p_rng The CTR_DRBG context. This must be a pointer to a
* #mbedtls_ctr_drbg_context structure.
* \param output The buffer to fill.
* \param output_len The length of the buffer.
*
* \return
0 if
success
ful
, or
* MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
,
or
* MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
* \return
\c 0 on
success, or
*
#
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or
*
#
MBEDTLS_ERR_CTR_DRBG_REQUEST_TOO_BIG
on failure.
*/
int
mbedtls_ctr_drbg_random
(
void
*
p_rng
,
unsigned
char
*
output
,
size_t
output_len
);
#if defined(MBEDTLS_FS_IO)
/**
* \brief
W
rite a seed file
* \brief
This function w
rite
s
a seed file
.
*
* \param ctx CTR_DRBG context
* \param path
N
ame of the file
* \param ctx
The
CTR_DRBG context
.
* \param path
The n
ame of the file
.
*
* \return 0 if successful,
* MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error, or
* MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED
* \return \c 0 on success,
* #MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error, or
* #MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED on
* failure.
*/
int
mbedtls_ctr_drbg_write_seed_file
(
mbedtls_ctr_drbg_context
*
ctx
,
const
char
*
path
);
/**
* \brief
R
ead and update a seed file.
Seed is added to this
* instance
* \brief
This function r
ead
s
and update
s
a seed file.
The seed
*
is added to this
instance
.
*
* \param ctx CTR_DRBG context
* \param path
N
ame of the file
* \param ctx
The
CTR_DRBG context
.
* \param path
The n
ame of the file
.
*
* \return
0 if
success
ful
,
* MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error,
* MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or
* MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
* \return
\c 0 on
success,
*
#
MBEDTLS_ERR_CTR_DRBG_FILE_IO_ERROR on file error,
*
#
MBEDTLS_ERR_CTR_DRBG_ENTROPY_SOURCE_FAILED or
*
#
MBEDTLS_ERR_CTR_DRBG_INPUT_TOO_BIG
on failure.
*/
int
mbedtls_ctr_drbg_update_seed_file
(
mbedtls_ctr_drbg_context
*
ctx
,
const
char
*
path
);
#endif
/* MBEDTLS_FS_IO */
/**
* \brief
C
heckup routine
* \brief
The CTR_DRBG c
heckup routine
.
*
* \return
0 if
success
ful
, or
1 if the test
fail
ed
* \return
\c 0 on
success, or
\c 1 on
fail
ure.
*/
int
mbedtls_ctr_drbg_self_test
(
int
verbose
);
...
...
app/include/mbedtls/debug.h
View file @
c7673b02
...
...
@@ -2,7 +2,8 @@
* \file debug.h
*
* \brief Functions for controlling and providing debug output from the library.
*
*/
/*
* Copyright (C) 2006-2015, ARM Limited, All Rights Reserved
* SPDX-License-Identifier: Apache-2.0
*
...
...
Prev
1
2
3
4
5
6
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