crypto_builtin_primitives.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. /*
  2. * Context structure declaration of the Mbed TLS software-based PSA drivers
  3. * called through the PSA Crypto driver dispatch layer.
  4. * This file contains the context structures of those algorithms which do not
  5. * rely on other algorithms, i.e. are 'primitive' algorithms.
  6. *
  7. * \note This file may not be included directly. Applications must
  8. * include psa/crypto.h.
  9. *
  10. * \note This header and its content are not part of the Mbed TLS API and
  11. * applications must not depend on it. Its main purpose is to define the
  12. * multi-part state objects of the Mbed TLS software-based PSA drivers. The
  13. * definitions of these objects are then used by crypto_struct.h to define the
  14. * implementation-defined types of PSA multi-part state objects.
  15. */
  16. /*
  17. * Copyright The Mbed TLS Contributors
  18. * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later
  19. */
  20. #ifndef PSA_CRYPTO_BUILTIN_PRIMITIVES_H
  21. #define PSA_CRYPTO_BUILTIN_PRIMITIVES_H
  22. #include "mbedtls/private_access.h"
  23. #include <psa/crypto_driver_common.h>
  24. /*
  25. * Hash multi-part operation definitions.
  26. */
  27. #include "mbedtls/md5.h"
  28. #include "mbedtls/ripemd160.h"
  29. #include "mbedtls/sha1.h"
  30. #include "mbedtls/sha256.h"
  31. #include "mbedtls/sha512.h"
  32. #include "mbedtls/sha3.h"
  33. #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5) || \
  34. defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160) || \
  35. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1) || \
  36. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224) || \
  37. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
  38. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384) || \
  39. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
  40. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
  41. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
  42. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
  43. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
  44. #define MBEDTLS_PSA_BUILTIN_HASH
  45. #endif
  46. typedef struct {
  47. psa_algorithm_t MBEDTLS_PRIVATE(alg);
  48. union {
  49. unsigned dummy; /* Make the union non-empty even with no supported algorithms. */
  50. #if defined(MBEDTLS_PSA_BUILTIN_ALG_MD5)
  51. mbedtls_md5_context md5;
  52. #endif
  53. #if defined(MBEDTLS_PSA_BUILTIN_ALG_RIPEMD160)
  54. mbedtls_ripemd160_context ripemd160;
  55. #endif
  56. #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_1)
  57. mbedtls_sha1_context sha1;
  58. #endif
  59. #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_256) || \
  60. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_224)
  61. mbedtls_sha256_context sha256;
  62. #endif
  63. #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_512) || \
  64. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA_384)
  65. mbedtls_sha512_context sha512;
  66. #endif
  67. #if defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_224) || \
  68. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_256) || \
  69. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_384) || \
  70. defined(MBEDTLS_PSA_BUILTIN_ALG_SHA3_512)
  71. mbedtls_sha3_context sha3;
  72. #endif
  73. } MBEDTLS_PRIVATE(ctx);
  74. } mbedtls_psa_hash_operation_t;
  75. #define MBEDTLS_PSA_HASH_OPERATION_INIT { 0, { 0 } }
  76. /*
  77. * Cipher multi-part operation definitions.
  78. */
  79. #include "mbedtls/cipher.h"
  80. #if defined(MBEDTLS_PSA_BUILTIN_ALG_STREAM_CIPHER) || \
  81. defined(MBEDTLS_PSA_BUILTIN_ALG_CTR) || \
  82. defined(MBEDTLS_PSA_BUILTIN_ALG_CFB) || \
  83. defined(MBEDTLS_PSA_BUILTIN_ALG_OFB) || \
  84. defined(MBEDTLS_PSA_BUILTIN_ALG_ECB_NO_PADDING) || \
  85. defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_NO_PADDING) || \
  86. defined(MBEDTLS_PSA_BUILTIN_ALG_CBC_PKCS7) || \
  87. defined(MBEDTLS_PSA_BUILTIN_ALG_CCM_STAR_NO_TAG)
  88. #define MBEDTLS_PSA_BUILTIN_CIPHER 1
  89. #endif
  90. typedef struct {
  91. /* Context structure for the Mbed TLS cipher implementation. */
  92. psa_algorithm_t MBEDTLS_PRIVATE(alg);
  93. uint8_t MBEDTLS_PRIVATE(iv_length);
  94. uint8_t MBEDTLS_PRIVATE(block_length);
  95. union {
  96. unsigned int MBEDTLS_PRIVATE(dummy);
  97. mbedtls_cipher_context_t MBEDTLS_PRIVATE(cipher);
  98. } MBEDTLS_PRIVATE(ctx);
  99. } mbedtls_psa_cipher_operation_t;
  100. #define MBEDTLS_PSA_CIPHER_OPERATION_INIT { 0, 0, 0, { 0 } }
  101. #endif /* PSA_CRYPTO_BUILTIN_PRIMITIVES_H */