/*** Copyright (C) 2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuPinGlobal.cpp Date: 2024-10-14 Author: Reece ***/ #include #include "AuPinGlobal.hpp" namespace Aurora::Crypto::CA { static AuSPtr gDefaultPinner; static GlobalPinner gGlobalPinner; static AuRWLock gRWPinnerLock; bool GlobalPinner::CheckCertificate(const AuSPtr &pChain, const AuMemoryViewRead &derCertificate) { AU_LOCK_GUARD(gRWPinnerLock->AsReadable()); if (gDefaultPinner) { return gDefaultPinner->CheckCertificate(pChain, derCertificate); } else { return PinCheckDefaultNew()->CheckCertificate(pChain, derCertificate); } } AUKN_SYM IPinCertificate *PinCheckGlobalNew() { return &gGlobalPinner; } AUKN_SYM void PinCheckGlobalRelease(IPinCertificate *pHandle) { // Singleton NOP } AUKN_SYM void SetGlobalTLSPinner(const AuSPtr &pNewDefault) { AU_LOCK_GUARD(gRWPinnerLock->AsWritable()); gDefaultPinner = pNewDefault; } }