Add psa crypto C API client

To allow client programs to access the psa crypto service using the
psa crypto C api, a client adapter has been implemented that
maps the api functions to service RPC calls using the packed-c
serialization of the crypto access protocol.

The following files are derived work from the follwoing origin:
  Repo https://git.trustedfirmware.org/trusted-firmware-m.git
  Version: #442bc936

  components/service/crypto/include/psa/crypto.h
  components/service/crypto/include/psa/crypto_client_struct.h
  components/service/crypto/include/psa/crypto_compat.h
  components/service/crypto/include/psa/crypto_extra.h
  components/service/crypto/include/psa/crypto_sizes.h
  components/service/crypto/include/psa/crypto_struct.h
  components/service/crypto/include/psa/crypto_types.h
  components/service/crypto/include/psa/crypto_values.h

Signed-off-by: Julian Hall <julian.hall@arm.com>
Change-Id: Iac3c07d813e9245fafca3512c31d4fc09f1ad882
diff --git a/components/service/crypto/include/psa/crypto_extra.h b/components/service/crypto/include/psa/crypto_extra.h
new file mode 100644
index 0000000..fc908d9
--- /dev/null
+++ b/components/service/crypto/include/psa/crypto_extra.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (c) 2018-2021, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+/**
+ * \file psa/crypto_extra.h
+ *
+ * \brief PSA cryptography module: vendor extensions
+ *
+ * \note This file may not be included directly. Applications must
+ * include psa/crypto.h.
+ *
+ * This file is reserved for vendor-specific definitions.
+ */
+
+#ifndef PSA_CRYPTO_EXTRA_H
+#define PSA_CRYPTO_EXTRA_H
+
+#include "psa/crypto_compat.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** \addtogroup crypto_types
+ * @{
+ */
+
+/** DSA public key.
+ *
+ * The import and export format is the
+ * representation of the public key `y = g^x mod p` as a big-endian byte
+ * string. The length of the byte string is the length of the base prime `p`
+ * in bytes.
+ */
+#define PSA_KEY_TYPE_DSA_PUBLIC_KEY                 ((psa_key_type_t)0x4002)
+
+/** DSA key pair (private and public key).
+ *
+ * The import and export format is the
+ * representation of the private key `x` as a big-endian byte string. The
+ * length of the byte string is the private key size in bytes (leading zeroes
+ * are not stripped).
+ *
+ * Determinstic DSA key derivation with psa_generate_derived_key follows
+ * FIPS 186-4 &sect;B.1.2: interpret the byte string as integer
+ * in big-endian order. Discard it if it is not in the range
+ * [0, *N* - 2] where *N* is the boundary of the private key domain
+ * (the prime *p* for Diffie-Hellman, the subprime *q* for DSA,
+ * or the order of the curve's base point for ECC).
+ * Add 1 to the resulting integer and use this as the private key *x*.
+ *
+ */
+#define PSA_KEY_TYPE_DSA_KEY_PAIR                    ((psa_key_type_t)0x7002)
+
+/**@}*/
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* PSA_CRYPTO_EXTRA_H */