/* * * Copyright (c) 2022 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 #include #include namespace chip { namespace Credentials { enum class CertificateValidationMode { // Validate that the certificate is a valid PAA certificate. kPAA, // Validate just that the certificate has a public key we can extract // (e.g. it's a CD signing certificate). kPublicKeyOnly, }; /** * @brief Load all X.509 DER certificates in a given path. * * Silently ignores non-X.509 files and X.509 files that fail validation as * determined by the provided validation mode. * * Returns an empty vector if no files are found or unrecoverable errors arise. * * @param trustStorePath - path from where to search for certificates. * @param validationMode - how the certificate files should be validated. * @return a vector of certificate DER data */ std::vector> LoadAllX509DerCerts(const char * trustStorePath, CertificateValidationMode validationMode = CertificateValidationMode::kPAA); class FileAttestationTrustStore : public AttestationTrustStore { public: FileAttestationTrustStore(const char * paaTrustStorePath = nullptr); ~FileAttestationTrustStore(); CHIP_ERROR GetProductAttestationAuthorityCert(const ByteSpan & skid, MutableByteSpan & outPaaDerBuffer) const override; bool IsInitialized() const { return mIsInitialized; } size_t paaCount() const { return mPAADerCerts.size(); }; protected: std::vector> mPAADerCerts; private: bool mIsInitialized = false; void Cleanup(); }; } // namespace Credentials } // namespace chip