/*** Copyright (C) 2021 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: ECC.hpp Date: 2021-7-1 Author: Reece ***/ #pragma once namespace Aurora::Crypto::ECC { class IECCPublic { public: virtual bool Verify(const Memory::MemoryViewRead &payload, const Memory::MemoryViewRead &signature) = 0; virtual bool AsPublicECC(AuList &out) = 0; }; class IECCPrivate { public: virtual bool Sign(const Memory::MemoryViewRead &payload, EHashType method, AuList &out) = 0; virtual bool ECDH(const AuSPtr &partnerPublic, AuList &sharedKey) = 0; virtual bool AsPublicECC(AuList &out) = 0; virtual bool AsPrivateECC(AuList &out) = 0; }; enum EECCCurve { eCurve256, eCurve384, eCurveX25519, eCurveEd25519 }; AUKN_SHARED_API(NewECC, IECCPrivate, EECCCurve curve); AUKN_SHARED_API(OpenPrivateECC, IECCPrivate, EECCCurve curve, const Memory::MemoryViewRead &pk); AUKN_SHARED_API(OpenPublicECC, IECCPublic, EECCCurve curve, const Memory::MemoryViewRead &pk); AUKN_SHARED_API(OpenPublicECCFromCert, IECCPublic, EECCCurve curve, const Memory::MemoryViewRead &certificate); } #include "25519/25519.hpp" #include "NIST/NIST.hpp"