/* * * Copyright (c) 2021 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 #include namespace chip { namespace Credentials { class DeviceAttestationCredentialsProvider { public: DeviceAttestationCredentialsProvider() = default; virtual ~DeviceAttestationCredentialsProvider() = default; // Not copyable DeviceAttestationCredentialsProvider(const DeviceAttestationCredentialsProvider &) = delete; DeviceAttestationCredentialsProvider & operator=(const DeviceAttestationCredentialsProvider &) = delete; /** * @brief Get the Certification Declaration body. Updates `out_cd_buffer`'s size on success * to match the data size. If no Certification Declaration is available, sets * `out_cd_buffer` to empty. * * @param[in,out] out_cd_buffer Buffer to receive the Certification Declaration body. * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_cd_buffer` * is too small, or another CHIP_ERROR from the underlying implementation * if access fails. */ virtual CHIP_ERROR GetCertificationDeclaration(MutableByteSpan & out_cd_buffer) = 0; /** * @brief Get the Firmware Information body. Updates `out_firmware_info_buffer`'s size * on success to match the data size. If no Firmware Information is available, * sets `out_firmware_info_buffer` to empty. * * @param[in,out] out_firmware_info_buffer Buffer to receive the Firmware Information body. * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_firmware_info_buffer` * is too small, or another CHIP_ERROR from the underlying implementation if access fails. */ virtual CHIP_ERROR GetFirmwareInformation(MutableByteSpan & out_firmware_info_buffer) = 0; /** * @brief Get the Device Attestation Certificate in DER format. Updates `out_dac_buffer`'s * size on success to match the data size. If no Device Attestation Certificate * is available, sets `out_dac_buffer` to empty. * * @param[in,out] out_dac_buffer Buffer to receive the Device Attestation Certificate. * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_dac_buffer` * is too small, or another CHIP_ERROR from the underlying implementation if * access fails. */ virtual CHIP_ERROR GetDeviceAttestationCert(MutableByteSpan & out_dac_buffer) = 0; /** * @brief Get the PAI Certificate in DER format. Updates `out_pai_buffer`'s * size on success to match the data size. If no PAI certificate * is available, sets `out_pai_buffer` to empty. * * @param[in,out] out_pai_buffer Buffer to receive the PAI certificate. * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_pai_buffer` * is too small, or another CHIP_ERROR from the underlying implementation if * access fails. */ virtual CHIP_ERROR GetProductAttestationIntermediateCert(MutableByteSpan & out_pai_buffer) = 0; /** * @brief Signs a message using the device attestation private key * * @param[in] message_to_sign The message to sign using the attestation private key. * @param[in,out] out_signature_buffer Buffer to receive the signature in raw format. * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_signature_buffer` is too small, * or another CHIP_ERROR from the underlying implementation if signature fails. */ virtual CHIP_ERROR SignWithDeviceAttestationKey(const ByteSpan & message_to_sign, MutableByteSpan & out_signature_buffer) = 0; }; /** * Instance getter for the global DeviceAttestationCredentialsProvider. * * Callers have to externally synchronize usage of this function. * * @return The global device attestation credentials provider. Assume never null. */ DeviceAttestationCredentialsProvider * GetDeviceAttestationCredentialsProvider(); /** * Instance setter for the global DeviceAttestationCredentialsProvider. * * Callers have to externally synchronize usage of this function. * * If the `provider` is nullptr, no change is done. * * @param[in] provider the DeviceAttestationCredentialsProvider to start returning with the getter */ void SetDeviceAttestationCredentialsProvider(DeviceAttestationCredentialsProvider * provider); /** * Check if Instance is prepared */ bool IsDeviceAttestationCredentialsProviderSet(); } // namespace Credentials } // namespace chip