ocpp 0.24.1
A C++ implementation of the Open Charge Point Protocol
security.hpp
1// SPDX-License-Identifier: Apache-2.0
2// Copyright Pionix GmbH and Contributors to EVerest
3
4#pragma once
5
6#include <optional>
7
8#include <ocpp/v2/message_handler.hpp>
9#include <ocpp/v2/ocsp_updater.hpp>
10
11namespace ocpp {
12class MessageLogging;
13
14namespace v2 {
15struct FunctionalBlockContext;
16
17struct CertificateSignedRequest;
18struct CertificateSignedResponse;
19struct GetInstalledCertificateIdsRequest;
20struct Get15118EVCertificateRequest;
21struct Get15118EVCertificateResponse;
22struct InstallCertificateRequest;
23struct DeleteCertificateRequest;
24struct SignCertificateResponse;
25
26typedef std::function<void(const CiString<50>& event_type, const std::optional<CiString<255>>& tech_info)>
27 SecurityEventCallback;
28
30
31public:
32 virtual ~SecurityInterface() override {
33 }
34 virtual void security_event_notification_req(const CiString<50>& event_type,
35 const std::optional<CiString<255>>& tech_info,
36 const bool triggered_internally, const bool critical,
37 const std::optional<DateTime>& timestamp = std::nullopt) = 0;
38 virtual void sign_certificate_req(const ocpp::CertificateSigningUseEnum& certificate_signing_use,
39 const bool initiated_by_trigger_message = false) = 0;
40 virtual void stop_certificate_signed_timer() = 0;
41 virtual void init_certificate_expiration_check_timers() = 0;
42 virtual void stop_certificate_expiration_check_timers() = 0;
43
45 on_get_15118_ev_certificate_request(const Get15118EVCertificateRequest& request) = 0;
46};
47
49public:
50 Security(const FunctionalBlockContext& functional_block_context, MessageLogging& logging,
51 OcspUpdaterInterface& ocsp_updater, SecurityEventCallback security_event_callback);
52 virtual ~Security();
53 void handle_message(const EnhancedMessage<MessageType>& message) override;
54 virtual void stop_certificate_signed_timer() override;
55 void init_certificate_expiration_check_timers() override;
56 void stop_certificate_expiration_check_timers() override;
58 on_get_15118_ev_certificate_request(const Get15118EVCertificateRequest& request) override;
59
60 /* OCPP message requests */
61 virtual void security_event_notification_req(const CiString<50>& event_type,
62 const std::optional<CiString<255>>& tech_info,
63 const bool triggered_internally, const bool critical,
64 const std::optional<DateTime>& timestamp = std::nullopt) override;
65 virtual void sign_certificate_req(const ocpp::CertificateSigningUseEnum& certificate_signing_use,
66 const bool initiated_by_trigger_message = false) override;
67
68private: // Members
69 const FunctionalBlockContext& context;
70 MessageLogging& logging;
71 OcspUpdaterInterface& ocsp_updater;
72
73 SecurityEventCallback security_event_callback;
74
75 int csr_attempt;
76 std::optional<ocpp::CertificateSigningUseEnum> awaited_certificate_signing_use_enum;
77 Everest::SteadyTimer certificate_signed_timer;
78 Everest::SteadyTimer client_certificate_expiration_check_timer;
79 Everest::SteadyTimer v2g_certificate_expiration_check_timer;
80
81private: // Functions
82 /* OCPP message handlers */
83
84 // Functional Block A: Security
85 void handle_certificate_signed_req(Call<CertificateSignedRequest> call);
86 void handle_sign_certificate_response(CallResult<SignCertificateResponse> call_result);
87
88 // Functional Block M: ISO 15118 Certificate Management
89 void handle_get_installed_certificate_ids_req(Call<GetInstalledCertificateIdsRequest> call);
90 void handle_install_certificate_req(Call<InstallCertificateRequest> call);
91 void handle_delete_certificate_req(Call<DeleteCertificateRequest> call);
92
93 // Internal helper functions
94
98 bool should_allow_certificate_install(InstallCertificateUseEnum cert_type) const;
99 void scheduled_check_client_certificate_expiration();
100 void scheduled_check_v2g_certificate_expiration();
101};
102} // namespace v2
103} // namespace ocpp
contains a ocpp message logging abstraction
Definition: ocpp_logging.hpp:45
Interface for handling OCPP2.0.1 CALL messages from the CSMS. Classes implementing a functional block...
Definition: message_handler.hpp:13
Definition: ocsp_updater.hpp:44
Definition: security.hpp:29
Definition: security.hpp:48
void handle_message(const EnhancedMessage< MessageType > &message) override
Handles the given message from the CSMS. This includes dispatching a CALLRESULT as a response to the ...
Definition: security.cpp:42
Contains a OCPP CallResult message.
Definition: call_types.hpp:105
Contains a OCPP Call message.
Definition: call_types.hpp:60
Contains a OCPP message in json form with additional information.
Definition: message_queue.hpp:54
Context / requirements for the functional blocks.
Definition: functional_block_context.hpp:23
Contains a OCPP Get15118EVCertificate message.
Definition: Get15118EVCertificate.hpp:20
Contains a OCPP Get15118EVCertificateResponse message.
Definition: Get15118EVCertificate.hpp:42