/* * Copyright (C) 2023-2024 Huawei Device Co., Ltd. * 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 ATTRIBUTE_H #define ATTRIBUTE_H #include "c_array.h" #include "defines.h" #ifdef __cplusplus extern "C" { #endif typedef enum { /* Root tag */ ATTR_ROOT = 100000, /* Result code */ ATTR_RESULT_CODE = 100001, /* Tag of signature data in TLV */ ATTR_SIGNATURE = 100004, /* Tag of templateId data in TLV */ ATTR_TEMPLATE_ID = 100006, /* Expected attribute, tag of remain count in TLV */ ATTR_REMAIN_ATTEMPTS = 100009, /* Remain time */ ATTR_LOCKOUT_DURATION = 100010, /* Session id, required when decode in C */ ATTR_SCHEDULE_ID = 100014, /* Tag of data */ ATTR_DATA = 100020, /** Pin subtype, the value type is int32_t. */ ATTR_PIN_SUB_TYPE = 100021, /* capability level */ ATTR_ACL = 100029, /* time stamp */ ATTR_TIME_STAMP = 100031, /* root secret */ ATTR_ROOT_SECRET = 100032, ATTR_LOCAL_UDID = 100063, ATTR_PEER_UDID = 100064, ATTR_PUBLIC_KEY = 100065, ATTR_CHALLENGE = 100066, PIN_ATTR_MSG_ID = 200001, PIN_ATTR_ALGO_VERSION = 200004, PIN_ATTR_ALGO_PARAM = 200005, PIN_ATTR_KEK_SALT = 200100, PIN_ATTR_KEK_IV = 200101, PIN_ATTR_KEK_SECRET = 200102, PIN_ATTR_KEK_TAG = 200103, } AttributeKey; typedef void Attribute; Attribute *CreateEmptyAttribute(void); Attribute *CreateAttributeFromSerializedMsg(const Uint8Array msg); void FreeAttribute(Attribute **attribute); ResultCode GetAttributeSerializedMsg(const Attribute *attribute, Uint8Array *retMsg); ResultCode GetAttributeLength(const Attribute *attribute, AttributeKey key, uint32_t *len); ResultCode GetAttributeUint32(const Attribute *attribute, AttributeKey key, uint32_t *retValue); ResultCode SetAttributeUint32(Attribute *attribute, AttributeKey key, const uint32_t value); ResultCode GetAttributeInt32(const Attribute *attribute, AttributeKey key, int32_t *retValue); ResultCode SetAttributeInt32(Attribute *attribute, AttributeKey key, const int32_t value); ResultCode GetAttributeUint64(const Attribute *attribute, AttributeKey key, uint64_t *retValue); ResultCode SetAttributeUint64(Attribute *attribute, AttributeKey key, const uint64_t value); ResultCode GetAttributeUint8Array(const Attribute *attribute, AttributeKey key, Uint8Array *retData); ResultCode SetAttributeUint8Array(Attribute *attribute, AttributeKey key, const Uint8Array data); ResultCode GetAttributeUint64Array(const Attribute *attribute, AttributeKey key, Uint64Array *retData); ResultCode SetAttributeUint64Array(Attribute *attribute, AttributeKey key, const Uint64Array data); #ifdef __cplusplus } #endif #endif // ATTRIBUTE_H