/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuCertificateChain.hpp Date: 2022-8-27 Author: Reece ***/ #pragma once #include #include #include #include namespace Aurora::Crypto::X509 { struct CertificateChain : ICertificateChain, AuEnableSharedFromThis { CertificateChain(); ~CertificateChain(); virtual AuUInt32 GetCertificateCount() override; virtual AuMemoryViewRead GetCertificate(AuUInt32 idx) override; virtual AuOptional GetCertificateDetails(AuUInt32 idx) override; mbedtls_x509_crt *GetCertificateInternal(AuUInt32 idx); bool Init(const AuList &certs); bool Init(const AuMemoryViewRead &cert); bool Init2(const AuMemoryViewRead &cert); bool Init(const AuList &certs); bool Init(const AuROString &cert); bool Init2(const AuROString &cert); bool Init(const mbedtls_x509_crt *pCert); bool Precache(); mbedtls_x509_crt *pCertificate; mbedtls_x509_crt ownCertificate {}; AuList decoded; AuMutex mutex; AuList ownership; AuMemoryViewRead ownership2; }; }