#ifndef VERIFY_SERVICE_HPP_BR4ISDBH #define VERIFY_SERVICE_HPP_BR4ISDBH #include #include #include #include #include namespace vanetza { namespace security { /** * SN-VERIFY.confirm report codes * * "Configuration_Problem" is not found in TS 103 723-8 V1.1.1 but indicates a * problem with the verification subsystem itself, e.g. a programming error. * * \see TS 102 723-8 v1.1.1 table 5 */ enum class VerificationReport { Success, False_Signature, Invalid_Certificate, Revoked_Certificate, Inconsistent_Chain, Invalid_Timestamp, Duplicate_Message, Invalid_Mobility_Data, Unsigned_Message, Signer_Certificate_Not_Found, Unsupported_Signer_Identifier_Type, Incompatible_Protocol, Configuration_Problem, }; // mandatory parameters of SN-VERIFY.request (TS 102 723-8 V1.1.1) struct VerifyRequest { VerifyRequest(SecuredMessageView msg) : secured_message(msg) {} SecuredMessageView secured_message; /*< contains security header and payload */ }; // parameters of SN-VERIFY.confirm (TS 102 723-8 V1.1.1) struct VerifyConfirm { VerificationReport report; // mandatory ItsAid its_aid; // mandatory ByteBuffer permissions; // mandatory CertificateValidity certificate_validity; // non-standard extension boost::optional certificate_id; // optional }; /** * Equivalent of SN-VERIFY service in TS 102 723-8 V1.1.1 */ class VerifyService { public: virtual ~VerifyService() = default; virtual VerifyConfirm verify(const VerifyRequest&) = 0; }; // forward declaration namespace v3 { class CertificateCache; } /** * Get insecure dummy verify service without any checks */ class DummyVerifyService : public VerifyService { public: /** * \param report predefined confirm report result * \param validity predefined certificate validity result */ DummyVerifyService(VerificationReport report, CertificateValidity validity); VerifyConfirm verify(const VerifyRequest&) override; /** * \brief register certificate cache for optional permission lookup * \param cache certificate cache */ void use_certificate_cache(v3::CertificateCache* cache); private: VerificationReport m_report; CertificateValidity m_validity; v3::CertificateCache* m_cert_cache = nullptr; }; } // namespace security } // namespace vanetza #endif /* VERIFY_SERVICE_HPP_BR4ISDBH */