Skip to content

Commit

Permalink
Updated native interface usage
Browse files Browse the repository at this point in the history
Signed-off-by: AssemblyJohn <[email protected]>
  • Loading branch information
AssemblyJohn committed May 3, 2024
1 parent 8086856 commit 012868c
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 16 deletions.
7 changes: 3 additions & 4 deletions include/ocpp/common/evse_security.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -87,10 +87,9 @@ class EvseSecurity {
/// \param organization
/// \param common
/// \return the PEM formatted certificate signing request
virtual std::string generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type,
const std::string& country,
const std::string& organization, const std::string& common,
bool use_tpm) = 0;
virtual std::optional<std::string>
generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type, const std::string& country,
const std::string& organization, const std::string& common, bool use_tpm) = 0;

/// \brief Searches the leaf certificate for the given \p certificate_type and retrieves the most recent certificate
/// that is already valid and the respective key . If no certificate is present or no key is matching the
Expand Down
7 changes: 4 additions & 3 deletions include/ocpp/common/evse_security_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,10 @@ class EvseSecurityImpl : public EvseSecurity {
void update_ocsp_cache(const CertificateHashDataType& certificate_hash_data,
const std::string& ocsp_response) override;
bool is_ca_certificate_installed(const CaCertificateType& certificate_type) override;
std::string generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type,
const std::string& country, const std::string& organization,
const std::string& common, bool use_tpm) override;
std::optional<std::string> generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type,
const std::string& country,
const std::string& organization,
const std::string& common, bool use_tpm) override;
std::optional<CertificateInfo> get_leaf_certificate_info(const CertificateSigningUseEnum& certificate_type,
bool include_ocsp = false) override;
bool update_certificate_links(const CertificateSigningUseEnum& certificate_type) override;
Expand Down
19 changes: 13 additions & 6 deletions lib/ocpp/common/evse_security_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -96,12 +96,19 @@ bool EvseSecurityImpl::is_ca_certificate_installed(const CaCertificateType& cert
return this->evse_security->is_ca_certificate_installed(conversions::from_ocpp(certificate_type));
}

std::string EvseSecurityImpl::generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type,
const std::string& country,
const std::string& organization,
const std::string& common, bool use_tpm) {
return this->evse_security->generate_certificate_signing_request(conversions::from_ocpp(certificate_type), country,
organization, common, use_tpm);
std::optional<std::string>
EvseSecurityImpl::generate_certificate_signing_request(const CertificateSigningUseEnum& certificate_type,
const std::string& country, const std::string& organization,
const std::string& common, bool use_tpm) {
auto csr_response = this->evse_security->generate_certificate_signing_request(
conversions::from_ocpp(certificate_type), country, organization, common, use_tpm);

if (csr_response.status == evse_security::GetCertificateSignRequestStatus::Accepted &&
csr_response.csr.has_value()) {
return csr_response.csr;
} else {
return std::nullopt;
}
}

std::optional<CertificateInfo>
Expand Down
17 changes: 15 additions & 2 deletions lib/ocpp/v16/charge_point_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -2245,7 +2245,15 @@ void ChargePointImpl::sign_certificate(const ocpp::CertificateSigningUseEnum& ce
this->configuration->getCpoName().value(), this->configuration->getChargeBoxSerialNumber(),
this->configuration->getUseTPM());

req.csr = csr;
if (!csr.has_value()) {
EVLOG_error << "Create CSR (TPM=" << this->configuration->getUseTPM() << ")"
<< " failed for:"
<< ocpp::conversions::certificate_signing_use_enum_to_string(certificate_signing_use);
return;
}

req.csr = csr.value();

ocpp::Call<SignCertificateRequest> call(req, this->message_queue->createMessageId());
this->send<SignCertificateRequest>(call, initiated_by_trigger_message);
}
Expand Down Expand Up @@ -2933,7 +2941,12 @@ void ChargePointImpl::data_transfer_pnc_sign_certificate() {
this->configuration->getSeccLeafSubjectCommonName().value_or(this->configuration->getChargeBoxSerialNumber()),
this->configuration->getUseTPM());

csr_req.csr = csr;
if (!csr.has_value()) {
EVLOG_error << "Could not request new V2GCertificate, because the CSR was not successful.";
return;
}

csr_req.csr = csr.value();
csr_req.certificateType = ocpp::v201::CertificateSigningUseEnum::V2GCertificate;
req.data.emplace(json(csr_req).dump());

Expand Down
9 changes: 8 additions & 1 deletion lib/ocpp/v201/charge_point.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1802,7 +1802,14 @@ void ChargePoint::sign_certificate_req(const ocpp::CertificateSigningUseEnum& ce

const auto csr = this->evse_security->generate_certificate_signing_request(
certificate_signing_use, country.value(), organization.value(), common.value(), should_use_tpm);
req.csr = csr;

if (!csr.has_value()) {
EVLOG_error << "CSR generation was unsuccessful for sign request: "
<< ocpp::conversions::certificate_signing_use_enum_to_string(certificate_signing_use);
return;
}

req.csr = csr.value();

this->awaited_certificate_signing_use_enum = certificate_signing_use;

Expand Down

0 comments on commit 012868c

Please sign in to comment.