AuroraRuntime/Source/Crypto/CA/AuPinLinuxLike.cpp

54 lines
1.4 KiB
C++
Raw Normal View History

/***
Copyright (C) 2024 Jamie Reece Wilson (a/k/a "Reece"). All rights reserved.
File: AuPinLinuxLike.cpp
Date: 2024-10-14
Author: Reece
***/
#include <Source/RuntimeInternal.hpp>
#include "AuPinLinuxLike.hpp"
namespace Aurora::Crypto::CA
{
IPinCertificate *PinLinuxLikeNew()
{
auto pStore = NewCertificateStoreNew();
if (!pStore)
{
return nullptr;
}
AuString certs;
if (!AuFS::ReadString("/etc/ssl/certs/ca-bundle.crt", certs))
{
if (!AuFS::ReadString("/etc/ssl/certs/ca-certificates.crt", certs))
{
SysPushErrorIO("No SSL certificates.crt file");
NewCertificateStoreRelease(pStore);
return nullptr;
}
}
auto pChain = AuCrypto::X509::NewChainFromManyPemInStreamUnique(certs);
if (!pChain)
{
SysPushErrorSyntax("Couldn't parse system cert file!");
NewCertificateStoreRelease(pStore);
return nullptr;
}
if (!pStore->AddCertificateChain(pChain.get()))
{
SysPushErrorGeneric();
NewCertificateStoreRelease(pStore);
return nullptr;
}
return pStore;
}
void PinLinuxLikeRelease(IPinCertificate *pHandle)
{
NewCertificateStoreRelease(AuStaticCast<ICertificateStore>(pHandle));
}
}