Vanetza
Loading...
Searching...
No Matches
sign_service.cpp
1#include <vanetza/common/its_aid.hpp>
2#include <vanetza/common/runtime.hpp>
3#include <vanetza/security/v2/basic_elements.hpp>
4#include <vanetza/security/backend.hpp>
5#include <vanetza/security/v3/hash.hpp>
6#include <vanetza/security/v3/sign_service.hpp>
7#include <vanetza/security/v3/secured_message.hpp>
8
9namespace vanetza
10{
11namespace security
12{
13namespace v3
14{
15
16StraightSignService::StraightSignService(CertificateProvider& provider, Backend& backend, SignHeaderPolicy& policy, CertificateValidator& validator) :
17 m_certificates(provider), m_backend(backend), m_policy(policy), m_validator(validator)
18{
19}
20
21SignConfirm StraightSignService::sign(SignRequest&& request)
22{
23 const auto& signing_cert = m_certificates.own_certificate();
24 const auto hash_algo = specified_hash_algorithm(signing_cert.get_verification_key_type());
25
26 SecuredMessage secured_message = SecuredMessage::with_signed_data();
27 secured_message.set_hash_id(hash_algo);
28 secured_message.set_payload(convert_to_payload(request.plain_message));
29 m_policy.prepare_header(request, secured_message);
30
31 if (m_validator.valid_for_signing(signing_cert, request.its_aid) != CertificateValidator::Verdict::Valid) {
32 return SignConfirm::failure(SignConfirmError::No_Certificate);
33 }
34
35 ByteBuffer digest = calculate_message_hash(m_backend, hash_algo, secured_message.signing_payload(), signing_cert);
36 Signature signature = m_backend.sign_digest(m_certificates.own_private_key(), digest);
37 secured_message.set_signature(signature);
38 return SignConfirm::success(std::move(secured_message));
39}
40
42 m_runtime(runtime)
43{
44}
45
46SignConfirm DummySignService::sign(SignRequest&& request)
47{
48 SecuredMessage secured_message = SecuredMessage::with_signed_data();
49 ByteBuffer payload;
50 payload = convert_to_payload(request.plain_message);
51 secured_message.set_payload(payload);
52 secured_message.set_dummy_signature();
53 secured_message.set_its_aid(request.its_aid);
54 secured_message.set_generation_time(vanetza::security::v2::convert_time64(m_runtime.now()));
55 secured_message->content->choice.signedData->signer.present = Vanetza_Security_SignerIdentifier_PR_self;
56
57 return SignConfirm::success(std::move(secured_message));
58}
59
60} // namespace v3
61} // namespace security
62} // namespace vanetza
virtual Clock::time_point now() const =0