/* * * Copyright (c) 2023 Project CHIP Authors * * 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. */ #pragma once #include "stdint.h" #include "string.h" #include "tlv_decode.h" #ifdef CFG_PLF_RV32 #include "asr_flash.h" #include "asr_rv32.h" #elif defined CFG_PLF_DUET #include "duet_cm4.h" #include "duet_flash.h" #define asr_flash_read duet_flash_read #define asr_factory_decrypt_dac_prvkey duet_factory_decrypt_dac_prvkey #else #include "lega_cm4.h" #include "lega_flash.h" #define asr_flash_read lega_flash_read #endif #ifndef CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER #define CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER 0 #endif // CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER #ifndef CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER #define CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER 0 #endif // CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER #define ASR_CONFIG_BASE PARTITION_MATTER_CONFIG #define ASR_MATTER_FACTORY_VERSION 2 #define ASR_CONFIG_MATTER_NO_KEY 0x01 #if CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER typedef enum ASR_MATTER_PARTITION_T { ASR_VERSION_PARTITION = 0x00, ASR_CONFIG_PARTITION, ASR_ITERATION_COUNT_PARTITION, ASR_SALT_PARTITION, ASR_VERIFIER_PARTITION, ASR_DISCRIMINATOR_PARTITION, ASR_DAC_CERT_PARTITION, ASR_DAC_KEY_PARTITION, ASR_DAC_PUB_KEY_PARTITION, ASR_PAI_CERT_PARTITION, ASR_CERT_DCLRN_PARTITION, ASR_CHIP_ID_PARTITION, #if CONFIG_ENABLE_ASR_FACTORY_DEVICE_INFO_PROVIDER ASR_VENDOR_NAME_PARTITION, ASR_VENDOR_ID_PARTITION, ASR_PRODUCT_NAME_PARTITION, ASR_PRODUCT_ID_PARTITION, ASR_ROTATING_UNIQUE_ID_PARTITION, ASR_MANUFACTURY_DATE_PARTITION, ASR_SERIAL_NUMBER_PARTITION, ASR_HARDWARE_VERSION_PARTITION, ASR_HARDWARE_VERSION_STR_PARTITION, ASR_PRODUCT_URL_PARTITION, ASR_PRODUCT_LABEL_PARTITION, ASR_PART_NUMBER_PARTITION, #endif ASR_MATTER_PARTITION_MAX, } asr_matter_partition_t; typedef struct { const char * partition_name; } matter_partition_t; typedef enum { FACTORY_NO_ERROR = 0x00, FACTORY_BUFFER_TOO_SMALL, FACTORY_VALUE_NOT_FOUND, FACTORY_INVALID_INPUT, FACTORY_NOT_SUPPORTED, FACTORY_VERSION_MISMATCH, FACTORY_DATA_CHECK_FAILED, FACTORY_DATA_INIT_FAILED, } factory_error_t; /** * @brief Tries to read the factory data within the given partition. * * @param matter_partition The matter partition to be find out. * @param buf Output buffer to store found factory data. * @param buf_len Size of buffer. * @param outlen Actual size of found factory data. * @return FACTORY_NO_ERROR on success, other factory_error_t values from implementation on other errors. */ factory_error_t asr_factory_config_read(asr_matter_partition_t matter_partition, uint8_t * buf, uint32_t buf_len, uint32_t * out_len); /** * @brief Init and check if the factory data filed is valid. * * @return FACTORY_NO_ERROR on success, other factory_error_t values from implementation on other errors. */ factory_error_t asr_factory_check(); #endif // CONFIG_ENABLE_ASR_FACTORY_DATA_PROVIDER