Merge remote-tracking branch 'mbedtls/development' into mbedtls_private_with_python
Conflicts: include/mbedtls/ssl.h include/psa/crypto_struct.h Conflicts fixed by using the code from development branch and manually re-applying the MBEDTLS_PRIVATE wrapping.
This commit is contained in:
commit
c4c761e35e
113 changed files with 2628 additions and 4583 deletions
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
35
.github/ISSUE_TEMPLATE/bug_report.md
vendored
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
---
|
||||||
|
name: Bug report
|
||||||
|
about: To report a bug, please fill this form.
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Summary
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### System information
|
||||||
|
|
||||||
|
Mbed TLS version (number or commit id):
|
||||||
|
Operating system and version:
|
||||||
|
Configuration (if not default, please attach `config.h`):
|
||||||
|
Compiler and options (if you used a pre-built binary, please indicate how you obtained it):
|
||||||
|
Additional environment information:
|
||||||
|
|
||||||
|
### Expected behavior
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Actual behavior
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Steps to reproduce
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Additional information
|
||||||
|
|
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
8
.github/ISSUE_TEMPLATE/config.yml
vendored
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
blank_issues_enabled: false
|
||||||
|
contact_links:
|
||||||
|
- name: Mbed TLS security team
|
||||||
|
url: mailto:mbed-tls-security@lists.trustedfirmware.org
|
||||||
|
about: Report a security vulnerability.
|
||||||
|
- name: Mbed TLS mailing list
|
||||||
|
url: https://lists.trustedfirmware.org/mailman/listinfo/mbed-tls
|
||||||
|
about: Mbed TLS community support and general discussion.
|
17
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
17
.github/ISSUE_TEMPLATE/feature_request.md
vendored
Normal file
|
@ -0,0 +1,17 @@
|
||||||
|
---
|
||||||
|
name: Enhancement request
|
||||||
|
about: To request an enhancement, please fill this form.
|
||||||
|
title: ''
|
||||||
|
labels: ''
|
||||||
|
assignees: ''
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
### Suggested enhancement
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
### Justification
|
||||||
|
|
||||||
|
Mbed TLS needs this because
|
||||||
|
|
46
.github/issue_template.md
vendored
46
.github/issue_template.md
vendored
|
@ -1,46 +0,0 @@
|
||||||
_Note:_ this is a template, please remove the parts that are not
|
|
||||||
applicable (these initial notes, and the "Bug" section for a Feature request
|
|
||||||
and vice-versa).
|
|
||||||
|
|
||||||
**Note:** to report a security vulnerability, see
|
|
||||||
[SECURITY.md](../SECURITY.md). Please do not use github issues for
|
|
||||||
vulnerabilities.
|
|
||||||
|
|
||||||
_Note:_ to get support, see [SUPPORT.md](../SUPPORT.md). Please do not use
|
|
||||||
github issues for questions.
|
|
||||||
|
|
||||||
---------------------------------------------------------------
|
|
||||||
### Description
|
|
||||||
- Type: Bug | Enhancement / Feature Request
|
|
||||||
- Priority: Blocker | Major | Minor
|
|
||||||
|
|
||||||
---------------------------------------------------------------
|
|
||||||
## Bug
|
|
||||||
|
|
||||||
**OS**
|
|
||||||
Mbed OS|linux|windows|
|
|
||||||
|
|
||||||
**mbed TLS build:**
|
|
||||||
Version: x.x.x or git commit id
|
|
||||||
OS version: x.x.x
|
|
||||||
Configuration: please attach config.h file where possible
|
|
||||||
Compiler and options (if you used a pre-built binary, please indicate how you obtained it):
|
|
||||||
Additional environment information:
|
|
||||||
|
|
||||||
**Peer device TLS stack and version**
|
|
||||||
OpenSSL|GnuTls|Chrome|NSS(Firefox)|SecureChannel (IIS/Internet Explorer/Edge)|Other
|
|
||||||
Version:
|
|
||||||
|
|
||||||
**Expected behavior**
|
|
||||||
|
|
||||||
**Actual behavior**
|
|
||||||
|
|
||||||
**Steps to reproduce**
|
|
||||||
|
|
||||||
----------------------------------------------------------------
|
|
||||||
## Enhancement / Feature Request
|
|
||||||
|
|
||||||
**Suggested enhancement**
|
|
||||||
|
|
||||||
**Justification - why does the library need this feature?**
|
|
||||||
|
|
|
@ -28,12 +28,6 @@ jobs:
|
||||||
script:
|
script:
|
||||||
- tests/scripts/all.sh -k test_full_cmake_gcc_asan
|
- tests/scripts/all.sh -k test_full_cmake_gcc_asan
|
||||||
|
|
||||||
- name: macOS
|
|
||||||
os: osx
|
|
||||||
compiler: clang
|
|
||||||
script:
|
|
||||||
- tests/scripts/all.sh -k test_default_out_of_box
|
|
||||||
|
|
||||||
- name: Windows
|
- name: Windows
|
||||||
os: windows
|
os: windows
|
||||||
before_install:
|
before_install:
|
||||||
|
|
34
BRANCHES.md
34
BRANCHES.md
|
@ -16,9 +16,10 @@ At any point in time, we have a number of maintained branches consisting of:
|
||||||
these only get bug fixes and security fixes.
|
these only get bug fixes and security fixes.
|
||||||
|
|
||||||
We use [Semantic Versioning](https://semver.org/). In particular, we maintain
|
We use [Semantic Versioning](https://semver.org/). In particular, we maintain
|
||||||
API compatibility in the `master` branch between major version changes. We
|
API compatibility in the `master` branch across minor version changes (e.g.
|
||||||
also maintain ABI compatibility within LTS branches; see the next section for
|
the API of 3.(x+1) is backward compatible with 3.x). We only break API
|
||||||
details.
|
compatibility on major version changes (e.g. from 3.x to 4.0). We also maintain
|
||||||
|
ABI compatibility within LTS branches; see the next section for details.
|
||||||
|
|
||||||
## Backwards Compatibility
|
## Backwards Compatibility
|
||||||
|
|
||||||
|
@ -28,11 +29,28 @@ undocumented features, then you should be able to re-compile it without
|
||||||
modification with any later release x.y'.z' with the same major version
|
modification with any later release x.y'.z' with the same major version
|
||||||
number, and your code will still build, be secure, and work.
|
number, and your code will still build, be secure, and work.
|
||||||
|
|
||||||
There are rare exceptions: code that was relying on something that became
|
Note that new releases of Mbed TLS may extend the API. Here are some
|
||||||
insecure in the meantime (for example, crypto that was found to be weak) may
|
examples of changes that are common in minor releases of Mbed TLS, and are
|
||||||
need to be changed. In case security comes in conflict with backwards
|
not considered API compatibility breaks:
|
||||||
compatibility, we will put security first, but always attempt to provide a
|
|
||||||
compatibility option.
|
* Adding or reordering fields in a structure or union.
|
||||||
|
* Removing a field from a structure, unless the field is documented as public.
|
||||||
|
* Adding items to an enum.
|
||||||
|
* Returning an error code that was not previously documented for a function
|
||||||
|
when a new error condition arises.
|
||||||
|
* Changing which error code is returned in a case where multiple error
|
||||||
|
conditions apply.
|
||||||
|
* Changing the behavior of a function from failing to succeeding, when the
|
||||||
|
change is a reasonable extension of the current behavior, i.e. the
|
||||||
|
addition of a new feature.
|
||||||
|
|
||||||
|
There are rare exceptions where we break API compatibility: code that was
|
||||||
|
relying on something that became insecure in the meantime (for example,
|
||||||
|
crypto that was found to be weak) may need to be changed. In case security
|
||||||
|
comes in conflict with backwards compatibility, we will put security first,
|
||||||
|
but always attempt to provide a compatibility option.
|
||||||
|
|
||||||
|
## Long-time support branches
|
||||||
|
|
||||||
For the LTS branches, additionally we try very hard to also maintain ABI
|
For the LTS branches, additionally we try very hard to also maintain ABI
|
||||||
compatibility (same definition as API except with re-linking instead of
|
compatibility (same definition as API except with re-linking instead of
|
||||||
|
|
|
@ -16,7 +16,9 @@
|
||||||
# mbedtls, mbedx509, mbedcrypto and apidoc targets.
|
# mbedtls, mbedx509, mbedcrypto and apidoc targets.
|
||||||
#
|
#
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.12)
|
# We specify a minimum requirement of 3.10.2, but for now use 3.5.1 here
|
||||||
|
# until our infrastructure catches up.
|
||||||
|
cmake_minimum_required(VERSION 3.5.1)
|
||||||
|
|
||||||
# https://cmake.org/cmake/help/latest/policy/CMP0011.html
|
# https://cmake.org/cmake/help/latest/policy/CMP0011.html
|
||||||
# Setting this policy is required in CMake >= 3.18.0, otherwise a warning is generated. The OLD
|
# Setting this policy is required in CMake >= 3.18.0, otherwise a warning is generated. The OLD
|
||||||
|
|
5
ChangeLog.d/fix-ssl-cf-hmac-alt.txt
Normal file
5
ChangeLog.d/fix-ssl-cf-hmac-alt.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
Bugfix
|
||||||
|
* Fix a regression introduced in 2.24.0 which broke (D)TLS CBC ciphersuites
|
||||||
|
(when the encrypt-then-MAC extension is not in use) with some ALT
|
||||||
|
implementations of the underlying hash (SHA-1, SHA-256, SHA-384), causing
|
||||||
|
the affected side to wrongly reject valid messages. Fixes #4118.
|
|
@ -1,11 +1,10 @@
|
||||||
Removals
|
Removals
|
||||||
* Remove the TLS 1.0, TLS 1.1 and DTLS 1.0 support by removing the following
|
* Remove support for TLS 1.0, TLS 1.1 and DTLS 1.0, as well as support for
|
||||||
library constants: MBEDTLS_SSL_PROTO_TLS1,
|
CBC record splitting, fallback SCSV, and the ability to configure
|
||||||
MBEDTLS_SSL_PROTO_TLS1_1, MBEDTLS_SSL_CBC_RECORD_SPLITTING,
|
ciphersuites per version, which are no longer relevant. This removes the
|
||||||
MBEDTLS_SSL_CBC_RECORD_SPLITTING_ENABLED,
|
configuration options MBEDTLS_SSL_PROTO_TLS1,
|
||||||
MBEDTLS_SSL_CBC_RECORD_SPLITTING_DISABLED,
|
MBEDTLS_SSL_PROTO_TLS1_1, MBEDTLS_SSL_CBC_RECORD_SPLITTING and
|
||||||
MBEDTLS_SSL_FALLBACK_SCSV, MBEDTLS_SSL_FALLBACK_SCSV_VALUE,
|
MBEDTLS_SSL_FALLBACK_SCSV as well as the functions
|
||||||
MBEDTLS_SSL_IS_FALLBACK, MBEDTLS_SSL_IS_NOT_FALLBACK, and functions:
|
|
||||||
mbedtls_ssl_conf_cbc_record_splitting(),
|
mbedtls_ssl_conf_cbc_record_splitting(),
|
||||||
mbedtls_ssl_get_key_exchange_md_ssl_tls(), mbedtls_ssl_conf_fallback().
|
mbedtls_ssl_get_key_exchange_md_ssl_tls(), mbedtls_ssl_conf_fallback(),
|
||||||
Fixes #4286.
|
and mbedtls_ssl_conf_ciphersuites_for_version(). Fixes #4286.
|
||||||
|
|
4
ChangeLog.d/issue4313.txt
Normal file
4
ChangeLog.d/issue4313.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Removals
|
||||||
|
* Remove the following macros: MBEDTLS_CHECK_PARAMS,
|
||||||
|
MBEDTLS_CHECK_PARAMS_ASSERT, MBEDTLS_PARAM_FAILED,
|
||||||
|
MBEDTLS_PARAM_FAILED_ALT. Fixes #4313.
|
4
ChangeLog.d/issue4378.txt
Normal file
4
ChangeLog.d/issue4378.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Removals
|
||||||
|
* Remove the MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION config.h
|
||||||
|
option. The mbedtls_x509_crt_parse_der_with_ext_cb() is the way to go for
|
||||||
|
migration path. Fixes #4378.
|
4
ChangeLog.d/issue4405.txt
Normal file
4
ChangeLog.d/issue4405.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Removals
|
||||||
|
* Remove the MBEDTLS_X509_CHECK_KEY_USAGE and
|
||||||
|
MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE config.h options and let the code
|
||||||
|
behave as if they were always enabled. Fixes #4405.
|
9
ChangeLog.d/max-record-payload-api.txt
Normal file
9
ChangeLog.d/max-record-payload-api.txt
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
API changes
|
||||||
|
* Remove the SSL APIs mbedtls_ssl_get_input_max_frag_len() and
|
||||||
|
mbedtls_ssl_get_output_max_frag_len(), and add a new API
|
||||||
|
mbedtls_ssl_get_max_in_record_payload(), complementing the existing
|
||||||
|
mbedtls_ssl_get_max_out_record_payload().
|
||||||
|
Uses of mbedtls_ssl_get_input_max_frag_len() and
|
||||||
|
mbedtls_ssl_get_input_max_frag_len() should be replaced by
|
||||||
|
mbedtls_ssl_get_max_in_record_payload() and
|
||||||
|
mbedtls_ssl_get_max_out_record_payload(), respectively.
|
3
ChangeLog.d/mbed-can-do-timing.txt
Normal file
3
ChangeLog.d/mbed-can-do-timing.txt
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
Bugfix
|
||||||
|
* Remove outdated check-config.h check that prevented implementing the
|
||||||
|
timing module on Mbed OS. Fixes #4633.
|
5
ChangeLog.d/rsa-padding.txt
Normal file
5
ChangeLog.d/rsa-padding.txt
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
API changes
|
||||||
|
* mbedtls_rsa_init() now always selects the PKCS#1v1.5 encoding for an RSA
|
||||||
|
key. To use an RSA key with PSS or OAEP, call mbedtls_rsa_set_padding()
|
||||||
|
after initializing the context. mbedtls_rsa_set_padding() now returns an
|
||||||
|
error if its parameters are invalid.
|
4
ChangeLog.d/tool-versions.txt
Normal file
4
ChangeLog.d/tool-versions.txt
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
Requirement changes
|
||||||
|
* Refresh the minimum supported versions of tools to build the
|
||||||
|
library. CMake versions older than 3.10.2 and Python older
|
||||||
|
than 3.6 are no longer supported.
|
13
README.md
13
README.md
|
@ -26,7 +26,7 @@ Documentation for the Mbed TLS interfaces in the default library configuration i
|
||||||
|
|
||||||
To generate a local copy of the library documentation in HTML format, tailored to your compile-time configuration:
|
To generate a local copy of the library documentation in HTML format, tailored to your compile-time configuration:
|
||||||
|
|
||||||
1. Make sure that [Doxygen](http://www.doxygen.nl/) is installed. We use version 1.8.11 but slightly older or more recent versions should work.
|
1. Make sure that [Doxygen](http://www.doxygen.nl/) is installed.
|
||||||
1. Run `make apidoc`.
|
1. Run `make apidoc`.
|
||||||
1. Browse `apidoc/index.html` or `apidoc/modules.html`.
|
1. Browse `apidoc/index.html` or `apidoc/modules.html`.
|
||||||
|
|
||||||
|
@ -39,7 +39,7 @@ There are currently three active build systems used within Mbed TLS releases:
|
||||||
|
|
||||||
- GNU Make
|
- GNU Make
|
||||||
- CMake
|
- CMake
|
||||||
- Microsoft Visual Studio (Microsoft Visual Studio 2013 or later)
|
- Microsoft Visual Studio
|
||||||
|
|
||||||
The main systems used for development are CMake and GNU Make. Those systems are always complete and up-to-date. The others should reflect all changes present in the CMake and Make build system, although features may not be ported there automatically.
|
The main systems used for development are CMake and GNU Make. Those systems are always complete and up-to-date. The others should reflect all changes present in the CMake and Make build system, although features may not be ported there automatically.
|
||||||
|
|
||||||
|
@ -49,10 +49,13 @@ The Make and CMake build systems create three libraries: libmbedcrypto, libmbedx
|
||||||
|
|
||||||
You need the following tools to build the library with the provided makefiles:
|
You need the following tools to build the library with the provided makefiles:
|
||||||
|
|
||||||
* GNU Make or a build tool that CMake supports.
|
* GNU Make 3.82 or a build tool that CMake supports.
|
||||||
* A C99 toolchain (compiler, linker, archiver). We actively test with GCC 5.4, Clang 3.8, IAR8 and Visual Studio 2013. More recent versions should work. Slightly older versions may work.
|
* A C99 toolchain (compiler, linker, archiver). We actively test with GCC 5.4, Clang 3.8, IAR 8 and Visual Studio 2013. More recent versions should work. Slightly older versions may work.
|
||||||
* Python 3 to generate the test code, and to generate sample programs in the development branch.
|
* Python 3.6 to generate the test code, and to generate sample programs in the development branch.
|
||||||
* Perl to run the tests, and to generate some source files in the development branch.
|
* Perl to run the tests, and to generate some source files in the development branch.
|
||||||
|
* CMake 3.10.2 or later (if using CMake).
|
||||||
|
* Microsoft Visual Studio 2013 or later (if using Visual Studio).
|
||||||
|
* Doxygen 1.8.11 or later (if building the documentation; slightly older versions should work).
|
||||||
|
|
||||||
### Generated source files in the development branch
|
### Generated source files in the development branch
|
||||||
|
|
||||||
|
|
|
@ -49,8 +49,6 @@
|
||||||
#define MBEDTLS_PKCS1_V21
|
#define MBEDTLS_PKCS1_V21
|
||||||
#define MBEDTLS_SELF_TEST
|
#define MBEDTLS_SELF_TEST
|
||||||
#define MBEDTLS_VERSION_FEATURES
|
#define MBEDTLS_VERSION_FEATURES
|
||||||
#define MBEDTLS_X509_CHECK_KEY_USAGE
|
|
||||||
#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE
|
|
||||||
|
|
||||||
/* mbed TLS modules */
|
/* mbed TLS modules */
|
||||||
#define MBEDTLS_AES_C
|
#define MBEDTLS_AES_C
|
||||||
|
|
11
docs/3.0-migration-guide.d/max-record-payload-api.md
Normal file
11
docs/3.0-migration-guide.d/max-record-payload-api.md
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
Remove MaximumFragmentLength (MFL) query API
|
||||||
|
-----------------------------------------------------------------
|
||||||
|
|
||||||
|
This affects users which use the MFL query APIs
|
||||||
|
`mbedtls_ssl_get_{input,output}_max_frag_len()` to
|
||||||
|
infer upper bounds on the plaintext size of incoming and
|
||||||
|
outgoing record.
|
||||||
|
|
||||||
|
Users should switch to `mbedtls_ssl_get_max_{in,out}_record_payload()`
|
||||||
|
instead, which also provides such upper bounds but takes more factors
|
||||||
|
than just the MFL configuration into account.
|
|
@ -0,0 +1,17 @@
|
||||||
|
Remove the config option MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
||||||
|
--------------------------------------------------------------------------
|
||||||
|
|
||||||
|
This change does not affect users of the default configuration; it only affect
|
||||||
|
users who enable this option.
|
||||||
|
|
||||||
|
The X.509 standard says that implementations must reject critical extensions that
|
||||||
|
they don't recognize, and this is what Mbed TLS does by default. This option
|
||||||
|
allowed to continue parsing those certificates but didn't provide a convenient
|
||||||
|
way to handle those extensions.
|
||||||
|
|
||||||
|
The migration path from that option is to use the
|
||||||
|
`mbedtls_x509_crt_parse_der_with_ext_cb()` function which is functionally
|
||||||
|
equivalent to `mbedtls_x509_crt_parse_der()`, and/or
|
||||||
|
`mbedtls_x509_crt_parse_der_nocopy()` but it calls the callback with every
|
||||||
|
unsupported certificate extension and additionally the "certificate policies"
|
||||||
|
extension if it contains any unsupported certificate policies.
|
|
@ -0,0 +1,18 @@
|
||||||
|
Remove `MBEDTLS_X509_CHECK_*_KEY_USAGE` options from `config.h`
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
|
||||||
|
This change affects users who have chosen the configuration options to disable the
|
||||||
|
library's verification of the `keyUsage` and `extendedKeyUsage` fields of x509
|
||||||
|
certificates.
|
||||||
|
|
||||||
|
The `MBEDTLS_X509_CHECK_KEY_USAGE` and `MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE`
|
||||||
|
configuration options are removed and the X509 code now behaves as if they were
|
||||||
|
always enabled. It is consequently not possible anymore to disable at compile
|
||||||
|
time the verification of the `keyUsage` and `extendedKeyUsage` fields of X509
|
||||||
|
certificates.
|
||||||
|
|
||||||
|
The verification of the `keyUsage` and `extendedKeyUsage` fields is important,
|
||||||
|
disabling it can cause security issues and it is thus not recommended. If the
|
||||||
|
verification is for some reason undesirable, it can still be disabled by means
|
||||||
|
of the verification callback function passed to `mbedtls_x509_crt_verify()` (see
|
||||||
|
the documentation of this function for more information).
|
|
@ -50,7 +50,9 @@ The function `mbedtls_ssl_conf_dh_param()` was removed. Please use
|
||||||
`mbedtls_ssl_conf_dh_param_bin()` or `mbedtls_ssl_conf_dh_param_ctx()` instead.
|
`mbedtls_ssl_conf_dh_param_bin()` or `mbedtls_ssl_conf_dh_param_ctx()` instead.
|
||||||
|
|
||||||
The function `mbedtls_ssl_get_max_frag_len()` was removed. Please use
|
The function `mbedtls_ssl_get_max_frag_len()` was removed. Please use
|
||||||
`mbedtls_ssl_get_output_max_frag_len()` instead.
|
`mbedtls_ssl_get_max_out_record_payload()` and
|
||||||
|
`mbedtls_ssl_get_max_in_record_payload()`
|
||||||
|
instead.
|
||||||
|
|
||||||
Deprecated hex-encoded primes were removed from DHM
|
Deprecated hex-encoded primes were removed from DHM
|
||||||
---------------------------------------------------
|
---------------------------------------------------
|
||||||
|
|
|
@ -0,0 +1,33 @@
|
||||||
|
Remove MBEDTLS_CHECK_PARAMS option
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
This change does not affect users who use the default configuration; it only
|
||||||
|
affects users who enabled that option.
|
||||||
|
|
||||||
|
The option `MBEDTLS_CHECK_PARAMS` (disabled by default) enabled certain kinds
|
||||||
|
of “parameter validation”. It covered two kinds of validations:
|
||||||
|
|
||||||
|
- In some functions that require a valid pointer, “parameter validation” checks
|
||||||
|
that the pointer is non-null. With the feature disabled, a null pointer is not
|
||||||
|
treated differently from any other invalid pointer, and typically leads to a
|
||||||
|
runtime crash. 90% of the uses of the feature are of this kind.
|
||||||
|
- In some functions that take an enum-like argument, “parameter validation”
|
||||||
|
checks that the value is a valid one. With the feature disabled, an invalid
|
||||||
|
value causes a silent default to one of the valid values.
|
||||||
|
|
||||||
|
The default reaction to a failed check was to call a function
|
||||||
|
`mbedtls_param_failed()` which the application had to provide. If this function
|
||||||
|
returned, its caller returned an error `MBEDTLS_ERR_xxx_BAD_INPUT_DATA`.
|
||||||
|
|
||||||
|
This feature was only used in some classic (non-PSA) cryptography modules. It was
|
||||||
|
not used in X.509, TLS or in PSA crypto, and it was not implemented in all
|
||||||
|
classic crypto modules.
|
||||||
|
|
||||||
|
This feature has been removed. The library no longer checks for NULL pointers;
|
||||||
|
checks for enum-like arguments will be kept or re-introduced on a case-by-case
|
||||||
|
basis, but their presence will no longer be dependent on a compile-time option.
|
||||||
|
|
||||||
|
Validation of enum-like values is somewhat useful, but not extremely important,
|
||||||
|
because the parameters concerned are usually constants in applications.
|
||||||
|
|
||||||
|
For more information see issue #4313.
|
|
@ -3,9 +3,25 @@ Remove suport for TLS 1.0, 1.1 and DTLS 1.0
|
||||||
|
|
||||||
This change affects users of the TLS 1.0, 1.1 and DTLS 1.0 protocols.
|
This change affects users of the TLS 1.0, 1.1 and DTLS 1.0 protocols.
|
||||||
|
|
||||||
The versions of (D)TLS that are being removed are not as secure as the latest
|
These versions have been deprecated by RFC 8996.
|
||||||
versions. Keeping them in the library creates opportunities for misconfiguration
|
Keeping them in the library creates opportunities for misconfiguration
|
||||||
and possibly downgrade attacks. More generally, more code means a larger attack
|
and possibly downgrade attacks. More generally, more code means a larger attack
|
||||||
surface, even if the code is supposedly not used.
|
surface, even if the code is supposedly not used.
|
||||||
|
|
||||||
The migration path is to adopt the latest versions of the protocol.
|
The migration path is to adopt the latest versions of the protocol.
|
||||||
|
|
||||||
|
As a consequence of removing TLS 1.0, support for CBC record splitting was
|
||||||
|
also removed, as it was a work-around for a weakness in this particular
|
||||||
|
version. There is no migration path since the feature is no longer relevant.
|
||||||
|
|
||||||
|
As a consequence of currently supporting only one version of (D)TLS (and in the
|
||||||
|
future 1.3 which will have a different version negociation mechanism), support
|
||||||
|
for fallback SCSV (RFC 7507) was also removed. There is no migration path as
|
||||||
|
it's no longer useful with TLS 1.2 and later.
|
||||||
|
|
||||||
|
As a consequence of currently supporting only one version of (D)TLS (and in the
|
||||||
|
future 1.3 which will have a different concept of ciphersuites), support for
|
||||||
|
configuring ciphersuites separately for each version via
|
||||||
|
`mbedtls_ssl_conf_ciphersuites_for_version()` was removed. Use
|
||||||
|
`mbedtls_ssl_conf_ciphersuites()` to configure ciphersuites to use with (D)TLS
|
||||||
|
1.2; in the future a different API will be added for (D)TLS 1.3.
|
||||||
|
|
29
docs/3.0-migration-guide.d/rsa-padding.md
Normal file
29
docs/3.0-migration-guide.d/rsa-padding.md
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
Remove the padding parameters from mbedtls_rsa_init()
|
||||||
|
-----------------------------------------------------
|
||||||
|
|
||||||
|
This affects all users who use the RSA encryption, decryption, sign and
|
||||||
|
verify APIs.
|
||||||
|
|
||||||
|
The function mbedtls_rsa_init() no longer supports selecting the PKCS#1 v2.1
|
||||||
|
encoding and its hash. It just selects the PKCS#1 v1.5 encoding by default. If
|
||||||
|
you were using the PKCS#1 v2.1 encoding you now need, subsequently to the call
|
||||||
|
to mbedtls_rsa_init(), to call mbedtls_rsa_set_padding() to set it.
|
||||||
|
|
||||||
|
To choose the padding type when initializing a context, instead of
|
||||||
|
```C
|
||||||
|
mbedtls_rsa_init(ctx, padding, hash_id);
|
||||||
|
```
|
||||||
|
, use
|
||||||
|
```C
|
||||||
|
mbedtls_rsa_init(ctx);
|
||||||
|
mbedtls_rsa_set_padding(ctx, padding, hash_id);
|
||||||
|
```
|
||||||
|
|
||||||
|
To use PKCS#1 v1.5 padding, instead of
|
||||||
|
```C
|
||||||
|
mbedtls_rsa_init(ctx, MBEDTLS_RSA_PKCS_V15, <ignored>);
|
||||||
|
```
|
||||||
|
, just use
|
||||||
|
```C
|
||||||
|
mbedtls_rsa_init(ctx);
|
||||||
|
```
|
|
@ -55,9 +55,8 @@
|
||||||
#endif
|
#endif
|
||||||
#endif /* _WIN32 */
|
#endif /* _WIN32 */
|
||||||
|
|
||||||
#if defined(TARGET_LIKE_MBED) && \
|
#if defined(TARGET_LIKE_MBED) && defined(MBEDTLS_NET_C)
|
||||||
( defined(MBEDTLS_NET_C) || defined(MBEDTLS_TIMING_C) )
|
#error "The NET module is not available for mbed OS - please use the network functions provided by Mbed OS"
|
||||||
#error "The NET and TIMING modules are not available for mbed OS - please use the network and timing functions provided by mbed OS"
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_DEPRECATED_WARNING) && \
|
#if defined(MBEDTLS_DEPRECATED_WARNING) && \
|
||||||
|
@ -826,6 +825,10 @@
|
||||||
#error "MBEDTLS_SSL_PROTO_TLS1_1 (TLS v1.1 support) was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4286"
|
#error "MBEDTLS_SSL_PROTO_TLS1_1 (TLS v1.1 support) was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4286"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_CHECK_PARAMS) //no-check-names
|
||||||
|
#error "MBEDTLS_CHECK_PARAMS was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4313"
|
||||||
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_CID_PADDING_GRANULARITY) //no-check-names
|
#if defined(MBEDTLS_SSL_CID_PADDING_GRANULARITY) //no-check-names
|
||||||
#error "MBEDTLS_SSL_CID_PADDING_GRANULARITY was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4335"
|
#error "MBEDTLS_SSL_CID_PADDING_GRANULARITY was removed in Mbed TLS 3.0. See https://github.com/ARMmbed/mbedtls/issues/4335"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -255,72 +255,6 @@
|
||||||
*/
|
*/
|
||||||
//#define MBEDTLS_DEPRECATED_REMOVED
|
//#define MBEDTLS_DEPRECATED_REMOVED
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MBEDTLS_CHECK_PARAMS
|
|
||||||
*
|
|
||||||
* This configuration option controls whether the library validates more of
|
|
||||||
* the parameters passed to it.
|
|
||||||
*
|
|
||||||
* When this flag is not defined, the library only attempts to validate an
|
|
||||||
* input parameter if: (1) they may come from the outside world (such as the
|
|
||||||
* network, the filesystem, etc.) or (2) not validating them could result in
|
|
||||||
* internal memory errors such as overflowing a buffer controlled by the
|
|
||||||
* library. On the other hand, it doesn't attempt to validate parameters whose
|
|
||||||
* values are fully controlled by the application (such as pointers).
|
|
||||||
*
|
|
||||||
* When this flag is defined, the library additionally attempts to validate
|
|
||||||
* parameters that are fully controlled by the application, and should always
|
|
||||||
* be valid if the application code is fully correct and trusted.
|
|
||||||
*
|
|
||||||
* For example, when a function accepts as input a pointer to a buffer that may
|
|
||||||
* contain untrusted data, and its documentation mentions that this pointer
|
|
||||||
* must not be NULL:
|
|
||||||
* - The pointer is checked to be non-NULL only if this option is enabled.
|
|
||||||
* - The content of the buffer is always validated.
|
|
||||||
*
|
|
||||||
* When this flag is defined, if a library function receives a parameter that
|
|
||||||
* is invalid:
|
|
||||||
* 1. The function will invoke the macro MBEDTLS_PARAM_FAILED().
|
|
||||||
* 2. If MBEDTLS_PARAM_FAILED() did not terminate the program, the function
|
|
||||||
* will immediately return. If the function returns an Mbed TLS error code,
|
|
||||||
* the error code in this case is MBEDTLS_ERR_xxx_BAD_INPUT_DATA.
|
|
||||||
*
|
|
||||||
* When defining this flag, you also need to arrange a definition for
|
|
||||||
* MBEDTLS_PARAM_FAILED(). You can do this by any of the following methods:
|
|
||||||
* - By default, the library defines MBEDTLS_PARAM_FAILED() to call a
|
|
||||||
* function mbedtls_param_failed(), but the library does not define this
|
|
||||||
* function. If you do not make any other arrangements, you must provide
|
|
||||||
* the function mbedtls_param_failed() in your application.
|
|
||||||
* See `platform_util.h` for its prototype.
|
|
||||||
* - If you enable the macro #MBEDTLS_CHECK_PARAMS_ASSERT, then the
|
|
||||||
* library defines MBEDTLS_PARAM_FAILED(\c cond) to be `assert(cond)`.
|
|
||||||
* You can still supply an alternative definition of
|
|
||||||
* MBEDTLS_PARAM_FAILED(), which may call `assert`.
|
|
||||||
* - If you define a macro MBEDTLS_PARAM_FAILED() before including `config.h`
|
|
||||||
* or you uncomment the definition of MBEDTLS_PARAM_FAILED() in `config.h`,
|
|
||||||
* the library will call the macro that you defined and will not supply
|
|
||||||
* its own version. Note that if MBEDTLS_PARAM_FAILED() calls `assert`,
|
|
||||||
* you need to enable #MBEDTLS_CHECK_PARAMS_ASSERT so that library source
|
|
||||||
* files include `<assert.h>`.
|
|
||||||
*
|
|
||||||
* Uncomment to enable validation of application-controlled parameters.
|
|
||||||
*/
|
|
||||||
//#define MBEDTLS_CHECK_PARAMS
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MBEDTLS_CHECK_PARAMS_ASSERT
|
|
||||||
*
|
|
||||||
* Allow MBEDTLS_PARAM_FAILED() to call `assert`, and make it default to
|
|
||||||
* `assert`. This macro is only used if #MBEDTLS_CHECK_PARAMS is defined.
|
|
||||||
*
|
|
||||||
* If this macro is not defined, then MBEDTLS_PARAM_FAILED() defaults to
|
|
||||||
* calling a function mbedtls_param_failed(). See the documentation of
|
|
||||||
* #MBEDTLS_CHECK_PARAMS for details.
|
|
||||||
*
|
|
||||||
* Uncomment to allow MBEDTLS_PARAM_FAILED() to call `assert`.
|
|
||||||
*/
|
|
||||||
//#define MBEDTLS_CHECK_PARAMS_ASSERT
|
|
||||||
|
|
||||||
/* \} name SECTION: System support */
|
/* \} name SECTION: System support */
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -1879,18 +1813,6 @@
|
||||||
*/
|
*/
|
||||||
#define MBEDTLS_VERSION_FEATURES
|
#define MBEDTLS_VERSION_FEATURES
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
|
||||||
*
|
|
||||||
* If set, the X509 parser will not break-off when parsing an X509 certificate
|
|
||||||
* and encountering an unknown critical extension.
|
|
||||||
*
|
|
||||||
* \warning Depending on your PKI use, enabling this can be a security risk!
|
|
||||||
*
|
|
||||||
* Uncomment to prevent an error.
|
|
||||||
*/
|
|
||||||
//#define MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \def MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK
|
* \def MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK
|
||||||
*
|
*
|
||||||
|
@ -1910,33 +1832,6 @@
|
||||||
*/
|
*/
|
||||||
//#define MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK
|
//#define MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MBEDTLS_X509_CHECK_KEY_USAGE
|
|
||||||
*
|
|
||||||
* Enable verification of the keyUsage extension (CA and leaf certificates).
|
|
||||||
*
|
|
||||||
* Disabling this avoids problems with mis-issued and/or misused
|
|
||||||
* (intermediate) CA and leaf certificates.
|
|
||||||
*
|
|
||||||
* \warning Depending on your PKI use, disabling this can be a security risk!
|
|
||||||
*
|
|
||||||
* Comment to skip keyUsage checking for both CA and leaf certificates.
|
|
||||||
*/
|
|
||||||
#define MBEDTLS_X509_CHECK_KEY_USAGE
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \def MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE
|
|
||||||
*
|
|
||||||
* Enable verification of the extendedKeyUsage extension (leaf certificates).
|
|
||||||
*
|
|
||||||
* Disabling this avoids problems with mis-issued and/or misused certificates.
|
|
||||||
*
|
|
||||||
* \warning Depending on your PKI use, disabling this can be a security risk!
|
|
||||||
*
|
|
||||||
* Comment to skip extendedKeyUsage checking for certificates.
|
|
||||||
*/
|
|
||||||
#define MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \def MBEDTLS_X509_REMOVE_INFO
|
* \def MBEDTLS_X509_REMOVE_INFO
|
||||||
*
|
*
|
||||||
|
@ -3303,42 +3198,6 @@
|
||||||
//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_NV_SEED_READ_MACRO mbedtls_platform_std_nv_seed_read /**< Default nv_seed_read function to use, can be undefined */
|
||||||
//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */
|
//#define MBEDTLS_PLATFORM_NV_SEED_WRITE_MACRO mbedtls_platform_std_nv_seed_write /**< Default nv_seed_write function to use, can be undefined */
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief This macro is invoked by the library when an invalid parameter
|
|
||||||
* is detected that is only checked with #MBEDTLS_CHECK_PARAMS
|
|
||||||
* (see the documentation of that option for context).
|
|
||||||
*
|
|
||||||
* When you leave this undefined here, the library provides
|
|
||||||
* a default definition. If the macro #MBEDTLS_CHECK_PARAMS_ASSERT
|
|
||||||
* is defined, the default definition is `assert(cond)`,
|
|
||||||
* otherwise the default definition calls a function
|
|
||||||
* mbedtls_param_failed(). This function is declared in
|
|
||||||
* `platform_util.h` for the benefit of the library, but
|
|
||||||
* you need to define in your application.
|
|
||||||
*
|
|
||||||
* When you define this here, this replaces the default
|
|
||||||
* definition in platform_util.h (which no longer declares the
|
|
||||||
* function mbedtls_param_failed()) and it is your responsibility
|
|
||||||
* to make sure this macro expands to something suitable (in
|
|
||||||
* particular, that all the necessary declarations are visible
|
|
||||||
* from within the library - you can ensure that by providing
|
|
||||||
* them in this file next to the macro definition).
|
|
||||||
* If you define this macro to call `assert`, also define
|
|
||||||
* #MBEDTLS_CHECK_PARAMS_ASSERT so that library source files
|
|
||||||
* include `<assert.h>`.
|
|
||||||
*
|
|
||||||
* Note that you may define this macro to expand to nothing, in
|
|
||||||
* which case you don't have to worry about declarations or
|
|
||||||
* definitions. However, you will then be notified about invalid
|
|
||||||
* parameters only in non-void functions, and void function will
|
|
||||||
* just silently return early on invalid parameters, which
|
|
||||||
* partially negates the benefits of enabling
|
|
||||||
* #MBEDTLS_CHECK_PARAMS in the first place, so is discouraged.
|
|
||||||
*
|
|
||||||
* \param cond The expression that should evaluate to true, but doesn't.
|
|
||||||
*/
|
|
||||||
//#define MBEDTLS_PARAM_FAILED( cond ) assert( cond )
|
|
||||||
|
|
||||||
/* PSA options */
|
/* PSA options */
|
||||||
/**
|
/**
|
||||||
* Use HMAC_DRBG with the specified hash algorithm for HMAC_DRBG for the
|
* Use HMAC_DRBG with the specified hash algorithm for HMAC_DRBG for the
|
||||||
|
|
|
@ -39,78 +39,10 @@
|
||||||
extern "C" {
|
extern "C" {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS_ASSERT)
|
|
||||||
/* Allow the user to define MBEDTLS_PARAM_FAILED to something like assert
|
|
||||||
* (which is what our config.h suggests). */
|
|
||||||
#include <assert.h>
|
|
||||||
#endif /* MBEDTLS_CHECK_PARAMS_ASSERT */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PARAM_FAILED)
|
|
||||||
/** An alternative definition of MBEDTLS_PARAM_FAILED has been set in config.h.
|
|
||||||
*
|
|
||||||
* This flag can be used to check whether it is safe to assume that
|
|
||||||
* MBEDTLS_PARAM_FAILED() will expand to a call to mbedtls_param_failed().
|
|
||||||
*/
|
|
||||||
#define MBEDTLS_PARAM_FAILED_ALT
|
|
||||||
|
|
||||||
#elif defined(MBEDTLS_CHECK_PARAMS_ASSERT)
|
|
||||||
#define MBEDTLS_PARAM_FAILED( cond ) assert( cond )
|
|
||||||
#define MBEDTLS_PARAM_FAILED_ALT
|
|
||||||
|
|
||||||
#else /* MBEDTLS_PARAM_FAILED */
|
|
||||||
#define MBEDTLS_PARAM_FAILED( cond ) \
|
|
||||||
mbedtls_param_failed( #cond, __FILE__, __LINE__ )
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief User supplied callback function for parameter validation failure.
|
|
||||||
* See #MBEDTLS_CHECK_PARAMS for context.
|
|
||||||
*
|
|
||||||
* This function will be called unless an alternative treatement
|
|
||||||
* is defined through the #MBEDTLS_PARAM_FAILED macro.
|
|
||||||
*
|
|
||||||
* This function can return, and the operation will be aborted, or
|
|
||||||
* alternatively, through use of setjmp()/longjmp() can resume
|
|
||||||
* execution in the application code.
|
|
||||||
*
|
|
||||||
* \param failure_condition The assertion that didn't hold.
|
|
||||||
* \param file The file where the assertion failed.
|
|
||||||
* \param line The line in the file where the assertion failed.
|
|
||||||
*/
|
|
||||||
void mbedtls_param_failed( const char *failure_condition,
|
|
||||||
const char *file,
|
|
||||||
int line );
|
|
||||||
#endif /* MBEDTLS_PARAM_FAILED */
|
|
||||||
|
|
||||||
/* Internal macro meant to be called only from within the library. */
|
|
||||||
#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) \
|
|
||||||
do { \
|
|
||||||
if( !(cond) ) \
|
|
||||||
{ \
|
|
||||||
MBEDTLS_PARAM_FAILED( cond ); \
|
|
||||||
return( ret ); \
|
|
||||||
} \
|
|
||||||
} while( 0 )
|
|
||||||
|
|
||||||
/* Internal macro meant to be called only from within the library. */
|
|
||||||
#define MBEDTLS_INTERNAL_VALIDATE( cond ) \
|
|
||||||
do { \
|
|
||||||
if( !(cond) ) \
|
|
||||||
{ \
|
|
||||||
MBEDTLS_PARAM_FAILED( cond ); \
|
|
||||||
return; \
|
|
||||||
} \
|
|
||||||
} while( 0 )
|
|
||||||
|
|
||||||
#else /* MBEDTLS_CHECK_PARAMS */
|
|
||||||
|
|
||||||
/* Internal macros meant to be called only from within the library. */
|
/* Internal macros meant to be called only from within the library. */
|
||||||
#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 )
|
#define MBEDTLS_INTERNAL_VALIDATE_RET( cond, ret ) do { } while( 0 )
|
||||||
#define MBEDTLS_INTERNAL_VALIDATE( cond ) do { } while( 0 )
|
#define MBEDTLS_INTERNAL_VALIDATE( cond ) do { } while( 0 )
|
||||||
|
|
||||||
#endif /* MBEDTLS_CHECK_PARAMS */
|
|
||||||
|
|
||||||
/* Internal helper macros for deprecating API constants. */
|
/* Internal helper macros for deprecating API constants. */
|
||||||
#if !defined(MBEDTLS_DEPRECATED_REMOVED)
|
#if !defined(MBEDTLS_DEPRECATED_REMOVED)
|
||||||
#if defined(MBEDTLS_DEPRECATED_WARNING)
|
#if defined(MBEDTLS_DEPRECATED_WARNING)
|
||||||
|
|
|
@ -131,33 +131,51 @@ mbedtls_rsa_context;
|
||||||
/**
|
/**
|
||||||
* \brief This function initializes an RSA context.
|
* \brief This function initializes an RSA context.
|
||||||
*
|
*
|
||||||
|
* \note This function initializes the padding and the hash
|
||||||
|
* identifier to respectively #MBEDTLS_RSA_PKCS_V15 and
|
||||||
|
* #MBEDTLS_MD_NONE. See mbedtls_rsa_set_padding() for more
|
||||||
|
* information about those parameters.
|
||||||
|
*
|
||||||
|
* \param ctx The RSA context to initialize. This must not be \c NULL.
|
||||||
|
*/
|
||||||
|
void mbedtls_rsa_init( mbedtls_rsa_context *ctx );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief This function sets padding for an already initialized RSA
|
||||||
|
* context.
|
||||||
|
*
|
||||||
* \note Set padding to #MBEDTLS_RSA_PKCS_V21 for the RSAES-OAEP
|
* \note Set padding to #MBEDTLS_RSA_PKCS_V21 for the RSAES-OAEP
|
||||||
* encryption scheme and the RSASSA-PSS signature scheme.
|
* encryption scheme and the RSASSA-PSS signature scheme.
|
||||||
*
|
*
|
||||||
* \note The \p hash_id parameter is ignored when using
|
* \note The \p hash_id parameter is ignored when using
|
||||||
* #MBEDTLS_RSA_PKCS_V15 padding.
|
* #MBEDTLS_RSA_PKCS_V15 padding.
|
||||||
*
|
*
|
||||||
* \note The choice of padding mode is strictly enforced for private key
|
* \note The choice of padding mode is strictly enforced for private
|
||||||
* operations, since there might be security concerns in
|
* key operations, since there might be security concerns in
|
||||||
* mixing padding modes. For public key operations it is
|
* mixing padding modes. For public key operations it is
|
||||||
* a default value, which can be overridden by calling specific
|
* a default value, which can be overridden by calling specific
|
||||||
* \c rsa_rsaes_xxx or \c rsa_rsassa_xxx functions.
|
* \c mbedtls_rsa_rsaes_xxx or \c mbedtls_rsa_rsassa_xxx
|
||||||
|
* functions.
|
||||||
*
|
*
|
||||||
* \note The hash selected in \p hash_id is always used for OEAP
|
* \note The hash selected in \p hash_id is always used for OEAP
|
||||||
* encryption. For PSS signatures, it is always used for
|
* encryption. For PSS signatures, it is always used for
|
||||||
* making signatures, but can be overridden for verifying them.
|
* making signatures, but can be overridden for verifying them.
|
||||||
* If set to #MBEDTLS_MD_NONE, it is always overridden.
|
* If set to #MBEDTLS_MD_NONE, it is always overridden.
|
||||||
*
|
*
|
||||||
* \param ctx The RSA context to initialize. This must not be \c NULL.
|
* \param ctx The initialized RSA context to be configured.
|
||||||
* \param padding The padding mode to use. This must be either
|
* \param padding The padding mode to use. This must be either
|
||||||
* #MBEDTLS_RSA_PKCS_V15 or #MBEDTLS_RSA_PKCS_V21.
|
* #MBEDTLS_RSA_PKCS_V15 or #MBEDTLS_RSA_PKCS_V21.
|
||||||
* \param hash_id The hash identifier of ::mbedtls_md_type_t type, if
|
* \param hash_id The hash identifier for PSS or OAEP, if \p padding is
|
||||||
* \p padding is #MBEDTLS_RSA_PKCS_V21. It is unused
|
* #MBEDTLS_RSA_PKCS_V21. #MBEDTLS_MD_NONE is accepted by this
|
||||||
* otherwise.
|
* function but may be not suitable for some operations.
|
||||||
|
* Ignored if \p padding is #MBEDTLS_RSA_PKCS_V15.
|
||||||
|
*
|
||||||
|
* \return \c 0 on success.
|
||||||
|
* \return #MBEDTLS_ERR_RSA_INVALID_PADDING failure:
|
||||||
|
* \p padding or \p hash_id is invalid.
|
||||||
*/
|
*/
|
||||||
void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
|
int mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
|
||||||
int padding,
|
mbedtls_md_type_t hash_id );
|
||||||
int hash_id );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function imports a set of core parameters into an
|
* \brief This function imports a set of core parameters into an
|
||||||
|
@ -388,18 +406,6 @@ int mbedtls_rsa_export_raw( const mbedtls_rsa_context *ctx,
|
||||||
int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
|
int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
|
||||||
mbedtls_mpi *DP, mbedtls_mpi *DQ, mbedtls_mpi *QP );
|
mbedtls_mpi *DP, mbedtls_mpi *DQ, mbedtls_mpi *QP );
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief This function sets padding for an already initialized RSA
|
|
||||||
* context. See mbedtls_rsa_init() for details.
|
|
||||||
*
|
|
||||||
* \param ctx The initialized RSA context to be configured.
|
|
||||||
* \param padding The padding mode to use. This must be either
|
|
||||||
* #MBEDTLS_RSA_PKCS_V15 or #MBEDTLS_RSA_PKCS_V21.
|
|
||||||
* \param hash_id The #MBEDTLS_RSA_PKCS_V21 hash identifier.
|
|
||||||
*/
|
|
||||||
void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
|
|
||||||
int hash_id );
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief This function retrieves the length of RSA modulus in Bytes.
|
* \brief This function retrieves the length of RSA modulus in Bytes.
|
||||||
*
|
*
|
||||||
|
|
|
@ -126,14 +126,10 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* These are the high an low bytes of ProtocolVersion as defined by:
|
/* These are the high an low bytes of ProtocolVersion as defined by:
|
||||||
* - RFC 2246: ProtocolVersion version = { 3, 1 }; // TLS v1.0
|
|
||||||
* - RFC 4346: ProtocolVersion version = { 3, 2 }; // TLS v1.1
|
|
||||||
* - RFC 5246: ProtocolVersion version = { 3, 3 }; // TLS v1.2
|
* - RFC 5246: ProtocolVersion version = { 3, 3 }; // TLS v1.2
|
||||||
* - RFC 8446: see section 4.2.1
|
* - RFC 8446: see section 4.2.1
|
||||||
*/
|
*/
|
||||||
#define MBEDTLS_SSL_MAJOR_VERSION_3 3
|
#define MBEDTLS_SSL_MAJOR_VERSION_3 3
|
||||||
#define MBEDTLS_SSL_MINOR_VERSION_1 1 /*!< TLS v1.0 deprecated */
|
|
||||||
#define MBEDTLS_SSL_MINOR_VERSION_2 2 /*!< TLS v1.1 deprecated */
|
|
||||||
#define MBEDTLS_SSL_MINOR_VERSION_3 3 /*!< TLS v1.2 */
|
#define MBEDTLS_SSL_MINOR_VERSION_3 3 /*!< TLS v1.2 */
|
||||||
#define MBEDTLS_SSL_MINOR_VERSION_4 4 /*!< TLS v1.3 (experimental) */
|
#define MBEDTLS_SSL_MINOR_VERSION_4 4 /*!< TLS v1.3 (experimental) */
|
||||||
|
|
||||||
|
@ -977,10 +973,8 @@ struct mbedtls_ssl_config
|
||||||
* Pointers
|
* Pointers
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Allowed ciphersuites per version. To access list's elements, please use
|
/** Allowed ciphersuites for (D)TLS 1.2 (0-terminated) */
|
||||||
* \c mbedtls_ssl_get_protocol_version_ciphersuites
|
const int *MBEDTLS_PRIVATE(ciphersuite_list);
|
||||||
*/
|
|
||||||
const int *MBEDTLS_PRIVATE(ciphersuite_list)[3];
|
|
||||||
|
|
||||||
/** Callback for printing debug output */
|
/** Callback for printing debug output */
|
||||||
void (*MBEDTLS_PRIVATE(f_dbg))(void *, int, const char *, int, const char *);
|
void (*MBEDTLS_PRIVATE(f_dbg))(void *, int, const char *, int, const char *);
|
||||||
|
@ -2509,17 +2503,6 @@ const mbedtls_ssl_session *mbedtls_ssl_get_session_pointer( const mbedtls_ssl_co
|
||||||
void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf,
|
void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf,
|
||||||
const int *ciphersuites );
|
const int *ciphersuites );
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Get ciphersuite for given protocol's minor version.
|
|
||||||
*
|
|
||||||
* \param conf The SSL configuration.
|
|
||||||
* \param prot_version Protocol version. One of MBEDTLS_SSL_MINOR_VERSION_x macros.
|
|
||||||
* \return Ciphersuites pointer if successful.
|
|
||||||
* \return \c NULL if no ciphersuites where found.
|
|
||||||
*/
|
|
||||||
const int *mbedtls_ssl_get_protocol_version_ciphersuites(
|
|
||||||
const mbedtls_ssl_config *conf, int prot_version );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
|
#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
|
||||||
#define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0
|
#define MBEDTLS_SSL_UNEXPECTED_CID_IGNORE 0
|
||||||
#define MBEDTLS_SSL_UNEXPECTED_CID_FAIL 1
|
#define MBEDTLS_SSL_UNEXPECTED_CID_FAIL 1
|
||||||
|
@ -2559,27 +2542,6 @@ int mbedtls_ssl_conf_cid( mbedtls_ssl_config *conf, size_t len,
|
||||||
int ignore_other_cids );
|
int ignore_other_cids );
|
||||||
#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
|
#endif /* MBEDTLS_SSL_DTLS_CONNECTION_ID */
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Set the list of allowed ciphersuites and the
|
|
||||||
* preference order for a specific version of the protocol.
|
|
||||||
* (Only useful on the server side)
|
|
||||||
*
|
|
||||||
* The ciphersuites array is not copied, and must remain
|
|
||||||
* valid for the lifetime of the ssl_config.
|
|
||||||
*
|
|
||||||
* \param conf SSL configuration
|
|
||||||
* \param ciphersuites 0-terminated list of allowed ciphersuites
|
|
||||||
* \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3
|
|
||||||
* supported)
|
|
||||||
* \param minor Minor version number (only MBEDTLS_SSL_MINOR_VERSION_3
|
|
||||||
* supported)
|
|
||||||
*
|
|
||||||
* \note With DTLS, use MBEDTLS_SSL_MINOR_VERSION_3 for DTLS 1.2
|
|
||||||
*/
|
|
||||||
void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf,
|
|
||||||
const int *ciphersuites,
|
|
||||||
int major, int minor );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
/**
|
/**
|
||||||
* \brief Set the X.509 security profile used for verification
|
* \brief Set the X.509 security profile used for verification
|
||||||
|
@ -3230,8 +3192,7 @@ void mbedtls_ssl_get_dtls_srtp_negotiation_result( const mbedtls_ssl_context *ss
|
||||||
*
|
*
|
||||||
* \param conf SSL configuration
|
* \param conf SSL configuration
|
||||||
* \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
|
* \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
|
||||||
* \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_1 and MBEDTLS_SSL_MINOR_VERSION_2,
|
* \param minor Minor version number (only MBEDTLS_SSL_MINOR_VERSION_3 supported)
|
||||||
* MBEDTLS_SSL_MINOR_VERSION_3 supported)
|
|
||||||
*/
|
*/
|
||||||
void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor );
|
void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int minor );
|
||||||
|
|
||||||
|
@ -3246,9 +3207,7 @@ void mbedtls_ssl_conf_max_version( mbedtls_ssl_config *conf, int major, int mino
|
||||||
*
|
*
|
||||||
* \param conf SSL configuration
|
* \param conf SSL configuration
|
||||||
* \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
|
* \param major Major version number (only MBEDTLS_SSL_MAJOR_VERSION_3 supported)
|
||||||
* \param minor Minor version number (MBEDTLS_SSL_MINOR_VERSION_1,
|
* \param minor Minor version number (only MBEDTLS_SSL_MINOR_VERSION_3 supported)
|
||||||
* MBEDTLS_SSL_MINOR_VERSION_2,
|
|
||||||
* MBEDTLS_SSL_MINOR_VERSION_3 supported)
|
|
||||||
*/
|
*/
|
||||||
void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor );
|
void mbedtls_ssl_conf_min_version( mbedtls_ssl_config *conf, int major, int minor );
|
||||||
|
|
||||||
|
@ -3578,45 +3537,15 @@ const char *mbedtls_ssl_get_version( const mbedtls_ssl_context *ssl );
|
||||||
*/
|
*/
|
||||||
int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl );
|
int mbedtls_ssl_get_record_expansion( const mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
|
||||||
/**
|
|
||||||
* \brief Return the maximum fragment length (payload, in bytes) for
|
|
||||||
* the output buffer. For the client, this is the configured
|
|
||||||
* value. For the server, it is the minimum of two - the
|
|
||||||
* configured value and the negotiated one.
|
|
||||||
*
|
|
||||||
* \sa mbedtls_ssl_conf_max_frag_len()
|
|
||||||
* \sa mbedtls_ssl_get_max_record_payload()
|
|
||||||
*
|
|
||||||
* \param ssl SSL context
|
|
||||||
*
|
|
||||||
* \return Current maximum fragment length for the output buffer.
|
|
||||||
*/
|
|
||||||
size_t mbedtls_ssl_get_output_max_frag_len( const mbedtls_ssl_context *ssl );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Return the maximum fragment length (payload, in bytes) for
|
|
||||||
* the input buffer. This is the negotiated maximum fragment
|
|
||||||
* length, or, if there is none, MBEDTLS_SSL_IN_CONTENT_LEN.
|
|
||||||
* If it is not defined either, the value is 2^14. This function
|
|
||||||
* works as its predecessor, \c mbedtls_ssl_get_max_frag_len().
|
|
||||||
*
|
|
||||||
* \sa mbedtls_ssl_conf_max_frag_len()
|
|
||||||
* \sa mbedtls_ssl_get_max_record_payload()
|
|
||||||
*
|
|
||||||
* \param ssl SSL context
|
|
||||||
*
|
|
||||||
* \return Current maximum fragment length for the output buffer.
|
|
||||||
*/
|
|
||||||
size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl );
|
|
||||||
#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Return the current maximum outgoing record payload in bytes.
|
* \brief Return the current maximum outgoing record payload in bytes.
|
||||||
* This takes into account the config.h setting \c
|
*
|
||||||
* MBEDTLS_SSL_OUT_CONTENT_LEN, the configured and negotiated
|
* \note The logic to determine the maximum outgoing record payload is
|
||||||
* max fragment length extension if used, and for DTLS the
|
* version-specific. It takes into account various factors, such as
|
||||||
* path MTU as configured and current record expansion.
|
* the config.h setting \c MBEDTLS_SSL_OUT_CONTENT_LEN, extensions
|
||||||
|
* such as the max fragment length or record size limit extension if
|
||||||
|
* used, and for DTLS the path MTU as configured and current
|
||||||
|
* record expansion.
|
||||||
*
|
*
|
||||||
* \note With DTLS, \c mbedtls_ssl_write() will return an error if
|
* \note With DTLS, \c mbedtls_ssl_write() will return an error if
|
||||||
* called with a larger length value.
|
* called with a larger length value.
|
||||||
|
@ -3625,9 +3554,7 @@ size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl );
|
||||||
* to the caller to call \c mbedtls_ssl_write() again in
|
* to the caller to call \c mbedtls_ssl_write() again in
|
||||||
* order to send the remaining bytes if any.
|
* order to send the remaining bytes if any.
|
||||||
*
|
*
|
||||||
* \sa mbedtls_ssl_set_mtu()
|
* \sa mbedtls_ssl_get_max_out_record_payload()
|
||||||
* \sa mbedtls_ssl_get_output_max_frag_len()
|
|
||||||
* \sa mbedtls_ssl_get_input_max_frag_len()
|
|
||||||
* \sa mbedtls_ssl_get_record_expansion()
|
* \sa mbedtls_ssl_get_record_expansion()
|
||||||
*
|
*
|
||||||
* \param ssl SSL context
|
* \param ssl SSL context
|
||||||
|
@ -3637,6 +3564,26 @@ size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl );
|
||||||
*/
|
*/
|
||||||
int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl );
|
int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Return the current maximum incoming record payload in bytes.
|
||||||
|
*
|
||||||
|
* \note The logic to determine the maximum outgoing record payload is
|
||||||
|
* version-specific. It takes into account various factors, such as
|
||||||
|
* the config.h setting \c MBEDTLS_SSL_IN_CONTENT_LEN, extensions
|
||||||
|
* such as the max fragment length extension or record size limit
|
||||||
|
* extension if used, and the current record expansion.
|
||||||
|
*
|
||||||
|
* \sa mbedtls_ssl_set_mtu()
|
||||||
|
* \sa mbedtls_ssl_get_max_in_record_payload()
|
||||||
|
* \sa mbedtls_ssl_get_record_expansion()
|
||||||
|
*
|
||||||
|
* \param ssl SSL context
|
||||||
|
*
|
||||||
|
* \return Current maximum payload for an outgoing record,
|
||||||
|
* or a negative error code.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_get_max_in_record_payload( const mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
/**
|
/**
|
||||||
* \brief Return the peer certificate from the current connection.
|
* \brief Return the peer certificate from the current connection.
|
||||||
|
@ -3935,7 +3882,7 @@ int mbedtls_ssl_read( mbedtls_ssl_context *ssl, unsigned char *buf, size_t len )
|
||||||
* or negotiated with the peer), then:
|
* or negotiated with the peer), then:
|
||||||
* - with TLS, less bytes than requested are written.
|
* - with TLS, less bytes than requested are written.
|
||||||
* - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned.
|
* - with DTLS, MBEDTLS_ERR_SSL_BAD_INPUT_DATA is returned.
|
||||||
* \c mbedtls_ssl_get_output_max_frag_len() may be used to
|
* \c mbedtls_ssl_get_max_out_record_payload() may be used to
|
||||||
* query the active maximum fragment length.
|
* query the active maximum fragment length.
|
||||||
*
|
*
|
||||||
* \note Attempting to write 0 bytes will result in an empty TLS
|
* \note Attempting to write 0 bytes will result in an empty TLS
|
||||||
|
|
|
@ -828,7 +828,6 @@ int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *crt,
|
||||||
|
|
||||||
#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */
|
#endif /* MBEDTLS_X509_TRUSTED_CERTIFICATE_CALLBACK */
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
/**
|
/**
|
||||||
* \brief Check usage of certificate against keyUsage extension.
|
* \brief Check usage of certificate against keyUsage extension.
|
||||||
*
|
*
|
||||||
|
@ -852,9 +851,7 @@ int mbedtls_x509_crt_verify_with_ca_cb( mbedtls_x509_crt *crt,
|
||||||
*/
|
*/
|
||||||
int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
||||||
unsigned int usage );
|
unsigned int usage );
|
||||||
#endif /* MBEDTLS_X509_CHECK_KEY_USAGE) */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)
|
|
||||||
/**
|
/**
|
||||||
* \brief Check usage of certificate against extendedKeyUsage.
|
* \brief Check usage of certificate against extendedKeyUsage.
|
||||||
*
|
*
|
||||||
|
@ -871,7 +868,6 @@ int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
||||||
int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt,
|
int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt,
|
||||||
const char *usage_oid,
|
const char *usage_oid,
|
||||||
size_t usage_len );
|
size_t usage_len );
|
||||||
#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRL_PARSE_C)
|
#if defined(MBEDTLS_X509_CRL_PARSE_C)
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -112,12 +112,6 @@ psa_status_t psa_crypto_init(void);
|
||||||
* This macro returns a suitable initializer for a key attribute structure
|
* This macro returns a suitable initializer for a key attribute structure
|
||||||
* of type #psa_key_attributes_t.
|
* of type #psa_key_attributes_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_KEY_ATTRIBUTES_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for a key attributes structure.
|
/** Return an initial value for a key attributes structure.
|
||||||
*/
|
*/
|
||||||
|
@ -938,8 +932,8 @@ psa_status_t psa_hash_compare(psa_algorithm_t alg,
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* This is an implementation-defined \c struct. Applications should not
|
* This is an implementation-defined \c struct. Applications should not
|
||||||
* make any assumptions about the content of this structure except
|
* make any assumptions about the content of this structure.
|
||||||
* as directed by the documentation of a specific implementation. */
|
* Implementation details can change in future versions without notice. */
|
||||||
typedef struct psa_hash_operation_s psa_hash_operation_t;
|
typedef struct psa_hash_operation_s psa_hash_operation_t;
|
||||||
|
|
||||||
/** \def PSA_HASH_OPERATION_INIT
|
/** \def PSA_HASH_OPERATION_INIT
|
||||||
|
@ -947,12 +941,6 @@ typedef struct psa_hash_operation_s psa_hash_operation_t;
|
||||||
* This macro returns a suitable initializer for a hash operation object
|
* This macro returns a suitable initializer for a hash operation object
|
||||||
* of type #psa_hash_operation_t.
|
* of type #psa_hash_operation_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_HASH_OPERATION_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for a hash operation object.
|
/** Return an initial value for a hash operation object.
|
||||||
*/
|
*/
|
||||||
|
@ -1307,9 +1295,10 @@ psa_status_t psa_mac_verify(mbedtls_svc_key_id_t key,
|
||||||
* operation = psa_mac_operation_init();
|
* operation = psa_mac_operation_init();
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
|
*
|
||||||
* This is an implementation-defined \c struct. Applications should not
|
* This is an implementation-defined \c struct. Applications should not
|
||||||
* make any assumptions about the content of this structure except
|
* make any assumptions about the content of this structure.
|
||||||
* as directed by the documentation of a specific implementation. */
|
* Implementation details can change in future versions without notice. */
|
||||||
typedef struct psa_mac_operation_s psa_mac_operation_t;
|
typedef struct psa_mac_operation_s psa_mac_operation_t;
|
||||||
|
|
||||||
/** \def PSA_MAC_OPERATION_INIT
|
/** \def PSA_MAC_OPERATION_INIT
|
||||||
|
@ -1317,12 +1306,6 @@ typedef struct psa_mac_operation_s psa_mac_operation_t;
|
||||||
* This macro returns a suitable initializer for a MAC operation object of type
|
* This macro returns a suitable initializer for a MAC operation object of type
|
||||||
* #psa_mac_operation_t.
|
* #psa_mac_operation_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_MAC_OPERATION_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for a MAC operation object.
|
/** Return an initial value for a MAC operation object.
|
||||||
*/
|
*/
|
||||||
|
@ -1732,8 +1715,8 @@ psa_status_t psa_cipher_decrypt(mbedtls_svc_key_id_t key,
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* This is an implementation-defined \c struct. Applications should not
|
* This is an implementation-defined \c struct. Applications should not
|
||||||
* make any assumptions about the content of this structure except
|
* make any assumptions about the content of this structure.
|
||||||
* as directed by the documentation of a specific implementation. */
|
* Implementation details can change in future versions without notice. */
|
||||||
typedef struct psa_cipher_operation_s psa_cipher_operation_t;
|
typedef struct psa_cipher_operation_s psa_cipher_operation_t;
|
||||||
|
|
||||||
/** \def PSA_CIPHER_OPERATION_INIT
|
/** \def PSA_CIPHER_OPERATION_INIT
|
||||||
|
@ -1741,12 +1724,6 @@ typedef struct psa_cipher_operation_s psa_cipher_operation_t;
|
||||||
* This macro returns a suitable initializer for a cipher operation object of
|
* This macro returns a suitable initializer for a cipher operation object of
|
||||||
* type #psa_cipher_operation_t.
|
* type #psa_cipher_operation_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_CIPHER_OPERATION_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for a cipher operation object.
|
/** Return an initial value for a cipher operation object.
|
||||||
*/
|
*/
|
||||||
|
@ -2261,8 +2238,8 @@ psa_status_t psa_aead_decrypt(mbedtls_svc_key_id_t key,
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* This is an implementation-defined \c struct. Applications should not
|
* This is an implementation-defined \c struct. Applications should not
|
||||||
* make any assumptions about the content of this structure except
|
* make any assumptions about the content of this structure.
|
||||||
* as directed by the documentation of a specific implementation. */
|
* Implementation details can change in future versions without notice. */
|
||||||
typedef struct psa_aead_operation_s psa_aead_operation_t;
|
typedef struct psa_aead_operation_s psa_aead_operation_t;
|
||||||
|
|
||||||
/** \def PSA_AEAD_OPERATION_INIT
|
/** \def PSA_AEAD_OPERATION_INIT
|
||||||
|
@ -2270,12 +2247,6 @@ typedef struct psa_aead_operation_s psa_aead_operation_t;
|
||||||
* This macro returns a suitable initializer for an AEAD operation object of
|
* This macro returns a suitable initializer for an AEAD operation object of
|
||||||
* type #psa_aead_operation_t.
|
* type #psa_aead_operation_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_AEAD_OPERATION_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for an AEAD operation object.
|
/** Return an initial value for an AEAD operation object.
|
||||||
*/
|
*/
|
||||||
|
@ -3260,8 +3231,8 @@ psa_status_t psa_asymmetric_decrypt(mbedtls_svc_key_id_t key,
|
||||||
* \endcode
|
* \endcode
|
||||||
*
|
*
|
||||||
* This is an implementation-defined \c struct. Applications should not
|
* This is an implementation-defined \c struct. Applications should not
|
||||||
* make any assumptions about the content of this structure except
|
* make any assumptions about the content of this structure.
|
||||||
* as directed by the documentation of a specific implementation.
|
* Implementation details can change in future versions without notice.
|
||||||
*/
|
*/
|
||||||
typedef struct psa_key_derivation_s psa_key_derivation_operation_t;
|
typedef struct psa_key_derivation_s psa_key_derivation_operation_t;
|
||||||
|
|
||||||
|
@ -3270,12 +3241,6 @@ typedef struct psa_key_derivation_s psa_key_derivation_operation_t;
|
||||||
* This macro returns a suitable initializer for a key derivation operation
|
* This macro returns a suitable initializer for a key derivation operation
|
||||||
* object of type #psa_key_derivation_operation_t.
|
* object of type #psa_key_derivation_operation_t.
|
||||||
*/
|
*/
|
||||||
#ifdef __DOXYGEN_ONLY__
|
|
||||||
/* This is an example definition for documentation purposes.
|
|
||||||
* Implementations should define a suitable value in `crypto_struct.h`.
|
|
||||||
*/
|
|
||||||
#define PSA_KEY_DERIVATION_OPERATION_INIT {0}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/** Return an initial value for a key derivation operation object.
|
/** Return an initial value for a key derivation operation object.
|
||||||
*/
|
*/
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -93,7 +93,7 @@ struct psa_hash_operation_s
|
||||||
psa_driver_hash_context_t MBEDTLS_PRIVATE(ctx);
|
psa_driver_hash_context_t MBEDTLS_PRIVATE(ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PSA_HASH_OPERATION_INIT {0, {0}}
|
#define PSA_HASH_OPERATION_INIT { 0, { 0 } }
|
||||||
static inline struct psa_hash_operation_s psa_hash_operation_init( void )
|
static inline struct psa_hash_operation_s psa_hash_operation_init( void )
|
||||||
{
|
{
|
||||||
const struct psa_hash_operation_s v = PSA_HASH_OPERATION_INIT;
|
const struct psa_hash_operation_s v = PSA_HASH_OPERATION_INIT;
|
||||||
|
@ -118,7 +118,7 @@ struct psa_cipher_operation_s
|
||||||
psa_driver_cipher_context_t MBEDTLS_PRIVATE(ctx);
|
psa_driver_cipher_context_t MBEDTLS_PRIVATE(ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PSA_CIPHER_OPERATION_INIT {0, 0, 0, 0, {0}}
|
#define PSA_CIPHER_OPERATION_INIT { 0, 0, 0, 0, { 0 } }
|
||||||
static inline struct psa_cipher_operation_s psa_cipher_operation_init( void )
|
static inline struct psa_cipher_operation_s psa_cipher_operation_init( void )
|
||||||
{
|
{
|
||||||
const struct psa_cipher_operation_s v = PSA_CIPHER_OPERATION_INIT;
|
const struct psa_cipher_operation_s v = PSA_CIPHER_OPERATION_INIT;
|
||||||
|
@ -143,7 +143,7 @@ struct psa_mac_operation_s
|
||||||
psa_driver_mac_context_t MBEDTLS_PRIVATE(ctx);
|
psa_driver_mac_context_t MBEDTLS_PRIVATE(ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PSA_MAC_OPERATION_INIT {0, 0, 0, {0}}
|
#define PSA_MAC_OPERATION_INIT { 0, 0, 0, { 0 } }
|
||||||
static inline struct psa_mac_operation_s psa_mac_operation_init( void )
|
static inline struct psa_mac_operation_s psa_mac_operation_init( void )
|
||||||
{
|
{
|
||||||
const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT;
|
const struct psa_mac_operation_s v = PSA_MAC_OPERATION_INIT;
|
||||||
|
@ -164,7 +164,7 @@ struct psa_aead_operation_s
|
||||||
} MBEDTLS_PRIVATE(ctx);
|
} MBEDTLS_PRIVATE(ctx);
|
||||||
};
|
};
|
||||||
|
|
||||||
#define PSA_AEAD_OPERATION_INIT {0, 0, 0, 0, 0, {0}}
|
#define PSA_AEAD_OPERATION_INIT { 0, 0, 0, 0, 0, { 0 } }
|
||||||
static inline struct psa_aead_operation_s psa_aead_operation_init( void )
|
static inline struct psa_aead_operation_s psa_aead_operation_init( void )
|
||||||
{
|
{
|
||||||
const struct psa_aead_operation_s v = PSA_AEAD_OPERATION_INIT;
|
const struct psa_aead_operation_s v = PSA_AEAD_OPERATION_INIT;
|
||||||
|
@ -224,7 +224,7 @@ typedef struct psa_tls12_prf_key_derivation_s
|
||||||
|
|
||||||
uint8_t MBEDTLS_PRIVATE(Ai)[PSA_HASH_MAX_SIZE];
|
uint8_t MBEDTLS_PRIVATE(Ai)[PSA_HASH_MAX_SIZE];
|
||||||
|
|
||||||
/* `HMAC_hash( prk, A(i) + seed )` in the notation of RFC 5246, Sect. 5. */
|
/* `HMAC_hash( prk, A( i ) + seed )` in the notation of RFC 5246, Sect. 5. */
|
||||||
uint8_t MBEDTLS_PRIVATE(output_block)[PSA_HASH_MAX_SIZE];
|
uint8_t MBEDTLS_PRIVATE(output_block)[PSA_HASH_MAX_SIZE];
|
||||||
} psa_tls12_prf_key_derivation_t;
|
} psa_tls12_prf_key_derivation_t;
|
||||||
#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) ||
|
#endif /* MBEDTLS_PSA_BUILTIN_ALG_TLS12_PRF) ||
|
||||||
|
@ -250,8 +250,9 @@ struct psa_key_derivation_s
|
||||||
};
|
};
|
||||||
|
|
||||||
/* This only zeroes out the first byte in the union, the rest is unspecified. */
|
/* This only zeroes out the first byte in the union, the rest is unspecified. */
|
||||||
#define PSA_KEY_DERIVATION_OPERATION_INIT {0, 0, 0, {0}}
|
#define PSA_KEY_DERIVATION_OPERATION_INIT { 0, 0, 0, { 0 } }
|
||||||
static inline struct psa_key_derivation_s psa_key_derivation_operation_init( void )
|
static inline struct psa_key_derivation_s psa_key_derivation_operation_init(
|
||||||
|
void )
|
||||||
{
|
{
|
||||||
const struct psa_key_derivation_s v = PSA_KEY_DERIVATION_OPERATION_INIT;
|
const struct psa_key_derivation_s v = PSA_KEY_DERIVATION_OPERATION_INIT;
|
||||||
return( v );
|
return( v );
|
||||||
|
@ -265,7 +266,7 @@ struct psa_key_policy_s
|
||||||
};
|
};
|
||||||
typedef struct psa_key_policy_s psa_key_policy_t;
|
typedef struct psa_key_policy_s psa_key_policy_t;
|
||||||
|
|
||||||
#define PSA_KEY_POLICY_INIT {0, 0, 0}
|
#define PSA_KEY_POLICY_INIT { 0, 0, 0 }
|
||||||
static inline struct psa_key_policy_s psa_key_policy_init( void )
|
static inline struct psa_key_policy_s psa_key_policy_init( void )
|
||||||
{
|
{
|
||||||
const struct psa_key_policy_s v = PSA_KEY_POLICY_INIT;
|
const struct psa_key_policy_s v = PSA_KEY_POLICY_INIT;
|
||||||
|
@ -277,7 +278,7 @@ static inline struct psa_key_policy_s psa_key_policy_init( void )
|
||||||
typedef uint16_t psa_key_bits_t;
|
typedef uint16_t psa_key_bits_t;
|
||||||
/* The maximum value of the type used to represent bit-sizes.
|
/* The maximum value of the type used to represent bit-sizes.
|
||||||
* This is used to mark an invalid key size. */
|
* This is used to mark an invalid key size. */
|
||||||
#define PSA_KEY_BITS_TOO_LARGE ( (psa_key_bits_t) ( -1 ) )
|
#define PSA_KEY_BITS_TOO_LARGE ( ( psa_key_bits_t ) -1 )
|
||||||
/* The maximum size of a key in bits.
|
/* The maximum size of a key in bits.
|
||||||
* Currently defined as the maximum that can be represented, rounded down
|
* Currently defined as the maximum that can be represented, rounded down
|
||||||
* to a whole number of bytes.
|
* to a whole number of bytes.
|
||||||
|
@ -318,7 +319,10 @@ typedef struct
|
||||||
psa_key_attributes_flag_t MBEDTLS_PRIVATE(flags);
|
psa_key_attributes_flag_t MBEDTLS_PRIVATE(flags);
|
||||||
} psa_core_key_attributes_t;
|
} psa_core_key_attributes_t;
|
||||||
|
|
||||||
#define PSA_CORE_KEY_ATTRIBUTES_INIT {PSA_KEY_TYPE_NONE, 0, PSA_KEY_LIFETIME_VOLATILE, MBEDTLS_SVC_KEY_ID_INIT, PSA_KEY_POLICY_INIT, 0}
|
#define PSA_CORE_KEY_ATTRIBUTES_INIT { PSA_KEY_TYPE_NONE, 0, \
|
||||||
|
PSA_KEY_LIFETIME_VOLATILE, \
|
||||||
|
MBEDTLS_SVC_KEY_ID_INIT, \
|
||||||
|
PSA_KEY_POLICY_INIT, 0 }
|
||||||
|
|
||||||
struct psa_key_attributes_s
|
struct psa_key_attributes_s
|
||||||
{
|
{
|
||||||
|
@ -331,9 +335,9 @@ struct psa_key_attributes_s
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
|
#if defined(MBEDTLS_PSA_CRYPTO_SE_C)
|
||||||
#define PSA_KEY_ATTRIBUTES_INIT {PSA_CORE_KEY_ATTRIBUTES_INIT, 0, NULL, 0}
|
#define PSA_KEY_ATTRIBUTES_INIT { PSA_CORE_KEY_ATTRIBUTES_INIT, 0, NULL, 0 }
|
||||||
#else
|
#else
|
||||||
#define PSA_KEY_ATTRIBUTES_INIT {PSA_CORE_KEY_ATTRIBUTES_INIT, NULL, 0}
|
#define PSA_KEY_ATTRIBUTES_INIT { PSA_CORE_KEY_ATTRIBUTES_INIT, NULL, 0 }
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline struct psa_key_attributes_s psa_key_attributes_init( void )
|
static inline struct psa_key_attributes_s psa_key_attributes_init( void )
|
||||||
|
@ -359,7 +363,7 @@ static inline void psa_set_key_id( psa_key_attributes_t *attributes,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline mbedtls_svc_key_id_t psa_get_key_id(
|
static inline mbedtls_svc_key_id_t psa_get_key_id(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(id) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(id) );
|
||||||
}
|
}
|
||||||
|
@ -372,8 +376,8 @@ static inline void mbedtls_set_key_owner_id( psa_key_attributes_t *attributes,
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static inline void psa_set_key_lifetime(psa_key_attributes_t *attributes,
|
static inline void psa_set_key_lifetime( psa_key_attributes_t *attributes,
|
||||||
psa_key_lifetime_t lifetime)
|
psa_key_lifetime_t lifetime )
|
||||||
{
|
{
|
||||||
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) = lifetime;
|
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) = lifetime;
|
||||||
if( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) )
|
if( PSA_KEY_LIFETIME_IS_VOLATILE( lifetime ) )
|
||||||
|
@ -387,44 +391,44 @@ static inline void psa_set_key_lifetime(psa_key_attributes_t *attributes,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline psa_key_lifetime_t psa_get_key_lifetime(
|
static inline psa_key_lifetime_t psa_get_key_lifetime(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(lifetime) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void psa_set_key_usage_flags(psa_key_attributes_t *attributes,
|
static inline void psa_set_key_usage_flags( psa_key_attributes_t *attributes,
|
||||||
psa_key_usage_t usage_flags)
|
psa_key_usage_t usage_flags )
|
||||||
{
|
{
|
||||||
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) = usage_flags;
|
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) = usage_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline psa_key_usage_t psa_get_key_usage_flags(
|
static inline psa_key_usage_t psa_get_key_usage_flags(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(usage) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void psa_set_key_algorithm(psa_key_attributes_t *attributes,
|
static inline void psa_set_key_algorithm( psa_key_attributes_t *attributes,
|
||||||
psa_algorithm_t alg)
|
psa_algorithm_t alg )
|
||||||
{
|
{
|
||||||
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) = alg;
|
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) = alg;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline psa_algorithm_t psa_get_key_algorithm(
|
static inline psa_algorithm_t psa_get_key_algorithm(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(policy).MBEDTLS_PRIVATE(alg) );
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This function is declared in crypto_extra.h, which comes after this
|
/* This function is declared in crypto_extra.h, which comes after this
|
||||||
* header file, but we need the function here, so repeat the declaration. */
|
* header file, but we need the function here, so repeat the declaration. */
|
||||||
psa_status_t psa_set_key_domain_parameters(psa_key_attributes_t *attributes,
|
psa_status_t psa_set_key_domain_parameters( psa_key_attributes_t *attributes,
|
||||||
psa_key_type_t type,
|
psa_key_type_t type,
|
||||||
const uint8_t *data,
|
const uint8_t *data,
|
||||||
size_t data_length);
|
size_t data_length );
|
||||||
|
|
||||||
static inline void psa_set_key_type(psa_key_attributes_t *attributes,
|
static inline void psa_set_key_type( psa_key_attributes_t *attributes,
|
||||||
psa_key_type_t type)
|
psa_key_type_t type )
|
||||||
{
|
{
|
||||||
if( attributes->MBEDTLS_PRIVATE(domain_parameters) == NULL )
|
if( attributes->MBEDTLS_PRIVATE(domain_parameters) == NULL )
|
||||||
{
|
{
|
||||||
|
@ -442,13 +446,13 @@ static inline void psa_set_key_type(psa_key_attributes_t *attributes,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline psa_key_type_t psa_get_key_type(
|
static inline psa_key_type_t psa_get_key_type(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(type) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(type) );
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void psa_set_key_bits(psa_key_attributes_t *attributes,
|
static inline void psa_set_key_bits( psa_key_attributes_t *attributes,
|
||||||
size_t bits)
|
size_t bits )
|
||||||
{
|
{
|
||||||
if( bits > PSA_MAX_KEY_BITS )
|
if( bits > PSA_MAX_KEY_BITS )
|
||||||
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) = PSA_KEY_BITS_TOO_LARGE;
|
attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) = PSA_KEY_BITS_TOO_LARGE;
|
||||||
|
@ -457,7 +461,7 @@ static inline void psa_set_key_bits(psa_key_attributes_t *attributes,
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline size_t psa_get_key_bits(
|
static inline size_t psa_get_key_bits(
|
||||||
const psa_key_attributes_t *attributes)
|
const psa_key_attributes_t *attributes )
|
||||||
{
|
{
|
||||||
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) );
|
return( attributes->MBEDTLS_PRIVATE(core).MBEDTLS_PRIVATE(bits) );
|
||||||
}
|
}
|
||||||
|
|
|
@ -165,7 +165,7 @@ static void *rsa_alloc_wrap( void )
|
||||||
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) );
|
void *ctx = mbedtls_calloc( 1, sizeof( mbedtls_rsa_context ) );
|
||||||
|
|
||||||
if( ctx != NULL )
|
if( ctx != NULL )
|
||||||
mbedtls_rsa_init( (mbedtls_rsa_context *) ctx, 0, 0 );
|
mbedtls_rsa_init( (mbedtls_rsa_context *) ctx );
|
||||||
|
|
||||||
return( ctx );
|
return( ctx );
|
||||||
}
|
}
|
||||||
|
|
|
@ -1019,18 +1019,8 @@ psa_status_t psa_wipe_key_slot( psa_key_slot_t *slot )
|
||||||
{
|
{
|
||||||
psa_status_t status = psa_remove_key_data_from_memory( slot );
|
psa_status_t status = psa_remove_key_data_from_memory( slot );
|
||||||
|
|
||||||
/*
|
|
||||||
* As the return error code may not be handled in case of multiple errors,
|
|
||||||
* do our best to report an unexpected lock counter: if available
|
|
||||||
* call MBEDTLS_PARAM_FAILED that may terminate execution (if called as
|
|
||||||
* part of the execution of a test suite this will stop the test suite
|
|
||||||
* execution).
|
|
||||||
*/
|
|
||||||
if( slot->lock_count != 1 )
|
if( slot->lock_count != 1 )
|
||||||
{
|
{
|
||||||
#ifdef MBEDTLS_CHECK_PARAMS
|
|
||||||
MBEDTLS_PARAM_FAILED( slot->lock_count == 1 );
|
|
||||||
#endif
|
|
||||||
status = PSA_ERROR_CORRUPTION_DETECTED;
|
status = PSA_ERROR_CORRUPTION_DETECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -2848,13 +2838,14 @@ psa_status_t psa_verify_hash( mbedtls_svc_key_id_t key,
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
||||||
static void psa_rsa_oaep_set_padding_mode( psa_algorithm_t alg,
|
static int psa_rsa_oaep_set_padding_mode( psa_algorithm_t alg,
|
||||||
mbedtls_rsa_context *rsa )
|
mbedtls_rsa_context *rsa )
|
||||||
{
|
{
|
||||||
psa_algorithm_t hash_alg = PSA_ALG_RSA_OAEP_GET_HASH( alg );
|
psa_algorithm_t hash_alg = PSA_ALG_RSA_OAEP_GET_HASH( alg );
|
||||||
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_psa( hash_alg );
|
const mbedtls_md_info_t *md_info = mbedtls_md_info_from_psa( hash_alg );
|
||||||
mbedtls_md_type_t md_alg = mbedtls_md_get_type( md_info );
|
mbedtls_md_type_t md_alg = mbedtls_md_get_type( md_info );
|
||||||
mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg );
|
|
||||||
|
return( mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg ) );
|
||||||
}
|
}
|
||||||
#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
|
#endif /* defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP) */
|
||||||
|
|
||||||
|
@ -2927,7 +2918,11 @@ psa_status_t psa_asymmetric_encrypt( mbedtls_svc_key_id_t key,
|
||||||
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
||||||
if( PSA_ALG_IS_RSA_OAEP( alg ) )
|
if( PSA_ALG_IS_RSA_OAEP( alg ) )
|
||||||
{
|
{
|
||||||
psa_rsa_oaep_set_padding_mode( alg, rsa );
|
status = mbedtls_to_psa_error(
|
||||||
|
psa_rsa_oaep_set_padding_mode( alg, rsa ) );
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
goto rsa_exit;
|
||||||
|
|
||||||
status = mbedtls_to_psa_error(
|
status = mbedtls_to_psa_error(
|
||||||
mbedtls_rsa_rsaes_oaep_encrypt( rsa,
|
mbedtls_rsa_rsaes_oaep_encrypt( rsa,
|
||||||
mbedtls_psa_get_random,
|
mbedtls_psa_get_random,
|
||||||
|
@ -3033,7 +3028,11 @@ psa_status_t psa_asymmetric_decrypt( mbedtls_svc_key_id_t key,
|
||||||
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
#if defined(MBEDTLS_PSA_BUILTIN_ALG_RSA_OAEP)
|
||||||
if( PSA_ALG_IS_RSA_OAEP( alg ) )
|
if( PSA_ALG_IS_RSA_OAEP( alg ) )
|
||||||
{
|
{
|
||||||
psa_rsa_oaep_set_padding_mode( alg, rsa );
|
status = mbedtls_to_psa_error(
|
||||||
|
psa_rsa_oaep_set_padding_mode( alg, rsa ) );
|
||||||
|
if( status != PSA_SUCCESS )
|
||||||
|
goto rsa_exit;
|
||||||
|
|
||||||
status = mbedtls_to_psa_error(
|
status = mbedtls_to_psa_error(
|
||||||
mbedtls_rsa_rsaes_oaep_decrypt( rsa,
|
mbedtls_rsa_rsaes_oaep_decrypt( rsa,
|
||||||
mbedtls_psa_get_random,
|
mbedtls_psa_get_random,
|
||||||
|
|
|
@ -317,7 +317,7 @@ static psa_status_t rsa_generate_key(
|
||||||
if( status != PSA_SUCCESS )
|
if( status != PSA_SUCCESS )
|
||||||
return( status );
|
return( status );
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_NONE );
|
mbedtls_rsa_init( &rsa );
|
||||||
ret = mbedtls_rsa_gen_key( &rsa,
|
ret = mbedtls_rsa_gen_key( &rsa,
|
||||||
mbedtls_psa_get_random,
|
mbedtls_psa_get_random,
|
||||||
MBEDTLS_PSA_RANDOM_STATE,
|
MBEDTLS_PSA_RANDOM_STATE,
|
||||||
|
@ -416,29 +416,36 @@ static psa_status_t rsa_sign_hash(
|
||||||
#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN)
|
#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN)
|
||||||
if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) )
|
if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) )
|
||||||
{
|
{
|
||||||
mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15,
|
ret = mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15,
|
||||||
MBEDTLS_MD_NONE );
|
MBEDTLS_MD_NONE );
|
||||||
ret = mbedtls_rsa_pkcs1_sign( rsa,
|
if( ret == 0 )
|
||||||
mbedtls_psa_get_random,
|
{
|
||||||
MBEDTLS_PSA_RANDOM_STATE,
|
ret = mbedtls_rsa_pkcs1_sign( rsa,
|
||||||
md_alg,
|
mbedtls_psa_get_random,
|
||||||
(unsigned int) hash_length,
|
MBEDTLS_PSA_RANDOM_STATE,
|
||||||
hash,
|
md_alg,
|
||||||
signature );
|
(unsigned int) hash_length,
|
||||||
|
hash,
|
||||||
|
signature );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */
|
#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */
|
||||||
#if defined(BUILTIN_ALG_RSA_PSS)
|
#if defined(BUILTIN_ALG_RSA_PSS)
|
||||||
if( PSA_ALG_IS_RSA_PSS( alg ) )
|
if( PSA_ALG_IS_RSA_PSS( alg ) )
|
||||||
{
|
{
|
||||||
mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg );
|
ret = mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg );
|
||||||
ret = mbedtls_rsa_rsassa_pss_sign( rsa,
|
|
||||||
mbedtls_psa_get_random,
|
if( ret == 0 )
|
||||||
MBEDTLS_PSA_RANDOM_STATE,
|
{
|
||||||
MBEDTLS_MD_NONE,
|
ret = mbedtls_rsa_rsassa_pss_sign( rsa,
|
||||||
(unsigned int) hash_length,
|
mbedtls_psa_get_random,
|
||||||
hash,
|
MBEDTLS_PSA_RANDOM_STATE,
|
||||||
signature );
|
MBEDTLS_MD_NONE,
|
||||||
|
(unsigned int) hash_length,
|
||||||
|
hash,
|
||||||
|
signature );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* BUILTIN_ALG_RSA_PSS */
|
#endif /* BUILTIN_ALG_RSA_PSS */
|
||||||
|
@ -489,25 +496,31 @@ static psa_status_t rsa_verify_hash(
|
||||||
#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN)
|
#if defined(BUILTIN_ALG_RSA_PKCS1V15_SIGN)
|
||||||
if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) )
|
if( PSA_ALG_IS_RSA_PKCS1V15_SIGN( alg ) )
|
||||||
{
|
{
|
||||||
mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15,
|
ret = mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V15,
|
||||||
MBEDTLS_MD_NONE );
|
MBEDTLS_MD_NONE );
|
||||||
ret = mbedtls_rsa_pkcs1_verify( rsa,
|
if( ret == 0 )
|
||||||
md_alg,
|
{
|
||||||
(unsigned int) hash_length,
|
ret = mbedtls_rsa_pkcs1_verify( rsa,
|
||||||
hash,
|
md_alg,
|
||||||
signature );
|
(unsigned int) hash_length,
|
||||||
|
hash,
|
||||||
|
signature );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */
|
#endif /* BUILTIN_ALG_RSA_PKCS1V15_SIGN */
|
||||||
#if defined(BUILTIN_ALG_RSA_PSS)
|
#if defined(BUILTIN_ALG_RSA_PSS)
|
||||||
if( PSA_ALG_IS_RSA_PSS( alg ) )
|
if( PSA_ALG_IS_RSA_PSS( alg ) )
|
||||||
{
|
{
|
||||||
mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg );
|
ret = mbedtls_rsa_set_padding( rsa, MBEDTLS_RSA_PKCS_V21, md_alg );
|
||||||
ret = mbedtls_rsa_rsassa_pss_verify( rsa,
|
if( ret == 0 )
|
||||||
MBEDTLS_MD_NONE,
|
{
|
||||||
(unsigned int) hash_length,
|
ret = mbedtls_rsa_rsassa_pss_verify( rsa,
|
||||||
hash,
|
MBEDTLS_MD_NONE,
|
||||||
signature );
|
(unsigned int) hash_length,
|
||||||
|
hash,
|
||||||
|
signature );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
#endif /* BUILTIN_ALG_RSA_PSS */
|
#endif /* BUILTIN_ALG_RSA_PSS */
|
||||||
|
|
|
@ -409,17 +409,6 @@ psa_status_t psa_unlock_key_slot( psa_key_slot_t *slot )
|
||||||
return( PSA_SUCCESS );
|
return( PSA_SUCCESS );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* As the return error code may not be handled in case of multiple errors,
|
|
||||||
* do our best to report if the lock counter is equal to zero: if
|
|
||||||
* available call MBEDTLS_PARAM_FAILED that may terminate execution (if
|
|
||||||
* called as part of the execution of a unit test suite this will stop the
|
|
||||||
* test suite execution).
|
|
||||||
*/
|
|
||||||
#ifdef MBEDTLS_CHECK_PARAMS
|
|
||||||
MBEDTLS_PARAM_FAILED( slot->lock_count > 0 );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return( PSA_ERROR_CORRUPTION_DETECTED );
|
return( PSA_ERROR_CORRUPTION_DETECTED );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -477,17 +477,14 @@ int mbedtls_rsa_export_crt( const mbedtls_rsa_context *ctx,
|
||||||
/*
|
/*
|
||||||
* Initialize an RSA context
|
* Initialize an RSA context
|
||||||
*/
|
*/
|
||||||
void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
|
void mbedtls_rsa_init( mbedtls_rsa_context *ctx )
|
||||||
int padding,
|
|
||||||
int hash_id )
|
|
||||||
{
|
{
|
||||||
RSA_VALIDATE( ctx != NULL );
|
RSA_VALIDATE( ctx != NULL );
|
||||||
RSA_VALIDATE( padding == MBEDTLS_RSA_PKCS_V15 ||
|
|
||||||
padding == MBEDTLS_RSA_PKCS_V21 );
|
|
||||||
|
|
||||||
memset( ctx, 0, sizeof( mbedtls_rsa_context ) );
|
memset( ctx, 0, sizeof( mbedtls_rsa_context ) );
|
||||||
|
|
||||||
mbedtls_rsa_set_padding( ctx, padding, hash_id );
|
ctx->padding = MBEDTLS_RSA_PKCS_V15;
|
||||||
|
ctx->hash_id = MBEDTLS_MD_NONE;
|
||||||
|
|
||||||
#if defined(MBEDTLS_THREADING_C)
|
#if defined(MBEDTLS_THREADING_C)
|
||||||
/* Set ctx->ver to nonzero to indicate that the mutex has been
|
/* Set ctx->ver to nonzero to indicate that the mutex has been
|
||||||
|
@ -500,15 +497,38 @@ void mbedtls_rsa_init( mbedtls_rsa_context *ctx,
|
||||||
/*
|
/*
|
||||||
* Set padding for an existing RSA context
|
* Set padding for an existing RSA context
|
||||||
*/
|
*/
|
||||||
void mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
|
int mbedtls_rsa_set_padding( mbedtls_rsa_context *ctx, int padding,
|
||||||
int hash_id )
|
mbedtls_md_type_t hash_id )
|
||||||
{
|
{
|
||||||
RSA_VALIDATE( ctx != NULL );
|
switch( padding )
|
||||||
RSA_VALIDATE( padding == MBEDTLS_RSA_PKCS_V15 ||
|
{
|
||||||
padding == MBEDTLS_RSA_PKCS_V21 );
|
#if defined(MBEDTLS_PKCS1_V15)
|
||||||
|
case MBEDTLS_RSA_PKCS_V15:
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_PKCS1_V21)
|
||||||
|
case MBEDTLS_RSA_PKCS_V21:
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return( MBEDTLS_ERR_RSA_INVALID_PADDING );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ( padding == MBEDTLS_RSA_PKCS_V21 ) &&
|
||||||
|
( hash_id != MBEDTLS_MD_NONE ) )
|
||||||
|
{
|
||||||
|
const mbedtls_md_info_t *md_info;
|
||||||
|
|
||||||
|
md_info = mbedtls_md_info_from_type( hash_id );
|
||||||
|
if( md_info == NULL )
|
||||||
|
return( MBEDTLS_ERR_RSA_INVALID_PADDING );
|
||||||
|
}
|
||||||
|
|
||||||
ctx->padding = padding;
|
ctx->padding = padding;
|
||||||
ctx->hash_id = hash_id;
|
ctx->hash_id = hash_id;
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -2580,7 +2600,7 @@ int mbedtls_rsa_self_test( int verbose )
|
||||||
mbedtls_mpi K;
|
mbedtls_mpi K;
|
||||||
|
|
||||||
mbedtls_mpi_init( &K );
|
mbedtls_mpi_init( &K );
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
|
|
||||||
MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &K, 16, RSA_N ) );
|
MBEDTLS_MPI_CHK( mbedtls_mpi_read_string( &K, 16, RSA_N ) );
|
||||||
MBEDTLS_MPI_CHK( mbedtls_rsa_import( &rsa, &K, NULL, NULL, NULL, NULL ) );
|
MBEDTLS_MPI_CHK( mbedtls_rsa_import( &rsa, &K, NULL, NULL, NULL, NULL ) );
|
||||||
|
|
|
@ -31,6 +31,7 @@
|
||||||
|
|
||||||
#include "mbedtls/ssl_ciphersuites.h"
|
#include "mbedtls/ssl_ciphersuites.h"
|
||||||
#include "mbedtls/ssl.h"
|
#include "mbedtls/ssl.h"
|
||||||
|
#include "ssl_misc.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
|
|
@ -1155,8 +1155,7 @@ static int ssl_write_client_hello( mbedtls_ssl_context *ssl )
|
||||||
/*
|
/*
|
||||||
* Ciphersuite list
|
* Ciphersuite list
|
||||||
*/
|
*/
|
||||||
ciphersuites = mbedtls_ssl_get_protocol_version_ciphersuites( ssl->conf,
|
ciphersuites = ssl->conf->ciphersuite_list;
|
||||||
ssl->minor_ver );
|
|
||||||
|
|
||||||
/* Skip writing ciphersuite length for now */
|
/* Skip writing ciphersuite length for now */
|
||||||
n = 0;
|
n = 0;
|
||||||
|
@ -2244,7 +2243,7 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl )
|
||||||
i = 0;
|
i = 0;
|
||||||
while( 1 )
|
while( 1 )
|
||||||
{
|
{
|
||||||
if( mbedtls_ssl_get_protocol_version_ciphersuites( ssl->conf, ssl->minor_ver )[i] == 0 )
|
if( ssl->conf->ciphersuite_list[i] == 0 )
|
||||||
{
|
{
|
||||||
MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
|
MBEDTLS_SSL_DEBUG_MSG( 1, ( "bad server hello message" ) );
|
||||||
mbedtls_ssl_send_alert_message(
|
mbedtls_ssl_send_alert_message(
|
||||||
|
@ -2254,7 +2253,7 @@ static int ssl_parse_server_hello( mbedtls_ssl_context *ssl )
|
||||||
return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO );
|
return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO );
|
||||||
}
|
}
|
||||||
|
|
||||||
if( mbedtls_ssl_get_protocol_version_ciphersuites( ssl->conf, ssl->minor_ver )[i++] ==
|
if( ssl->conf->ciphersuite_list[i++] ==
|
||||||
ssl->session_negotiate->ciphersuite )
|
ssl->session_negotiate->ciphersuite )
|
||||||
{
|
{
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -65,6 +65,16 @@
|
||||||
#define inline __inline
|
#define inline __inline
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/* Legacy minor version numbers as defined by:
|
||||||
|
* - RFC 2246: ProtocolVersion version = { 3, 1 }; // TLS v1.0
|
||||||
|
* - RFC 4346: ProtocolVersion version = { 3, 2 }; // TLS v1.1
|
||||||
|
*
|
||||||
|
* We no longer support these versions, but some code still references those
|
||||||
|
* constants, for keep them for now until we clean up that code.
|
||||||
|
*/
|
||||||
|
#define MBEDTLS_SSL_MINOR_VERSION_1 1
|
||||||
|
#define MBEDTLS_SSL_MINOR_VERSION_2 2
|
||||||
|
|
||||||
/* Determine minimum supported version */
|
/* Determine minimum supported version */
|
||||||
#define MBEDTLS_SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3
|
#define MBEDTLS_SSL_MIN_MAJOR_VERSION MBEDTLS_SSL_MAJOR_VERSION_3
|
||||||
|
|
||||||
|
@ -245,6 +255,39 @@
|
||||||
+ ( MBEDTLS_SSL_CID_OUT_LEN_MAX ) )
|
+ ( MBEDTLS_SSL_CID_OUT_LEN_MAX ) )
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
||||||
|
/**
|
||||||
|
* \brief Return the maximum fragment length (payload, in bytes) for
|
||||||
|
* the output buffer. For the client, this is the configured
|
||||||
|
* value. For the server, it is the minimum of two - the
|
||||||
|
* configured value and the negotiated one.
|
||||||
|
*
|
||||||
|
* \sa mbedtls_ssl_conf_max_frag_len()
|
||||||
|
* \sa mbedtls_ssl_get_max_out_record_payload()
|
||||||
|
*
|
||||||
|
* \param ssl SSL context
|
||||||
|
*
|
||||||
|
* \return Current maximum fragment length for the output buffer.
|
||||||
|
*/
|
||||||
|
size_t mbedtls_ssl_get_output_max_frag_len( const mbedtls_ssl_context *ssl );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Return the maximum fragment length (payload, in bytes) for
|
||||||
|
* the input buffer. This is the negotiated maximum fragment
|
||||||
|
* length, or, if there is none, MBEDTLS_SSL_IN_CONTENT_LEN.
|
||||||
|
* If it is not defined either, the value is 2^14. This function
|
||||||
|
* works as its predecessor, \c mbedtls_ssl_get_max_frag_len().
|
||||||
|
*
|
||||||
|
* \sa mbedtls_ssl_conf_max_frag_len()
|
||||||
|
* \sa mbedtls_ssl_get_max_in_record_payload()
|
||||||
|
*
|
||||||
|
* \param ssl SSL context
|
||||||
|
*
|
||||||
|
* \return Current maximum fragment length for the output buffer.
|
||||||
|
*/
|
||||||
|
size_t mbedtls_ssl_get_input_max_frag_len( const mbedtls_ssl_context *ssl );
|
||||||
|
#endif /* MBEDTLS_SSL_MAX_FRAGMENT_LENGTH */
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
|
#if defined(MBEDTLS_SSL_VARIABLE_BUFFER_LENGTH)
|
||||||
static inline size_t mbedtls_ssl_get_output_buflen( const mbedtls_ssl_context *ctx )
|
static inline size_t mbedtls_ssl_get_output_buflen( const mbedtls_ssl_context *ctx )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1148,6 +1148,9 @@ MBEDTLS_STATIC_TESTABLE int mbedtls_ssl_cf_hmac(
|
||||||
MD_CHK( mbedtls_md_update( ctx, data + offset, 1 ) );
|
MD_CHK( mbedtls_md_update( ctx, data + offset, 1 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* The context needs to finish() before it starts() again */
|
||||||
|
MD_CHK( mbedtls_md_finish( ctx, aux_out ) );
|
||||||
|
|
||||||
/* Now compute HASH(okey + inner_hash) */
|
/* Now compute HASH(okey + inner_hash) */
|
||||||
MD_CHK( mbedtls_md_starts( ctx ) );
|
MD_CHK( mbedtls_md_starts( ctx ) );
|
||||||
MD_CHK( mbedtls_md_update( ctx, okey, block_size ) );
|
MD_CHK( mbedtls_md_update( ctx, okey, block_size ) );
|
||||||
|
|
|
@ -1870,7 +1870,7 @@ read_record_header:
|
||||||
* and certificate from the SNI callback triggered by the SNI extension.)
|
* and certificate from the SNI callback triggered by the SNI extension.)
|
||||||
*/
|
*/
|
||||||
got_common_suite = 0;
|
got_common_suite = 0;
|
||||||
ciphersuites = mbedtls_ssl_get_protocol_version_ciphersuites( ssl->conf, ssl->minor_ver );
|
ciphersuites = ssl->conf->ciphersuite_list;
|
||||||
ciphersuite_info = NULL;
|
ciphersuite_info = NULL;
|
||||||
#if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
|
#if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE)
|
||||||
for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 )
|
for( j = 0, p = buf + ciph_offset + 2; j < ciph_len; j += 2, p += 2 )
|
||||||
|
|
|
@ -3514,73 +3514,10 @@ int mbedtls_ssl_set_session( mbedtls_ssl_context *ssl, const mbedtls_ssl_session
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_SSL_CLI_C */
|
#endif /* MBEDTLS_SSL_CLI_C */
|
||||||
|
|
||||||
static int protocol_version_to_ciphersuites_list_index(int prot_version)
|
|
||||||
{
|
|
||||||
switch(prot_version) {
|
|
||||||
case MBEDTLS_SSL_MINOR_VERSION_1:
|
|
||||||
return 0;
|
|
||||||
case MBEDTLS_SSL_MINOR_VERSION_2:
|
|
||||||
return 1;
|
|
||||||
case MBEDTLS_SSL_MINOR_VERSION_3:
|
|
||||||
return 2;
|
|
||||||
default:
|
|
||||||
return -1;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
static void set_protocol_version_ciphersuites( mbedtls_ssl_config *conf,
|
|
||||||
int prot_version,
|
|
||||||
const int* ciphersuites )
|
|
||||||
{
|
|
||||||
int ciphersuite_list_index =
|
|
||||||
protocol_version_to_ciphersuites_list_index(prot_version);
|
|
||||||
if ( ciphersuite_list_index >= 0 &&
|
|
||||||
(unsigned int)ciphersuite_list_index <
|
|
||||||
sizeof(conf->ciphersuite_list)/sizeof(conf->ciphersuite_list[0]) )
|
|
||||||
{
|
|
||||||
conf->ciphersuite_list[ciphersuite_list_index] = ciphersuites;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf,
|
void mbedtls_ssl_conf_ciphersuites( mbedtls_ssl_config *conf,
|
||||||
const int *ciphersuites )
|
const int *ciphersuites )
|
||||||
{
|
{
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_1,
|
conf->ciphersuite_list = ciphersuites;
|
||||||
ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_2,
|
|
||||||
ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_3,
|
|
||||||
ciphersuites);
|
|
||||||
}
|
|
||||||
|
|
||||||
const int *mbedtls_ssl_get_protocol_version_ciphersuites(
|
|
||||||
const mbedtls_ssl_config *conf, int prot_version )
|
|
||||||
{
|
|
||||||
int ciphersuite_list_index =
|
|
||||||
protocol_version_to_ciphersuites_list_index(prot_version);
|
|
||||||
if ( ciphersuite_list_index >= 0 &&
|
|
||||||
(unsigned int)ciphersuite_list_index <
|
|
||||||
sizeof(conf->ciphersuite_list)/sizeof(conf->ciphersuite_list[0]) )
|
|
||||||
{
|
|
||||||
return conf->ciphersuite_list[ciphersuite_list_index];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_ssl_conf_ciphersuites_for_version( mbedtls_ssl_config *conf,
|
|
||||||
const int *ciphersuites,
|
|
||||||
int major, int minor )
|
|
||||||
{
|
|
||||||
if( major != MBEDTLS_SSL_MAJOR_VERSION_3 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
if( minor != MBEDTLS_SSL_MINOR_VERSION_3 )
|
|
||||||
return;
|
|
||||||
|
|
||||||
set_protocol_version_ciphersuites(conf, minor, ciphersuites);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
|
@ -4490,6 +4427,24 @@ int mbedtls_ssl_get_max_out_record_payload( const mbedtls_ssl_context *ssl )
|
||||||
return( (int) max_len );
|
return( (int) max_len );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mbedtls_ssl_get_max_in_record_payload( const mbedtls_ssl_context *ssl )
|
||||||
|
{
|
||||||
|
size_t max_len = MBEDTLS_SSL_IN_CONTENT_LEN;
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
||||||
|
(void) ssl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
||||||
|
const size_t mfl = mbedtls_ssl_get_input_max_frag_len( ssl );
|
||||||
|
|
||||||
|
if( max_len > mfl )
|
||||||
|
max_len = mfl;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return( (int) max_len );
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl )
|
const mbedtls_x509_crt *mbedtls_ssl_get_peer_cert( const mbedtls_ssl_context *ssl )
|
||||||
{
|
{
|
||||||
|
@ -6278,12 +6233,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf,
|
||||||
conf->max_major_ver = MBEDTLS_SSL_MAX_MAJOR_VERSION;
|
conf->max_major_ver = MBEDTLS_SSL_MAX_MAJOR_VERSION;
|
||||||
conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION;
|
conf->max_minor_ver = MBEDTLS_SSL_MAX_MINOR_VERSION;
|
||||||
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_1,
|
conf->ciphersuite_list = ssl_preset_suiteb_ciphersuites;
|
||||||
ssl_preset_suiteb_ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_2,
|
|
||||||
ssl_preset_suiteb_ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_3,
|
|
||||||
ssl_preset_suiteb_ciphersuites);
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
conf->cert_profile = &mbedtls_x509_crt_profile_suiteb;
|
conf->cert_profile = &mbedtls_x509_crt_profile_suiteb;
|
||||||
|
@ -6317,13 +6267,7 @@ int mbedtls_ssl_config_defaults( mbedtls_ssl_config *conf,
|
||||||
if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
|
if( transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM )
|
||||||
conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_3;
|
conf->min_minor_ver = MBEDTLS_SSL_MINOR_VERSION_3;
|
||||||
#endif
|
#endif
|
||||||
const int* default_ciphersuites = mbedtls_ssl_list_ciphersuites();
|
conf->ciphersuite_list = mbedtls_ssl_list_ciphersuites();
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_1,
|
|
||||||
default_ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_2,
|
|
||||||
default_ciphersuites);
|
|
||||||
set_protocol_version_ciphersuites(conf, MBEDTLS_SSL_MINOR_VERSION_3,
|
|
||||||
default_ciphersuites);
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
#if defined(MBEDTLS_X509_CRT_PARSE_C)
|
||||||
conf->cert_profile = &mbedtls_x509_crt_profile_default;
|
conf->cert_profile = &mbedtls_x509_crt_profile_default;
|
||||||
|
@ -6600,22 +6544,10 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert,
|
||||||
uint32_t *flags )
|
uint32_t *flags )
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
int usage = 0;
|
int usage = 0;
|
||||||
#endif
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)
|
|
||||||
const char *ext_oid;
|
const char *ext_oid;
|
||||||
size_t ext_len;
|
size_t ext_len;
|
||||||
#endif
|
|
||||||
|
|
||||||
#if !defined(MBEDTLS_X509_CHECK_KEY_USAGE) && \
|
|
||||||
!defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)
|
|
||||||
((void) cert);
|
|
||||||
((void) cert_endpoint);
|
|
||||||
((void) flags);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
if( cert_endpoint == MBEDTLS_SSL_IS_SERVER )
|
if( cert_endpoint == MBEDTLS_SSL_IS_SERVER )
|
||||||
{
|
{
|
||||||
/* Server part of the key exchange */
|
/* Server part of the key exchange */
|
||||||
|
@ -6657,11 +6589,7 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert,
|
||||||
*flags |= MBEDTLS_X509_BADCERT_KEY_USAGE;
|
*flags |= MBEDTLS_X509_BADCERT_KEY_USAGE;
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
#else
|
|
||||||
((void) ciphersuite);
|
|
||||||
#endif /* MBEDTLS_X509_CHECK_KEY_USAGE */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)
|
|
||||||
if( cert_endpoint == MBEDTLS_SSL_IS_SERVER )
|
if( cert_endpoint == MBEDTLS_SSL_IS_SERVER )
|
||||||
{
|
{
|
||||||
ext_oid = MBEDTLS_OID_SERVER_AUTH;
|
ext_oid = MBEDTLS_OID_SERVER_AUTH;
|
||||||
|
@ -6678,7 +6606,6 @@ int mbedtls_ssl_check_cert_usage( const mbedtls_x509_crt *cert,
|
||||||
*flags |= MBEDTLS_X509_BADCERT_EXT_KEY_USAGE;
|
*flags |= MBEDTLS_X509_BADCERT_EXT_KEY_USAGE;
|
||||||
ret = -1;
|
ret = -1;
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */
|
|
||||||
|
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#include "mbedtls/hkdf.h"
|
#include "mbedtls/hkdf.h"
|
||||||
#include "ssl_misc.h"
|
#include "ssl_misc.h"
|
||||||
#include "ssl_tls13_keys.h"
|
#include "ssl_tls13_keys.h"
|
||||||
|
#include "mbedtls/debug.h"
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
@ -346,4 +347,356 @@ int mbedtls_ssl_tls1_3_evolve_secret(
|
||||||
return( ret );
|
return( ret );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int mbedtls_ssl_tls1_3_derive_early_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *early_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_early_secrets *derived )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
mbedtls_md_info_t const * const md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0
|
||||||
|
* |
|
||||||
|
* v
|
||||||
|
* PSK -> HKDF-Extract = Early Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret(., "c e traffic", ClientHello)
|
||||||
|
* | = client_early_traffic_secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret(., "e exp master", ClientHello)
|
||||||
|
* | = early_exporter_master_secret
|
||||||
|
* v
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Create client_early_traffic_secret */
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
early_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( c_e_traffic ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->client_early_traffic_secret,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
/* Create early exporter */
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
early_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( e_exp_master ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->early_exporter_master_secret,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_ssl_tls1_3_derive_handshake_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *handshake_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_handshake_secrets *derived )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
mbedtls_md_info_t const * const md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
* Handshake Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "c hs traffic",
|
||||||
|
* | ClientHello...ServerHello )
|
||||||
|
* | = client_handshake_traffic_secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "s hs traffic",
|
||||||
|
* | ClientHello...ServerHello )
|
||||||
|
* | = server_handshake_traffic_secret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compute client_handshake_traffic_secret with
|
||||||
|
* Derive-Secret( ., "c hs traffic", ClientHello...ServerHello )
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
handshake_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( c_hs_traffic ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->client_handshake_traffic_secret,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Compute server_handshake_traffic_secret with
|
||||||
|
* Derive-Secret( ., "s hs traffic", ClientHello...ServerHello )
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
handshake_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( s_hs_traffic ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->server_handshake_traffic_secret,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_ssl_tls1_3_derive_application_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *application_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_application_secrets *derived )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
mbedtls_md_info_t const * const md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
/* Generate {client,server}_application_traffic_secret_0
|
||||||
|
*
|
||||||
|
* Master Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "c ap traffic",
|
||||||
|
* | ClientHello...server Finished )
|
||||||
|
* | = client_application_traffic_secret_0
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "s ap traffic",
|
||||||
|
* | ClientHello...Server Finished )
|
||||||
|
* | = server_application_traffic_secret_0
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "exp master",
|
||||||
|
* | ClientHello...server Finished)
|
||||||
|
* | = exporter_master_secret
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
application_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( c_ap_traffic ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->client_application_traffic_secret_N,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
application_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( s_ap_traffic ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->server_application_traffic_secret_N,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
application_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( exp_master ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->exporter_master_secret,
|
||||||
|
md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Generate resumption_master_secret for use with the ticket exchange.
|
||||||
|
*
|
||||||
|
* This is not integrated with mbedtls_ssl_tls1_3_derive_application_secrets()
|
||||||
|
* because it uses the transcript hash up to and including ClientFinished. */
|
||||||
|
int mbedtls_ssl_tls1_3_derive_resumption_master_secret(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *application_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_application_secrets *derived )
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
mbedtls_md_info_t const * const md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
application_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( res_master ),
|
||||||
|
transcript, transcript_len,
|
||||||
|
MBEDTLS_SSL_TLS1_3_CONTEXT_HASHED,
|
||||||
|
derived->resumption_master_secret,
|
||||||
|
md_size );
|
||||||
|
|
||||||
|
if( ret != 0 )
|
||||||
|
return( ret );
|
||||||
|
|
||||||
|
return( 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
static int ssl_tls1_3_calc_finished_core( mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *base_key,
|
||||||
|
unsigned char const *transcript,
|
||||||
|
unsigned char *dst )
|
||||||
|
{
|
||||||
|
const mbedtls_md_info_t* const md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
unsigned char finished_key[MBEDTLS_MD_MAX_SIZE];
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
/* TLS 1.3 Finished message
|
||||||
|
*
|
||||||
|
* struct {
|
||||||
|
* opaque verify_data[Hash.length];
|
||||||
|
* } Finished;
|
||||||
|
*
|
||||||
|
* verify_data =
|
||||||
|
* HMAC( finished_key,
|
||||||
|
* Hash( Handshake Context +
|
||||||
|
* Certificate* +
|
||||||
|
* CertificateVerify* )
|
||||||
|
* )
|
||||||
|
*
|
||||||
|
* finished_key =
|
||||||
|
* HKDF-Expand-Label( BaseKey, "finished", "", Hash.length )
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_hkdf_expand_label(
|
||||||
|
md_type, base_key, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( finished ),
|
||||||
|
NULL, 0,
|
||||||
|
finished_key, md_size );
|
||||||
|
if( ret != 0 )
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
ret = mbedtls_md_hmac( md_info, finished_key, md_size, transcript, md_size, dst );
|
||||||
|
if( ret != 0 )
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
|
||||||
|
mbedtls_platform_zeroize( finished_key, sizeof( finished_key ) );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
|
int mbedtls_ssl_tls1_3_create_psk_binder( mbedtls_ssl_context *ssl,
|
||||||
|
const mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *psk, size_t psk_len,
|
||||||
|
int psk_type,
|
||||||
|
unsigned char const *transcript,
|
||||||
|
unsigned char *result )
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
unsigned char binder_key[MBEDTLS_MD_MAX_SIZE];
|
||||||
|
unsigned char early_secret[MBEDTLS_MD_MAX_SIZE];
|
||||||
|
mbedtls_md_info_t const *md_info = mbedtls_md_info_from_type( md_type );
|
||||||
|
size_t const md_size = mbedtls_md_get_size( md_info );
|
||||||
|
|
||||||
|
#if !defined(MBEDTLS_DEBUG_C)
|
||||||
|
ssl = NULL; /* make sure we don't use it except for debug */
|
||||||
|
((void) ssl);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* We should never call this function with an unknown hash,
|
||||||
|
* but add an assertion anyway. */
|
||||||
|
if( md_info == 0 )
|
||||||
|
return( MBEDTLS_ERR_SSL_INTERNAL_ERROR );
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 0
|
||||||
|
* |
|
||||||
|
* v
|
||||||
|
* PSK -> HKDF-Extract = Early Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret(., "ext binder" | "res binder", "")
|
||||||
|
* | = binder_key
|
||||||
|
* v
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = mbedtls_ssl_tls1_3_evolve_secret( md_type,
|
||||||
|
NULL, /* Old secret */
|
||||||
|
psk, psk_len, /* Input */
|
||||||
|
early_secret );
|
||||||
|
if( ret != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_tls1_3_evolve_secret", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( psk_type == MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION )
|
||||||
|
{
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
early_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( res_binder ),
|
||||||
|
NULL, 0, MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED,
|
||||||
|
binder_key, md_size );
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 4, ( "Derive Early Secret with 'res binder'" ) );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ret = mbedtls_ssl_tls1_3_derive_secret( md_type,
|
||||||
|
early_secret, md_size,
|
||||||
|
MBEDTLS_SSL_TLS1_3_LBL_WITH_LEN( ext_binder ),
|
||||||
|
NULL, 0, MBEDTLS_SSL_TLS1_3_CONTEXT_UNHASHED,
|
||||||
|
binder_key, md_size );
|
||||||
|
MBEDTLS_SSL_DEBUG_MSG( 4, ( "Derive Early Secret with 'ext binder'" ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
if( ret != 0 )
|
||||||
|
{
|
||||||
|
MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_tls1_3_derive_secret", ret );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The binding_value is computed in the same way as the Finished message
|
||||||
|
* but with the BaseKey being the binder_key.
|
||||||
|
*/
|
||||||
|
|
||||||
|
ret = ssl_tls1_3_calc_finished_core( md_type, binder_key, transcript, result );
|
||||||
|
if( ret != 0 )
|
||||||
|
goto exit;
|
||||||
|
|
||||||
|
MBEDTLS_SSL_DEBUG_BUF( 3, "psk binder", result, md_size );
|
||||||
|
|
||||||
|
exit:
|
||||||
|
|
||||||
|
mbedtls_platform_zeroize( early_secret, sizeof( early_secret ) );
|
||||||
|
mbedtls_platform_zeroize( binder_key, sizeof( binder_key ) );
|
||||||
|
return( ret );
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */
|
#endif /* MBEDTLS_SSL_PROTO_TLS1_3_EXPERIMENTAL */
|
||||||
|
|
|
@ -70,6 +70,27 @@ extern const struct mbedtls_ssl_tls1_3_labels_struct mbedtls_ssl_tls1_3_labels;
|
||||||
#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_CONTEXT_LEN \
|
#define MBEDTLS_SSL_TLS1_3_KEY_SCHEDULE_MAX_CONTEXT_LEN \
|
||||||
MBEDTLS_MD_MAX_SIZE
|
MBEDTLS_MD_MAX_SIZE
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char binder_key [ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char client_early_traffic_secret [ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char early_exporter_master_secret[ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
} mbedtls_ssl_tls1_3_early_secrets;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char client_handshake_traffic_secret[ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char server_handshake_traffic_secret[ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
} mbedtls_ssl_tls1_3_handshake_secrets;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned char client_application_traffic_secret_N[ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char server_application_traffic_secret_N[ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char exporter_master_secret [ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
unsigned char resumption_master_secret [ MBEDTLS_MD_MAX_SIZE ];
|
||||||
|
} mbedtls_ssl_tls1_3_application_secrets;
|
||||||
|
|
||||||
/* Maximum desired length for expanded key material generated
|
/* Maximum desired length for expanded key material generated
|
||||||
* by HKDF-Expand-Label.
|
* by HKDF-Expand-Label.
|
||||||
*
|
*
|
||||||
|
@ -198,6 +219,179 @@ int mbedtls_ssl_tls1_3_derive_secret(
|
||||||
int ctx_hashed,
|
int ctx_hashed,
|
||||||
unsigned char *dstbuf, size_t buflen );
|
unsigned char *dstbuf, size_t buflen );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Derive TLS 1.3 early data key material from early secret.
|
||||||
|
*
|
||||||
|
* This is a small wrapper invoking mbedtls_ssl_tls1_3_derive_secret()
|
||||||
|
* with the appropriate labels.
|
||||||
|
*
|
||||||
|
* <tt>
|
||||||
|
* Early Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret(., "c e traffic", ClientHello)
|
||||||
|
* | = client_early_traffic_secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret(., "e exp master", ClientHello)
|
||||||
|
* . = early_exporter_master_secret
|
||||||
|
* .
|
||||||
|
* .
|
||||||
|
* </tt>
|
||||||
|
*
|
||||||
|
* \note To obtain the actual key and IV for the early data traffic,
|
||||||
|
* the client secret derived by this function need to be
|
||||||
|
* further processed by mbedtls_ssl_tls1_3_make_traffic_keys().
|
||||||
|
*
|
||||||
|
* \note The binder key, which is also generated from the early secret,
|
||||||
|
* is omitted here. Its calculation is part of the separate routine
|
||||||
|
* mbedtls_ssl_tls1_3_create_psk_binder().
|
||||||
|
*
|
||||||
|
* \param md_type The hash algorithm associated with the PSK for which
|
||||||
|
* early data key material is being derived.
|
||||||
|
* \param early_secret The early secret from which the early data key material
|
||||||
|
* should be derived. This must be a readable buffer whose
|
||||||
|
* length is the digest size of the hash algorithm
|
||||||
|
* represented by \p md_size.
|
||||||
|
* \param transcript The transcript of the handshake so far, calculated with
|
||||||
|
* respect to \p md_type. This must be a readable buffer
|
||||||
|
* whose length is the digest size of the hash algorithm
|
||||||
|
* represented by \p md_size.
|
||||||
|
* \param derived The address of the structure in which to store
|
||||||
|
* the early data key material.
|
||||||
|
*
|
||||||
|
* \returns \c 0 on success.
|
||||||
|
* \returns A negative error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_tls1_3_derive_early_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *early_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_early_secrets *derived );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Derive TLS 1.3 handshake key material from the handshake secret.
|
||||||
|
*
|
||||||
|
* This is a small wrapper invoking mbedtls_ssl_tls1_3_derive_secret()
|
||||||
|
* with the appropriate labels from the standard.
|
||||||
|
*
|
||||||
|
* <tt>
|
||||||
|
* Handshake Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "c hs traffic",
|
||||||
|
* | ClientHello...ServerHello )
|
||||||
|
* | = client_handshake_traffic_secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "s hs traffic",
|
||||||
|
* . ClientHello...ServerHello )
|
||||||
|
* . = server_handshake_traffic_secret
|
||||||
|
* .
|
||||||
|
* </tt>
|
||||||
|
*
|
||||||
|
* \note To obtain the actual key and IV for the encrypted handshake traffic,
|
||||||
|
* the client and server secret derived by this function need to be
|
||||||
|
* further processed by mbedtls_ssl_tls1_3_make_traffic_keys().
|
||||||
|
*
|
||||||
|
* \param md_type The hash algorithm associated with the ciphersuite
|
||||||
|
* that's being used for the connection.
|
||||||
|
* \param handshake_secret The handshake secret from which the handshake key
|
||||||
|
* material should be derived. This must be a readable
|
||||||
|
* buffer whose length is the digest size of the hash
|
||||||
|
* algorithm represented by \p md_size.
|
||||||
|
* \param transcript The transcript of the handshake so far, calculated
|
||||||
|
* with respect to \p md_type. This must be a readable
|
||||||
|
* buffer whose length is the digest size of the hash
|
||||||
|
* algorithm represented by \p md_size.
|
||||||
|
* \param derived The address of the structure in which to
|
||||||
|
* store the handshake key material.
|
||||||
|
*
|
||||||
|
* \returns \c 0 on success.
|
||||||
|
* \returns A negative error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_tls1_3_derive_handshake_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *handshake_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_handshake_secrets *derived );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Derive TLS 1.3 application key material from the master secret.
|
||||||
|
*
|
||||||
|
* This is a small wrapper invoking mbedtls_ssl_tls1_3_derive_secret()
|
||||||
|
* with the appropriate labels from the standard.
|
||||||
|
*
|
||||||
|
* <tt>
|
||||||
|
* Master Secret
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "c ap traffic",
|
||||||
|
* | ClientHello...server Finished )
|
||||||
|
* | = client_application_traffic_secret_0
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "s ap traffic",
|
||||||
|
* | ClientHello...Server Finished )
|
||||||
|
* | = server_application_traffic_secret_0
|
||||||
|
* |
|
||||||
|
* +-----> Derive-Secret( ., "exp master",
|
||||||
|
* . ClientHello...server Finished)
|
||||||
|
* . = exporter_master_secret
|
||||||
|
* .
|
||||||
|
* </tt>
|
||||||
|
*
|
||||||
|
* \note To obtain the actual key and IV for the (0-th) application traffic,
|
||||||
|
* the client and server secret derived by this function need to be
|
||||||
|
* further processed by mbedtls_ssl_tls1_3_make_traffic_keys().
|
||||||
|
*
|
||||||
|
* \param md_type The hash algorithm associated with the ciphersuite
|
||||||
|
* that's being used for the connection.
|
||||||
|
* \param master_secret The master secret from which the application key
|
||||||
|
* material should be derived. This must be a readable
|
||||||
|
* buffer whose length is the digest size of the hash
|
||||||
|
* algorithm represented by \p md_size.
|
||||||
|
* \param transcript The transcript of the handshake up to and including
|
||||||
|
* the ServerFinished message, calculated with respect
|
||||||
|
* to \p md_type. This must be a readable buffer whose
|
||||||
|
* length is the digest size of the hash algorithm
|
||||||
|
* represented by \p md_type.
|
||||||
|
* \param derived The address of the structure in which to
|
||||||
|
* store the application key material.
|
||||||
|
*
|
||||||
|
* \returns \c 0 on success.
|
||||||
|
* \returns A negative error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_tls1_3_derive_application_secrets(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *master_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_application_secrets *derived );
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Derive TLS 1.3 resumption master secret from the master secret.
|
||||||
|
*
|
||||||
|
* This is a small wrapper invoking mbedtls_ssl_tls1_3_derive_secret()
|
||||||
|
* with the appropriate labels from the standard.
|
||||||
|
*
|
||||||
|
* \param md_type The hash algorithm used in the application for which
|
||||||
|
* key material is being derived.
|
||||||
|
* \param application_secret The application secret from which the resumption master
|
||||||
|
* secret should be derived. This must be a readable
|
||||||
|
* buffer whose length is the digest size of the hash
|
||||||
|
* algorithm represented by \p md_size.
|
||||||
|
* \param transcript The transcript of the handshake up to and including
|
||||||
|
* the ClientFinished message, calculated with respect
|
||||||
|
* to \p md_type. This must be a readable buffer whose
|
||||||
|
* length is the digest size of the hash algorithm
|
||||||
|
* represented by \p md_type.
|
||||||
|
* \param transcript_len The length of \p transcript in Bytes.
|
||||||
|
* \param derived The address of the structure in which to
|
||||||
|
* store the resumption master secret.
|
||||||
|
*
|
||||||
|
* \returns \c 0 on success.
|
||||||
|
* \returns A negative error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_tls1_3_derive_resumption_master_secret(
|
||||||
|
mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *application_secret,
|
||||||
|
unsigned char const *transcript, size_t transcript_len,
|
||||||
|
mbedtls_ssl_tls1_3_application_secrets *derived );
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Compute the next secret in the TLS 1.3 key schedule
|
* \brief Compute the next secret in the TLS 1.3 key schedule
|
||||||
*
|
*
|
||||||
|
@ -271,4 +465,37 @@ int mbedtls_ssl_tls1_3_evolve_secret(
|
||||||
const unsigned char *input, size_t input_len,
|
const unsigned char *input, size_t input_len,
|
||||||
unsigned char *secret_new );
|
unsigned char *secret_new );
|
||||||
|
|
||||||
|
#define MBEDTLS_SSL_TLS1_3_PSK_EXTERNAL 0
|
||||||
|
#define MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION 1
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \brief Calculate a TLS 1.3 PSK binder.
|
||||||
|
*
|
||||||
|
* \param ssl The SSL context. This is used for debugging only and may
|
||||||
|
* be \c NULL if MBEDTLS_DEBUG_C is disabled.
|
||||||
|
* \param md_type The hash algorithm associated to the PSK \p psk.
|
||||||
|
* \param psk The buffer holding the PSK for which to create a binder.
|
||||||
|
* \param psk_len The size of \p psk in bytes.
|
||||||
|
* \param psk_type This indicates whether the PSK \p psk is externally
|
||||||
|
* provisioned (#MBEDTLS_SSL_TLS1_3_PSK_EXTERNAL) or a
|
||||||
|
* resumption PSK (#MBEDTLS_SSL_TLS1_3_PSK_RESUMPTION).
|
||||||
|
* \param transcript The handshake transcript up to the point where the
|
||||||
|
* PSK binder calculation happens. This must be readable,
|
||||||
|
* and its size must be equal to the digest size of
|
||||||
|
* the hash algorithm represented by \p md_type.
|
||||||
|
* \param result The address at which to store the PSK binder on success.
|
||||||
|
* This must be writable, and its size must be equal to the
|
||||||
|
* digest size of the hash algorithm represented by
|
||||||
|
* \p md_type.
|
||||||
|
*
|
||||||
|
* \returns \c 0 on success.
|
||||||
|
* \returns A negative error code on failure.
|
||||||
|
*/
|
||||||
|
int mbedtls_ssl_tls1_3_create_psk_binder( mbedtls_ssl_context *ssl,
|
||||||
|
const mbedtls_md_type_t md_type,
|
||||||
|
unsigned char const *psk, size_t psk_len,
|
||||||
|
int psk_type,
|
||||||
|
unsigned char const *transcript,
|
||||||
|
unsigned char *result );
|
||||||
|
|
||||||
#endif /* MBEDTLS_SSL_TLS1_3_KEYS_H */
|
#endif /* MBEDTLS_SSL_TLS1_3_KEYS_H */
|
||||||
|
|
|
@ -818,8 +818,7 @@ static int x509_get_certificate_policies( unsigned char **p,
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Set the parsing return code but continue parsing, in case this
|
* Set the parsing return code but continue parsing, in case this
|
||||||
* extension is critical and MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION
|
* extension is critical.
|
||||||
* is configured.
|
|
||||||
*/
|
*/
|
||||||
parse_ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE;
|
parse_ret = MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE;
|
||||||
}
|
}
|
||||||
|
@ -961,14 +960,12 @@ static int x509_get_crt_ext( unsigned char **p,
|
||||||
/* No parser found, skip extension */
|
/* No parser found, skip extension */
|
||||||
*p = end_ext_octet;
|
*p = end_ext_octet;
|
||||||
|
|
||||||
#if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION)
|
|
||||||
if( is_critical )
|
if( is_critical )
|
||||||
{
|
{
|
||||||
/* Data is marked as critical: fail */
|
/* Data is marked as critical: fail */
|
||||||
return( MBEDTLS_ERROR_ADD( MBEDTLS_ERR_X509_INVALID_EXTENSIONS,
|
return( MBEDTLS_ERROR_ADD( MBEDTLS_ERR_X509_INVALID_EXTENSIONS,
|
||||||
MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) );
|
MBEDTLS_ERR_ASN1_UNEXPECTED_TAG ) );
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1027,11 +1024,9 @@ static int x509_get_crt_ext( unsigned char **p,
|
||||||
start_ext_octet, end_ext_octet ) == 0 )
|
start_ext_octet, end_ext_octet ) == 0 )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION)
|
|
||||||
if( is_critical )
|
if( is_critical )
|
||||||
return( ret );
|
return( ret );
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* If MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE is returned, then we
|
* If MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE is returned, then we
|
||||||
* cannot interpret or enforce the policy. However, it is up to
|
* cannot interpret or enforce the policy. However, it is up to
|
||||||
|
@ -1049,11 +1044,9 @@ static int x509_get_crt_ext( unsigned char **p,
|
||||||
* supports, but there isn't an x509 parser for it,
|
* supports, but there isn't an x509 parser for it,
|
||||||
* skip the extension.
|
* skip the extension.
|
||||||
*/
|
*/
|
||||||
#if !defined(MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION)
|
|
||||||
if( is_critical )
|
if( is_critical )
|
||||||
return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE );
|
return( MBEDTLS_ERR_X509_FEATURE_UNAVAILABLE );
|
||||||
else
|
else
|
||||||
#endif
|
|
||||||
*p = end_ext_octet;
|
*p = end_ext_octet;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -2238,7 +2231,6 @@ int mbedtls_x509_crt_verify_info( char *buf, size_t size, const char *prefix,
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_X509_REMOVE_INFO */
|
#endif /* MBEDTLS_X509_REMOVE_INFO */
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
||||||
unsigned int usage )
|
unsigned int usage )
|
||||||
{
|
{
|
||||||
|
@ -2261,9 +2253,7 @@ int mbedtls_x509_crt_check_key_usage( const mbedtls_x509_crt *crt,
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE)
|
|
||||||
int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt,
|
int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt,
|
||||||
const char *usage_oid,
|
const char *usage_oid,
|
||||||
size_t usage_len )
|
size_t usage_len )
|
||||||
|
@ -2293,7 +2283,6 @@ int mbedtls_x509_crt_check_extended_key_usage( const mbedtls_x509_crt *crt,
|
||||||
|
|
||||||
return( MBEDTLS_ERR_X509_BAD_INPUT_DATA );
|
return( MBEDTLS_ERR_X509_BAD_INPUT_DATA );
|
||||||
}
|
}
|
||||||
#endif /* MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CRL_PARSE_C)
|
#if defined(MBEDTLS_X509_CRL_PARSE_C)
|
||||||
/*
|
/*
|
||||||
|
@ -2344,14 +2333,12 @@ static int x509_crt_verifycrl( mbedtls_x509_crt *crt, mbedtls_x509_crt *ca,
|
||||||
/*
|
/*
|
||||||
* Check if the CA is configured to sign CRLs
|
* Check if the CA is configured to sign CRLs
|
||||||
*/
|
*/
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
if( mbedtls_x509_crt_check_key_usage( ca,
|
if( mbedtls_x509_crt_check_key_usage( ca,
|
||||||
MBEDTLS_X509_KU_CRL_SIGN ) != 0 )
|
MBEDTLS_X509_KU_CRL_SIGN ) != 0 )
|
||||||
{
|
{
|
||||||
flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED;
|
flags |= MBEDTLS_X509_BADCRL_NOT_TRUSTED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Check if CRL is correctly signed by the trusted CA
|
* Check if CRL is correctly signed by the trusted CA
|
||||||
|
@ -2488,13 +2475,11 @@ static int x509_crt_check_parent( const mbedtls_x509_crt *child,
|
||||||
if( need_ca_bit && ! parent->ca_istrue )
|
if( need_ca_bit && ! parent->ca_istrue )
|
||||||
return( -1 );
|
return( -1 );
|
||||||
|
|
||||||
#if defined(MBEDTLS_X509_CHECK_KEY_USAGE)
|
|
||||||
if( need_ca_bit &&
|
if( need_ca_bit &&
|
||||||
mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 )
|
mbedtls_x509_crt_check_key_usage( parent, MBEDTLS_X509_KU_KEY_CERT_SIGN ) != 0 )
|
||||||
{
|
{
|
||||||
return( -1 );
|
return( -1 );
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return( 0 );
|
return( 0 );
|
||||||
}
|
}
|
||||||
|
|
|
@ -92,7 +92,6 @@ int main( void )
|
||||||
mbedtls_aes_context aes;
|
mbedtls_aes_context aes;
|
||||||
|
|
||||||
mbedtls_net_init( &server_fd );
|
mbedtls_net_init( &server_fd );
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_SHA256 );
|
|
||||||
mbedtls_dhm_init( &dhm );
|
mbedtls_dhm_init( &dhm );
|
||||||
mbedtls_aes_init( &aes );
|
mbedtls_aes_init( &aes );
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
|
@ -125,7 +124,7 @@ int main( void )
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
|
|
||||||
if( ( ret = mbedtls_mpi_read_file( &rsa.MBEDTLS_PRIVATE(N), 16, f ) ) != 0 ||
|
if( ( ret = mbedtls_mpi_read_file( &rsa.MBEDTLS_PRIVATE(N), 16, f ) ) != 0 ||
|
||||||
( ret = mbedtls_mpi_read_file( &rsa.MBEDTLS_PRIVATE(E), 16, f ) ) != 0 )
|
( ret = mbedtls_mpi_read_file( &rsa.MBEDTLS_PRIVATE(E), 16, f ) ) != 0 )
|
||||||
|
|
|
@ -95,7 +95,6 @@ int main( void )
|
||||||
|
|
||||||
mbedtls_net_init( &listen_fd );
|
mbedtls_net_init( &listen_fd );
|
||||||
mbedtls_net_init( &client_fd );
|
mbedtls_net_init( &client_fd );
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_SHA256 );
|
|
||||||
mbedtls_dhm_init( &dhm );
|
mbedtls_dhm_init( &dhm );
|
||||||
mbedtls_aes_init( &aes );
|
mbedtls_aes_init( &aes );
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
|
@ -131,7 +130,7 @@ int main( void )
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
|
|
||||||
if( ( ret = mbedtls_mpi_read_file( &N , 16, f ) ) != 0 ||
|
if( ( ret = mbedtls_mpi_read_file( &N , 16, f ) ) != 0 ||
|
||||||
( ret = mbedtls_mpi_read_file( &E , 16, f ) ) != 0 ||
|
( ret = mbedtls_mpi_read_file( &E , 16, f ) ) != 0 ||
|
||||||
|
|
|
@ -90,7 +90,7 @@ int main( int argc, char *argv[] )
|
||||||
mbedtls_printf( "\n . Seeding the random number generator..." );
|
mbedtls_printf( "\n . Seeding the random number generator..." );
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
mbedtls_entropy_init( &entropy );
|
mbedtls_entropy_init( &entropy );
|
||||||
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
||||||
|
|
|
@ -87,7 +87,7 @@ int main( int argc, char *argv[] )
|
||||||
fflush( stdout );
|
fflush( stdout );
|
||||||
|
|
||||||
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
|
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &E );
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
mbedtls_entropy_init( &entropy );
|
mbedtls_entropy_init( &entropy );
|
||||||
|
|
||||||
|
|
|
@ -75,7 +75,7 @@ int main( void )
|
||||||
const char *pers = "rsa_genkey";
|
const char *pers = "rsa_genkey";
|
||||||
|
|
||||||
mbedtls_ctr_drbg_init( &ctr_drbg );
|
mbedtls_ctr_drbg_init( &ctr_drbg );
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
||||||
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
||||||
mbedtls_mpi_init( &DQ ); mbedtls_mpi_init( &QP );
|
mbedtls_mpi_init( &DQ ); mbedtls_mpi_init( &QP );
|
||||||
|
|
|
@ -67,7 +67,7 @@ int main( int argc, char *argv[] )
|
||||||
char filename[512];
|
char filename[512];
|
||||||
mbedtls_mpi N, P, Q, D, E, DP, DQ, QP;
|
mbedtls_mpi N, P, Q, D, E, DP, DQ, QP;
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
|
|
||||||
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
mbedtls_mpi_init( &N ); mbedtls_mpi_init( &P ); mbedtls_mpi_init( &Q );
|
||||||
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
mbedtls_mpi_init( &D ); mbedtls_mpi_init( &E ); mbedtls_mpi_init( &DP );
|
||||||
|
|
|
@ -115,7 +115,13 @@ int main( int argc, char *argv[] )
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_rsa_set_padding( mbedtls_pk_rsa( pk ), MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA256 );
|
if( ( ret = mbedtls_rsa_set_padding( mbedtls_pk_rsa( pk ),
|
||||||
|
MBEDTLS_RSA_PKCS_V21,
|
||||||
|
MBEDTLS_MD_SHA256 ) ) != 0 )
|
||||||
|
{
|
||||||
|
mbedtls_printf( " failed\n ! Padding not supported\n" );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Compute the SHA-256 hash of the input file,
|
* Compute the SHA-256 hash of the input file,
|
||||||
|
|
|
@ -66,7 +66,7 @@ int main( int argc, char *argv[] )
|
||||||
unsigned char buf[MBEDTLS_MPI_MAX_SIZE];
|
unsigned char buf[MBEDTLS_MPI_MAX_SIZE];
|
||||||
char filename[512];
|
char filename[512];
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
|
|
||||||
if( argc != 2 )
|
if( argc != 2 )
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,7 +98,13 @@ int main( int argc, char *argv[] )
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
|
||||||
mbedtls_rsa_set_padding( mbedtls_pk_rsa( pk ), MBEDTLS_RSA_PKCS_V21, MBEDTLS_MD_SHA256 );
|
if( ( ret = mbedtls_rsa_set_padding( mbedtls_pk_rsa( pk ),
|
||||||
|
MBEDTLS_RSA_PKCS_V21,
|
||||||
|
MBEDTLS_MD_SHA256 ) ) != 0 )
|
||||||
|
{
|
||||||
|
mbedtls_printf( " failed\n ! Invalid padding\n" );
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Extract the RSA signature from the file
|
* Extract the RSA signature from the file
|
||||||
|
|
|
@ -2023,10 +2023,10 @@ int main( int argc, char *argv[] )
|
||||||
mbedtls_printf( " [ Record expansion is unknown ]\n" );
|
mbedtls_printf( " [ Record expansion is unknown ]\n" );
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
||||||
mbedtls_printf( " [ Maximum input fragment length is %u ]\n",
|
mbedtls_printf( " [ Maximum incoming record payload length is %u ]\n",
|
||||||
(unsigned int) mbedtls_ssl_get_input_max_frag_len( &ssl ) );
|
(unsigned int) mbedtls_ssl_get_max_in_record_payload( &ssl ) );
|
||||||
mbedtls_printf( " [ Maximum output fragment length is %u ]\n",
|
mbedtls_printf( " [ Maximum outgoing record payload length is %u ]\n",
|
||||||
(unsigned int) mbedtls_ssl_get_output_max_frag_len( &ssl ) );
|
(unsigned int) mbedtls_ssl_get_max_out_record_payload( &ssl ) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_ALPN)
|
#if defined(MBEDTLS_SSL_ALPN)
|
||||||
|
|
|
@ -95,7 +95,6 @@ int main( void )
|
||||||
#define DFL_ECJPAKE_PW NULL
|
#define DFL_ECJPAKE_PW NULL
|
||||||
#define DFL_PSK_LIST NULL
|
#define DFL_PSK_LIST NULL
|
||||||
#define DFL_FORCE_CIPHER 0
|
#define DFL_FORCE_CIPHER 0
|
||||||
#define DFL_VERSION_SUITES NULL
|
|
||||||
#define DFL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION_DISABLED
|
#define DFL_RENEGOTIATION MBEDTLS_SSL_RENEGOTIATION_DISABLED
|
||||||
#define DFL_ALLOW_LEGACY -2
|
#define DFL_ALLOW_LEGACY -2
|
||||||
#define DFL_RENEGOTIATE 0
|
#define DFL_RENEGOTIATE 0
|
||||||
|
@ -503,9 +502,6 @@ int main( void )
|
||||||
" force_version=%%s default: \"\" (none)\n" \
|
" force_version=%%s default: \"\" (none)\n" \
|
||||||
" options: tls1_2, dtls1_2\n" \
|
" options: tls1_2, dtls1_2\n" \
|
||||||
"\n" \
|
"\n" \
|
||||||
" version_suites=a,b,c per-version ciphersuites\n" \
|
|
||||||
" in order from tls1 to tls1_2\n" \
|
|
||||||
" default: all enabled\n" \
|
|
||||||
" force_ciphersuite=<name> default: all enabled\n" \
|
" force_ciphersuite=<name> default: all enabled\n" \
|
||||||
" query_config=<name> return 0 if the specified\n" \
|
" query_config=<name> return 0 if the specified\n" \
|
||||||
" configuration macro is defined and 1\n" \
|
" configuration macro is defined and 1\n" \
|
||||||
|
@ -567,7 +563,6 @@ struct options
|
||||||
char *psk_list; /* list of PSK id/key pairs for callback */
|
char *psk_list; /* list of PSK id/key pairs for callback */
|
||||||
const char *ecjpake_pw; /* the EC J-PAKE password */
|
const char *ecjpake_pw; /* the EC J-PAKE password */
|
||||||
int force_ciphersuite[2]; /* protocol/ciphersuite to use, or all */
|
int force_ciphersuite[2]; /* protocol/ciphersuite to use, or all */
|
||||||
const char *version_suites; /* per-version ciphersuites */
|
|
||||||
int renegotiation; /* enable / disable renegotiation */
|
int renegotiation; /* enable / disable renegotiation */
|
||||||
int allow_legacy; /* allow legacy renegotiation */
|
int allow_legacy; /* allow legacy renegotiation */
|
||||||
int renegotiate; /* attempt renegotiation? */
|
int renegotiate; /* attempt renegotiation? */
|
||||||
|
@ -1255,7 +1250,6 @@ int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
int ret = 0, len, written, frags, exchanges_left;
|
int ret = 0, len, written, frags, exchanges_left;
|
||||||
int query_config_ret = 0;
|
int query_config_ret = 0;
|
||||||
int version_suites[3][2];
|
|
||||||
io_ctx_t io_ctx;
|
io_ctx_t io_ctx;
|
||||||
unsigned char* buf = 0;
|
unsigned char* buf = 0;
|
||||||
#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED)
|
#if defined(MBEDTLS_KEY_EXCHANGE_SOME_PSK_ENABLED)
|
||||||
|
@ -1483,7 +1477,6 @@ int main( int argc, char *argv[] )
|
||||||
opt.psk_list = DFL_PSK_LIST;
|
opt.psk_list = DFL_PSK_LIST;
|
||||||
opt.ecjpake_pw = DFL_ECJPAKE_PW;
|
opt.ecjpake_pw = DFL_ECJPAKE_PW;
|
||||||
opt.force_ciphersuite[0]= DFL_FORCE_CIPHER;
|
opt.force_ciphersuite[0]= DFL_FORCE_CIPHER;
|
||||||
opt.version_suites = DFL_VERSION_SUITES;
|
|
||||||
opt.renegotiation = DFL_RENEGOTIATION;
|
opt.renegotiation = DFL_RENEGOTIATION;
|
||||||
opt.allow_legacy = DFL_ALLOW_LEGACY;
|
opt.allow_legacy = DFL_ALLOW_LEGACY;
|
||||||
opt.renegotiate = DFL_RENEGOTIATE;
|
opt.renegotiate = DFL_RENEGOTIATE;
|
||||||
|
@ -1671,8 +1664,6 @@ int main( int argc, char *argv[] )
|
||||||
}
|
}
|
||||||
else if( strcmp( p, "curves" ) == 0 )
|
else if( strcmp( p, "curves" ) == 0 )
|
||||||
opt.curves = q;
|
opt.curves = q;
|
||||||
else if( strcmp( p, "version_suites" ) == 0 )
|
|
||||||
opt.version_suites = q;
|
|
||||||
else if( strcmp( p, "renegotiation" ) == 0 )
|
else if( strcmp( p, "renegotiation" ) == 0 )
|
||||||
{
|
{
|
||||||
opt.renegotiation = (atoi( q )) ?
|
opt.renegotiation = (atoi( q )) ?
|
||||||
|
@ -2038,10 +2029,6 @@ int main( int argc, char *argv[] )
|
||||||
if( opt.min_version < ciphersuite_info->min_minor_ver )
|
if( opt.min_version < ciphersuite_info->min_minor_ver )
|
||||||
{
|
{
|
||||||
opt.min_version = ciphersuite_info->min_minor_ver;
|
opt.min_version = ciphersuite_info->min_minor_ver;
|
||||||
/* DTLS starts with TLS 1.1 */
|
|
||||||
if( opt.transport == MBEDTLS_SSL_TRANSPORT_DATAGRAM &&
|
|
||||||
opt.min_version < MBEDTLS_SSL_MINOR_VERSION_2 )
|
|
||||||
opt.min_version = MBEDTLS_SSL_MINOR_VERSION_2;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
#if defined(MBEDTLS_USE_PSA_CRYPTO)
|
||||||
|
@ -2069,47 +2056,6 @@ int main( int argc, char *argv[] )
|
||||||
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
#endif /* MBEDTLS_USE_PSA_CRYPTO */
|
||||||
}
|
}
|
||||||
|
|
||||||
if( opt.version_suites != NULL )
|
|
||||||
{
|
|
||||||
const char *name[3] = { 0 };
|
|
||||||
|
|
||||||
/* Parse 4-element coma-separated list */
|
|
||||||
for( i = 0, p = (char *) opt.version_suites;
|
|
||||||
i < 3 && *p != '\0';
|
|
||||||
i++ )
|
|
||||||
{
|
|
||||||
name[i] = p;
|
|
||||||
|
|
||||||
/* Terminate the current string and move on to next one */
|
|
||||||
while( *p != ',' && *p != '\0' )
|
|
||||||
p++;
|
|
||||||
if( *p == ',' )
|
|
||||||
*p++ = '\0';
|
|
||||||
}
|
|
||||||
|
|
||||||
if( i != 3 )
|
|
||||||
{
|
|
||||||
mbedtls_printf( "too few values for version_suites\n" );
|
|
||||||
ret = 1;
|
|
||||||
goto exit;
|
|
||||||
}
|
|
||||||
|
|
||||||
memset( version_suites, 0, sizeof( version_suites ) );
|
|
||||||
|
|
||||||
/* Get the suites identifiers from their name */
|
|
||||||
for( i = 0; i < 3; i++ )
|
|
||||||
{
|
|
||||||
version_suites[i][0] = mbedtls_ssl_get_ciphersuite_id( name[i] );
|
|
||||||
|
|
||||||
if( version_suites[i][0] == 0 )
|
|
||||||
{
|
|
||||||
mbedtls_printf( "unknown ciphersuite: '%s'\n", name[i] );
|
|
||||||
ret = 2;
|
|
||||||
goto usage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
|
#if defined(MBEDTLS_SSL_DTLS_CONNECTION_ID)
|
||||||
if( mbedtls_test_unhexify( cid, sizeof( cid ),
|
if( mbedtls_test_unhexify( cid, sizeof( cid ),
|
||||||
opt.cid_val, &cid_len ) != 0 )
|
opt.cid_val, &cid_len ) != 0 )
|
||||||
|
@ -2691,19 +2637,6 @@ int main( int argc, char *argv[] )
|
||||||
if( opt.force_ciphersuite[0] != DFL_FORCE_CIPHER )
|
if( opt.force_ciphersuite[0] != DFL_FORCE_CIPHER )
|
||||||
mbedtls_ssl_conf_ciphersuites( &conf, opt.force_ciphersuite );
|
mbedtls_ssl_conf_ciphersuites( &conf, opt.force_ciphersuite );
|
||||||
|
|
||||||
if( opt.version_suites != NULL )
|
|
||||||
{
|
|
||||||
mbedtls_ssl_conf_ciphersuites_for_version( &conf, version_suites[0],
|
|
||||||
MBEDTLS_SSL_MAJOR_VERSION_3,
|
|
||||||
MBEDTLS_SSL_MINOR_VERSION_1 );
|
|
||||||
mbedtls_ssl_conf_ciphersuites_for_version( &conf, version_suites[1],
|
|
||||||
MBEDTLS_SSL_MAJOR_VERSION_3,
|
|
||||||
MBEDTLS_SSL_MINOR_VERSION_2 );
|
|
||||||
mbedtls_ssl_conf_ciphersuites_for_version( &conf, version_suites[2],
|
|
||||||
MBEDTLS_SSL_MAJOR_VERSION_3,
|
|
||||||
MBEDTLS_SSL_MINOR_VERSION_3 );
|
|
||||||
}
|
|
||||||
|
|
||||||
if( opt.allow_legacy != DFL_ALLOW_LEGACY )
|
if( opt.allow_legacy != DFL_ALLOW_LEGACY )
|
||||||
mbedtls_ssl_conf_legacy_renegotiation( &conf, opt.allow_legacy );
|
mbedtls_ssl_conf_legacy_renegotiation( &conf, opt.allow_legacy );
|
||||||
#if defined(MBEDTLS_SSL_RENEGOTIATION)
|
#if defined(MBEDTLS_SSL_RENEGOTIATION)
|
||||||
|
@ -3135,10 +3068,10 @@ handshake:
|
||||||
mbedtls_printf( " [ Record expansion is unknown ]\n" );
|
mbedtls_printf( " [ Record expansion is unknown ]\n" );
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
#if defined(MBEDTLS_SSL_MAX_FRAGMENT_LENGTH)
|
||||||
mbedtls_printf( " [ Maximum input fragment length is %u ]\n",
|
mbedtls_printf( " [ Maximum incoming record payload length is %u ]\n",
|
||||||
(unsigned int) mbedtls_ssl_get_input_max_frag_len( &ssl ) );
|
(unsigned int) mbedtls_ssl_get_max_in_record_payload( &ssl ) );
|
||||||
mbedtls_printf( " [ Maximum output fragment length is %u ]\n",
|
mbedtls_printf( " [ Maximum outgoing record payload length is %u ]\n",
|
||||||
(unsigned int) mbedtls_ssl_get_output_max_frag_len( &ssl ) );
|
(unsigned int) mbedtls_ssl_get_max_out_record_payload( &ssl ) );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_SSL_ALPN)
|
#if defined(MBEDTLS_SSL_ALPN)
|
||||||
|
|
|
@ -788,7 +788,7 @@ int main( int argc, char *argv[] )
|
||||||
{
|
{
|
||||||
mbedtls_snprintf( title, sizeof( title ), "RSA-%d", keysize );
|
mbedtls_snprintf( title, sizeof( title ), "RSA-%d", keysize );
|
||||||
|
|
||||||
mbedtls_rsa_init( &rsa, MBEDTLS_RSA_PKCS_V15, 0 );
|
mbedtls_rsa_init( &rsa );
|
||||||
mbedtls_rsa_gen_key( &rsa, myrand, NULL, keysize, 65537 );
|
mbedtls_rsa_gen_key( &rsa, myrand, NULL, keysize, 65537 );
|
||||||
|
|
||||||
TIME_PUBLIC( title, " public",
|
TIME_PUBLIC( title, " public",
|
||||||
|
|
|
@ -192,7 +192,6 @@ EXCLUDE_FROM_FULL = frozenset([
|
||||||
'MBEDTLS_RSA_NO_CRT', # influences the use of RSA in X.509 and TLS
|
'MBEDTLS_RSA_NO_CRT', # influences the use of RSA in X.509 and TLS
|
||||||
'MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN', # build dependency (clang+memsan)
|
'MBEDTLS_TEST_CONSTANT_FLOW_MEMSAN', # build dependency (clang+memsan)
|
||||||
'MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND', # build dependency (valgrind headers)
|
'MBEDTLS_TEST_CONSTANT_FLOW_VALGRIND', # build dependency (valgrind headers)
|
||||||
'MBEDTLS_X509_ALLOW_UNSUPPORTED_CRITICAL_EXTENSION', # influences the use of X.509 in TLS
|
|
||||||
'MBEDTLS_X509_REMOVE_INFO', # removes a feature
|
'MBEDTLS_X509_REMOVE_INFO', # removes a feature
|
||||||
])
|
])
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ unless( -f $config_file && -f $query_config_format_file ) {
|
||||||
# throw errors.
|
# throw errors.
|
||||||
my @excluded = qw(
|
my @excluded = qw(
|
||||||
MBEDTLS_SSL_CIPHERSUITES
|
MBEDTLS_SSL_CIPHERSUITES
|
||||||
MBEDTLS_PARAM_FAILED
|
|
||||||
);
|
);
|
||||||
my $excluded_re = join '|', @excluded;
|
my $excluded_re = join '|', @excluded;
|
||||||
|
|
||||||
|
|
|
@ -95,6 +95,7 @@ class PSAMacroEnumerator:
|
||||||
self.mac_algorithms = set() #type: Set[str]
|
self.mac_algorithms = set() #type: Set[str]
|
||||||
self.ka_algorithms = set() #type: Set[str]
|
self.ka_algorithms = set() #type: Set[str]
|
||||||
self.kdf_algorithms = set() #type: Set[str]
|
self.kdf_algorithms = set() #type: Set[str]
|
||||||
|
self.pake_algorithms = set() #type: Set[str]
|
||||||
self.aead_algorithms = set() #type: Set[str]
|
self.aead_algorithms = set() #type: Set[str]
|
||||||
# macro name -> list of argument names
|
# macro name -> list of argument names
|
||||||
self.argspecs = {} #type: Dict[str, List[str]]
|
self.argspecs = {} #type: Dict[str, List[str]]
|
||||||
|
@ -364,6 +365,7 @@ enumerate
|
||||||
'asymmetric_signature_algorithm': [],
|
'asymmetric_signature_algorithm': [],
|
||||||
'asymmetric_signature_wildcard': [self.algorithms],
|
'asymmetric_signature_wildcard': [self.algorithms],
|
||||||
'asymmetric_encryption_algorithm': [],
|
'asymmetric_encryption_algorithm': [],
|
||||||
|
'pake_algorithm': [self.pake_algorithms],
|
||||||
'other_algorithm': [],
|
'other_algorithm': [],
|
||||||
} #type: Dict[str, List[Set[str]]]
|
} #type: Dict[str, List[Set[str]]]
|
||||||
self.arguments_for['mac_length'] += ['1', '63']
|
self.arguments_for['mac_length'] += ['1', '63']
|
||||||
|
@ -389,6 +391,7 @@ enumerate
|
||||||
self.mac_algorithms.add('0x03007fff')
|
self.mac_algorithms.add('0x03007fff')
|
||||||
self.ka_algorithms.add('0x09fc0000')
|
self.ka_algorithms.add('0x09fc0000')
|
||||||
self.kdf_algorithms.add('0x080000ff')
|
self.kdf_algorithms.add('0x080000ff')
|
||||||
|
self.pake_algorithms.add('0x0a0000ff')
|
||||||
# For AEAD algorithms, the only variability is over the tag length,
|
# For AEAD algorithms, the only variability is over the tag length,
|
||||||
# and this only applies to known algorithms, so don't test an
|
# and this only applies to known algorithms, so don't test an
|
||||||
# unknown algorithm.
|
# unknown algorithm.
|
||||||
|
|
|
@ -180,95 +180,6 @@ unsigned char *mbedtls_test_unhexify_alloc( const char *ibuf, size_t *olen );
|
||||||
int mbedtls_test_hexcmp( uint8_t * a, uint8_t * b,
|
int mbedtls_test_hexcmp( uint8_t * a, uint8_t * b,
|
||||||
uint32_t a_len, uint32_t b_len );
|
uint32_t a_len, uint32_t b_len );
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
const char *failure_condition;
|
|
||||||
const char *file;
|
|
||||||
int line;
|
|
||||||
}
|
|
||||||
mbedtls_test_param_failed_location_record_t;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Get the location record of the last call to
|
|
||||||
* mbedtls_test_param_failed().
|
|
||||||
*
|
|
||||||
* \note The call expectation is set up and active until the next call to
|
|
||||||
* mbedtls_test_param_failed_check_expected_call() or
|
|
||||||
* mbedtls_param_failed() that cancels it.
|
|
||||||
*/
|
|
||||||
void mbedtls_test_param_failed_get_location_record(
|
|
||||||
mbedtls_test_param_failed_location_record_t *location_record );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief State that a call to mbedtls_param_failed() is expected.
|
|
||||||
*
|
|
||||||
* \note The call expectation is set up and active until the next call to
|
|
||||||
* mbedtls_test_param_failed_check_expected_call() or
|
|
||||||
* mbedtls_param_failed that cancel it.
|
|
||||||
*/
|
|
||||||
void mbedtls_test_param_failed_expect_call( void );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Check whether mbedtls_param_failed() has been called as expected.
|
|
||||||
*
|
|
||||||
* \note Check whether mbedtls_param_failed() has been called between the
|
|
||||||
* last call to mbedtls_test_param_failed_expect_call() and the call
|
|
||||||
* to this function.
|
|
||||||
*
|
|
||||||
* \return \c 0 Since the last call to mbedtls_param_failed_expect_call(),
|
|
||||||
* mbedtls_param_failed() has been called.
|
|
||||||
* \c -1 Otherwise.
|
|
||||||
*/
|
|
||||||
int mbedtls_test_param_failed_check_expected_call( void );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Get the address of the object of type jmp_buf holding the execution
|
|
||||||
* state information used by mbedtls_param_failed() to do a long jump.
|
|
||||||
*
|
|
||||||
* \note If a call to mbedtls_param_failed() is not expected in the sense
|
|
||||||
* that there is no call to mbedtls_test_param_failed_expect_call()
|
|
||||||
* preceding it, then mbedtls_param_failed() will try to restore the
|
|
||||||
* execution to the state stored in the jmp_buf object whose address
|
|
||||||
* is returned by the present function.
|
|
||||||
*
|
|
||||||
* \note This function is intended to provide the parameter of the
|
|
||||||
* setjmp() function to set-up where mbedtls_param_failed() should
|
|
||||||
* long-jump if it has to. It is foreseen to be used as:
|
|
||||||
*
|
|
||||||
* setjmp( mbedtls_test_param_failed_get_state_buf() ).
|
|
||||||
*
|
|
||||||
* \note The type of the returned value is not jmp_buf as jmp_buf is an
|
|
||||||
* an array type (C specification) and a function cannot return an
|
|
||||||
* array type.
|
|
||||||
*
|
|
||||||
* \note The type of the returned value is not jmp_buf* as then the return
|
|
||||||
* value couldn't be used by setjmp(), as its parameter's type is
|
|
||||||
* jmp_buf.
|
|
||||||
*
|
|
||||||
* \return Address of the object of type jmp_buf holding the execution state
|
|
||||||
* information used by mbedtls_param_failed() to do a long jump.
|
|
||||||
*/
|
|
||||||
void* mbedtls_test_param_failed_get_state_buf( void );
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Reset the execution state used by mbedtls_param_failed() to do a
|
|
||||||
* long jump.
|
|
||||||
*
|
|
||||||
* \note If a call to mbedtls_param_failed() is not expected in the sense
|
|
||||||
* that there is no call to mbedtls_test_param_failed_expect_call()
|
|
||||||
* preceding it, then mbedtls_param_failed() will try to restore the
|
|
||||||
* execution state that this function reset.
|
|
||||||
*
|
|
||||||
* \note It is recommended to reset the execution state when the state
|
|
||||||
* is not relevant anymore. That way an unexpected call to
|
|
||||||
* mbedtls_param_failed() will not trigger a long jump with
|
|
||||||
* undefined behavior but rather a long jump that will rather fault.
|
|
||||||
*/
|
|
||||||
void mbedtls_test_param_failed_reset_state( void );
|
|
||||||
#endif /* MBEDTLS_CHECK_PARAMS */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PSA_CRYPTO_C) && defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
|
#if defined(MBEDTLS_PSA_CRYPTO_C) && defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
|
||||||
#include "test/fake_external_rng_for_test.h"
|
#include "test/fake_external_rng_for_test.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -58,13 +58,6 @@
|
||||||
* It allows a library function to return a value and return an error
|
* It allows a library function to return a value and return an error
|
||||||
* code that can be tested.
|
* code that can be tested.
|
||||||
*
|
*
|
||||||
* When MBEDTLS_CHECK_PARAMS is enabled, calls to the parameter failure
|
|
||||||
* callback, MBEDTLS_PARAM_FAILED(), will be assumed to be a test
|
|
||||||
* failure.
|
|
||||||
*
|
|
||||||
* This macro is not suitable for negative parameter validation tests,
|
|
||||||
* as it assumes the test step will not create an error.
|
|
||||||
*
|
|
||||||
* Failing the test means:
|
* Failing the test means:
|
||||||
* - Mark this test case as failed.
|
* - Mark this test case as failed.
|
||||||
* - Print a message identifying the failure.
|
* - Print a message identifying the failure.
|
||||||
|
@ -181,107 +174,6 @@
|
||||||
} \
|
} \
|
||||||
} while( 0 )
|
} while( 0 )
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS) && !defined(MBEDTLS_PARAM_FAILED_ALT)
|
|
||||||
/**
|
|
||||||
* \brief This macro tests the statement passed to it as a test step or
|
|
||||||
* individual test in a test case. The macro assumes the test will fail
|
|
||||||
* and will generate an error.
|
|
||||||
*
|
|
||||||
* It allows a library function to return a value and tests the return
|
|
||||||
* code on return to confirm the given error code was returned.
|
|
||||||
*
|
|
||||||
* When MBEDTLS_CHECK_PARAMS is enabled, calls to the parameter failure
|
|
||||||
* callback, MBEDTLS_PARAM_FAILED(), are assumed to indicate the
|
|
||||||
* expected failure, and the test will pass.
|
|
||||||
*
|
|
||||||
* This macro is intended for negative parameter validation tests,
|
|
||||||
* where the failing function may return an error value or call
|
|
||||||
* MBEDTLS_PARAM_FAILED() to indicate the error.
|
|
||||||
*
|
|
||||||
* \param PARAM_ERROR_VALUE The expected error code.
|
|
||||||
*
|
|
||||||
* \param TEST The test expression to be tested.
|
|
||||||
*/
|
|
||||||
#define TEST_INVALID_PARAM_RET( PARAM_ERR_VALUE, TEST ) \
|
|
||||||
do { \
|
|
||||||
mbedtls_test_param_failed_expect_call( ); \
|
|
||||||
if( ( ( TEST ) != ( PARAM_ERR_VALUE ) ) || \
|
|
||||||
( mbedtls_test_param_failed_check_expected_call( ) != 0 ) ) \
|
|
||||||
{ \
|
|
||||||
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
|
||||||
goto exit; \
|
|
||||||
} \
|
|
||||||
mbedtls_test_param_failed_check_expected_call( ); \
|
|
||||||
} while( 0 )
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief This macro tests the statement passed to it as a test step or
|
|
||||||
* individual test in a test case. The macro assumes the test will fail
|
|
||||||
* and will generate an error.
|
|
||||||
*
|
|
||||||
* It assumes the library function under test cannot return a value and
|
|
||||||
* assumes errors can only be indicated byt calls to
|
|
||||||
* MBEDTLS_PARAM_FAILED().
|
|
||||||
*
|
|
||||||
* When MBEDTLS_CHECK_PARAMS is enabled, calls to the parameter failure
|
|
||||||
* callback, MBEDTLS_PARAM_FAILED(), are assumed to indicate the
|
|
||||||
* expected failure. If MBEDTLS_CHECK_PARAMS is not enabled, no test
|
|
||||||
* can be made.
|
|
||||||
*
|
|
||||||
* This macro is intended for negative parameter validation tests,
|
|
||||||
* where the failing function can only return an error by calling
|
|
||||||
* MBEDTLS_PARAM_FAILED() to indicate the error.
|
|
||||||
*
|
|
||||||
* \param TEST The test expression to be tested.
|
|
||||||
*/
|
|
||||||
#define TEST_INVALID_PARAM( TEST ) \
|
|
||||||
do { \
|
|
||||||
memcpy( jmp_tmp, mbedtls_test_param_failed_get_state_buf( ), \
|
|
||||||
sizeof( jmp_tmp ) ); \
|
|
||||||
if( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 ) \
|
|
||||||
{ \
|
|
||||||
TEST; \
|
|
||||||
mbedtls_test_fail( #TEST, __LINE__, __FILE__ ); \
|
|
||||||
goto exit; \
|
|
||||||
} \
|
|
||||||
mbedtls_test_param_failed_reset_state( ); \
|
|
||||||
} while( 0 )
|
|
||||||
#endif /* MBEDTLS_CHECK_PARAMS && !MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief This macro tests the statement passed to it as a test step or
|
|
||||||
* individual test in a test case. The macro assumes the test will not fail.
|
|
||||||
*
|
|
||||||
* It assumes the library function under test cannot return a value and
|
|
||||||
* assumes errors can only be indicated by calls to
|
|
||||||
* MBEDTLS_PARAM_FAILED().
|
|
||||||
*
|
|
||||||
* When MBEDTLS_CHECK_PARAMS is enabled, calls to the parameter failure
|
|
||||||
* callback, MBEDTLS_PARAM_FAILED(), are assumed to indicate the
|
|
||||||
* expected failure. If MBEDTLS_CHECK_PARAMS is not enabled, no test
|
|
||||||
* can be made.
|
|
||||||
*
|
|
||||||
* This macro is intended to test that functions returning void
|
|
||||||
* accept all of the parameter values they're supposed to accept - eg
|
|
||||||
* that they don't call MBEDTLS_PARAM_FAILED() when a parameter
|
|
||||||
* that's allowed to be NULL happens to be NULL.
|
|
||||||
*
|
|
||||||
* Note: for functions that return something other that void,
|
|
||||||
* checking that they accept all the parameters they're supposed to
|
|
||||||
* accept is best done by using TEST_ASSERT() and checking the return
|
|
||||||
* value as well.
|
|
||||||
*
|
|
||||||
* Note: this macro is available even when #MBEDTLS_CHECK_PARAMS is
|
|
||||||
* disabled, as it makes sense to check that the functions accept all
|
|
||||||
* legal values even if this option is disabled - only in that case,
|
|
||||||
* the test is more about whether the function segfaults than about
|
|
||||||
* whether it invokes MBEDTLS_PARAM_FAILED().
|
|
||||||
*
|
|
||||||
* \param TEST The test expression to be tested.
|
|
||||||
*/
|
|
||||||
#define TEST_VALID_PARAM( TEST ) \
|
|
||||||
TEST_ASSERT( ( TEST, 1 ) );
|
|
||||||
|
|
||||||
#define TEST_HELPER_ASSERT(a) if( !( a ) ) \
|
#define TEST_HELPER_ASSERT(a) if( !( a ) ) \
|
||||||
{ \
|
{ \
|
||||||
mbedtls_fprintf( stderr, "Assertion Failed at %s:%d - %s\n", \
|
mbedtls_fprintf( stderr, "Assertion Failed at %s:%d - %s\n", \
|
||||||
|
|
|
@ -1834,38 +1834,6 @@ component_build_psa_accel_key_type_rsa_public_key() {
|
||||||
make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS"
|
make CC=gcc CFLAGS="$ASAN_CFLAGS -DPSA_CRYPTO_DRIVER_TEST -DMBEDTLS_PSA_ACCEL_KEY_TYPE_RSA_PUBLIC_KEY -I../tests/include -O2" LDFLAGS="$ASAN_CFLAGS"
|
||||||
}
|
}
|
||||||
|
|
||||||
component_test_check_params_functionality () {
|
|
||||||
msg "build+test: MBEDTLS_CHECK_PARAMS functionality"
|
|
||||||
scripts/config.py full # includes CHECK_PARAMS
|
|
||||||
# Make MBEDTLS_PARAM_FAILED call mbedtls_param_failed().
|
|
||||||
scripts/config.py unset MBEDTLS_CHECK_PARAMS_ASSERT
|
|
||||||
make CC=gcc CFLAGS='-Werror -O1' all test
|
|
||||||
}
|
|
||||||
|
|
||||||
component_test_check_params_without_platform () {
|
|
||||||
msg "build+test: MBEDTLS_CHECK_PARAMS without MBEDTLS_PLATFORM_C"
|
|
||||||
scripts/config.py full # includes CHECK_PARAMS
|
|
||||||
# Keep MBEDTLS_PARAM_FAILED as assert.
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_EXIT_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_TIME_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_FPRINTF_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_MEMORY
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_NV_SEED_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_PRINTF_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_SNPRINTF_ALT
|
|
||||||
scripts/config.py unset MBEDTLS_ENTROPY_NV_SEED
|
|
||||||
scripts/config.py unset MBEDTLS_PLATFORM_C
|
|
||||||
make CC=gcc CFLAGS='-Werror -O1' all test
|
|
||||||
}
|
|
||||||
|
|
||||||
component_test_check_params_silent () {
|
|
||||||
msg "build+test: MBEDTLS_CHECK_PARAMS with alternative MBEDTLS_PARAM_FAILED()"
|
|
||||||
scripts/config.py full # includes CHECK_PARAMS
|
|
||||||
# Set MBEDTLS_PARAM_FAILED to nothing.
|
|
||||||
sed -i 's/.*\(#define MBEDTLS_PARAM_FAILED( cond )\).*/\1/' "$CONFIG_H"
|
|
||||||
make CC=gcc CFLAGS='-Werror -O1' all test
|
|
||||||
}
|
|
||||||
|
|
||||||
component_test_no_platform () {
|
component_test_no_platform () {
|
||||||
# Full configuration build, without platform support, file IO and net sockets.
|
# Full configuration build, without platform support, file IO and net sockets.
|
||||||
# This should catch missing mbedtls_printf definitions, and by disabling file
|
# This should catch missing mbedtls_printf definitions, and by disabling file
|
||||||
|
|
|
@ -19,27 +19,9 @@
|
||||||
#include <test/macros.h>
|
#include <test/macros.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
#include <setjmp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Static global variables */
|
/* Static global variables */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint8_t expected_call;
|
|
||||||
uint8_t expected_call_happened;
|
|
||||||
|
|
||||||
jmp_buf state;
|
|
||||||
|
|
||||||
mbedtls_test_param_failed_location_record_t location_record;
|
|
||||||
}
|
|
||||||
param_failed_ctx_t;
|
|
||||||
static param_failed_ctx_t param_failed_ctx;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PLATFORM_C)
|
#if defined(MBEDTLS_PLATFORM_C)
|
||||||
static mbedtls_platform_context platform_ctx;
|
static mbedtls_platform_context platform_ctx;
|
||||||
#endif
|
#endif
|
||||||
|
@ -222,67 +204,6 @@ int mbedtls_test_hexcmp( uint8_t * a, uint8_t * b,
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
void mbedtls_test_param_failed_get_location_record(
|
|
||||||
mbedtls_test_param_failed_location_record_t *location_record )
|
|
||||||
{
|
|
||||||
*location_record = param_failed_ctx.location_record;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_test_param_failed_expect_call( void )
|
|
||||||
{
|
|
||||||
param_failed_ctx.expected_call_happened = 0;
|
|
||||||
param_failed_ctx.expected_call = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int mbedtls_test_param_failed_check_expected_call( void )
|
|
||||||
{
|
|
||||||
param_failed_ctx.expected_call = 0;
|
|
||||||
|
|
||||||
if( param_failed_ctx.expected_call_happened != 0 )
|
|
||||||
return( 0 );
|
|
||||||
|
|
||||||
return( -1 );
|
|
||||||
}
|
|
||||||
|
|
||||||
void* mbedtls_test_param_failed_get_state_buf( void )
|
|
||||||
{
|
|
||||||
return ¶m_failed_ctx.state;
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_test_param_failed_reset_state( void )
|
|
||||||
{
|
|
||||||
memset( param_failed_ctx.state, 0, sizeof( param_failed_ctx.state ) );
|
|
||||||
}
|
|
||||||
|
|
||||||
void mbedtls_param_failed( const char *failure_condition,
|
|
||||||
const char *file,
|
|
||||||
int line )
|
|
||||||
{
|
|
||||||
/* Record the location of the failure */
|
|
||||||
param_failed_ctx.location_record.failure_condition = failure_condition;
|
|
||||||
param_failed_ctx.location_record.file = file;
|
|
||||||
param_failed_ctx.location_record.line = line;
|
|
||||||
|
|
||||||
/* If we are testing the callback function... */
|
|
||||||
if( param_failed_ctx.expected_call != 0 )
|
|
||||||
{
|
|
||||||
param_failed_ctx.expected_call = 0;
|
|
||||||
param_failed_ctx.expected_call_happened = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* ...else try a long jump. If the execution state has not been set-up
|
|
||||||
* or reset then the long jump buffer is all zero's and the call will
|
|
||||||
* with high probability fault, emphasizing there is something to look
|
|
||||||
* at.
|
|
||||||
*/
|
|
||||||
|
|
||||||
longjmp( param_failed_ctx.state, 1 );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* MBEDTLS_CHECK_PARAMS */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_TEST_HOOKS)
|
#if defined(MBEDTLS_TEST_HOOKS)
|
||||||
void mbedtls_test_err_add_check( int high, int low,
|
void mbedtls_test_err_add_check( int high, int low,
|
||||||
const char *file, int line )
|
const char *file, int line )
|
||||||
|
|
199
tests/ssl-opt.sh
199
tests/ssl-opt.sh
|
@ -2872,10 +2872,10 @@ run_test "Max fragment length: enabled, default" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3" \
|
"$P_CLI debug_level=3" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-c "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-C "client hello, adding max_fragment_length extension" \
|
-C "client hello, adding max_fragment_length extension" \
|
||||||
-S "found max fragment length extension" \
|
-S "found max fragment length extension" \
|
||||||
-S "server hello, max_fragment_length extension" \
|
-S "server hello, max_fragment_length extension" \
|
||||||
|
@ -2886,10 +2886,10 @@ run_test "Max fragment length: enabled, default, larger message" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
"$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-c "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-C "client hello, adding max_fragment_length extension" \
|
-C "client hello, adding max_fragment_length extension" \
|
||||||
-S "found max fragment length extension" \
|
-S "found max fragment length extension" \
|
||||||
-S "server hello, max_fragment_length extension" \
|
-S "server hello, max_fragment_length extension" \
|
||||||
|
@ -2903,10 +2903,10 @@ run_test "Max fragment length, DTLS: enabled, default, larger message" \
|
||||||
"$P_SRV debug_level=3 dtls=1" \
|
"$P_SRV debug_level=3 dtls=1" \
|
||||||
"$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
"$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
||||||
1 \
|
1 \
|
||||||
-c "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-c "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-C "client hello, adding max_fragment_length extension" \
|
-C "client hello, adding max_fragment_length extension" \
|
||||||
-S "found max fragment length extension" \
|
-S "found max fragment length extension" \
|
||||||
-S "server hello, max_fragment_length extension" \
|
-S "server hello, max_fragment_length extension" \
|
||||||
|
@ -2922,10 +2922,10 @@ run_test "Max fragment length: disabled, larger message" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
"$P_CLI debug_level=3 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
||||||
0 \
|
0 \
|
||||||
-C "Maximum input fragment length is 16384" \
|
-C "Maximum incoming record payload length is 16384" \
|
||||||
-C "Maximum output fragment length is 16384" \
|
-C "Maximum outgoing record payload length is 16384" \
|
||||||
-S "Maximum input fragment length is 16384" \
|
-S "Maximum incoming record payload length is 16384" \
|
||||||
-S "Maximum output fragment length is 16384" \
|
-S "Maximum outgoing record payload length is 16384" \
|
||||||
-c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
|
-c "$(( $MAX_CONTENT_LEN + 1)) bytes written in 2 fragments" \
|
||||||
-s "$MAX_CONTENT_LEN bytes read" \
|
-s "$MAX_CONTENT_LEN bytes read" \
|
||||||
-s "1 bytes read"
|
-s "1 bytes read"
|
||||||
|
@ -2935,10 +2935,10 @@ run_test "Max fragment length DTLS: disabled, larger message" \
|
||||||
"$P_SRV debug_level=3 dtls=1" \
|
"$P_SRV debug_level=3 dtls=1" \
|
||||||
"$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
"$P_CLI debug_level=3 dtls=1 request_size=$(( $MAX_CONTENT_LEN + 1))" \
|
||||||
1 \
|
1 \
|
||||||
-C "Maximum input fragment length is 16384" \
|
-C "Maximum incoming record payload length is 16384" \
|
||||||
-C "Maximum output fragment length is 16384" \
|
-C "Maximum outgoing record payload length is 16384" \
|
||||||
-S "Maximum input fragment length is 16384" \
|
-S "Maximum incoming record payload length is 16384" \
|
||||||
-S "Maximum output fragment length is 16384" \
|
-S "Maximum outgoing record payload length is 16384" \
|
||||||
-c "fragment larger than.*maximum "
|
-c "fragment larger than.*maximum "
|
||||||
|
|
||||||
requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
|
requires_config_enabled MBEDTLS_SSL_MAX_FRAGMENT_LENGTH
|
||||||
|
@ -2946,10 +2946,10 @@ run_test "Max fragment length: used by client" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=4096" \
|
"$P_CLI debug_level=3 max_frag_len=4096" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 4096" \
|
-c "Maximum incoming record payload length is 4096" \
|
||||||
-c "Maximum output fragment length is 4096" \
|
-c "Maximum outgoing record payload length is 4096" \
|
||||||
-s "Maximum input fragment length is 4096" \
|
-s "Maximum incoming record payload length is 4096" \
|
||||||
-s "Maximum output fragment length is 4096" \
|
-s "Maximum outgoing record payload length is 4096" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -2960,10 +2960,10 @@ run_test "Max fragment length: client 512, server 1024" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=1024" \
|
"$P_SRV debug_level=3 max_frag_len=1024" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=512" \
|
"$P_CLI debug_level=3 max_frag_len=512" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 512" \
|
-c "Maximum incoming record payload length is 512" \
|
||||||
-c "Maximum output fragment length is 512" \
|
-c "Maximum outgoing record payload length is 512" \
|
||||||
-s "Maximum input fragment length is 512" \
|
-s "Maximum incoming record payload length is 512" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -2974,10 +2974,10 @@ run_test "Max fragment length: client 512, server 2048" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=2048" \
|
"$P_SRV debug_level=3 max_frag_len=2048" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=512" \
|
"$P_CLI debug_level=3 max_frag_len=512" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 512" \
|
-c "Maximum incoming record payload length is 512" \
|
||||||
-c "Maximum output fragment length is 512" \
|
-c "Maximum outgoing record payload length is 512" \
|
||||||
-s "Maximum input fragment length is 512" \
|
-s "Maximum incoming record payload length is 512" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -2988,10 +2988,10 @@ run_test "Max fragment length: client 512, server 4096" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=4096" \
|
"$P_SRV debug_level=3 max_frag_len=4096" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=512" \
|
"$P_CLI debug_level=3 max_frag_len=512" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 512" \
|
-c "Maximum incoming record payload length is 512" \
|
||||||
-c "Maximum output fragment length is 512" \
|
-c "Maximum outgoing record payload length is 512" \
|
||||||
-s "Maximum input fragment length is 512" \
|
-s "Maximum incoming record payload length is 512" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3002,10 +3002,10 @@ run_test "Max fragment length: client 1024, server 512" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=512" \
|
"$P_SRV debug_level=3 max_frag_len=512" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=1024" \
|
"$P_CLI debug_level=3 max_frag_len=1024" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 1024" \
|
-c "Maximum incoming record payload length is 1024" \
|
||||||
-c "Maximum output fragment length is 1024" \
|
-c "Maximum outgoing record payload length is 1024" \
|
||||||
-s "Maximum input fragment length is 1024" \
|
-s "Maximum incoming record payload length is 1024" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3016,10 +3016,10 @@ run_test "Max fragment length: client 1024, server 2048" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=2048" \
|
"$P_SRV debug_level=3 max_frag_len=2048" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=1024" \
|
"$P_CLI debug_level=3 max_frag_len=1024" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 1024" \
|
-c "Maximum incoming record payload length is 1024" \
|
||||||
-c "Maximum output fragment length is 1024" \
|
-c "Maximum outgoing record payload length is 1024" \
|
||||||
-s "Maximum input fragment length is 1024" \
|
-s "Maximum incoming record payload length is 1024" \
|
||||||
-s "Maximum output fragment length is 1024" \
|
-s "Maximum outgoing record payload length is 1024" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3030,10 +3030,10 @@ run_test "Max fragment length: client 1024, server 4096" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=4096" \
|
"$P_SRV debug_level=3 max_frag_len=4096" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=1024" \
|
"$P_CLI debug_level=3 max_frag_len=1024" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 1024" \
|
-c "Maximum incoming record payload length is 1024" \
|
||||||
-c "Maximum output fragment length is 1024" \
|
-c "Maximum outgoing record payload length is 1024" \
|
||||||
-s "Maximum input fragment length is 1024" \
|
-s "Maximum incoming record payload length is 1024" \
|
||||||
-s "Maximum output fragment length is 1024" \
|
-s "Maximum outgoing record payload length is 1024" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3044,10 +3044,10 @@ run_test "Max fragment length: client 2048, server 512" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=512" \
|
"$P_SRV debug_level=3 max_frag_len=512" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=2048" \
|
"$P_CLI debug_level=3 max_frag_len=2048" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3058,10 +3058,10 @@ run_test "Max fragment length: client 2048, server 1024" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=1024" \
|
"$P_SRV debug_level=3 max_frag_len=1024" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=2048" \
|
"$P_CLI debug_level=3 max_frag_len=2048" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 1024" \
|
-s "Maximum outgoing record payload length is 1024" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3072,10 +3072,10 @@ run_test "Max fragment length: client 2048, server 4096" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=4096" \
|
"$P_SRV debug_level=3 max_frag_len=4096" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=2048" \
|
"$P_CLI debug_level=3 max_frag_len=2048" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 2048" \
|
-s "Maximum outgoing record payload length is 2048" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3086,10 +3086,10 @@ run_test "Max fragment length: client 4096, server 512" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=512" \
|
"$P_SRV debug_level=3 max_frag_len=512" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=4096" \
|
"$P_CLI debug_level=3 max_frag_len=4096" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 4096" \
|
-c "Maximum incoming record payload length is 4096" \
|
||||||
-c "Maximum output fragment length is 4096" \
|
-c "Maximum outgoing record payload length is 4096" \
|
||||||
-s "Maximum input fragment length is 4096" \
|
-s "Maximum incoming record payload length is 4096" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3100,10 +3100,10 @@ run_test "Max fragment length: client 4096, server 1024" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=1024" \
|
"$P_SRV debug_level=3 max_frag_len=1024" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=4096" \
|
"$P_CLI debug_level=3 max_frag_len=4096" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 4096" \
|
-c "Maximum incoming record payload length is 4096" \
|
||||||
-c "Maximum output fragment length is 4096" \
|
-c "Maximum outgoing record payload length is 4096" \
|
||||||
-s "Maximum input fragment length is 4096" \
|
-s "Maximum incoming record payload length is 4096" \
|
||||||
-s "Maximum output fragment length is 1024" \
|
-s "Maximum outgoing record payload length is 1024" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3114,10 +3114,10 @@ run_test "Max fragment length: client 4096, server 2048" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=2048" \
|
"$P_SRV debug_level=3 max_frag_len=2048" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=4096" \
|
"$P_CLI debug_level=3 max_frag_len=4096" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 4096" \
|
-c "Maximum incoming record payload length is 4096" \
|
||||||
-c "Maximum output fragment length is 4096" \
|
-c "Maximum outgoing record payload length is 4096" \
|
||||||
-s "Maximum input fragment length is 4096" \
|
-s "Maximum incoming record payload length is 4096" \
|
||||||
-s "Maximum output fragment length is 2048" \
|
-s "Maximum outgoing record payload length is 2048" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3128,10 +3128,10 @@ run_test "Max fragment length: used by server" \
|
||||||
"$P_SRV debug_level=3 max_frag_len=4096" \
|
"$P_SRV debug_level=3 max_frag_len=4096" \
|
||||||
"$P_CLI debug_level=3" \
|
"$P_CLI debug_level=3" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-c "Maximum output fragment length is $MAX_CONTENT_LEN" \
|
-c "Maximum outgoing record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum input fragment length is $MAX_CONTENT_LEN" \
|
-s "Maximum incoming record payload length is $MAX_CONTENT_LEN" \
|
||||||
-s "Maximum output fragment length is 4096" \
|
-s "Maximum outgoing record payload length is 4096" \
|
||||||
-C "client hello, adding max_fragment_length extension" \
|
-C "client hello, adding max_fragment_length extension" \
|
||||||
-S "found max fragment length extension" \
|
-S "found max fragment length extension" \
|
||||||
-S "server hello, max_fragment_length extension" \
|
-S "server hello, max_fragment_length extension" \
|
||||||
|
@ -3143,8 +3143,8 @@ run_test "Max fragment length: gnutls server" \
|
||||||
"$G_SRV" \
|
"$G_SRV" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=4096" \
|
"$P_CLI debug_level=3 max_frag_len=4096" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 4096" \
|
-c "Maximum incoming record payload length is 4096" \
|
||||||
-c "Maximum output fragment length is 4096" \
|
-c "Maximum outgoing record payload length is 4096" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-c "found max_fragment_length extension"
|
-c "found max_fragment_length extension"
|
||||||
|
|
||||||
|
@ -3153,10 +3153,10 @@ run_test "Max fragment length: client, message just fits" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \
|
"$P_CLI debug_level=3 max_frag_len=2048 request_size=2048" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 2048" \
|
-s "Maximum outgoing record payload length is 2048" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3169,10 +3169,10 @@ run_test "Max fragment length: client, larger message" \
|
||||||
"$P_SRV debug_level=3" \
|
"$P_SRV debug_level=3" \
|
||||||
"$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \
|
"$P_CLI debug_level=3 max_frag_len=2048 request_size=2345" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 2048" \
|
-s "Maximum outgoing record payload length is 2048" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3186,10 +3186,10 @@ run_test "Max fragment length: DTLS client, larger message" \
|
||||||
"$P_SRV debug_level=3 dtls=1" \
|
"$P_SRV debug_level=3 dtls=1" \
|
||||||
"$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \
|
"$P_CLI debug_level=3 dtls=1 max_frag_len=2048 request_size=2345" \
|
||||||
1 \
|
1 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 2048" \
|
-s "Maximum outgoing record payload length is 2048" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -3296,10 +3296,10 @@ run_test "Renegotiation with max fragment length: client 2048, server 512" \
|
||||||
"$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1 max_frag_len=512" \
|
"$P_SRV debug_level=3 exchanges=2 renegotiation=1 auth_mode=optional renegotiate=1 max_frag_len=512" \
|
||||||
"$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 max_frag_len=2048 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8" \
|
"$P_CLI debug_level=3 exchanges=2 renegotiation=1 renegotiate=1 max_frag_len=2048 force_ciphersuite=TLS-ECDHE-ECDSA-WITH-AES-128-CCM-8" \
|
||||||
0 \
|
0 \
|
||||||
-c "Maximum input fragment length is 2048" \
|
-c "Maximum incoming record payload length is 2048" \
|
||||||
-c "Maximum output fragment length is 2048" \
|
-c "Maximum outgoing record payload length is 2048" \
|
||||||
-s "Maximum input fragment length is 2048" \
|
-s "Maximum incoming record payload length is 2048" \
|
||||||
-s "Maximum output fragment length is 512" \
|
-s "Maximum outgoing record payload length is 512" \
|
||||||
-c "client hello, adding max_fragment_length extension" \
|
-c "client hello, adding max_fragment_length extension" \
|
||||||
-s "found max fragment length extension" \
|
-s "found max fragment length extension" \
|
||||||
-s "server hello, max_fragment_length extension" \
|
-s "server hello, max_fragment_length extension" \
|
||||||
|
@ -5614,17 +5614,6 @@ run_test "ECJPAKE: working, DTLS, nolog" \
|
||||||
force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
|
force_ciphersuite=TLS-ECJPAKE-WITH-AES-128-CCM-8" \
|
||||||
0
|
0
|
||||||
|
|
||||||
# Tests for ciphersuites per version
|
|
||||||
|
|
||||||
requires_config_enabled MBEDTLS_SSL_PROTO_TLS1_2
|
|
||||||
requires_config_enabled MBEDTLS_CAMELLIA_C
|
|
||||||
requires_config_enabled MBEDTLS_AES_C
|
|
||||||
run_test "Per-version suites: TLS 1.2" \
|
|
||||||
"$P_SRV version_suites=TLS-RSA-WITH-AES-256-CBC-SHA,TLS-RSA-WITH-AES-128-CBC-SHA,TLS-RSA-WITH-AES-128-GCM-SHA256" \
|
|
||||||
"$P_CLI force_version=tls1_2" \
|
|
||||||
0 \
|
|
||||||
-c "Ciphersuite is TLS-RSA-WITH-AES-128-GCM-SHA256"
|
|
||||||
|
|
||||||
# Test for ClientHello without extensions
|
# Test for ClientHello without extensions
|
||||||
|
|
||||||
requires_gnutls
|
requires_gnutls
|
||||||
|
|
|
@ -31,11 +31,6 @@
|
||||||
#include "mbedtls/memory_buffer_alloc.h"
|
#include "mbedtls/memory_buffer_alloc.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
#include "mbedtls/platform_util.h"
|
|
||||||
#include <setjmp.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef _MSC_VER
|
#ifdef _MSC_VER
|
||||||
#include <basetsd.h>
|
#include <basetsd.h>
|
||||||
typedef UINT8 uint8_t;
|
typedef UINT8 uint8_t;
|
||||||
|
@ -81,10 +76,6 @@ typedef struct data_tag
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Global variables */
|
/* Global variables */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
jmp_buf jmp_tmp;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*----------------------------------------------------------------------------*/
|
/*----------------------------------------------------------------------------*/
|
||||||
/* Helper flags for complex dependencies */
|
/* Helper flags for complex dependencies */
|
||||||
|
|
||||||
|
|
|
@ -150,50 +150,6 @@ $dispatch_code
|
||||||
#line $line_no "suites/main_test.function"
|
#line $line_no "suites/main_test.function"
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
|
||||||
* \brief Execute the test function.
|
|
||||||
*
|
|
||||||
* This is a wrapper function around the test function execution
|
|
||||||
* to allow the setjmp() call used to catch any calls to the
|
|
||||||
* parameter failure callback, to be used. Calls to setjmp()
|
|
||||||
* can invalidate the state of any local auto variables.
|
|
||||||
*
|
|
||||||
* \param fp Function pointer to the test function.
|
|
||||||
* \param params Parameters to pass to the #TestWrapper_t wrapper function.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void execute_function_ptr(TestWrapper_t fp, void **params)
|
|
||||||
{
|
|
||||||
#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
|
|
||||||
mbedtls_test_enable_insecure_external_rng( );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CHECK_PARAMS)
|
|
||||||
mbedtls_test_param_failed_location_record_t location_record;
|
|
||||||
|
|
||||||
if ( setjmp( mbedtls_test_param_failed_get_state_buf( ) ) == 0 )
|
|
||||||
{
|
|
||||||
fp( params );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Unexpected parameter validation error */
|
|
||||||
mbedtls_test_param_failed_get_location_record( &location_record );
|
|
||||||
mbedtls_test_fail( location_record.failure_condition,
|
|
||||||
location_record.line,
|
|
||||||
location_record.file );
|
|
||||||
}
|
|
||||||
|
|
||||||
mbedtls_test_param_failed_reset_state( );
|
|
||||||
#else
|
|
||||||
fp( params );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
|
||||||
mbedtls_test_mutex_usage_check( );
|
|
||||||
#endif /* MBEDTLS_TEST_MUTEX_USAGE */
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* \brief Dispatches test functions based on function index.
|
* \brief Dispatches test functions based on function index.
|
||||||
*
|
*
|
||||||
|
@ -214,7 +170,17 @@ int dispatch_test( size_t func_idx, void ** params )
|
||||||
{
|
{
|
||||||
fp = test_funcs[func_idx];
|
fp = test_funcs[func_idx];
|
||||||
if ( fp )
|
if ( fp )
|
||||||
execute_function_ptr(fp, params);
|
{
|
||||||
|
#if defined(MBEDTLS_PSA_CRYPTO_EXTERNAL_RNG)
|
||||||
|
mbedtls_test_enable_insecure_external_rng( );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
fp( params );
|
||||||
|
|
||||||
|
#if defined(MBEDTLS_TEST_MUTEX_USAGE)
|
||||||
|
mbedtls_test_mutex_usage_check( );
|
||||||
|
#endif /* MBEDTLS_TEST_MUTEX_USAGE */
|
||||||
|
}
|
||||||
else
|
else
|
||||||
ret = DISPATCH_UNSUPPORTED_SUITE;
|
ret = DISPATCH_UNSUPPORTED_SUITE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -206,9 +206,6 @@ void aes_crypt_xts_size( int size, int retval )
|
||||||
mbedtls_aes_xts_init( &ctx );
|
mbedtls_aes_xts_init( &ctx );
|
||||||
memset( data_unit, 0x00, sizeof( data_unit ) );
|
memset( data_unit, 0x00, sizeof( data_unit ) );
|
||||||
|
|
||||||
|
|
||||||
/* Valid pointers are passed for builds with MBEDTLS_CHECK_PARAMS, as
|
|
||||||
* otherwise we wouldn't get to the size check we're interested in. */
|
|
||||||
TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval );
|
TEST_ASSERT( mbedtls_aes_crypt_xts( &ctx, MBEDTLS_AES_ENCRYPT, length, data_unit, src, output ) == retval );
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
@ -359,194 +356,41 @@ exit:
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void aes_check_params( )
|
void aes_invalid_mode( )
|
||||||
{
|
{
|
||||||
mbedtls_aes_context aes_ctx;
|
mbedtls_aes_context aes_ctx;
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
|
||||||
mbedtls_aes_xts_context xts_ctx;
|
|
||||||
#endif
|
|
||||||
const unsigned char key[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
|
|
||||||
const unsigned char in[16] = { 0 };
|
const unsigned char in[16] = { 0 };
|
||||||
unsigned char out[16];
|
unsigned char out[16];
|
||||||
size_t size;
|
|
||||||
const int valid_mode = MBEDTLS_AES_ENCRYPT;
|
|
||||||
const int invalid_mode = 42;
|
const int invalid_mode = 42;
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_aes_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
mbedtls_aes_crypt_ecb( &aes_ctx, invalid_mode, in, out ) );
|
||||||
TEST_INVALID_PARAM( mbedtls_aes_xts_init( NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_setkey_enc( NULL, key, 128 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_setkey_enc( &aes_ctx, NULL, 128 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_setkey_dec( NULL, key, 128 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_setkey_dec( &aes_ctx, NULL, 128 ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_xts_setkey_enc( NULL, key, 128 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_xts_setkey_enc( &xts_ctx, NULL, 128 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_xts_setkey_dec( NULL, key, 128 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_xts_setkey_dec( &xts_ctx, NULL, 128 ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ecb( NULL,
|
|
||||||
valid_mode, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ecb( &aes_ctx,
|
|
||||||
invalid_mode, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ecb( &aes_ctx,
|
|
||||||
valid_mode, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ecb( &aes_ctx,
|
|
||||||
valid_mode, in, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
||||||
mbedtls_aes_crypt_cbc( NULL,
|
mbedtls_aes_crypt_cbc( &aes_ctx, invalid_mode, 16,
|
||||||
valid_mode, 16,
|
out, in, out ) );
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cbc( &aes_ctx,
|
|
||||||
invalid_mode, 16,
|
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cbc( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cbc( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
out, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cbc( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
out, in, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
mbedtls_aes_xts_context xts_ctx;
|
||||||
mbedtls_aes_crypt_xts( NULL,
|
|
||||||
valid_mode, 16,
|
TEST_EQUAL( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
||||||
in, in, out ) );
|
mbedtls_aes_crypt_xts( &xts_ctx, invalid_mode, 16,
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
in, in, out ) );
|
||||||
mbedtls_aes_crypt_xts( &xts_ctx,
|
|
||||||
invalid_mode, 16,
|
|
||||||
in, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_xts( &xts_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_xts( &xts_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
in, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_xts( &xts_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
in, in, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_XTS */
|
#endif /* MBEDTLS_CIPHER_MODE_XTS */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
size_t size;
|
||||||
mbedtls_aes_crypt_cfb128( NULL,
|
|
||||||
valid_mode, 16,
|
|
||||||
&size, out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb128( &aes_ctx,
|
|
||||||
invalid_mode, 16,
|
|
||||||
&size, out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb128( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
NULL, out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb128( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
&size, NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb128( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
&size, out, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb128( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
&size, out, in, NULL ) );
|
|
||||||
|
|
||||||
|
TEST_EQUAL( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
mbedtls_aes_crypt_cfb128( &aes_ctx, invalid_mode, 16,
|
||||||
mbedtls_aes_crypt_cfb8( NULL,
|
&size, out, in, out ) );
|
||||||
valid_mode, 16,
|
TEST_EQUAL( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
||||||
out, in, out ) );
|
mbedtls_aes_crypt_cfb8( &aes_ctx, invalid_mode, 16,
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
out, in, out ) );
|
||||||
mbedtls_aes_crypt_cfb8( &aes_ctx,
|
|
||||||
invalid_mode, 16,
|
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb8( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb8( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
out, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_cfb8( &aes_ctx,
|
|
||||||
valid_mode, 16,
|
|
||||||
out, in, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_OFB)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ofb( NULL, 16,
|
|
||||||
&size, out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ofb( &aes_ctx, 16,
|
|
||||||
NULL, out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ofb( &aes_ctx, 16,
|
|
||||||
&size, NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ofb( &aes_ctx, 16,
|
|
||||||
&size, out, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ofb( &aes_ctx, 16,
|
|
||||||
&size, out, in, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_OFB */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( NULL, 16, &size, out,
|
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( &aes_ctx, 16, NULL, out,
|
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, NULL,
|
|
||||||
out, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
|
|
||||||
NULL, in, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
|
|
||||||
out, NULL, out ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_AES_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aes_crypt_ctr( &aes_ctx, 16, &size, out,
|
|
||||||
out, in, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CTR */
|
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
@ -569,12 +413,6 @@ void aes_misc_params( )
|
||||||
size_t size;
|
size_t size;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* These calls accept NULL */
|
|
||||||
TEST_VALID_PARAM( mbedtls_aes_free( NULL ) );
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_XTS)
|
|
||||||
TEST_VALID_PARAM( mbedtls_aes_xts_free( NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
||||||
TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT,
|
TEST_ASSERT( mbedtls_aes_crypt_cbc( &aes_ctx, MBEDTLS_AES_ENCRYPT,
|
||||||
15,
|
15,
|
||||||
|
@ -609,6 +447,14 @@ void aes_misc_params( )
|
||||||
TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out )
|
TEST_ASSERT( mbedtls_aes_crypt_ofb( &aes_ctx, 16, &size, out, in, out )
|
||||||
== MBEDTLS_ERR_AES_BAD_INPUT_DATA );
|
== MBEDTLS_ERR_AES_BAD_INPUT_DATA );
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/*
|
||||||
|
* The following line needs to be added to make the code compilable
|
||||||
|
* when all the conditions above will be not define in a specific
|
||||||
|
* choice of features.
|
||||||
|
*/
|
||||||
|
TEST_ASSERT( 1 );
|
||||||
|
/* TODO: It will be removed when the whole test will be reworked */
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
|
|
@ -10,8 +10,8 @@ aes_encrypt_cbc:"000000000000000000000000000000000000000000000000000000000000000
|
||||||
AES-256-CBC Decrypt (Invalid input length)
|
AES-256-CBC Decrypt (Invalid input length)
|
||||||
aes_decrypt_cbc:"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000":"623a52fcea5d443e48d9181ab32c74":"":MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
|
aes_decrypt_cbc:"0000000000000000000000000000000000000000000000000000000000000000":"00000000000000000000000000000000":"623a52fcea5d443e48d9181ab32c74":"":MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH
|
||||||
|
|
||||||
AES - Optional Parameter Validation (MBEDTLS_CHECK_PARAMS)
|
AES - Mode Parameter Validation
|
||||||
aes_check_params:
|
aes_invalid_mode:
|
||||||
|
|
||||||
AES - Mandatory Parameter Validation and Valid Parameters
|
AES - Mandatory Parameter Validation and Valid Parameters
|
||||||
aes_misc_params:
|
aes_misc_params:
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
ARIA - Valid parameters
|
|
||||||
aria_valid_param:
|
|
||||||
|
|
||||||
ARIA - Invalid parameters
|
ARIA - Invalid parameters
|
||||||
aria_invalid_param:
|
aria_invalid_param:
|
||||||
|
|
||||||
|
|
|
@ -16,18 +16,10 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void aria_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_aria_free( NULL ) );
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void aria_invalid_param( )
|
void aria_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_aria_context ctx;
|
mbedtls_aria_context ctx;
|
||||||
unsigned char key[128 / 8] = { 0 };
|
|
||||||
unsigned char input[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
unsigned char input[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
||||||
unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
unsigned char output[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
||||||
unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
unsigned char iv[MBEDTLS_ARIA_BLOCKSIZE] = { 0 };
|
||||||
|
@ -35,78 +27,22 @@ void aria_invalid_param( )
|
||||||
|
|
||||||
((void) iv_off);
|
((void) iv_off);
|
||||||
((void) iv);
|
((void) iv);
|
||||||
|
((void) ctx);
|
||||||
TEST_INVALID_PARAM( mbedtls_aria_init( NULL ) );
|
((void) input);
|
||||||
|
((void) output);
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_setkey_enc( NULL, key,
|
|
||||||
sizeof( key ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_setkey_enc( &ctx, NULL,
|
|
||||||
sizeof( key ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_setkey_dec( NULL, key,
|
|
||||||
sizeof( key ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_setkey_dec( &ctx, NULL,
|
|
||||||
sizeof( key ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ecb( NULL, input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ecb( &ctx, NULL, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ecb( &ctx, input, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
||||||
mbedtls_aria_crypt_cbc( NULL,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cbc( &ctx,
|
mbedtls_aria_crypt_cbc( &ctx,
|
||||||
42 /* invalid mode */,
|
42 /* invalid mode */,
|
||||||
sizeof( input ),
|
sizeof( input ),
|
||||||
iv,
|
iv,
|
||||||
input,
|
input,
|
||||||
output ) );
|
output ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cbc( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
NULL,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cbc( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
iv,
|
|
||||||
NULL,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cbc( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
||||||
mbedtls_aria_crypt_cfb128( NULL,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cfb128( &ctx,
|
mbedtls_aria_crypt_cfb128( &ctx,
|
||||||
42, /* invalid mode */
|
42, /* invalid mode */
|
||||||
sizeof( input ),
|
sizeof( input ),
|
||||||
|
@ -114,91 +50,8 @@ void aria_invalid_param( )
|
||||||
iv,
|
iv,
|
||||||
input,
|
input,
|
||||||
output ) );
|
output ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cfb128( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
NULL,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cfb128( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
NULL,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cfb128( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
NULL,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_cfb128( &ctx,
|
|
||||||
MBEDTLS_ARIA_ENCRYPT,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( NULL,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( &ctx,
|
|
||||||
sizeof( input ),
|
|
||||||
NULL,
|
|
||||||
iv,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( &ctx,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
NULL,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( &ctx,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
NULL,
|
|
||||||
input,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( &ctx,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
iv,
|
|
||||||
NULL,
|
|
||||||
output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ARIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_aria_crypt_ctr( &ctx,
|
|
||||||
sizeof( input ),
|
|
||||||
&iv_off,
|
|
||||||
iv,
|
|
||||||
iv,
|
|
||||||
input,
|
|
||||||
NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CTR */
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
BLOWFISH - Valid parameters
|
|
||||||
blowfish_valid_param:
|
|
||||||
|
|
||||||
BLOWFISH - Invalid parameters
|
BLOWFISH - Invalid parameters
|
||||||
blowfish_invalid_param:
|
blowfish_invalid_param:
|
||||||
|
|
||||||
|
|
|
@ -7,159 +7,37 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void blowfish_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) );
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void blowfish_invalid_param( )
|
void blowfish_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_blowfish_context ctx;
|
mbedtls_blowfish_context ctx;
|
||||||
unsigned char buf[16] = { 0 };
|
unsigned char buf[16] = { 0 };
|
||||||
size_t const valid_keylength = sizeof( buf ) * 8;
|
|
||||||
size_t valid_mode = MBEDTLS_BLOWFISH_ENCRYPT;
|
|
||||||
size_t invalid_mode = 42;
|
size_t invalid_mode = 42;
|
||||||
size_t off;
|
size_t off;
|
||||||
((void) off);
|
((void) off);
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_blowfish_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
||||||
TEST_VALID_PARAM( mbedtls_blowfish_free( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_setkey( NULL,
|
|
||||||
buf,
|
|
||||||
valid_keylength ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_setkey( &ctx,
|
|
||||||
NULL,
|
|
||||||
valid_keylength ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ecb( NULL,
|
|
||||||
valid_mode,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ecb( &ctx,
|
mbedtls_blowfish_crypt_ecb( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
buf, buf ) );
|
buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ecb( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ecb( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
buf, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
||||||
mbedtls_blowfish_crypt_cbc( NULL,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cbc( &ctx,
|
mbedtls_blowfish_crypt_cbc( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
sizeof( buf ),
|
sizeof( buf ),
|
||||||
buf, buf, buf ) );
|
buf, buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL, buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
||||||
mbedtls_blowfish_crypt_cfb64( NULL,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cfb64( &ctx,
|
mbedtls_blowfish_crypt_cfb64( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
sizeof( buf ),
|
sizeof( buf ),
|
||||||
&off, buf,
|
&off, buf,
|
||||||
buf, buf ) );
|
buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cfb64( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cfb64( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, NULL,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cfb64( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_cfb64( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( NULL,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL,
|
|
||||||
buf, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
NULL, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, NULL,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_BLOWFISH_BAD_INPUT_DATA,
|
|
||||||
mbedtls_blowfish_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CTR */
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
Camellia - Valid parameters
|
|
||||||
camellia_valid_param:
|
|
||||||
|
|
||||||
Camellia - Invalid parameters
|
Camellia - Invalid parameters
|
||||||
camellia_invalid_param:
|
camellia_invalid_param:
|
||||||
|
|
||||||
|
|
|
@ -7,167 +7,37 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void camellia_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_camellia_free( NULL ) );
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void camellia_invalid_param( )
|
void camellia_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_camellia_context ctx;
|
mbedtls_camellia_context ctx;
|
||||||
unsigned char buf[16] = { 0 };
|
unsigned char buf[16] = { 0 };
|
||||||
const size_t valid_keybits = 128;
|
|
||||||
const int invalid_mode = 42;
|
const int invalid_mode = 42;
|
||||||
const int valid_mode = MBEDTLS_CAMELLIA_ENCRYPT;
|
|
||||||
size_t off;
|
size_t off;
|
||||||
((void) off);
|
((void) off);
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_camellia_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_setkey_enc( NULL,
|
|
||||||
buf,
|
|
||||||
valid_keybits ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_setkey_enc( &ctx,
|
|
||||||
NULL,
|
|
||||||
valid_keybits ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_setkey_dec( NULL,
|
|
||||||
buf,
|
|
||||||
valid_keybits ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_setkey_dec( &ctx,
|
|
||||||
NULL,
|
|
||||||
valid_keybits ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ecb( NULL,
|
|
||||||
valid_mode,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ecb( &ctx,
|
mbedtls_camellia_crypt_ecb( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
buf, buf ) );
|
buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ecb( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ecb( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
buf, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
#if defined(MBEDTLS_CIPHER_MODE_CBC)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
||||||
mbedtls_camellia_crypt_cbc( NULL,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cbc( &ctx,
|
mbedtls_camellia_crypt_cbc( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
sizeof( buf ),
|
sizeof( buf ),
|
||||||
buf, buf, buf ) );
|
buf, buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL, buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cbc( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
buf, buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
#endif /* MBEDTLS_CIPHER_MODE_CBC */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
#if defined(MBEDTLS_CIPHER_MODE_CFB)
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
||||||
mbedtls_camellia_crypt_cfb128( NULL,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cfb128( &ctx,
|
mbedtls_camellia_crypt_cfb128( &ctx,
|
||||||
invalid_mode,
|
invalid_mode,
|
||||||
sizeof( buf ),
|
sizeof( buf ),
|
||||||
&off, buf,
|
&off, buf,
|
||||||
buf, buf ) );
|
buf, buf ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cfb128( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cfb128( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, NULL,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cfb128( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_cfb128( &ctx,
|
|
||||||
valid_mode,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off, buf,
|
|
||||||
buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
#endif /* MBEDTLS_CIPHER_MODE_CFB */
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_CTR)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( NULL,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
NULL,
|
|
||||||
buf, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
NULL, buf,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, NULL,
|
|
||||||
buf, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CAMELLIA_BAD_INPUT_DATA,
|
|
||||||
mbedtls_camellia_crypt_ctr( &ctx,
|
|
||||||
sizeof( buf ),
|
|
||||||
&off,
|
|
||||||
buf, buf,
|
|
||||||
buf, NULL ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_CTR */
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,12 +1,6 @@
|
||||||
CCM self test
|
CCM self test
|
||||||
mbedtls_ccm_self_test:
|
mbedtls_ccm_self_test:
|
||||||
|
|
||||||
CCM - Invalid parameters
|
|
||||||
ccm_invalid_param:
|
|
||||||
|
|
||||||
CCM - Valid parameters
|
|
||||||
ccm_valid_param:
|
|
||||||
|
|
||||||
CCM init #1 AES-128: OK
|
CCM init #1 AES-128: OK
|
||||||
depends_on:MBEDTLS_AES_C
|
depends_on:MBEDTLS_AES_C
|
||||||
mbedtls_ccm_setkey:MBEDTLS_CIPHER_ID_AES:128:0
|
mbedtls_ccm_setkey:MBEDTLS_CIPHER_ID_AES:128:0
|
||||||
|
|
|
@ -291,216 +291,3 @@ exit:
|
||||||
mbedtls_ccm_free( &ctx );
|
mbedtls_ccm_free( &ctx );
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void ccm_invalid_param( )
|
|
||||||
{
|
|
||||||
struct mbedtls_ccm_context ctx;
|
|
||||||
unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
|
|
||||||
mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES;
|
|
||||||
int valid_len = sizeof(valid_buffer);
|
|
||||||
int valid_bitlen = valid_len * 8;
|
|
||||||
|
|
||||||
mbedtls_ccm_init( &ctx );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_init() */
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ccm_init( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_setkey() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_encrypt_and_tag() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_star_encrypt_and_tag() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_encrypt_and_tag( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_auth_decrypt() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( &ctx, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
/* mbedtls_ccm_star_auth_decrypt() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( &ctx, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CCM_BAD_INPUT,
|
|
||||||
mbedtls_ccm_star_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
exit:
|
|
||||||
mbedtls_ccm_free( &ctx );
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
|
||||||
void ccm_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_ccm_free( NULL ) );
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
|
@ -22,8 +22,5 @@ chacha20_crypt:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0
|
||||||
ChaCha20 RFC 7539 Test Vector #3 (Decrypt)
|
ChaCha20 RFC 7539 Test Vector #3 (Decrypt)
|
||||||
chacha20_crypt:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":"000000000000000000000002":42:"62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1":"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e"
|
chacha20_crypt:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc207075c0":"000000000000000000000002":42:"62e6347f95ed87a45ffae7426f27a1df5fb69110044c0d73118effa95b01e5cf166d3df2d721caf9b21e5fb14c616871fd84c54f9d65b283196c7fe4f60553ebf39c6402c42234e32a356b3e764312a61a5532055716ead6962568f87d3f3f7704c6a8d1bcd1bf4d50d6154b6da731b187b58dfd728afa36757a797ac188d1":"2754776173206272696c6c69672c20616e642074686520736c6974687920746f7665730a446964206779726520616e642067696d626c6520696e2074686520776162653a0a416c6c206d696d737920776572652074686520626f726f676f7665732c0a416e6420746865206d6f6d65207261746873206f757467726162652e"
|
||||||
|
|
||||||
ChaCha20 Paremeter Validation
|
|
||||||
chacha20_bad_params:
|
|
||||||
|
|
||||||
ChaCha20 Selftest
|
ChaCha20 Selftest
|
||||||
chacha20_self_test:
|
chacha20_self_test:
|
||||||
|
|
|
@ -66,52 +66,6 @@ void chacha20_crypt( data_t *key_str,
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void chacha20_bad_params()
|
|
||||||
{
|
|
||||||
unsigned char key[32];
|
|
||||||
unsigned char nonce[12];
|
|
||||||
unsigned char src[1];
|
|
||||||
unsigned char dst[1];
|
|
||||||
uint32_t counter = 0;
|
|
||||||
size_t len = sizeof( src );
|
|
||||||
mbedtls_chacha20_context ctx;
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_chacha20_init( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_chacha20_free( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_setkey( NULL, key ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_setkey( &ctx, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_starts( NULL, nonce, counter ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_starts( &ctx, NULL, counter ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_update( NULL, 0, src, dst ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_update( &ctx, len, NULL, dst ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_update( &ctx, len, src, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_crypt( NULL, nonce, counter, 0, src, dst ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_crypt( key, NULL, counter, 0, src, dst ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_crypt( key, nonce, counter, len, NULL, dst ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CHACHA20_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chacha20_crypt( key, nonce, counter, len, src, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
||||||
void chacha20_self_test()
|
void chacha20_self_test()
|
||||||
{
|
{
|
||||||
|
|
|
@ -19,9 +19,6 @@ mbedtls_chachapoly_dec:"1c9240a5eb55d38af333888604f6b5f0473917c1402b80099dca5cbc
|
||||||
ChaCha20-Poly1305 State Flow
|
ChaCha20-Poly1305 State Flow
|
||||||
chachapoly_state:
|
chachapoly_state:
|
||||||
|
|
||||||
ChaCha20-Poly1305 Parameter Validation
|
|
||||||
chachapoly_bad_params:
|
|
||||||
|
|
||||||
ChaCha20-Poly1305 Selftest
|
ChaCha20-Poly1305 Selftest
|
||||||
depends_on:MBEDTLS_SELF_TEST
|
depends_on:MBEDTLS_SELF_TEST
|
||||||
chachapoly_selftest:
|
chachapoly_selftest:
|
||||||
|
|
|
@ -66,137 +66,6 @@ exit:
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void chachapoly_bad_params()
|
|
||||||
{
|
|
||||||
unsigned char key[32];
|
|
||||||
unsigned char nonce[12];
|
|
||||||
unsigned char aad[1];
|
|
||||||
unsigned char input[1];
|
|
||||||
unsigned char output[1];
|
|
||||||
unsigned char mac[16];
|
|
||||||
size_t input_len = sizeof( input );
|
|
||||||
size_t aad_len = sizeof( aad );
|
|
||||||
mbedtls_chachapoly_context ctx;
|
|
||||||
|
|
||||||
memset( key, 0x00, sizeof( key ) );
|
|
||||||
memset( nonce, 0x00, sizeof( nonce ) );
|
|
||||||
memset( aad, 0x00, sizeof( aad ) );
|
|
||||||
memset( input, 0x00, sizeof( input ) );
|
|
||||||
memset( output, 0x00, sizeof( output ) );
|
|
||||||
memset( mac, 0x00, sizeof( mac ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_chachapoly_init( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_chachapoly_free( NULL ) );
|
|
||||||
|
|
||||||
/* setkey */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_setkey( NULL, key ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_setkey( &ctx, NULL ) );
|
|
||||||
|
|
||||||
/* encrypt_and_tag */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( NULL,
|
|
||||||
0, nonce,
|
|
||||||
aad, 0,
|
|
||||||
input, output, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( &ctx,
|
|
||||||
0, NULL,
|
|
||||||
aad, 0,
|
|
||||||
input, output, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( &ctx,
|
|
||||||
0, nonce,
|
|
||||||
NULL, aad_len,
|
|
||||||
input, output, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( &ctx,
|
|
||||||
input_len, nonce,
|
|
||||||
aad, 0,
|
|
||||||
NULL, output, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( &ctx,
|
|
||||||
input_len, nonce,
|
|
||||||
aad, 0,
|
|
||||||
input, NULL, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_encrypt_and_tag( &ctx,
|
|
||||||
0, nonce,
|
|
||||||
aad, 0,
|
|
||||||
input, output, NULL ) );
|
|
||||||
|
|
||||||
/* auth_decrypt */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( NULL,
|
|
||||||
0, nonce,
|
|
||||||
aad, 0,
|
|
||||||
mac, input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( &ctx,
|
|
||||||
0, NULL,
|
|
||||||
aad, 0,
|
|
||||||
mac, input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( &ctx,
|
|
||||||
0, nonce,
|
|
||||||
NULL, aad_len,
|
|
||||||
mac, input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( &ctx,
|
|
||||||
0, nonce,
|
|
||||||
aad, 0,
|
|
||||||
NULL, input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( &ctx,
|
|
||||||
input_len, nonce,
|
|
||||||
aad, 0,
|
|
||||||
mac, NULL, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_auth_decrypt( &ctx,
|
|
||||||
input_len, nonce,
|
|
||||||
aad, 0,
|
|
||||||
mac, input, NULL ) );
|
|
||||||
|
|
||||||
/* starts */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_starts( NULL, nonce,
|
|
||||||
MBEDTLS_CHACHAPOLY_ENCRYPT ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_starts( &ctx, NULL,
|
|
||||||
MBEDTLS_CHACHAPOLY_ENCRYPT ) );
|
|
||||||
|
|
||||||
/* update_aad */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_update_aad( NULL, aad,
|
|
||||||
aad_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_update_aad( &ctx, NULL,
|
|
||||||
aad_len ) );
|
|
||||||
|
|
||||||
/* update */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_update( NULL, input_len,
|
|
||||||
input, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_update( &ctx, input_len,
|
|
||||||
NULL, output ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_update( &ctx, input_len,
|
|
||||||
input, NULL ) );
|
|
||||||
|
|
||||||
/* finish */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_finish( NULL, mac ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_POLY1305_BAD_INPUT_DATA,
|
|
||||||
mbedtls_chachapoly_finish( &ctx, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void chachapoly_state()
|
void chachapoly_state()
|
||||||
{
|
{
|
||||||
|
|
|
@ -207,327 +207,27 @@ exit:
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void cipher_invalid_param_conditional( )
|
void cipher_invalid_param_conditional( )
|
||||||
{
|
{
|
||||||
mbedtls_cipher_context_t valid_ctx;
|
mbedtls_cipher_context_t valid_ctx;
|
||||||
|
|
||||||
mbedtls_operation_t valid_operation = MBEDTLS_ENCRYPT;
|
|
||||||
mbedtls_operation_t invalid_operation = 100;
|
mbedtls_operation_t invalid_operation = 100;
|
||||||
mbedtls_cipher_padding_t valid_mode = MBEDTLS_PADDING_ZEROS;
|
|
||||||
unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
|
unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07 };
|
||||||
int valid_size = sizeof(valid_buffer);
|
int valid_size = sizeof(valid_buffer);
|
||||||
int valid_bitlen = valid_size * 8;
|
int valid_bitlen = valid_size * 8;
|
||||||
const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type(
|
const mbedtls_cipher_info_t *valid_info = mbedtls_cipher_info_from_type(
|
||||||
*( mbedtls_cipher_list() ) );
|
*( mbedtls_cipher_list() ) );
|
||||||
|
|
||||||
size_t size_t_var;
|
TEST_EQUAL(
|
||||||
|
|
||||||
(void)valid_mode; /* In some configurations this is unused */
|
|
||||||
|
|
||||||
/* mbedtls_cipher_init() */
|
|
||||||
TEST_VALID_PARAM( mbedtls_cipher_init( &valid_ctx ) );
|
|
||||||
TEST_INVALID_PARAM( mbedtls_cipher_init( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_setup() */
|
|
||||||
TEST_VALID_PARAM( mbedtls_cipher_setup( &valid_ctx, valid_info ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_setup( NULL, valid_info ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_block_size() */
|
|
||||||
TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_block_size( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_cipher_mode() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_MODE_NONE,
|
|
||||||
mbedtls_cipher_get_cipher_mode( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_iv_size() */
|
|
||||||
TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_iv_size( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_type() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_CIPHER_NONE,
|
|
||||||
mbedtls_cipher_get_type( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_name() */
|
|
||||||
TEST_INVALID_PARAM_RET( 0, mbedtls_cipher_get_name( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_key_bitlen() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_KEY_LENGTH_NONE,
|
|
||||||
mbedtls_cipher_get_key_bitlen( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_get_operation() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_OPERATION_NONE,
|
|
||||||
mbedtls_cipher_get_operation( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_setkey() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_setkey( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_bitlen,
|
|
||||||
valid_operation ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_setkey( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
valid_bitlen,
|
|
||||||
valid_operation ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
||||||
mbedtls_cipher_setkey( &valid_ctx,
|
mbedtls_cipher_setkey( &valid_ctx,
|
||||||
valid_buffer,
|
valid_buffer,
|
||||||
valid_bitlen,
|
valid_bitlen,
|
||||||
invalid_operation ) );
|
invalid_operation ) );
|
||||||
|
|
||||||
/* mbedtls_cipher_set_iv() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_set_iv( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_set_iv( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
valid_size ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_reset() */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_reset( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
|
|
||||||
/* mbedtls_cipher_update_ad() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update_ad( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update_ad( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
valid_size ) );
|
|
||||||
#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_WITH_PADDING)
|
|
||||||
/* mbedtls_cipher_set_padding_mode() */
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_set_padding_mode( NULL, valid_mode ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* mbedtls_cipher_update() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_size,
|
|
||||||
valid_buffer,
|
|
||||||
&size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update( &valid_ctx,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer,
|
|
||||||
&size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL,
|
|
||||||
&size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_update( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_finish() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_finish( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
&size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_finish( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
&size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_finish( &valid_ctx,
|
|
||||||
valid_buffer,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C)
|
|
||||||
/* mbedtls_cipher_write_tag() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_write_tag( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_write_tag( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
valid_size ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_check_tag() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_check_tag( NULL,
|
|
||||||
valid_buffer,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_check_tag( &valid_ctx,
|
|
||||||
NULL,
|
|
||||||
valid_size ) );
|
|
||||||
#endif /* defined(MBEDTLS_GCM_C) || defined(MBEDTLS_CHACHAPOLY_C) */
|
|
||||||
|
|
||||||
/* mbedtls_cipher_crypt() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_crypt( NULL,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, &size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_crypt( &valid_ctx,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, &size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_crypt( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, &size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_crypt( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, &size_t_var ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_crypt( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_CIPHER_MODE_AEAD) || defined(MBEDTLS_NIST_KW_C)
|
|
||||||
/* mbedtls_cipher_auth_encrypt_ext */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( NULL,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( &valid_ctx,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_encrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, NULL,
|
|
||||||
valid_size ) );
|
|
||||||
|
|
||||||
/* mbedtls_cipher_auth_decrypt_ext */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( NULL,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( &valid_ctx,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size,
|
|
||||||
valid_buffer, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
NULL, valid_size, &size_t_var,
|
|
||||||
valid_size ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_CIPHER_BAD_INPUT_DATA,
|
|
||||||
mbedtls_cipher_auth_decrypt_ext( &valid_ctx,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size,
|
|
||||||
valid_buffer, valid_size, NULL,
|
|
||||||
valid_size ) );
|
|
||||||
#endif /* MBEDTLS_CIPHER_MODE_AEAD || MBEDTLS_NIST_KW_C */
|
|
||||||
|
|
||||||
/* mbedtls_cipher_free() */
|
|
||||||
TEST_VALID_PARAM( mbedtls_cipher_free( NULL ) );
|
|
||||||
exit:
|
exit:
|
||||||
TEST_VALID_PARAM( mbedtls_cipher_free( &valid_ctx ) );
|
;
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
|
|
|
@ -1,9 +1,6 @@
|
||||||
Diffie-Hellman full exchange: tiny x_size
|
Diffie-Hellman full exchange: tiny x_size
|
||||||
dhm_do_dhm:10:"93450983094850938450983409623":1:10:"9345098304850938450983409622":0
|
dhm_do_dhm:10:"93450983094850938450983409623":1:10:"9345098304850938450983409622":0
|
||||||
|
|
||||||
Diffie-Hellman parameter validation
|
|
||||||
dhm_invalid_params:
|
|
||||||
|
|
||||||
Diffie-Hellman full exchange: 5-bit, x_size=3
|
Diffie-Hellman full exchange: 5-bit, x_size=3
|
||||||
dhm_do_dhm:10:"23":3:10:"5":0
|
dhm_do_dhm:10:"23":3:10:"5":0
|
||||||
|
|
||||||
|
|
|
@ -70,113 +70,6 @@ exit:
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void dhm_invalid_params( )
|
|
||||||
{
|
|
||||||
mbedtls_dhm_context ctx;
|
|
||||||
unsigned char buf[42] = { 0 };
|
|
||||||
unsigned char *buf_null = NULL;
|
|
||||||
mbedtls_mpi X;
|
|
||||||
size_t const buflen = sizeof( buf );
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_dhm_init( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_dhm_free( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_params( NULL,
|
|
||||||
(unsigned char**) &buf,
|
|
||||||
buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_params( &ctx, &buf_null, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_params( &ctx, NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_params( &ctx,
|
|
||||||
(unsigned char**) &buf,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_params( NULL, buflen,
|
|
||||||
buf, &len,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_params( &ctx, buflen,
|
|
||||||
NULL, &len,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_params( &ctx, buflen,
|
|
||||||
buf, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_params( &ctx, buflen,
|
|
||||||
buf, &len,
|
|
||||||
NULL,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_set_group( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_set_group( &ctx, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_set_group( &ctx, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_public( NULL, buf, buflen ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_read_public( &ctx, NULL, buflen ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_public( NULL, buflen,
|
|
||||||
buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_public( &ctx, buflen,
|
|
||||||
NULL, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_make_public( &ctx, buflen,
|
|
||||||
buf, buflen,
|
|
||||||
NULL,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_calc_secret( NULL, buf, buflen, &len,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_calc_secret( &ctx, NULL, buflen, &len,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_calc_secret( &ctx, buf, buflen, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ASN1_PARSE_C)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_parse_dhm( NULL, buf, buflen ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_parse_dhm( &ctx, NULL, buflen ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_FS_IO)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_parse_dhmfile( NULL, "" ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_DHM_BAD_INPUT_DATA,
|
|
||||||
mbedtls_dhm_parse_dhmfile( &ctx, NULL ) );
|
|
||||||
#endif /* MBEDTLS_FS_IO */
|
|
||||||
#endif /* MBEDTLS_ASN1_PARSE_C */
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void dhm_do_dhm( int radix_P, char *input_P, int x_size,
|
void dhm_do_dhm( int radix_P, char *input_P, int x_size,
|
||||||
int radix_G, char *input_G, int result )
|
int radix_G, char *input_G, int result )
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
ECDH - Valid parameters
|
|
||||||
ecdh_valid_param:
|
|
||||||
|
|
||||||
ECDH - Invalid parameters
|
ECDH - Invalid parameters
|
||||||
ecdh_invalid_param:
|
ecdh_invalid_param:
|
||||||
|
|
||||||
|
|
|
@ -43,141 +43,17 @@ exit:
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void ecdh_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecdh_free( NULL ) );
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void ecdh_invalid_param( )
|
void ecdh_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_ecp_group grp;
|
|
||||||
mbedtls_ecdh_context ctx;
|
mbedtls_ecdh_context ctx;
|
||||||
mbedtls_mpi m;
|
|
||||||
mbedtls_ecp_point P;
|
|
||||||
mbedtls_ecp_keypair kp;
|
mbedtls_ecp_keypair kp;
|
||||||
size_t olen;
|
|
||||||
unsigned char buf[42] = { 0 };
|
|
||||||
const unsigned char *buf_null = NULL;
|
|
||||||
size_t const buflen = sizeof( buf );
|
|
||||||
int invalid_side = 42;
|
int invalid_side = 42;
|
||||||
mbedtls_ecp_group_id valid_grp = MBEDTLS_ECP_DP_SECP192R1;
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecdh_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecdh_enable_restart( NULL ) );
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_gen_public( NULL, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_gen_public( &grp, NULL, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_gen_public( &grp, &m, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_gen_public( &grp, &m, &P,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_compute_shared( NULL, &m, &P, &m,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_compute_shared( &grp, NULL, &P, &m,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_compute_shared( &grp, &m, NULL, &m,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_compute_shared( &grp, &m, &P, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_setup( NULL, valid_grp ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_params( NULL, &olen, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_params( &ctx, NULL, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_params( &ctx, &olen, NULL, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_params( &ctx, &olen, buf, buflen, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_params( NULL,
|
|
||||||
(const unsigned char**) &buf,
|
|
||||||
buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_params( &ctx, &buf_null,
|
|
||||||
buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_params( &ctx, NULL, buf ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_params( &ctx,
|
|
||||||
(const unsigned char**) &buf,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_get_params( NULL, &kp,
|
|
||||||
MBEDTLS_ECDH_OURS ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_get_params( &ctx, NULL,
|
|
||||||
MBEDTLS_ECDH_OURS ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_get_params( &ctx, &kp,
|
mbedtls_ecdh_get_params( &ctx, &kp,
|
||||||
invalid_side ) );
|
invalid_side ) );
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_public( NULL, &olen, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_public( &ctx, NULL, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_public( &ctx, &olen, NULL, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_make_public( &ctx, &olen, buf, buflen, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_public( NULL, buf, buflen ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_read_public( &ctx, NULL, buflen ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_calc_secret( NULL, &olen, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_calc_secret( &ctx, NULL, buf, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdh_calc_secret( &ctx, &olen, NULL, buflen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
ECDSA Parameter validation
|
|
||||||
ecdsa_invalid_param:
|
|
||||||
|
|
||||||
ECDSA primitive hash zero #1
|
ECDSA primitive hash zero #1
|
||||||
depends_on:MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
depends_on:MBEDTLS_ECP_DP_SECP192R1_ENABLED
|
||||||
ecdsa_prim_zero:MBEDTLS_ECP_DP_SECP192R1
|
ecdsa_prim_zero:MBEDTLS_ECP_DP_SECP192R1
|
||||||
|
|
|
@ -7,203 +7,6 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void ecdsa_invalid_param( )
|
|
||||||
{
|
|
||||||
mbedtls_ecdsa_context ctx;
|
|
||||||
mbedtls_ecp_keypair key;
|
|
||||||
mbedtls_ecp_group grp;
|
|
||||||
mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP192R1;
|
|
||||||
mbedtls_ecp_point P;
|
|
||||||
mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
|
|
||||||
mbedtls_mpi m;
|
|
||||||
size_t slen;
|
|
||||||
unsigned char buf[42] = { 0 };
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecdsa_init( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecdsa_free( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecdsa_restart_init( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecdsa_restart_free( NULL ) );
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( NULL, &m, &m, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( &grp, NULL, &m, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( &grp, &m, NULL, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( &grp, &m, &m, NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( &grp, &m, &m, &m,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign( &grp, &m, &m, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECDSA_DETERMINISTIC)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign_det_ext( NULL, &m, &m, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
valid_md,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign_det_ext( &grp, NULL, &m, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
valid_md,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign_det_ext( &grp, &m, NULL, &m,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
valid_md,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign_det_ext( &grp, &m, &m, NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
valid_md,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_sign_det_ext( &grp, &m, &m, &m,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
valid_md,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
#endif /* MBEDTLS_ECDSA_DETERMINISTIC */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_verify( NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
&P, &m, &m ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_verify( &grp,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
&P, &m, &m ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_verify( &grp,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, &m, &m ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_verify( &grp,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
&P, NULL, &m ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_verify( &grp,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
&P, &m, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature( NULL, valid_md, buf, sizeof( buf ),
|
|
||||||
buf, &slen, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature( &ctx, valid_md, NULL, sizeof( buf ),
|
|
||||||
buf, &slen, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature( &ctx, valid_md, buf, sizeof( buf ),
|
|
||||||
NULL, &slen, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature( &ctx, valid_md, buf, sizeof( buf ),
|
|
||||||
buf, NULL, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature_restartable( NULL, valid_md, buf,
|
|
||||||
sizeof( buf ), buf, &slen,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, NULL,
|
|
||||||
sizeof( buf ), buf, &slen,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, buf,
|
|
||||||
sizeof( buf ), NULL, &slen,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_write_signature_restartable( &ctx, valid_md, buf,
|
|
||||||
sizeof( buf ), buf, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature( NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature( &ctx,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature( &ctx,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature_restartable( NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature_restartable( &ctx,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_read_signature_restartable( &ctx,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_genkey( NULL, valid_group,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_genkey( &ctx, valid_group,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_from_keypair( NULL, &key ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecdsa_from_keypair( &ctx, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void ecdsa_prim_zero( int id )
|
void ecdsa_prim_zero( int id )
|
||||||
{
|
{
|
||||||
|
|
|
@ -98,100 +98,22 @@ cleanup:
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void ecjpake_invalid_param( )
|
void ecjpake_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_ecjpake_context ctx;
|
mbedtls_ecjpake_context ctx;
|
||||||
unsigned char buf[42] = { 0 };
|
unsigned char buf[42] = { 0 };
|
||||||
size_t olen;
|
|
||||||
size_t const len = sizeof( buf );
|
size_t const len = sizeof( buf );
|
||||||
mbedtls_ecjpake_role valid_role = MBEDTLS_ECJPAKE_SERVER;
|
|
||||||
mbedtls_ecjpake_role invalid_role = (mbedtls_ecjpake_role) 42;
|
mbedtls_ecjpake_role invalid_role = (mbedtls_ecjpake_role) 42;
|
||||||
mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
|
mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
|
||||||
mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP256R1;
|
mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP256R1;
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecjpake_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
||||||
TEST_VALID_PARAM( mbedtls_ecjpake_free( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_setup( NULL,
|
|
||||||
valid_role,
|
|
||||||
valid_md,
|
|
||||||
valid_group,
|
|
||||||
buf, len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_setup( &ctx,
|
mbedtls_ecjpake_setup( &ctx,
|
||||||
invalid_role,
|
invalid_role,
|
||||||
valid_md,
|
valid_md,
|
||||||
valid_group,
|
valid_group,
|
||||||
buf, len ) );
|
buf, len ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_setup( &ctx,
|
|
||||||
valid_role,
|
|
||||||
valid_md,
|
|
||||||
valid_group,
|
|
||||||
NULL, len ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_check( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_one( NULL, buf, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_one( &ctx, NULL, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_one( &ctx, buf, len, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_one( &ctx, buf, len, &olen, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_two( NULL, buf, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_two( &ctx, NULL, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_two( &ctx, buf, len, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_write_round_two( &ctx, buf, len, &olen, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_read_round_one( NULL,
|
|
||||||
buf, len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_read_round_one( &ctx,
|
|
||||||
NULL, len ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_read_round_two( NULL,
|
|
||||||
buf, len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_read_round_two( &ctx,
|
|
||||||
NULL, len ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_derive_secret( NULL, buf, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_derive_secret( &ctx, NULL, len, &olen,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_derive_secret( &ctx, buf, len, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecjpake_derive_secret( &ctx, buf, len, &olen, NULL, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
ECP valid params
|
|
||||||
ecp_valid_param:
|
|
||||||
|
|
||||||
ECP invalid params
|
ECP invalid params
|
||||||
ecp_invalid_param:
|
ecp_invalid_param:
|
||||||
|
|
||||||
|
|
|
@ -23,347 +23,26 @@
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void ecp_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecp_group_free( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecp_keypair_free( NULL ) );
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecp_point_free( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_VALID_PARAM( mbedtls_ecp_restart_free( NULL ) );
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void ecp_invalid_param( )
|
void ecp_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_ecp_group grp;
|
mbedtls_ecp_group grp;
|
||||||
mbedtls_ecp_keypair kp;
|
|
||||||
mbedtls_ecp_point P;
|
mbedtls_ecp_point P;
|
||||||
mbedtls_mpi m;
|
|
||||||
const char *x = "deadbeef";
|
|
||||||
int valid_fmt = MBEDTLS_ECP_PF_UNCOMPRESSED;
|
|
||||||
int invalid_fmt = 42;
|
int invalid_fmt = 42;
|
||||||
size_t olen;
|
size_t olen;
|
||||||
unsigned char buf[42] = { 0 };
|
unsigned char buf[42] = { 0 };
|
||||||
const unsigned char *null_buf = NULL;
|
|
||||||
mbedtls_ecp_group_id valid_group = MBEDTLS_ECP_DP_SECP192R1;
|
|
||||||
#if defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
mbedtls_ecp_restart_ctx restart_ctx;
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecp_point_init( NULL ) );
|
TEST_EQUAL( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
||||||
TEST_INVALID_PARAM( mbedtls_ecp_keypair_init( NULL ) );
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecp_group_init( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecp_restart_init( NULL ) );
|
|
||||||
TEST_INVALID_PARAM( mbedtls_ecp_check_budget( NULL, &restart_ctx, 42 ) );
|
|
||||||
#endif /* MBEDTLS_ECP_RESTARTABLE */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_copy( NULL, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_copy( &P, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_group_copy( NULL, &grp ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_group_copy( &grp, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_privkey( NULL,
|
|
||||||
&m,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_privkey( &grp,
|
|
||||||
NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_privkey( &grp,
|
|
||||||
&m,
|
|
||||||
NULL,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_set_zero( NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_is_zero( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_cmp( NULL, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_cmp( &P, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_string( NULL, 2,
|
|
||||||
x, x ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_string( &P, 2,
|
|
||||||
NULL, x ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_string( &P, 2,
|
|
||||||
x, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_write_binary( NULL, &P,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_write_binary( &grp, NULL,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_write_binary( &grp, &P,
|
mbedtls_ecp_point_write_binary( &grp, &P,
|
||||||
invalid_fmt,
|
invalid_fmt,
|
||||||
&olen,
|
&olen,
|
||||||
buf, sizeof( buf ) ) );
|
buf, sizeof( buf ) ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
TEST_EQUAL( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
||||||
mbedtls_ecp_point_write_binary( &grp, &P,
|
|
||||||
valid_fmt,
|
|
||||||
NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_write_binary( &grp, &P,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_binary( NULL, &P, buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_binary( &grp, NULL, buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_point_read_binary( &grp, &P, NULL,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_point( NULL, &P,
|
|
||||||
(const unsigned char **) &buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_point( &grp, NULL,
|
|
||||||
(const unsigned char **) &buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_point( &grp, &P, &null_buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_point( &grp, &P, NULL,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_point( NULL, &P,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_point( &grp, NULL,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_point( &grp, &P,
|
mbedtls_ecp_tls_write_point( &grp, &P,
|
||||||
invalid_fmt,
|
invalid_fmt,
|
||||||
&olen,
|
&olen,
|
||||||
buf,
|
buf,
|
||||||
sizeof( buf ) ) );
|
sizeof( buf ) ) );
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_point( &grp, &P,
|
|
||||||
valid_fmt,
|
|
||||||
NULL,
|
|
||||||
buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_point( &grp, &P,
|
|
||||||
valid_fmt,
|
|
||||||
&olen,
|
|
||||||
NULL,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_group_load( NULL, valid_group ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group( NULL,
|
|
||||||
(const unsigned char **) &buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group( &grp, NULL,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group( &grp, &null_buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group_id( NULL,
|
|
||||||
(const unsigned char **) &buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group_id( &valid_group, NULL,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_read_group_id( &valid_group,
|
|
||||||
&null_buf,
|
|
||||||
sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_group( NULL, &olen,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_group( &grp, NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_tls_write_group( &grp, &olen,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul( NULL, &P, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul( &grp, NULL, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul( &grp, &P, NULL, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul( &grp, &P, &m, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul_restartable( NULL, &P, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL , NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul_restartable( &grp, NULL, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL , NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul_restartable( &grp, &P, NULL, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL , NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_mul_restartable( &grp, &P, &m, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL , NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( NULL, &P, &m, &P,
|
|
||||||
&m, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( &grp, NULL, &m, &P,
|
|
||||||
&m, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( &grp, &P, NULL, &P,
|
|
||||||
&m, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( &grp, &P, &m, NULL,
|
|
||||||
&m, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( &grp, &P, &m, &P,
|
|
||||||
NULL, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd( &grp, &P, &m, &P,
|
|
||||||
&m, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( NULL, &P, &m, &P,
|
|
||||||
&m, &P, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( &grp, NULL, &m, &P,
|
|
||||||
&m, &P, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( &grp, &P, NULL, &P,
|
|
||||||
&m, &P, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( &grp, &P, &m, NULL,
|
|
||||||
&m, &P, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( &grp, &P, &m, &P,
|
|
||||||
NULL, &P, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_muladd_restartable( &grp, &P, &m, &P,
|
|
||||||
&m, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_pubkey( NULL, &P ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_pubkey( &grp, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_pub_priv( NULL, &kp ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_pub_priv( &kp, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_privkey( NULL, &m ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_check_privkey( &grp, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair_base( NULL, &P, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair_base( &grp, NULL, &m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair_base( &grp, &P, NULL, &P,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair_base( &grp, &P, &m, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair_base( &grp, &P, &m, &P, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair( NULL,
|
|
||||||
&m, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair( &grp,
|
|
||||||
NULL, &P,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair( &grp,
|
|
||||||
&m, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_keypair( &grp,
|
|
||||||
&m, &P,
|
|
||||||
NULL,
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_key( valid_group, NULL,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_ECP_BAD_INPUT_DATA,
|
|
||||||
mbedtls_ecp_gen_key( valid_group, &kp,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -181,178 +181,26 @@ exit:
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
/* BEGIN_CASE depends_on:NOT_DEFINED */
|
||||||
void gcm_invalid_param( )
|
void gcm_invalid_param( )
|
||||||
{
|
{
|
||||||
mbedtls_gcm_context ctx;
|
mbedtls_gcm_context ctx;
|
||||||
unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
|
unsigned char valid_buffer[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06 };
|
||||||
mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES;
|
mbedtls_cipher_id_t valid_cipher = MBEDTLS_CIPHER_ID_AES;
|
||||||
int valid_mode = MBEDTLS_GCM_ENCRYPT;
|
int invalid_bitlen = 1;
|
||||||
int valid_len = sizeof(valid_buffer);
|
|
||||||
int valid_bitlen = 128, invalid_bitlen = 1;
|
|
||||||
size_t olen;
|
|
||||||
|
|
||||||
mbedtls_gcm_init( &ctx );
|
mbedtls_gcm_init( &ctx );
|
||||||
|
|
||||||
/* mbedtls_gcm_init() */
|
|
||||||
TEST_INVALID_PARAM( mbedtls_gcm_init( NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_setkey */
|
/* mbedtls_gcm_setkey */
|
||||||
TEST_INVALID_PARAM_RET(
|
TEST_EQUAL(
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_setkey( NULL, valid_cipher, valid_buffer, valid_bitlen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_setkey( &ctx, valid_cipher, NULL, valid_bitlen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
MBEDTLS_ERR_GCM_BAD_INPUT,
|
||||||
mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) );
|
mbedtls_gcm_setkey( &ctx, valid_cipher, valid_buffer, invalid_bitlen ) );
|
||||||
|
|
||||||
/* mbedtls_gcm_crypt_and_tag() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( NULL, valid_mode, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_len, valid_buffer ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_len, valid_buffer ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_len, valid_buffer ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer,
|
|
||||||
valid_len, valid_buffer ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL,
|
|
||||||
valid_len, valid_buffer ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_crypt_and_tag( &ctx, valid_mode, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer,
|
|
||||||
valid_len, NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_auth_decrypt() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( &ctx, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_buffer) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_len,
|
|
||||||
valid_buffer, valid_buffer) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
NULL, valid_buffer) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_auth_decrypt( &ctx, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len,
|
|
||||||
valid_buffer, NULL) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_starts() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_starts( NULL, valid_mode,
|
|
||||||
valid_buffer, valid_len ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_starts( &ctx, valid_mode,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_update_ad() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_update_ad( &ctx,
|
|
||||||
NULL, valid_len ) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_update() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_update( NULL, valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len, &olen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_update( &ctx, NULL, valid_len,
|
|
||||||
valid_buffer, valid_len, &olen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_update( &ctx, valid_buffer, valid_len,
|
|
||||||
NULL, valid_len, &olen ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_update( &ctx, valid_buffer, valid_len,
|
|
||||||
valid_buffer, valid_len, NULL ) );
|
|
||||||
|
|
||||||
/* mbedtls_gcm_finish() */
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_finish( NULL, NULL, 0, valid_buffer, valid_len ) );
|
|
||||||
TEST_INVALID_PARAM_RET(
|
|
||||||
MBEDTLS_ERR_GCM_BAD_INPUT,
|
|
||||||
mbedtls_gcm_finish( &ctx, NULL, 0, NULL, valid_len ) );
|
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
mbedtls_gcm_free( &ctx );
|
mbedtls_gcm_free( &ctx );
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
|
||||||
void gcm_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_gcm_free( NULL ) );
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
/* BEGIN_CASE depends_on:MBEDTLS_SELF_TEST */
|
||||||
void gcm_selftest( )
|
void gcm_selftest( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,5 +1,2 @@
|
||||||
GCM - Invalid parameters
|
GCM - Invalid parameters
|
||||||
gcm_invalid_param:
|
gcm_invalid_param:
|
||||||
|
|
||||||
GCM - Valid parameters
|
|
||||||
gcm_valid_param:
|
|
||||||
|
|
|
@ -1,9 +1,3 @@
|
||||||
MPI - Valid parameters
|
|
||||||
mpi_valid_param:
|
|
||||||
|
|
||||||
MPI - Invalid parameters
|
|
||||||
mpi_invalid_param:
|
|
||||||
|
|
||||||
Arguments with no value
|
Arguments with no value
|
||||||
mpi_null:
|
mpi_null:
|
||||||
|
|
||||||
|
|
|
@ -115,221 +115,6 @@ static int is_significantly_above_a_power_of_2( data_t *bytes )
|
||||||
* END_DEPENDENCIES
|
* END_DEPENDENCIES
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
|
||||||
void mpi_valid_param( )
|
|
||||||
{
|
|
||||||
TEST_VALID_PARAM( mbedtls_mpi_free( NULL ) );
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void mpi_invalid_param( )
|
|
||||||
{
|
|
||||||
mbedtls_mpi X;
|
|
||||||
const char *s_in = "00101000101010";
|
|
||||||
char s_out[16] = { 0 };
|
|
||||||
unsigned char u_out[16] = { 0 };
|
|
||||||
unsigned char u_in[16] = { 0 };
|
|
||||||
size_t olen;
|
|
||||||
mbedtls_mpi_uint mpi_uint;
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_mpi_init( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_grow( NULL, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_copy( NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_copy( &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_mpi_swap( NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM( mbedtls_mpi_swap( &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_safe_cond_assign( NULL, &X, 0 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_safe_cond_assign( &X, NULL, 0 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_safe_cond_swap( NULL, &X, 0 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_safe_cond_swap( &X, NULL, 0 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_lset( NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_get_bit( NULL, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_set_bit( NULL, 42, 0 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_string( NULL, 2, s_in ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_string( &X, 2, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_string( NULL, 2,
|
|
||||||
s_out, sizeof( s_out ),
|
|
||||||
&olen ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_string( &X, 2,
|
|
||||||
NULL, sizeof( s_out ),
|
|
||||||
&olen ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_string( &X, 2,
|
|
||||||
s_out, sizeof( s_out ),
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_FS_IO)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_file( NULL, 2, stdin ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_file( &X, 2, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_file( "", NULL, 2, NULL ) );
|
|
||||||
#endif /* MBEDTLS_FS_IO */
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_binary( NULL, u_in,
|
|
||||||
sizeof( u_in ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_read_binary( &X, NULL,
|
|
||||||
sizeof( u_in ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_binary( NULL, u_out,
|
|
||||||
sizeof( u_out ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_write_binary( &X, NULL,
|
|
||||||
sizeof( u_out ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_shift_l( NULL, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_shift_r( NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_cmp_abs( NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_cmp_abs( &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_cmp_mpi( NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_cmp_mpi( &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_cmp_int( NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_abs( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_abs( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_abs( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_abs( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_abs( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_abs( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_mpi( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_mpi( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_mpi( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_mpi( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_mpi( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_mpi( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_int( NULL, &X, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_add_int( &X, NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_int( NULL, &X, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_sub_int( &X, NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mul_mpi( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mul_mpi( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mul_mpi( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mul_int( NULL, &X, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mul_int( &X, NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_div_mpi( &X, &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_div_mpi( &X, &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_div_int( &X, &X, NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( 0, mbedtls_mpi_lsb( NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mod_mpi( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mod_mpi( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mod_mpi( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mod_int( NULL, &X, 42 ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_mod_int( &mpi_uint, NULL, 42 ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_exp_mod( NULL, &X, &X, &X, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_exp_mod( &X, NULL, &X, &X, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_exp_mod( &X, &X, NULL, &X, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_exp_mod( &X, &X, &X, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_fill_random( NULL, 42,
|
|
||||||
mbedtls_test_rnd_std_rand,
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_fill_random( &X, 42, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_gcd( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_gcd( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_gcd( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_inv_mod( NULL, &X, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_inv_mod( &X, NULL, &X ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_MPI_BAD_INPUT_DATA,
|
|
||||||
mbedtls_mpi_inv_mod( &X, &X, NULL ) );
|
|
||||||
|
|
||||||
exit:
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void mpi_null( )
|
void mpi_null( )
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,6 +1,3 @@
|
||||||
PK invalid parameters
|
|
||||||
invalid_parameters:
|
|
||||||
|
|
||||||
PK valid parameters
|
PK valid parameters
|
||||||
valid_parameters:
|
valid_parameters:
|
||||||
|
|
||||||
|
|
|
@ -211,12 +211,6 @@ void valid_parameters( )
|
||||||
|
|
||||||
mbedtls_pk_init( &pk );
|
mbedtls_pk_init( &pk );
|
||||||
|
|
||||||
TEST_VALID_PARAM( mbedtls_pk_free( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_VALID_PARAM( mbedtls_pk_restart_free( NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST_ASSERT( mbedtls_pk_setup( &pk, NULL ) ==
|
TEST_ASSERT( mbedtls_pk_setup( &pk, NULL ) ==
|
||||||
MBEDTLS_ERR_PK_BAD_INPUT_DATA );
|
MBEDTLS_ERR_PK_BAD_INPUT_DATA );
|
||||||
|
|
||||||
|
@ -323,275 +317,6 @@ exit:
|
||||||
}
|
}
|
||||||
/* END_CASE */
|
/* END_CASE */
|
||||||
|
|
||||||
/* BEGIN_CASE depends_on:MBEDTLS_CHECK_PARAMS:!MBEDTLS_PARAM_FAILED_ALT */
|
|
||||||
void invalid_parameters( )
|
|
||||||
{
|
|
||||||
size_t len;
|
|
||||||
unsigned char *null_buf = NULL;
|
|
||||||
unsigned char buf[1];
|
|
||||||
unsigned char *p = buf;
|
|
||||||
char str[1] = {0};
|
|
||||||
mbedtls_pk_context pk;
|
|
||||||
mbedtls_md_type_t valid_md = MBEDTLS_MD_SHA256;
|
|
||||||
void *options = buf;
|
|
||||||
|
|
||||||
(void) null_buf;
|
|
||||||
(void) p;
|
|
||||||
(void) str;
|
|
||||||
|
|
||||||
mbedtls_pk_init( &pk );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM( mbedtls_pk_init( NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_ECDSA_C) && defined(MBEDTLS_ECP_RESTARTABLE)
|
|
||||||
TEST_INVALID_PARAM( mbedtls_pk_restart_init( NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_setup( NULL, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PK_RSA_ALT_SUPPORT)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_setup_rsa_alt( NULL, buf,
|
|
||||||
NULL, NULL, NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_restartable( NULL,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_restartable( &pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_restartable( &pk,
|
|
||||||
valid_md,
|
|
||||||
NULL, 0,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_restartable( &pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify( NULL,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify( &pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify( &pk,
|
|
||||||
valid_md,
|
|
||||||
NULL, 0,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify( &pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options,
|
|
||||||
NULL,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options,
|
|
||||||
&pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options,
|
|
||||||
&pk,
|
|
||||||
valid_md,
|
|
||||||
NULL, 0,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_verify_ext( MBEDTLS_PK_NONE, options,
|
|
||||||
&pk,
|
|
||||||
MBEDTLS_MD_NONE,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign_restartable( NULL, MBEDTLS_MD_NONE, buf, sizeof( buf ),
|
|
||||||
buf, &len, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign_restartable( &pk, MBEDTLS_MD_NONE, NULL, sizeof( buf ),
|
|
||||||
buf, &len, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign_restartable( &pk, valid_md, NULL, 0, buf, &len,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign_restartable( &pk, MBEDTLS_MD_NONE, buf, sizeof( buf ),
|
|
||||||
NULL, &len, mbedtls_test_rnd_std_rand,
|
|
||||||
NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign( NULL, MBEDTLS_MD_NONE, buf, sizeof( buf ),
|
|
||||||
buf, &len, mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, NULL, sizeof( buf ),
|
|
||||||
buf, &len, mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign( &pk, valid_md, NULL, 0, buf, &len,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_sign( &pk, MBEDTLS_MD_NONE, buf, sizeof( buf ), NULL, &len,
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_decrypt( NULL, buf, sizeof( buf ), buf, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_decrypt( &pk, NULL, sizeof( buf ), buf, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_decrypt( &pk, buf, sizeof( buf ), NULL, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_decrypt( &pk, buf, sizeof( buf ), buf, NULL, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_encrypt( NULL, buf, sizeof( buf ), buf, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_encrypt( &pk, NULL, sizeof( buf ), buf, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_encrypt( &pk, buf, sizeof( buf ), NULL, &len, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_encrypt( &pk, buf, sizeof( buf ), buf, NULL, sizeof( buf ),
|
|
||||||
mbedtls_test_rnd_std_rand, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_check_pair( NULL, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_check_pair( &pk, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_debug( NULL, NULL ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PK_PARSE_C)
|
|
||||||
#if defined(MBEDTLS_FS_IO)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_load_file( NULL, &p, &len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_load_file( str, NULL, &len ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_load_file( str, &p, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_keyfile( NULL, str, NULL ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_keyfile( &pk, NULL, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_public_keyfile( NULL, str ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_public_keyfile( &pk, NULL ) );
|
|
||||||
#endif
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_subpubkey( NULL, buf, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_subpubkey( &null_buf, buf, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_subpubkey( &p, NULL, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_subpubkey( &p, buf, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_key( NULL,
|
|
||||||
buf, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_key( &pk,
|
|
||||||
NULL, sizeof( buf ),
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_public_key( NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_parse_public_key( &pk,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
#endif /* MBEDTLS_PK_PARSE_C */
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PK_WRITE_C)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey( NULL, p, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey( &null_buf, p, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey( &p, NULL, &pk ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey( &p, p, NULL ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey_der( NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey_der( &pk,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_key_der( NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_key_der( &pk,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
#if defined(MBEDTLS_PEM_WRITE_C)
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey_pem( NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_pubkey_pem( &pk,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_key_pem( NULL,
|
|
||||||
buf, sizeof( buf ) ) );
|
|
||||||
TEST_INVALID_PARAM_RET( MBEDTLS_ERR_PK_BAD_INPUT_DATA,
|
|
||||||
mbedtls_pk_write_key_pem( &pk,
|
|
||||||
NULL, sizeof( buf ) ) );
|
|
||||||
#endif /* MBEDTLS_PEM_WRITE_C */
|
|
||||||
|
|
||||||
#endif /* MBEDTLS_PK_WRITE_C */
|
|
||||||
}
|
|
||||||
/* END_CASE */
|
|
||||||
|
|
||||||
/* BEGIN_CASE */
|
/* BEGIN_CASE */
|
||||||
void pk_utils( int type, int parameter, int bitlen, int len, char * name )
|
void pk_utils( int type, int parameter, int bitlen, int len, char * name )
|
||||||
{
|
{
|
||||||
|
@ -1138,7 +863,7 @@ void pk_rsa_alt( )
|
||||||
size_t sig_len, ciph_len, test_len;
|
size_t sig_len, ciph_len, test_len;
|
||||||
int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH;
|
int ret = MBEDTLS_ERR_PK_TYPE_MISMATCH;
|
||||||
|
|
||||||
mbedtls_rsa_init( &raw, MBEDTLS_RSA_PKCS_V15, MBEDTLS_MD_NONE );
|
mbedtls_rsa_init( &raw );
|
||||||
mbedtls_pk_init( &rsa ); mbedtls_pk_init( &alt );
|
mbedtls_pk_init( &rsa ); mbedtls_pk_init( &alt );
|
||||||
|
|
||||||
memset( hash, 0x2a, sizeof hash );
|
memset( hash, 0x2a, sizeof hash );
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue