diff --git a/interface/include/tfm_ns_svc.h b/interface/include/tfm_ns_svc.h
index 28c7589..b283dc6 100644
--- a/interface/include/tfm_ns_svc.h
+++ b/interface/include/tfm_ns_svc.h
@@ -44,6 +44,8 @@
     X(SVC_TFM_SST_GET_HANDLE, tfm_sst_svc_get_handle) \
     X(SVC_TFM_SST_CREATE, tfm_sst_svc_create) \
     X(SVC_TFM_SST_GET_INFO, tfm_sst_svc_get_info) \
+    X(SVC_TFM_SST_GET_ATTRIBUTES, tfm_sst_svc_get_attributes) \
+    X(SVC_TFM_SST_SET_ATTRIBUTES, tfm_sst_svc_set_attributes) \
     X(SVC_TFM_SST_READ, tfm_sst_svc_read) \
     X(SVC_TFM_SST_WRITE, tfm_sst_svc_write) \
     X(SVC_TFM_SST_DELETE, tfm_sst_svc_delete) \
diff --git a/interface/include/tfm_sst_api.h b/interface/include/tfm_sst_api.h
index d22653c..1ce8261 100644
--- a/interface/include/tfm_sst_api.h
+++ b/interface/include/tfm_sst_api.h
@@ -52,6 +52,31 @@
                                     struct tfm_sst_asset_info_t *info);
 
 /**
+ * \brief Gets asset's attributes referenced by asset handler.
+ *
+ * \param[in]  asset_handle  Asset handler
+ * \param[out] attrs         Pointer to store the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_get_attributes(uint32_t asset_handle,
+                                          struct tfm_sst_asset_attrs_t *attrs);
+
+/**
+ * \brief Sets asset's attributes referenced by asset handler.
+ *
+ * \param[in]  asset_handle  Asset handler
+ * \param[in]  attrs         Pointer to new the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_set_attributes(uint32_t asset_handle,
+                                     const struct tfm_sst_asset_attrs_t *attrs);
+
+/**
  * \brief Reads asset's data from asset referenced by asset handler.
  *
  * \param[in]  asset_handle   Asset handler
diff --git a/interface/include/tfm_sst_asset_defs.h b/interface/include/tfm_sst_asset_defs.h
new file mode 100644
index 0000000..e97d836
--- /dev/null
+++ b/interface/include/tfm_sst_asset_defs.h
@@ -0,0 +1,404 @@
+/*
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __TFM_SST_ASSET_DEFS_H__
+#define __TFM_SST_ASSET_DEFS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <inttypes.h>
+#include <limits.h>
+
+/* List of TF-M SST asset category types */
+/*!
+ * \def TFM_SST_ASSET_CAT_TYPE_NONE
+ *
+ * \brief Asset category type NONE. This is value used in an asset when the
+ *        asset category type is not set.
+ */
+#define TFM_SST_ASSET_CAT_TYPE_NONE            ((uint32_t)0x00000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_RAW_DATA
+ *
+ * \brief This category type is used for those assets which contains raw data.
+ */
+#define TFM_SST_ASSET_CAT_RAW_DATA             ((uint32_t)0x02000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_KEY_SYMMETRIC
+ *
+ * \brief This category type is used for those assets which contains a
+ *        symmetric key.
+ */
+#define TFM_SST_ASSET_CAT_KEY_SYMMETRIC        ((uint32_t)0x04000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_KEY_PUBLIC
+ *
+ * \brief This category type is used for those assets which contains an
+ *        asymmetric public key.
+ */
+#define TFM_SST_ASSET_CAT_KEY_PUBLIC           ((uint32_t)0x06000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_KEY_PRIVATE
+ *
+ * \brief This category type is used for those assets which contains an
+ *        asymmetric private key.
+ */
+#define TFM_SST_ASSET_CAT_KEY_PRIVATE          ((uint32_t)0x07000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_CERTIFICATE
+ *
+ * \brief This category type is used for those assets which contains a
+ *        certificate.
+ */
+#define TFM_SST_ASSET_CAT_CERTIFICATE          ((uint32_t)0x08000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_VENDOR_DEFINED
+ *
+ * \brief This category type is used when assets is vendor defined.
+ */
+#define TFM_SST_ASSET_CAT_VENDOR_DEFINED       ((uint32_t)0x80000000)
+
+/* TF-M SST asset category type masks */
+/*!
+ * \def TFM_SST_ASSET_CAT_TYPE_MASK
+ *
+ * \brief Asset category type mask.
+ */
+#define TFM_SST_ASSET_CAT_TYPE_MASK            ((uint32_t)0x7f000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_KEY_MASK
+ *
+ * \brief Asset key category mask.
+ */
+#define TFM_SST_ASSET_CAT_KEY_MASK             ((uint32_t)0x04000000)
+
+/*!
+ * \def TFM_SST_ASSET_CAT_KEY_ASYMMETRIC_MASK
+ *
+ * \brief Asset asymmetric key mask.
+ */
+#define TFM_SST_ASSET_CAT_KEY_ASYMMETRIC_MASK  ((uint32_t)0x06000000)
+
+
+/* Asset types for raw data category */
+/*!
+ * \def TFM_SST_ASSET_KEY_HMAC
+ *
+ * \brief HMAC key.
+ */
+#define TFM_SST_ASSET_KEY_HMAC    ((TFM_SST_ASSET_CAT_RAW_DATA)| 0x00000001)
+
+/* Asset types for symmetric key category */
+/*!
+ * \def TFM_SST_ASSET_KEY_AES
+ *
+ * \brief AES key to be used in algorithms based on AES cipher
+ *        (cipher, AEAD or MAC).
+ */
+#define TFM_SST_ASSET_KEY_AES     ((TFM_SST_ASSET_CAT_KEY_SYMMETRIC)|0x00000001)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_DES
+ *
+ * \brief DES key to be used in algorithms based on DES or 3DES cipher
+ *        (cipher or MAC).
+ */
+#define TFM_SST_ASSET_KEY_DES     ((TFM_SST_ASSET_CAT_KEY_SYMMETRIC)|0x00000002)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_CAMELLIA
+ *
+ * \brief Camellia key to be used in algorithms based on Camellia cipher
+ *        (cipher, AEAD or MAC).
+ */
+#define TFM_SST_ASSET_KEY_CAMELLIA \
+                                  ((TFM_SST_ASSET_CAT_KEY_SYMMETRIC)|0x00000003)
+
+/* Asset types for asymmetric key category */
+/*!
+ * \def TFM_SST_ASSET_KEY_RSA_PUBLIC
+ *
+ * \brief RSA public key.
+ */
+#define TFM_SST_ASSET_KEY_RSA_PUBLIC ((TFM_SST_ASSET_CAT_KEY_PUBLIC)|0x00010000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_RSA_PRIVATE
+ *
+ * \brief RSA private key.
+ */
+#define TFM_SST_ASSET_KEY_RSA_PRIVATE \
+                                    ((TFM_SST_ASSET_CAT_KEY_PRIVATE)|0x00010000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_DSA_PUBLIC
+ *
+ * \brief DSA public key.
+ */
+#define TFM_SST_ASSET_KEY_DSA_PUBLIC ((TFM_SST_ASSET_CAT_KEY_PUBLIC)|0x00020000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_DSA_PRIVATE
+ *
+ * \brief DSA private key.
+ */
+#define TFM_SST_ASSET_KEY_DSA_PRIVATE \
+                                    ((TFM_SST_ASSET_CAT_KEY_PRIVATE)|0x00020000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_ECC_PUBLIC
+ *
+ * \brief ECC public key.
+ */
+#define TFM_SST_ASSET_KEY_ECC_PUBLIC ((TFM_SST_ASSET_CAT_KEY_PUBLIC)|0x00030000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_ECC_PRIVATE
+ *
+ * \brief ECC private key.
+ */
+#define TFM_SST_ASSET_KEY_ECC_PRIVATE \
+                                    ((TFM_SST_ASSET_CAT_KEY_PRIVATE)|0x00030000)
+
+/*!
+ * \def TFM_SST_ASSET_KEY_ECC_CURVE_MASK
+ *
+ * \brief ECC curve mask. This mask allows to encode the curve identifiers which
+ *        are aligned with the TLS Supported Groups Registry (formerly known as
+ *        the  TLS EC Named Curve Registry)
+ *        https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml
+ *        The values are defined by RFC 4492, RFC 7027 and RFC 7919.
+ */
+#define TFM_SST_ASSET_KEY_ECC_CURVE_MASK ((uint32_t)0x0000ffff)
+
+/* Asset types for certificate category */
+/*!
+ * \def TFM_SST_ASSET_CERT_X_509
+ *
+ * \brief X509 certificate.
+ */
+#define TFM_SST_ASSET_CERT_X_509 ((TFM_SST_ASSET_CAT_CERTIFICATE)|0x00000001)
+
+/* List of TF-M SST asset */
+/*!
+ * \def TFM_SST_ASSET_ATTR_EXPIRED
+ *
+ * \brief Indicates if asset has expired.
+ */
+#define TFM_SST_ASSET_ATTR_EXPIRED              ((uint32_t)0x00000001)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_GENERATED_LOCALLY
+ *
+ * \brief Indicates if asset content has been generated locally.
+ */
+#define TFM_SST_ASSET_ATTR_GENERATED_LOCALLY    ((uint32_t)0x00000002)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_DERIVATION
+ *
+ * \brief Indicates if asset content can be used in a key derivation (i.e.
+ *        if other keys can be derived from this one)
+ *
+ */
+#define TFM_SST_ASSET_ATTR_DERIVATION           ((uint32_t)0x00000004)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_TRUSTED
+ *
+ * \brief Indicates if asset content can be trusted.
+ */
+#define TFM_SST_ASSET_ATTR_TRUSTED              ((uint32_t)0x00000008)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_WRITE_ONCE
+ *
+ * \brief Indicates if asset content can be modified once a content has been
+ *        set.
+ */
+#define TFM_SST_ASSET_ATTR_WRITE_ONCE           ((uint32_t)0x00000010)
+
+/* The next 3 bits are reserved */
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_ENCRYPT
+ *
+ * \brief Indicates if asset content may be used to encrypt data.
+ */
+#define TFM_SST_ASSET_ATTR_ENCRYPT              ((uint32_t)0x00000100)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_DECRYPT
+ *
+ * \brief Indicates if asset content may be used to decrypt data.
+ */
+#define TFM_SST_ASSET_ATTR_DECRYPT              ((uint32_t)0x00000200)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_SIGN
+ *
+ * \brief Indicates if asset content may be used to sign data.
+ */
+#define TFM_SST_ASSET_ATTR_SIGN                 ((uint32_t)0x00000400)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_VERIFY
+ *
+ * \brief Indicates if asset content may be used to verify signed data.
+ */
+#define TFM_SST_ASSET_ATTR_VERIFY               ((uint32_t)0x00000800)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_VERIFY_RECOVER
+ *
+ * \brief Indicates if asset content may be used to verify data where
+ *        data is recovered from the signature.
+ */
+#define TFM_SST_ASSET_ATTR_VERIFY_RECOVER       ((uint32_t)0x00001000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_WRAP
+ *
+ * \brief Indicates if asset content may be used to wrap other data
+ *        (i.e wrap other keys).
+ */
+#define TFM_SST_ASSET_ATTR_WRAP                 ((uint32_t)0x00002000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_UNWRAP
+ *
+ * \brief Indicates if asset content may be used to unwrap other data
+ *        (i.e unwrap other keys).
+ */
+#define TFM_SST_ASSET_ATTR_UNWRAP               ((uint32_t)0x00004000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_SENSITIVE
+ *
+ * \brief Indicates if asset content is sensitive and cannot be revealed.
+ */
+#define TFM_SST_ASSET_ATTR_SENSITIVE            ((uint32_t)0x00008000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_ALWAYS_SENSITIVE
+ *
+ * \brief Indicates if asset has always had the sensitive attribute. Attribute
+ *        cannot be changed once set. It becomes a read only attribute.
+ */
+#define TFM_SST_ASSET_ATTR_ALWAYS_SENSITIVE     ((uint32_t)0x00010000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_EXTRACTABLE
+ *
+ * \brief Indicates if asset content is extractable and can be wrapped.
+ */
+#define TFM_SST_ASSET_ATTR_EXTRACTABLE          ((uint32_t)0x00020000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_NEVER_EXTRACTABLE
+ *
+ * \brief Indicates if asset has never had the extactable attribute. Attribute
+ *        cannot be changed once set. It becomes a read only attribute.
+ */
+#define TFM_SST_ASSET_ATTR_NEVER_EXTRACTABLE    ((uint32_t)0x00040000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_ALWAYS_AUTHENTICATE
+ *
+ * \brief Indicates if user has to be authenticate when the asset content has
+ *        to be used.
+ */
+#define TFM_SST_ASSET_ATTR_ALWAYS_AUTHENTICATE  ((uint32_t)0x00080000)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_MASK
+ *
+ * \brief Asset attributes mask.
+ */
+#define TFM_SST_ASSET_ATTR_MASK                 ((uint32_t)0x7FFFFFFF)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_VENDOR_DEFINED
+ *
+ * \brief Indicates if the attribute is vendor defined.
+ */
+#define TFM_SST_ASSET_ATTR_VENDOR_DEFINED       ((uint32_t)0x80000000)
+
+
+/* TF-M SST asset structure definitions */
+/*!
+ * \struct tfm_sst_asset_info_t
+ *
+ * \brief Asset information.
+ */
+struct tfm_sst_asset_info_t {
+    uint32_t type;          /*!< Asset type */
+    uint32_t size_current;  /*!< The current size of the asset content */
+    uint32_t size_max;      /*!< The maximum size of the asset content in
+                             *   bytes
+                             */
+};
+
+/*!
+ * \struct tfm_sst_asset_validity_t
+ *
+ * \brief Asset validity structure.
+ *
+ * \note  Start and end values must be set to 0 as they are reserved for future
+ *        use.
+ */
+struct tfm_sst_asset_validity_t {
+    uint64_t  start; /*!< Start date/time on which the asset validity period
+                      *   begins
+                      */
+    uint64_t  end;   /*!< End date on which the asset validity period ends */
+
+};
+
+/*!
+ * \struct tfm_sst_asset_attrs_t
+ *
+ * \brief Asset attributes structure.
+ *
+ */
+struct tfm_sst_asset_attrs_t {
+    struct tfm_sst_asset_validity_t validity; /*!< Asset validity period */
+    uint32_t attrs;                           /*!< Asset attributes */
+    uint8_t  reserved[4];                     /*!< Reserved for future
+                                               *   expansion. Default value is
+                                               *   0 in all bytes
+                                               */
+};
+
+/*!
+ * \def TFM_SST_ASSET_INFO_SIZE
+ *
+ * \brief Indicates the asset information structure size.
+ */
+#define TFM_SST_ASSET_INFO_SIZE sizeof(struct tfm_sst_asset_info_t)
+
+/*!
+ * \def TFM_SST_ASSET_ATTR_SIZE
+ *
+ * \brief Indicates the asset attributes structure size.
+ */
+#define TFM_SST_ASSET_ATTR_SIZE sizeof(struct tfm_sst_asset_attrs_t)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TFM_SST_ASSET_DEFS_H__ */
diff --git a/interface/include/tfm_sst_asset_macros.h b/interface/include/tfm_sst_asset_macros.h
new file mode 100644
index 0000000..e97ccbe
--- /dev/null
+++ b/interface/include/tfm_sst_asset_macros.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2018, Arm Limited. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ *
+ */
+
+#ifndef __TFM_SST_ASSET_MACROS_H__
+#define __TFM_SST_ASSET_MACROS_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "tfm_sst_asset_defs.h"
+
+/*!
+ * \def TFM_SST_ASSET_IS_ASSET_CAT(sst_def_cat_type, type)
+ *
+ * \brief Macro to check if the asset category type (type) is equal to the
+ *        TF-M SST asset defined category types (sst_def_cat_type).
+ *
+ * \param[in] sst_def_cat_type  TF-M SST asset defined category type
+ * \param[in] type              Asset type
+ *
+ * \return Returns 1 if the asset type is equal to the TF-M SST asset defined
+ *         type. Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_IS_ASSET_CAT(sst_def_cat_type, type) \
+        (((type & TFM_SST_ASSET_CAT_VENDOR_DEFINED) != 0) && \
+          ((type & TFM_SST_ASSET_CAT_TYPE_MASK) == sst_def_cat_type))
+
+/*!
+ * \def TFM_SST_ASSET_IS_ASSET_TYPE(sst_def_type, type)
+ *
+ * \brief Macro to check if the asset type (type) is equal to the
+ *        TF-M SST asset defined type (sst_def_type).
+ *
+ * \param[in] sst_def_type  TF-M SST asset defined type
+ * \param[in] type          Asset type
+ *
+ * \return Returns 1 if the asset type is equal to the TF-M SST asset defined
+ *         type. Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_IS_ASSET_TYPE(sst_def_type, type) \
+        (((type & TFM_SST_ASSET_CAT_VENDOR_DEFINED) != 0) && \
+          (type == sst_def_type))
+
+/*!
+ * \def TFM_SST_ASSET_IS_VENDOR_DEFINED(type)
+ *
+ * \brief Macro to check if the asset type is vendor defined.
+ *
+ * \param[in] type  Asset type
+ *
+ * \return Returns 1 if the asset type is equal to TFM_SST_ASSET_VENDOR_DEFINED.
+ *         Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_IS_VENDOR_DEFINED(type) \
+        ((type & TFM_SST_ASSET_VENDOR_DEFINED) != 0)
+
+/*!
+ * \def TFM_SST_ASSET_IS_KEY_TYPE(type)
+ *
+ * \brief Macro to check if the asset type is a key.
+ *
+ * \param[in] type  Asset type
+ *
+ * \return Returns 1 if it is a key. Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_IS_KEY_TYPE(type) \
+        ((type & TFM_SST_ASSET_KEY_MASK) != 0)
+
+/*!
+ * \def TFM_SST_ASSET_IS_ASYMMETRIC_KEY_TYPE(type)
+ *
+ * \brief Macro to check if the asset type is a symmetric key.
+ *
+ * \param[in] type  Asset type
+ *
+ * \return Returns 1 if it is an asymmetric key. Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_IS_ASYMMETRIC_KEY_TYPE(type) \
+        ((type & TFM_SST_ASSET_KEY_ASYMMETRIC_MASK) != 0)
+
+/*!
+ * \def TFM_SST_ASSET_HAS_ATTR(sst_def_asset_attr, attrs)
+ *
+ * \brief Macro to check if the asset attributes (attrs) have a specific TF-M
+ *        SST asset defined bit attribute (sst_def_asset_attr).
+ *
+ * \param[in] sst_def_type  TF-M SST asset defined bit attribute
+ * \param[in] attrs         Asset attributes
+ *
+ * \return Returns 1 if the asset has the TF-M SST asset defined
+ *         attribute. Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_HAS_ATTR(sst_def_asset_attr, attrs) \
+        (((attrs & sst_def_asset_attr) != 0) && \
+         ((attrs & TFM_SST_ASSET_ATTR_VENDOR_DEFINED) == 0))
+
+/*!
+ * \def TFM_SST_ASSET_HAS_ATTR_VENDOR_DEFINED(attrs)
+ *
+ * \brief Macro to check if the asset attributes are vendor defined.
+ *
+ * \param[in] attrs  Asset attributes
+ *
+ * \return Returns 1 if the asset type is equal to TFM_SST_ASSET_VENDOR_DEFINED.
+ *         Otherwise, it returns 0.
+ */
+#define TFM_SST_ASSET_HAS_ATTR_VENDOR_DEFINED(attrs) \
+        ((attrs & TFM_SST_ASSET_ATTR_VENDOR_DEFINED) != 0)
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __TFM_SST_ASSET_MACROS_H__ */
diff --git a/interface/include/tfm_sst_defs.h b/interface/include/tfm_sst_defs.h
index 83ac62d..1fac2ad 100644
--- a/interface/include/tfm_sst_defs.h
+++ b/interface/include/tfm_sst_defs.h
@@ -15,6 +15,8 @@
 #include <inttypes.h>
 #include <limits.h>
 #include "tfm_api.h"
+#include "tfm_sst_asset_defs.h"
+#include "tfm_sst_asset_macros.h"
 
 /* FIXME: the secure APP ID should not be share with the non-secure code
  *        as it is revealing information about secure code implementation.
@@ -53,18 +55,6 @@
 };
 
 /*!
- * \struct tfm_sst_asset_info_t
- *
- * \brief Structure to store the asset information concerning the content
- *        information.
- *
- */
-struct tfm_sst_asset_info_t {
-    uint32_t size_current; /*!< The current size of the asset data */
-    uint32_t size_max;     /*!< The maximum size of the asset data in bytes */
-};
-
-/*!
  * \struct tfm_sst_buf_t
  *
  * \brief Structure to store data information to read/write from/to asset.
@@ -76,8 +66,6 @@
     uint32_t offset; /*!< Offset within asset */
 };
 
-#define TFM_SST_ASSET_INFO_SIZE sizeof(struct tfm_sst_asset_info_t)
-
 #ifdef __cplusplus
 }
 #endif
diff --git a/interface/include/tfm_sst_svc_handler.h b/interface/include/tfm_sst_svc_handler.h
index b983869..18e06d3 100644
--- a/interface/include/tfm_sst_svc_handler.h
+++ b/interface/include/tfm_sst_svc_handler.h
@@ -52,6 +52,34 @@
                                        struct tfm_sst_asset_info_t *info);
 
 /**
+ * \brief SVC funtion to get asset's attributes referenced by asset
+ *        handler.
+ *
+ * \param[in]  asset_handle  Asset handler
+ * \param[out] attrs         Pointer to store the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_svc_get_attributes(
+                                           uint32_t asset_handle,
+                                           struct tfm_sst_asset_attrs_t *attrs);
+
+/**
+ * \brief SVC funtion to set asset's attributes referenced by asset
+ *        handler.
+ *
+ * \param[in] asset_handle  Asset handler
+ * \param[in] attrs         Pointer to new the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_svc_set_attributes(
+                                     uint32_t asset_handle,
+                                     const struct tfm_sst_asset_attrs_t *attrs);
+
+/**
  * \brief SVC funtion to read asset's data from asset referenced by asset
  *        handler.
  *
diff --git a/interface/include/tfm_sst_veneers.h b/interface/include/tfm_sst_veneers.h
index b76abbf..108ea97 100644
--- a/interface/include/tfm_sst_veneers.h
+++ b/interface/include/tfm_sst_veneers.h
@@ -59,6 +59,35 @@
                                            struct tfm_sst_asset_info_t *info);
 
 /**
+ * \brief Gets asset's attributes referenced by asset handler.
+ *
+ * \param[in]  app_id        Application ID
+ * \param[in]  asset_handle  Asset handler
+ * \param[out] attrs         Pointer to store the asset's attributes
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_veneer_get_attributes(
+                                           uint32_t app_id,
+                                           uint32_t asset_handle,
+                                           struct tfm_sst_asset_attrs_t *attrs);
+
+/**
+ * \brief Sets asset's attributes referenced by asset handler.
+ *
+ * \param[in] app_id        Application ID
+ * \param[in] asset_handle  Asset handler
+ * \param[in] attrs         Pointer to new the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t tfm_sst_veneer_set_attributes(
+                                     uint32_t app_id,
+                                     uint32_t asset_handle,
+                                     const struct tfm_sst_asset_attrs_t *attrs);
+
+/**
  * \brief Reads asset's data from asset referenced by asset handler.
  *
  * \param[in]     app_id         Application ID
diff --git a/interface/src/tfm_sst_api.c b/interface/src/tfm_sst_api.c
index 99d9d38..1b9a8f2 100644
--- a/interface/src/tfm_sst_api.c
+++ b/interface/src/tfm_sst_api.c
@@ -36,6 +36,27 @@
                                     0);
 }
 
+enum tfm_sst_err_t tfm_sst_get_attributes(uint32_t asset_handle,
+                                          struct tfm_sst_asset_attrs_t *attrs)
+{
+    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_GET_ATTRIBUTES,
+                                    asset_handle,
+                                    (uint32_t)attrs,
+                                    0,
+                                    0);
+}
+
+enum tfm_sst_err_t tfm_sst_set_attributes(
+                                      uint32_t asset_handle,
+                                      const struct tfm_sst_asset_attrs_t *attrs)
+{
+    return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_SET_ATTRIBUTES,
+                                    asset_handle,
+                                    (uint32_t)attrs,
+                                    0,
+                                    0);
+}
+
 enum tfm_sst_err_t tfm_sst_read(uint32_t asset_handle, struct tfm_sst_buf_t* data)
 {
     return tfm_ns_lock_svc_dispatch(SVC_TFM_SST_READ,
diff --git a/interface/src/tfm_sst_svc_handler.c b/interface/src/tfm_sst_svc_handler.c
index 31ca9bd..76c5c96 100644
--- a/interface/src/tfm_sst_svc_handler.c
+++ b/interface/src/tfm_sst_svc_handler.c
@@ -40,6 +40,28 @@
     return tfm_sst_veneer_get_info(app_id, asset_handle, info);
 }
 
+enum tfm_sst_err_t tfm_sst_svc_get_attributes(
+                                            uint32_t asset_handle,
+                                            struct tfm_sst_asset_attrs_t *attrs)
+{
+    uint32_t app_id;
+
+    app_id = tfm_sst_get_cur_id();
+
+    return tfm_sst_veneer_get_attributes(app_id, asset_handle, attrs);
+}
+
+enum tfm_sst_err_t tfm_sst_svc_set_attributes(
+                                      uint32_t asset_handle,
+                                      const struct tfm_sst_asset_attrs_t *attrs)
+{
+    uint32_t app_id;
+
+    app_id = tfm_sst_get_cur_id();
+
+    return tfm_sst_veneer_set_attributes(app_id, asset_handle, attrs);
+}
+
 enum tfm_sst_err_t tfm_sst_svc_read(uint32_t asset_handle,
                                     struct tfm_sst_buf_t* data)
 {
diff --git a/platform/ext/target/mps2/an519/partition/region_defs.h b/platform/ext/target/mps2/an519/partition/region_defs.h
index 71e4b48..91ba42b 100644
--- a/platform/ext/target/mps2/an519/partition/region_defs.h
+++ b/platform/ext/target/mps2/an519/partition/region_defs.h
@@ -56,7 +56,7 @@
 #define IMAGE_CODE_SIZE \
             (FLASH_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE)
 
-#define CMSE_VENEER_REGION_SIZE     (0x000000A0)
+#define CMSE_VENEER_REGION_SIZE     (0x000000C0)
 
 /* Use SRAM1 memory to store Code data */
 #define S_ROM_ALIAS_BASE  (0x10000000)
diff --git a/platform/ext/target/mps2/an521/partition/region_defs.h b/platform/ext/target/mps2/an521/partition/region_defs.h
index 7a6921e..5e1b260 100644
--- a/platform/ext/target/mps2/an521/partition/region_defs.h
+++ b/platform/ext/target/mps2/an521/partition/region_defs.h
@@ -56,7 +56,7 @@
 #define IMAGE_CODE_SIZE \
             (FLASH_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE)
 
-#define CMSE_VENEER_REGION_SIZE     (0x000000A0)
+#define CMSE_VENEER_REGION_SIZE     (0x000000C0)
 
 /* Use SRAM1 memory to store Code data */
 #define S_ROM_ALIAS_BASE  (0x10000000)
diff --git a/platform/ext/target/musca_a/partition/region_defs.h b/platform/ext/target/musca_a/partition/region_defs.h
index 89dbbf9..170dd11 100755
--- a/platform/ext/target/musca_a/partition/region_defs.h
+++ b/platform/ext/target/musca_a/partition/region_defs.h
@@ -53,7 +53,7 @@
 #define IMAGE_CODE_SIZE \
             (FLASH_PARTITION_SIZE - BL2_HEADER_SIZE - BL2_TRAILER_SIZE)
 
-#define CMSE_VENEER_REGION_SIZE     (0x000000A0)
+#define CMSE_VENEER_REGION_SIZE     (0x000000C0)
 
 /* Use QSPI Flash memory to store Code data */
 #define S_ROM_ALIAS_BASE  (0x10200000)
diff --git a/secure_fw/ns_callable/tfm_sst_veneers.c b/secure_fw/ns_callable/tfm_sst_veneers.c
index 6907eec..56aa6ce 100644
--- a/secure_fw/ns_callable/tfm_sst_veneers.c
+++ b/secure_fw/ns_callable/tfm_sst_veneers.c
@@ -37,6 +37,26 @@
 }
 
 __tfm_secure_gateway_attributes__
+enum tfm_sst_err_t tfm_sst_veneer_get_attributes(
+                                            uint32_t app_id,
+                                            uint32_t asset_handle,
+                                            struct tfm_sst_asset_attrs_t *attrs)
+{
+    TFM_CORE_SFN_REQUEST(TFM_SP_STORAGE_ID, sst_am_get_attributes,
+                         app_id, asset_handle, attrs, 0);
+}
+
+__tfm_secure_gateway_attributes__
+enum tfm_sst_err_t tfm_sst_veneer_set_attributes(
+                                      uint32_t app_id,
+                                      uint32_t asset_handle,
+                                      const struct tfm_sst_asset_attrs_t *attrs)
+{
+    TFM_CORE_SFN_REQUEST(TFM_SP_STORAGE_ID, sst_am_set_attributes,
+                         app_id, asset_handle, attrs, 0);
+}
+
+__tfm_secure_gateway_attributes__
 enum tfm_sst_err_t tfm_sst_veneer_read(uint32_t app_id, uint32_t asset_handle,
                                        struct tfm_sst_buf_t *data)
 {
diff --git a/secure_fw/services/secure_storage/assets/sst_asset_defs.c b/secure_fw/services/secure_storage/assets/sst_asset_defs.c
index ed1f781..a4fd198 100644
--- a/secure_fw/services/secure_storage/assets/sst_asset_defs.c
+++ b/secure_fw/services/secure_storage/assets/sst_asset_defs.c
@@ -10,52 +10,62 @@
 
 struct sst_asset_policy_t asset_perms[] = {
 {
+    .type = TFM_SST_ASSET_KEY_AES,
     .asset_uuid = SST_ASSET_ID_AES_KEY_128,
     .max_size = SST_ASSET_MAX_SIZE_AES_KEY_128,
     .perms_count = SST_ASSET_PERMS_COUNT_AES_KEY_128,
     .perms_modes_start_idx = 0,
 }, {
+    .type = TFM_SST_ASSET_KEY_AES,
     .asset_uuid = SST_ASSET_ID_AES_KEY_256,
     .max_size = SST_ASSET_MAX_SIZE_AES_KEY_256,
     .perms_count = SST_ASSET_PERMS_COUNT_AES_KEY_256,
     .perms_modes_start_idx = 2,
 }, {
+    .type = TFM_SST_ASSET_KEY_RSA_PUBLIC,
     .asset_uuid = SST_ASSET_ID_RSA_KEY_1024,
     .max_size = SST_ASSET_MAX_SIZE_RSA_KEY_1024,
     .perms_count = SST_ASSET_PERMS_COUNT_RSA_KEY_1024,
     .perms_modes_start_idx = 3,
 }, {
+    .type = TFM_SST_ASSET_KEY_RSA_PUBLIC,
     .asset_uuid = SST_ASSET_ID_RSA_KEY_2048,
     .max_size = SST_ASSET_MAX_SIZE_RSA_KEY_2048,
     .perms_count = SST_ASSET_PERMS_COUNT_RSA_KEY_2048,
     .perms_modes_start_idx = 4,
 }, {
+    .type = TFM_SST_ASSET_KEY_RSA_PRIVATE,
     .asset_uuid = SST_ASSET_ID_RSA_KEY_4096,
     .max_size = SST_ASSET_MAX_SIZE_RSA_KEY_4096,
     .perms_count = SST_ASSET_PERMS_COUNT_RSA_KEY_4096,
     .perms_modes_start_idx = 5,
 }, {
+    .type = TFM_SST_ASSET_CERT_X_509,
     .asset_uuid = SST_ASSET_ID_X509_CERT_SMALL,
     .max_size = SST_ASSET_MAX_SIZE_X509_CERT_SMALL,
     .perms_count = SST_ASSET_PERMS_COUNT_X509_CERT_SMALL,
     .perms_modes_start_idx = 6,
 }, {
+    .type = TFM_SST_ASSET_CERT_X_509,
     .asset_uuid = SST_ASSET_ID_X509_CERT_LARGE,
     .max_size = SST_ASSET_MAX_SIZE_X509_CERT_LARGE,
     .perms_count = SST_ASSET_PERMS_COUNT_X509_CERT_LARGE,
     .perms_modes_start_idx = 7,
 }, {
 /* The following assets are used by the SST testsuite */
+    .type = TFM_SST_ASSET_KEY_AES,
     .asset_uuid = SST_ASSET_ID_AES_KEY_192,
     .max_size = SST_ASSET_MAX_SIZE_AES_KEY_192,
     .perms_count = SST_ASSET_PERMS_COUNT_AES_KEY_192,
     .perms_modes_start_idx = 7,
 }, {
+    .type = TFM_SST_ASSET_KEY_HMAC,
     .asset_uuid = SST_ASSET_ID_SHA224_HASH,
     .max_size = SST_ASSET_MAX_SIZE_SHA224_HASH,
     .perms_count = SST_ASSET_PERMS_COUNT_SHA224_HASH,
     .perms_modes_start_idx = 10,
 }, {
+    .type = TFM_SST_ASSET_KEY_HMAC,
     .asset_uuid = SST_ASSET_ID_SHA384_HASH,
     .max_size = SST_ASSET_MAX_SIZE_SHA384_HASH,
     .perms_count = SST_ASSET_PERMS_COUNT_SHA384_HASH,
diff --git a/secure_fw/services/secure_storage/manifest.yaml b/secure_fw/services/secure_storage/manifest.yaml
index de893f1..c3dae04 100644
--- a/secure_fw/services/secure_storage/manifest.yaml
+++ b/secure_fw/services/secure_storage/manifest.yaml
@@ -42,6 +42,22 @@
       "minor_policy": "strict"
     },
     {
+      "sfid": "SST_AM_GET_ATTRIBUTES_SFID",
+      "signal": "SST_AM_GET_ATTRIBUTES",
+      "tfm_symbol": "sst_am_get_attributes",
+      "non_secure_clients": true,
+      "minor_version": 1,
+      "minor_policy": "strict"
+    },
+    {
+      "sfid": "SST_AM_SET_ATTRIBUTES_SFID",
+      "signal": "SST_AM_SET_ATTRIBUTES",
+      "tfm_symbol": "sst_am_set_attributes",
+      "non_secure_clients": true,
+      "minor_version": 1,
+      "minor_policy": "strict"
+    },
+    {
       "sfid": "SST_AM_READ_SFID",
       "signal": "SST_AM_READ",
       "tfm_symbol": "sst_am_read",
diff --git a/secure_fw/services/secure_storage/sst_asset_management.c b/secure_fw/services/secure_storage/sst_asset_management.c
index 30174bd..989e5ed 100644
--- a/secure_fw/services/secure_storage/sst_asset_management.c
+++ b/secure_fw/services/secure_storage/sst_asset_management.c
@@ -363,7 +363,7 @@
     if (err == TFM_SST_ERR_SUCCESS) {
         /* Use tmp_info to not leak information in case the previous function
          * returns and error. It avoids to leak information in case of error.
-         * So, copy the tmp_info content into the info only if that tmp_info
+         * So, copy the tmp_info content into the attrs only if that tmp_info
          * data is valid.
          */
         sst_utils_memcpy(info, &tmp_info, TFM_SST_ASSET_INFO_SIZE);
@@ -372,6 +372,79 @@
     return err;
 }
 
+enum tfm_sst_err_t sst_am_get_attributes(uint32_t app_id,
+                                         uint32_t asset_handle,
+                                         struct tfm_sst_asset_attrs_t *attrs)
+{
+    uint8_t all_perms = SST_PERM_REFERENCE | SST_PERM_READ | SST_PERM_WRITE;
+    enum tfm_sst_err_t bound_check;
+    struct sst_asset_policy_t *db_entry;
+    enum tfm_sst_err_t err;
+    struct tfm_sst_asset_attrs_t tmp_attrs;
+
+    bound_check = sst_utils_memory_bound_check(attrs,
+                                               TFM_SST_ASSET_ATTR_SIZE,
+                                               app_id, TFM_MEMORY_ACCESS_RW);
+    if (bound_check != TFM_SST_ERR_SUCCESS) {
+        return TFM_SST_ERR_PARAM_ERROR;
+    }
+
+    db_entry = sst_am_get_db_entry_by_hdl(app_id, asset_handle, all_perms);
+    if (db_entry == NULL) {
+        return TFM_SST_ERR_ASSET_NOT_FOUND;
+    }
+
+    err = sst_object_get_attributes(asset_handle, &tmp_attrs);
+    if (err == TFM_SST_ERR_SUCCESS) {
+        /* Use tmp_attrs to not leak information incase the previous function
+         * returns and error. It avoids to leak information in case of error.
+         * So, copy the tmp_attrs content into the attrs only if that tmp_attrs
+         * data is valid.
+         */
+        sst_utils_memcpy(attrs, &tmp_attrs, TFM_SST_ASSET_ATTR_SIZE);
+    }
+
+    return err;
+}
+
+enum tfm_sst_err_t sst_am_set_attributes(
+                                      uint32_t app_id,
+                                      uint32_t asset_handle,
+                                      const struct tfm_sst_asset_attrs_t *attrs)
+{
+    uint8_t all_perms = SST_PERM_REFERENCE | SST_PERM_READ | SST_PERM_WRITE;
+    enum tfm_sst_err_t bound_check;
+    struct sst_asset_policy_t *db_entry;
+    enum tfm_sst_err_t err;
+
+    bound_check = sst_utils_memory_bound_check((uint8_t *)attrs,
+                                               TFM_SST_ASSET_ATTR_SIZE,
+                                               app_id, TFM_MEMORY_ACCESS_RO);
+    if (bound_check != TFM_SST_ERR_SUCCESS) {
+        return TFM_SST_ERR_PARAM_ERROR;
+    }
+
+    db_entry = sst_am_get_db_entry_by_hdl(app_id, asset_handle, all_perms);
+    if (db_entry == NULL) {
+        return TFM_SST_ERR_ASSET_NOT_FOUND;
+    }
+
+    /* FIXME: Validity attributes are not supported in the current service
+     *        implementation. It is mandatory to set start and end subattributes
+     *        to 0.
+     */
+    if (attrs->validity.start != 0 || attrs->validity.end != 0) {
+        return TFM_SST_ERR_PARAM_ERROR;
+    }
+
+    /* FIXME: Check which bit attributes have been changed and check if those
+     *        can be modified or not.
+     */
+    err = sst_object_set_attributes(asset_handle, attrs);
+
+    return err;
+}
+
 enum tfm_sst_err_t sst_am_create(uint32_t app_id, uint16_t asset_uuid)
 {
     enum tfm_sst_err_t err;
@@ -382,7 +455,7 @@
         return TFM_SST_ERR_ASSET_NOT_FOUND;
     }
 
-    err = sst_object_create(asset_uuid, db_entry->max_size);
+    err = sst_object_create(asset_uuid, db_entry->type, db_entry->max_size);
 
     return err;
 }
diff --git a/secure_fw/services/secure_storage/sst_asset_management.h b/secure_fw/services/secure_storage/sst_asset_management.h
index 8153c50..401dc91 100644
--- a/secure_fw/services/secure_storage/sst_asset_management.h
+++ b/secure_fw/services/secure_storage/sst_asset_management.h
@@ -32,6 +32,7 @@
 };
 
 struct sst_asset_policy_t {
+    uint32_t type;         /*!< Asset type */
     uint16_t asset_uuid;   /*!< Asset's unique ID */
     uint16_t perms_count;  /*!< Number of permissions owned by this asset */
     uint16_t max_size;     /*!< Policy maximum size fo this asset */
@@ -85,6 +86,35 @@
                                    struct tfm_sst_asset_info_t *info);
 
 /**
+ * \brief Gets the asset's attributes referenced by asset handle.
+ *
+ * \param[in]  app_id        Application ID
+ * \param[in]  asset_handle  Asset handle
+ * \param[out] attrs         Pointer to store the asset's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t sst_am_get_attributes(uint32_t app_id,
+                                         uint32_t asset_handle,
+                                         struct tfm_sst_asset_attrs_t *attrs);
+
+/**
+ * \brief Sets the asset's attributes referenced by asset handle.
+ *
+ * \param[in] app_id        Application ID
+ * \param[in] asset_handle  Asset handle
+ * \param[in] attrs         Pointer to new the asset's attributes
+ *                          \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t sst_am_set_attributes(
+                                     uint32_t app_id,
+                                     uint32_t asset_handle,
+                                     const struct tfm_sst_asset_attrs_t *attrs);
+
+/**
  * \brief Reads asset's data referenced by asset handle.
  *
  * \param[in]  app_id        Application ID
diff --git a/secure_fw/services/secure_storage/sst_object_defs.h b/secure_fw/services/secure_storage/sst_object_defs.h
index 2d327e2..af72ef3 100644
--- a/secure_fw/services/secure_storage/sst_object_defs.h
+++ b/secure_fw/services/secure_storage/sst_object_defs.h
@@ -11,6 +11,7 @@
 #include <stdint.h>
 #include "assets/sst_asset_defs.h"
 #include "tfm_sst_defs.h"
+#include "tfm_sst_asset_defs.h"
 
 #ifdef SST_ENCRYPTION
 #include "crypto/sst_crypto_interface.h"
@@ -28,6 +29,7 @@
     uint32_t uuid;                     /*!< Asset ID */
     uint32_t version;                  /*!< Asset version */
     struct tfm_sst_asset_info_t  info; /*!< Asset information */
+    struct tfm_sst_asset_attrs_t attr; /*!< Asset attributes */
 };
 
 /* The object to be written to the file system below. Made up of the
diff --git a/secure_fw/services/secure_storage/sst_object_system.c b/secure_fw/services/secure_storage/sst_object_system.c
index 645813f..7325e27 100644
--- a/secure_fw/services/secure_storage/sst_object_system.c
+++ b/secure_fw/services/secure_storage/sst_object_system.c
@@ -33,12 +33,14 @@
  * \brief Initialize an object based on the input parameters.
  *
  * \param[in]  uuid  Object UUID
+ * \param[in]  type  Object type
  * \param[in]  size  Object size
  * \param[out] obj   Object to
  *
  * \return Returns error code as specified in \ref tfm_sst_err_t
  */
 static void sst_object_init_object(uint16_t uuid,
+                                   uint32_t type,
                                    uint32_t size,
                                    struct sst_object_t *obj)
 {
@@ -49,6 +51,7 @@
     obj->header.uuid = uuid;
     obj->header.version = 0;
     obj->header.info.size_max = size;
+    obj->header.info.type = type;
 }
 
 enum tfm_sst_err_t sst_system_prepare(void)
@@ -136,6 +139,7 @@
 }
 
 enum tfm_sst_err_t sst_object_create(uint16_t object_uuid,
+                                     uint32_t type,
                                      uint32_t size)
 {
     enum tfm_sst_err_t err = TFM_SST_ERR_SYSTEM_ERROR;
@@ -147,7 +151,7 @@
         err = sst_core_object_handle(object_uuid, &hdl);
         if (err == TFM_SST_ERR_ASSET_NOT_FOUND) {
             /* Initialize object based on the input arguments */
-            sst_object_init_object(object_uuid, size, &g_sst_object);
+            sst_object_init_object(object_uuid, type, size, &g_sst_object);
 
 #ifdef SST_ENCRYPTION
             err = sst_encrypted_object_create(&g_sst_object);
@@ -283,6 +287,73 @@
     return err;
 }
 
+enum tfm_sst_err_t sst_object_get_attributes(uint32_t object_handle,
+                                            struct tfm_sst_asset_attrs_t *attrs)
+{
+    enum tfm_sst_err_t err = TFM_SST_ERR_SYSTEM_ERROR;
+
+    if (sst_system_ready == SST_SYSTEM_READY) {
+        sst_global_lock();
+
+        /* Read the object from the object system */
+#ifdef SST_ENCRYPTION
+        err = sst_encrypted_object_read(object_handle, &g_sst_object);
+#else
+        err = sst_core_object_read(object_handle, (uint8_t *)&g_sst_object,
+                                   SST_OBJECT_START_POSITION,
+                                   SST_OBJECT_HEADER_SIZE);
+#endif
+        if (err != TFM_SST_ERR_SUCCESS) {
+            return err;
+        }
+
+        sst_utils_memcpy(attrs, &g_sst_object.header.attr,
+                         TFM_SST_ASSET_ATTR_SIZE);
+
+        sst_global_unlock();
+    }
+
+    return err;
+}
+
+enum tfm_sst_err_t sst_object_set_attributes(uint32_t object_handle,
+                                      const struct tfm_sst_asset_attrs_t *attrs)
+{
+    enum tfm_sst_err_t err = TFM_SST_ERR_SYSTEM_ERROR;
+
+    if (sst_system_ready == SST_SYSTEM_READY) {
+        sst_global_lock();
+
+        /* Read the object from the object system */
+#ifdef SST_ENCRYPTION
+        err = sst_encrypted_object_read(object_handle, &g_sst_object);
+#else
+        err = sst_core_object_read(object_handle, (uint8_t *)&g_sst_object,
+                                   SST_OBJECT_START_POSITION,
+                                   SST_OBJECT_HEADER_SIZE);
+#endif
+        if (err != TFM_SST_ERR_SUCCESS) {
+            return err;
+        }
+
+        /* Set new attributes */
+        sst_utils_memcpy(&g_sst_object.header.attr,
+                         attrs, TFM_SST_ASSET_ATTR_SIZE);
+
+#ifdef SST_ENCRYPTION
+        err = sst_encrypted_object_write(object_handle, &g_sst_object);
+#else
+        err = sst_core_object_write(object_handle, (uint8_t *)&g_sst_object,
+                                   SST_OBJECT_START_POSITION,
+                                   SST_OBJECT_HEADER_SIZE);
+#endif
+
+        sst_global_unlock();
+    }
+
+    return err;
+}
+
 enum tfm_sst_err_t sst_object_delete(uint32_t object_handle)
 {
     enum tfm_sst_err_t err = TFM_SST_ERR_SYSTEM_ERROR;
diff --git a/secure_fw/services/secure_storage/sst_object_system.h b/secure_fw/services/secure_storage/sst_object_system.h
index daa120a..54718f4 100644
--- a/secure_fw/services/secure_storage/sst_object_system.h
+++ b/secure_fw/services/secure_storage/sst_object_system.h
@@ -42,11 +42,13 @@
  * \brief Creates a new object with given uuid.
  *
  * \param[in] object_uuid  Object UUID
+ * \param[in] type         Object type
  * \param[in] size         Object size
  *
  * \return Returns error code specified in \ref tfm_sst_err_t
  */
 enum tfm_sst_err_t sst_object_create(uint16_t object_uuid,
+                                     uint32_t type,
                                      uint32_t size);
 
 /**
@@ -96,6 +98,31 @@
                                       struct tfm_sst_asset_info_t *info);
 
 /**
+ * \brief Gets the object attributes referenced by object handler.
+ *
+ * \param[in]  object_handle  Object handler
+ * \param[out] attrs         Pointer to store the object's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t sst_object_get_attributes(
+                                           uint32_t object_handle,
+                                           struct tfm_sst_asset_attrs_t *attrs);
+/**
+ * \brief Sets the specific object attributes referenced by object handler.
+ *
+ * \param[in] object_handle  Object handler
+ * \param[in] attrs          Pointer to new the object's attributes
+ *                           \ref tfm_sst_asset_attrs_t
+ *
+ * \return Returns error code as specified in \ref tfm_sst_err_t
+ */
+enum tfm_sst_err_t sst_object_set_attributes(
+                                     uint32_t object_handle,
+                                     const struct tfm_sst_asset_attrs_t *attrs);
+
+/**
  * \brief Wipes secure storage system and all object data.
  *
  * \return Returns error code specified in \ref sst_errno_t
diff --git a/secure_fw/services/tfm_sfid_list.inc b/secure_fw/services/tfm_sfid_list.inc
index f630a6c..5ae0d19 100644
--- a/secure_fw/services/tfm_sfid_list.inc
+++ b/secure_fw/services/tfm_sfid_list.inc
@@ -14,6 +14,8 @@
     {sst_am_get_handle, SST_AM_GET_HANDLE_SFID},
     {sst_am_create, SST_AM_CREATE_SFID},
     {sst_am_get_info, SST_AM_GET_INFO_SFID},
+    {sst_am_get_attributes, SST_AM_GET_ATTRIBUTES_SFID},
+    {sst_am_set_attributes, SST_AM_SET_ATTRIBUTES_SFID},
     {sst_am_read, SST_AM_READ_SFID},
     {sst_am_write, SST_AM_WRITE_SFID},
     {sst_am_delete, SST_AM_DELETE_SFID},
diff --git a/test/suites/sst/non_secure/sst_ns_interface_testsuite.c b/test/suites/sst/non_secure/sst_ns_interface_testsuite.c
index cd21a39..60fc850 100644
--- a/test/suites/sst/non_secure/sst_ns_interface_testsuite.c
+++ b/test/suites/sst/non_secure/sst_ns_interface_testsuite.c
@@ -82,6 +82,7 @@
 #ifdef SST_ENABLE_PARTIAL_ASSET_RW
 static void tfm_sst_test_1029(struct test_result_t *ret);
 #endif
+static void tfm_sst_test_1030(struct test_result_t *ret);
 
 static struct test_t asset_veeners_tests[] = {
     {&tfm_sst_test_1001, "TFM_SST_TEST_1001",
@@ -146,6 +147,8 @@
     {&tfm_sst_test_1029, "TFM_SST_TEST_1029",
      "Write data to the middle of an existing asset", {0} },
 #endif
+    {&tfm_sst_test_1030, "TFM_SST_TEST_1030",
+     "Basic test to verify set and get attributes functionality", {0} },
 };
 
 void register_testsuite_ns_sst_interface(struct test_suite_t *p_test_suite)
@@ -2362,3 +2365,55 @@
     ret->val = TEST_PASSED;
 }
 #endif /* SST_ENABLE_PARTIAL_ASSET_RW */
+
+/**
+ * \brief Basic test to verify set and get attributes functionality.
+ */
+TFM_SST_NS_TEST(1030, "Thread_B")
+{
+    const uint16_t asset_uuid = SST_ASSET_ID_SHA224_HASH;
+    struct tfm_sst_asset_attrs_t wrt_attrs;
+    struct tfm_sst_asset_attrs_t read_attrs = {
+        .attrs = 0,
+        .validity.start = 0,
+        .validity.end = 0 };
+    enum tfm_sst_err_t err;
+    uint32_t hdl;
+
+    err = tfm_sst_create(asset_uuid);
+    if (err != TFM_SST_ERR_SUCCESS) {
+        TEST_FAIL("Create should not fail");
+        return;
+    }
+
+    err = tfm_sst_get_handle(asset_uuid, &hdl);
+    if (err != TFM_SST_ERR_SUCCESS) {
+        TEST_FAIL("Get handle should not fail");
+        return;
+    }
+
+    wrt_attrs.attrs = (TFM_SST_ASSET_ATTR_ENCRYPT | TFM_SST_ASSET_ATTR_DECRYPT |
+                       TFM_SST_ASSET_ATTR_SIGN | TFM_SST_ASSET_ATTR_VERIFY);
+    wrt_attrs.validity.start = 0;
+    wrt_attrs.validity.end   = 0;
+
+    err = tfm_sst_set_attributes(hdl, &wrt_attrs);
+    if (err != TFM_SST_ERR_SUCCESS) {
+        TEST_FAIL("Set attributes should not fail");
+        return;
+    }
+
+    err = tfm_sst_get_attributes(hdl, &read_attrs);
+    if (err != TFM_SST_ERR_SUCCESS) {
+        TEST_FAIL("Get attributes should not fail");
+        return;
+    }
+
+    /* Compare asset attributes */
+    if (memcmp(&wrt_attrs, &read_attrs, TFM_SST_ASSET_ATTR_SIZE) != 0) {
+        TEST_FAIL("Attributes are differents");
+        return;
+    }
+
+    ret->val = TEST_PASSED;
+}
