Line data Source code
1 : /* 2 : * 3 : * Copyright (c) 2021 Project CHIP Authors 4 : * 5 : * Licensed under the Apache License, Version 2.0 (the "License"); 6 : * you may not use this file except in compliance with the License. 7 : * You may obtain a copy of the License at 8 : * 9 : * http://www.apache.org/licenses/LICENSE-2.0 10 : * 11 : * Unless required by applicable law or agreed to in writing, software 12 : * distributed under the License is distributed on an "AS IS" BASIS, 13 : * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 : * See the License for the specific language governing permissions and 15 : * limitations under the License. 16 : */ 17 : #pragma once 18 : 19 : #include <lib/core/CHIPError.h> 20 : #include <lib/support/Span.h> 21 : 22 : namespace chip { 23 : namespace Credentials { 24 : 25 : class DeviceAttestationCredentialsProvider 26 : { 27 : public: 28 : DeviceAttestationCredentialsProvider() = default; 29 0 : virtual ~DeviceAttestationCredentialsProvider() = default; 30 : 31 : // Not copyable 32 : DeviceAttestationCredentialsProvider(const DeviceAttestationCredentialsProvider &) = delete; 33 : DeviceAttestationCredentialsProvider & operator=(const DeviceAttestationCredentialsProvider &) = delete; 34 : 35 : /** 36 : * @brief Get the Certification Declaration body. Updates `out_cd_buffer`'s size on success 37 : * to match the data size. If no Certification Declaration is available, sets 38 : * `out_cd_buffer` to empty. 39 : * 40 : * @param[in,out] out_cd_buffer Buffer to receive the Certification Declaration body. 41 : * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_cd_buffer` 42 : * is too small, or another CHIP_ERROR from the underlying implementation 43 : * if access fails. 44 : */ 45 : virtual CHIP_ERROR GetCertificationDeclaration(MutableByteSpan & out_cd_buffer) = 0; 46 : 47 : /** 48 : * @brief Get the Firmware Information body. Updates `out_firmware_info_buffer`'s size 49 : * on success to match the data size. If no Firmware Information is available, 50 : * sets `out_firmware_info_buffer` to empty. 51 : * 52 : * @param[in,out] out_firmware_info_buffer Buffer to receive the Firmware Information body. 53 : * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_firmware_info_buffer` 54 : * is too small, or another CHIP_ERROR from the underlying implementation if access fails. 55 : */ 56 : virtual CHIP_ERROR GetFirmwareInformation(MutableByteSpan & out_firmware_info_buffer) = 0; 57 : 58 : /** 59 : * @brief Get the Device Attestation Certificate in DER format. Updates `out_dac_buffer`'s 60 : * size on success to match the data size. If no Device Attestation Certificate 61 : * is available, sets `out_dac_buffer` to empty. 62 : * 63 : * @param[in,out] out_dac_buffer Buffer to receive the Device Attestation Certificate. 64 : * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_dac_buffer` 65 : * is too small, or another CHIP_ERROR from the underlying implementation if 66 : * access fails. 67 : */ 68 : virtual CHIP_ERROR GetDeviceAttestationCert(MutableByteSpan & out_dac_buffer) = 0; 69 : 70 : /** 71 : * @brief Get the PAI Certificate in DER format. Updates `out_pai_buffer`'s 72 : * size on success to match the data size. If no PAI certificate 73 : * is available, sets `out_pai_buffer` to empty. 74 : * 75 : * @param[in,out] out_pai_buffer Buffer to receive the PAI certificate. 76 : * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_pai_buffer` 77 : * is too small, or another CHIP_ERROR from the underlying implementation if 78 : * access fails. 79 : */ 80 : virtual CHIP_ERROR GetProductAttestationIntermediateCert(MutableByteSpan & out_pai_buffer) = 0; 81 : 82 : /** 83 : * @brief Signs a message using the device attestation private key 84 : * 85 : * @param[in] message_to_sign The message to sign using the attestation private key. 86 : * @param[in,out] out_signature_buffer Buffer to receive the signature in raw <r,s> format. 87 : * @returns CHIP_NO_ERROR on success, CHIP_ERROR_BUFFER_TOO_SMALL if `out_signature_buffer` is too small, 88 : * or another CHIP_ERROR from the underlying implementation if signature fails. 89 : */ 90 : virtual CHIP_ERROR SignWithDeviceAttestationKey(const ByteSpan & message_to_sign, MutableByteSpan & out_signature_buffer) = 0; 91 : }; 92 : 93 : /** 94 : * Instance getter for the global DeviceAttestationCredentialsProvider. 95 : * 96 : * Callers have to externally synchronize usage of this function. 97 : * 98 : * @return The global device attestation credentials provider. Assume never null. 99 : */ 100 : DeviceAttestationCredentialsProvider * GetDeviceAttestationCredentialsProvider(); 101 : 102 : /** 103 : * Instance setter for the global DeviceAttestationCredentialsProvider. 104 : * 105 : * Callers have to externally synchronize usage of this function. 106 : * 107 : * If the `provider` is nullptr, no change is done. 108 : * 109 : * @param[in] provider the DeviceAttestationCredentialsProvider to start returning with the getter 110 : */ 111 : void SetDeviceAttestationCredentialsProvider(DeviceAttestationCredentialsProvider * provider); 112 : 113 : /** 114 : * Check if Instance is prepared 115 : */ 116 : bool IsDeviceAttestationCredentialsProviderSet(); 117 : 118 : } // namespace Credentials 119 : } // namespace chip