54 lines
1.4 KiB
C++
54 lines
1.4 KiB
C++
|
/***
|
||
|
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));
|
||
|
}
|
||
|
}
|