Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dispatch hash operations through the driver wrapper layer #4157

Merged
Merged
Show file tree
Hide file tree
Changes from 29 commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
0e30764
Split hashing operations out into an mbedTLS hash driver
stevew817 Feb 18, 2021
84d670d
Make psa_hash_compare go through hash_compute
stevew817 Feb 18, 2021
1e58235
Dispatch hashing calls through the driver wrapper layer
stevew817 Feb 18, 2021
8e9e407
Clarify documentation of internal hash software driver interface
stevew817 Mar 4, 2021
dbf8ced
Change the way driver context structures are used
stevew817 Mar 4, 2021
c828835
move hash update zero-length-input check back into the core
stevew817 Mar 4, 2021
f763810
Add test driver for hash operations
stevew817 Mar 4, 2021
b177731
Make the driver context union a defined type
stevew817 Mar 4, 2021
5adf52c
Correctly void potentially unused arguments
stevew817 Mar 4, 2021
0eeb794
Initialize status with CORRUPTION_DETECTED and update fallthrough
stevew817 Mar 8, 2021
4f7d058
Setup internal dependency macros for software hash driver
stevew817 Mar 8, 2021
d029b60
Move test driver hash function declarations to software driver
stevew817 Mar 8, 2021
2555522
Rename hash test driver functions to match auto-naming scheme
stevew817 Mar 8, 2021
83f300e
Restructure the hash driver content
stevew817 Mar 8, 2021
d50db94
Add hash acceleration driver testing
stevew817 Mar 8, 2021
f66d5fd
Apply same argument checking as in psa_hash_setup
stevew817 Mar 8, 2021
fbe0928
Set output length to 0 at start of function
stevew817 Mar 8, 2021
0d58666
Reuse already-defined MBEDTLS_PSA_BUILTIN_HASH
stevew817 Mar 8, 2021
830aff2
Restructure the way driver contexts are declared
stevew817 Mar 9, 2021
a85e2f8
Guard hash test functions as a block
stevew817 Mar 15, 2021
5f88e77
Move mbedtls_md_info_from_psa into the mbedtls hash driver
stevew817 Mar 15, 2021
753f973
Use full config during driver testing
stevew817 Mar 15, 2021
0f8ffa8
Rename and retype hash test driver context structure
stevew817 Mar 15, 2021
fa95295
Don't void actually used arguments
stevew817 Mar 15, 2021
893232f
Ensure the full driver structure is zeroized at setup
stevew817 Mar 15, 2021
5e4c18f
Reorder the driver wrapper switch-case content
stevew817 Mar 15, 2021
61bb8fc
remove superfluous calls to hash_abort
stevew817 Mar 15, 2021
aa87fd0
Make driver IDs always visible
stevew817 Mar 15, 2021
b6bf4bb
Clear up language on zeroizing driver context at setup
stevew817 Mar 15, 2021
f8e45a4
Simplify compilation guards around hash driver testing
stevew817 Mar 16, 2021
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 101 additions & 0 deletions include/psa/crypto_builtin_hash.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
/*
* Context structure declaration of the software-based driver which performs
* hashing through the PSA Crypto driver dispatch layer.
gilles-peskine-arm marked this conversation as resolved.
Show resolved Hide resolved
*/
gilles-peskine-arm marked this conversation as resolved.
Show resolved Hide resolved
/*
* Copyright The Mbed TLS Contributors
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef PSA_CRYPTO_BUILTIN_HASH_H
#define PSA_CRYPTO_BUILTIN_HASH_H

#include <psa/crypto_driver_common.h>
#include "mbedtls/md2.h"
#include "mbedtls/md4.h"
#include "mbedtls/md5.h"
#include "mbedtls/ripemd160.h"
#include "mbedtls/sha1.h"
#include "mbedtls/sha256.h"
#include "mbedtls/sha512.h"

#if defined(MBEDTLS_PSA_BUILTIN_ALG_MD2) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_MD4) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) || \
defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512)
#define MBEDTLS_PSA_BUILTIN_HASH
#endif

#if defined(MBEDTLS_PSA_ACCEL_ALG_MD2) || \
defined(MBEDTLS_PSA_ACCEL_ALG_MD4) || \
defined(MBEDTLS_PSA_ACCEL_ALG_MD5) || \
defined(MBEDTLS_PSA_ACCEL_ALG_RIPEMD160) || \
defined(MBEDTLS_PSA_ACCEL_ALG_SHA_1) || \
defined(MBEDTLS_PSA_ACCEL_ALG_SHA_224) || \
defined(MBEDTLS_PSA_ACCEL_ALG_SHA_256) || \
defined(MBEDTLS_PSA_ACCEL_ALG_SHA_384) || \
defined(MBEDTLS_PSA_ACCEL_ALG_SHA_512)
#define MBEDTLS_PSA_ACCEL_HASH
ronald-cron-arm marked this conversation as resolved.
Show resolved Hide resolved
#endif

typedef struct
{
psa_algorithm_t alg;
union
{
unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
#if defined(MBEDTLS_MD2_C)
mbedtls_md2_context md2;
#endif
#if defined(MBEDTLS_MD4_C)
mbedtls_md4_context md4;
#endif
#if defined(MBEDTLS_MD5_C)
mbedtls_md5_context md5;
#endif
#if defined(MBEDTLS_RIPEMD160_C)
mbedtls_ripemd160_context ripemd160;
#endif
#if defined(MBEDTLS_SHA1_C)
mbedtls_sha1_context sha1;
#endif
#if defined(MBEDTLS_SHA256_C)
mbedtls_sha256_context sha256;
#endif
#if defined(MBEDTLS_SHA512_C)
mbedtls_sha512_context sha512;
#endif
} ctx;
} mbedtls_psa_hash_operation_t;

#define MBEDTLS_PSA_HASH_OPERATION_INIT {0, {0}}

/*
* BEYOND THIS POINT, TEST DRIVER DECLARATIONS ONLY.
*/
#if defined(PSA_CRYPTO_DRIVER_TEST)

typedef mbedtls_psa_hash_operation_t mbedtls_transparent_test_driver_hash_operation_t;

#define MBEDTLS_TRANSPARENT_TEST_DRIVER_HASH_OPERATION_INIT MBEDTLS_PSA_HASH_OPERATION_INIT

#endif /* PSA_CRYPTO_DRIVER_TEST */

#endif /* PSA_CRYPTO_BUILTIN_HASH_H */
51 changes: 51 additions & 0 deletions include/psa/crypto_driver_contexts.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
/*
* Declaration of context structures for use with the PSA driver wrapper
* interface.
*
* Warning: This file will be auto-generated in the future.
*/
gilles-peskine-arm marked this conversation as resolved.
Show resolved Hide resolved
/* Copyright The Mbed TLS Contributors
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may
* not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#ifndef PSA_CRYPTO_DRIVER_CONTEXTS_H
#define PSA_CRYPTO_DRIVER_CONTEXTS_H

#include "psa/crypto.h"
#include "psa/crypto_driver_common.h"

/* Include the context structure definitions for those drivers that were
* declared during the autogeneration process. */

/* Include the context structure definitions for the Mbed TLS software drivers */
#include "psa/crypto_builtin_hash.h"

/* Define the context to be used for an operation that is executed through the
* PSA Driver wrapper layer as the union of all possible driver's contexts.
*
* The union members are the driver's context structures, and the member names
* are formatted as `'drivername'_ctx`. This allows for procedural generation
* of both this file and the content of psa_crypto_driver_wrappers.c */

typedef union {
unsigned dummy; /* Make sure this structure is always non-empty */
gilles-peskine-arm marked this conversation as resolved.
Show resolved Hide resolved
mbedtls_psa_hash_operation_t mbedtls_ctx;
#if defined(PSA_CRYPTO_DRIVER_TEST)
mbedtls_transparent_test_driver_hash_operation_t test_driver_ctx;
#endif
} psa_driver_hash_context_t;

#endif /* PSA_CRYPTO_DRIVER_CONTEXTS_H */
/* End of automatically generated file. */
47 changes: 13 additions & 34 deletions include/psa/crypto_struct.h
Original file line number Diff line number Diff line change
Expand Up @@ -68,14 +68,9 @@ extern "C" {
#include "mbedtls/cipher.h"
#include "mbedtls/cmac.h"
#include "mbedtls/gcm.h"
#include "mbedtls/md.h"
#include "mbedtls/md2.h"
#include "mbedtls/md4.h"
#include "mbedtls/md5.h"
#include "mbedtls/ripemd160.h"
#include "mbedtls/sha1.h"
#include "mbedtls/sha256.h"
#include "mbedtls/sha512.h"

/* Include the context definition for the compiled-in drivers */
#include "psa/crypto_driver_contexts.h"

typedef struct {
/** Unique ID indicating which driver got assigned to do the
Expand All @@ -89,32 +84,14 @@ typedef struct {

struct psa_hash_operation_s
{
psa_algorithm_t alg;
union
{
unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
#if defined(MBEDTLS_MD2_C)
mbedtls_md2_context md2;
#endif
#if defined(MBEDTLS_MD4_C)
mbedtls_md4_context md4;
#endif
#if defined(MBEDTLS_MD5_C)
mbedtls_md5_context md5;
#endif
#if defined(MBEDTLS_RIPEMD160_C)
mbedtls_ripemd160_context ripemd160;
#endif
#if defined(MBEDTLS_SHA1_C)
mbedtls_sha1_context sha1;
#endif
#if defined(MBEDTLS_SHA256_C)
mbedtls_sha256_context sha256;
#endif
#if defined(MBEDTLS_SHA512_C)
mbedtls_sha512_context sha512;
#endif
} ctx;
/** Unique ID indicating which driver got assigned to do the
* operation. Since driver contexts are driver-specific, swapping
* drivers halfway through the operation is not supported.
* ID values are auto-generated in psa_driver_wrappers.h
* ID value zero means the context is not valid or not assigned to
* any driver (i.e. none of the driver contexts are active). */
unsigned int id;
psa_driver_hash_context_t ctx;
};

#define PSA_HASH_OPERATION_INIT {0, {0}}
Expand All @@ -127,6 +104,8 @@ static inline struct psa_hash_operation_s psa_hash_operation_init( void )
#if defined(MBEDTLS_MD_C)
typedef struct
{
/** The HMAC algorithm in use */
psa_algorithm_t alg;
/** The hash context. */
struct psa_hash_operation_s hash_ctx;
/** The HMAC part of the context. */
Expand Down
1 change: 1 addition & 0 deletions library/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ set(src_crypto
psa_crypto_client.c
psa_crypto_driver_wrappers.c
psa_crypto_ecp.c
psa_crypto_hash.c
psa_crypto_rsa.c
psa_crypto_se.c
psa_crypto_slot_management.c
Expand Down
1 change: 1 addition & 0 deletions library/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ OBJS_CRYPTO= \
psa_crypto_client.o \
psa_crypto_driver_wrappers.o \
psa_crypto_ecp.o \
psa_crypto_hash.o \
psa_crypto_rsa.o \
psa_crypto_se.o \
psa_crypto_slot_management.o \
Expand Down
Loading