From 86adda6e6d33dce8fa3684919aa03975acb9e888 Mon Sep 17 00:00:00 2001 From: John Date: Fri, 15 Mar 2024 14:46:45 +0200 Subject: [PATCH] Updated interfaces (#532) * Updated interfaces * Updated dependency * Update mock --------- Signed-off-by: AssemblyJohn --- dependencies.yaml | 2 +- include/ocpp/common/evse_security.hpp | 4 ++-- include/ocpp/common/evse_security_impl.hpp | 5 +++-- include/ocpp/common/types.hpp | 10 +++++++++ lib/ocpp/common/evse_security_impl.cpp | 25 ++++++++++++++++++++-- lib/ocpp/v16/charge_point_impl.cpp | 2 +- tests/evse_security_mock.hpp | 2 +- 7 files changed, 41 insertions(+), 9 deletions(-) diff --git a/dependencies.yaml b/dependencies.yaml index a48bb63c7..2fe4b74be 100644 --- a/dependencies.yaml +++ b/dependencies.yaml @@ -30,7 +30,7 @@ websocketpp: git_tag: 0.8.2 libevse-security: git: https://github.com/EVerest/libevse-security.git - git_tag: v0.4.3 + git_tag: 5cd5f82 libwebsockets: git: https://github.com/warmcat/libwebsockets.git git_tag: v4.3.3 diff --git a/include/ocpp/common/evse_security.hpp b/include/ocpp/common/evse_security.hpp index b7690b5ef..74621a4b4 100644 --- a/include/ocpp/common/evse_security.hpp +++ b/include/ocpp/common/evse_security.hpp @@ -46,8 +46,8 @@ class EvseSecurity { /// \param certificate_chain PEM formatted certificate or certificate chain /// \param certificate_type type of the leaf certificate /// \return result of the operation - virtual InstallCertificateResult verify_certificate(const std::string& certificate_chain, - const CertificateSigningUseEnum& certificate_type) = 0; + virtual CertificateValidationResult verify_certificate(const std::string& certificate_chain, + const CertificateSigningUseEnum& certificate_type) = 0; /// \brief Retrieves all certificates installed on the filesystem applying the \p certificate_types filter. This /// function respects the requirements of OCPP specified for the CSMS initiated message diff --git a/include/ocpp/common/evse_security_impl.hpp b/include/ocpp/common/evse_security_impl.hpp index ddc989486..7667ba211 100644 --- a/include/ocpp/common/evse_security_impl.hpp +++ b/include/ocpp/common/evse_security_impl.hpp @@ -39,8 +39,8 @@ class EvseSecurityImpl : public EvseSecurity { DeleteCertificateResult delete_certificate(const CertificateHashDataType& certificate_hash_data) override; InstallCertificateResult update_leaf_certificate(const std::string& certificate_chain, const CertificateSigningUseEnum& certificate_type) override; - InstallCertificateResult verify_certificate(const std::string& certificate_chain, - const CertificateSigningUseEnum& certificate_type) override; + CertificateValidationResult verify_certificate(const std::string& certificate_chain, + const CertificateSigningUseEnum& certificate_type) override; std::vector get_installed_certificates(const std::vector& certificate_types) override; std::vector get_ocsp_request_data() override; @@ -63,6 +63,7 @@ CertificateSigningUseEnum to_ocpp(evse_security::LeafCertificateType other); CertificateType to_ocpp(evse_security::CertificateType other); HashAlgorithmEnumType to_ocpp(evse_security::HashAlgorithm other); InstallCertificateResult to_ocpp(evse_security::InstallCertificateResult other); +CertificateValidationResult to_ocpp(evse_security::CertificateValidationResult other); DeleteCertificateResult to_ocpp(evse_security::DeleteCertificateResult other); CertificateHashDataType to_ocpp(evse_security::CertificateHashData other); diff --git a/include/ocpp/common/types.hpp b/include/ocpp/common/types.hpp index 137381b2d..2bedb229a 100644 --- a/include/ocpp/common/types.hpp +++ b/include/ocpp/common/types.hpp @@ -347,6 +347,16 @@ enum class InstallCertificateResult { Accepted }; +enum class CertificateValidationResult { + Valid, + Expired, + InvalidSignature, + IssuerNotFound, + InvalidLeafSignature, + InvalidChain, + Unknown +}; + namespace conversions { /// \brief Converts the given InstallCertificateResult \p e to human readable string /// \returns a string representation of the InstallCertificateResult diff --git a/lib/ocpp/common/evse_security_impl.cpp b/lib/ocpp/common/evse_security_impl.cpp index cfd7c6dd5..377e91b4f 100644 --- a/lib/ocpp/common/evse_security_impl.cpp +++ b/lib/ocpp/common/evse_security_impl.cpp @@ -40,8 +40,8 @@ InstallCertificateResult EvseSecurityImpl::update_leaf_certificate(const std::st this->evse_security->update_leaf_certificate(certificate_chain, conversions::from_ocpp(certificate_type))); } -InstallCertificateResult EvseSecurityImpl::verify_certificate(const std::string& certificate_chain, - const CertificateSigningUseEnum& certificate_type) { +CertificateValidationResult EvseSecurityImpl::verify_certificate(const std::string& certificate_chain, + const CertificateSigningUseEnum& certificate_type) { return conversions::to_ocpp( this->evse_security->verify_certificate(certificate_chain, conversions::from_ocpp(certificate_type))); } @@ -200,6 +200,27 @@ InstallCertificateResult to_ocpp(evse_security::InstallCertificateResult other) } } +CertificateValidationResult to_ocpp(evse_security::CertificateValidationResult other) { + switch (other) { + case evse_security::CertificateValidationResult::Valid: + return CertificateValidationResult::Valid; + case evse_security::CertificateValidationResult::InvalidSignature: + return CertificateValidationResult::InvalidSignature; + case evse_security::CertificateValidationResult::IssuerNotFound: + return CertificateValidationResult::IssuerNotFound; + case evse_security::CertificateValidationResult::InvalidLeafSignature: + return CertificateValidationResult::InvalidLeafSignature; + case evse_security::CertificateValidationResult::InvalidChain: + return CertificateValidationResult::InvalidChain; + case evse_security::CertificateValidationResult::Unknown: + return CertificateValidationResult::Unknown; + ; + default: + throw std::runtime_error( + "Could not convert evse_security::CertificateValidationResult to CertificateValidationResult"); + } +} + DeleteCertificateResult to_ocpp(evse_security::DeleteCertificateResult other) { switch (other) { case evse_security::DeleteCertificateResult::Accepted: diff --git a/lib/ocpp/v16/charge_point_impl.cpp b/lib/ocpp/v16/charge_point_impl.cpp index c5d0b2eac..4924c2f14 100644 --- a/lib/ocpp/v16/charge_point_impl.cpp +++ b/lib/ocpp/v16/charge_point_impl.cpp @@ -2379,7 +2379,7 @@ void ChargePointImpl::handleSignedUpdateFirmware(ocpp::Callevse_security->verify_certificate(call.msg.firmware.signingCertificate.get(), ocpp::CertificateSigningUseEnum::ManufacturerCertificate) != - ocpp::InstallCertificateResult::Accepted) { + ocpp::CertificateValidationResult::Valid) { response.status = UpdateFirmwareStatusEnumType::InvalidCertificate; ocpp::CallResult call_result(response, call.uniqueId); this->send(call_result); diff --git a/tests/evse_security_mock.hpp b/tests/evse_security_mock.hpp index 74204e95a..ddd45ce03 100644 --- a/tests/evse_security_mock.hpp +++ b/tests/evse_security_mock.hpp @@ -18,7 +18,7 @@ class EvseSecurityMock : public EvseSecurity { MOCK_METHOD(DeleteCertificateResult, delete_certificate, (const ocpp::CertificateHashDataType&), (override)); MOCK_METHOD(InstallCertificateResult, update_leaf_certificate, (const std::string&, const CertificateSigningUseEnum&), (override)); - MOCK_METHOD(InstallCertificateResult, verify_certificate, (const std::string&, const CertificateSigningUseEnum&), + MOCK_METHOD(CertificateValidationResult, verify_certificate, (const std::string&, const CertificateSigningUseEnum&), (override)); MOCK_METHOD(std::vector, get_installed_certificates, (const std::vector&), (override));