Implement hash functions
New header file crypto_struct.h. The main file crypto.sh declares
structures which are implementation-defined. These structures must be
defined in crypto_struct.h, which is included at the end so that the
structures can use types defined in crypto.h.
Implement psa_hash_start, psa_hash_update and psa_hash_final. This
should work for all hash algorithms supported by Mbed TLS, but has
only been smoke-tested for SHA-256, and only in the nominal case.
diff --git a/include/psa/crypto.h b/include/psa/crypto.h
index c1eb60f..90140d7 100644
--- a/include/psa/crypto.h
+++ b/include/psa/crypto.h
@@ -307,6 +307,54 @@
/**@}*/
+/** \defgroup hash Message digests
+ * @{
+ */
+
+typedef struct psa_hash_operation_s psa_hash_operation_t;
+
+#define PSA_HASH_FINAL_SIZE(alg) \
+ ( \
+ (alg) == PSA_ALG_MD2 ? 16 : \
+ (alg) == PSA_ALG_MD4 ? 16 : \
+ (alg) == PSA_ALG_MD5 ? 16 : \
+ (alg) == PSA_ALG_SHA_256_128 ? 16 : \
+ (alg) == PSA_ALG_RIPEMD160 ? 20 : \
+ (alg) == PSA_ALG_SHA_1 ? 20 : \
+ (alg) == PSA_ALG_SHA_256_160 ? 20 : \
+ (alg) == PSA_ALG_SHA_224 ? 28 : \
+ (alg) == PSA_ALG_SHA_256 ? 32 : \
+ (alg) == PSA_ALG_SHA_384 ? 48 : \
+ (alg) == PSA_ALG_SHA_512 ? 64 : \
+ (alg) == PSA_ALG_SHA_512_224 ? 28 : \
+ (alg) == PSA_ALG_SHA_512_256 ? 32 : \
+ (alg) == PSA_ALG_SHA3_224 ? 28 : \
+ (alg) == PSA_ALG_SHA3_256 ? 32 : \
+ (alg) == PSA_ALG_SHA3_384 ? 48 : \
+ (alg) == PSA_ALG_SHA3_512 ? 64 : \
+ 0)
+
+psa_status_t psa_hash_start(psa_hash_operation_t *operation,
+ psa_algorithm_t alg);
+
+psa_status_t psa_hash_update(psa_hash_operation_t *operation,
+ const uint8_t *input,
+ size_t input_length);
+
+psa_status_t psa_hash_finish(psa_hash_operation_t *operation,
+ uint8_t *hash,
+ size_t hash_size,
+ size_t *hash_length);
+
+psa_status_t psa_hash_verify(psa_hash_operation_t *operation,
+ const uint8_t *hash,
+ size_t hash_length);
+
+psa_status_t ps_hash_abort(psa_hash_operation_t *operation);
+
+/**@}*/
+
+/** \defgroup MAC Message authentication codes
/** \defgroup asymmetric Asymmetric cryptography
* @{
*/
@@ -379,6 +427,12 @@
}
#endif
+/* The file "crypto_struct.h" contains definitions for
+ * implementation-specific structs that are declared above. */
+#include "crypto_struct.h"
+
+/* The file "crypto_extra.h" contains vendor-specific definitions. This
+ * can include vendor-defined algorithms, extra functions, etc. */
#include "crypto_extra.h"
#endif /* PSA_CRYPTO_H */