1#include <vanetza/common/its_aid.hpp>
4#include <vanetza/security/v2/naive_certificate_provider.hpp>
17 m_crypto_backend(create_backend(
"default")),
19 m_own_key_pair(m_crypto_backend->generate_key_pair()),
20 m_own_certificate(generate_authorization_ticket()) { }
25 for (
auto& validity_restriction : m_own_certificate.validity_restriction) {
26 auto start_and_end = boost::get<StartAndEndValidity>(&validity_restriction);
27 auto renewal_deadline = convert_time32(m_runtime.now() + std::chrono::hours(1));
28 if (start_and_end && start_and_end->end_validity < renewal_deadline) {
29 m_own_certificate = generate_authorization_ticket();
34 return m_own_certificate;
46 return m_own_key_pair.private_key;
51 static const ecdsa256::
KeyPair aa_key_pair = m_crypto_backend->generate_key_pair();
58 static const ecdsa256::
KeyPair root_key_pair = m_crypto_backend->generate_key_pair();
65 static const std::string aa_subject(
"Naive Authorization CA");
68 return aa_certificate;
73 static const std::string root_subject(
"Naive Root CA");
76 return root_certificate;
88 certificate.subject_info.subject_type = SubjectType::Authorization_Ticket;
103 coordinates.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
104 coordinates.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
105 EccPoint ecc_point = coordinates;
107 ecdsa.public_key = ecc_point;
109 verification_key.key = ecdsa;
110 certificate.subject_attributes.push_back(verification_key);
115 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
116 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(23));
117 certificate.validity_restriction.push_back(start_and_end);
128 ByteBuffer data_buffer = convert_for_signing(certificate);
129 certificate.signature = m_crypto_backend->sign_data(aa_key_pair().private_key, data_buffer);
141 certificate.subject_info.subject_type = SubjectType::Authorization_Authority;
144 std::vector<
unsigned char> subject(subject_name.begin(), subject_name.end());
145 certificate.subject_info.subject_name = subject;
161 EccPoint ecc_point = coordinates;
163 ecdsa.public_key = ecc_point;
165 verification_key.key = ecdsa;
166 certificate.subject_attributes.push_back(verification_key);
171 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
172 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(23));
173 certificate.validity_restriction.push_back(start_and_end);
178 ByteBuffer data_buffer = convert_for_signing(certificate);
179 certificate.signature = m_crypto_backend->sign_data(root_key_pair().private_key, data_buffer);
190 certificate.signer_info =
nullptr;
193 certificate.subject_info.subject_type = SubjectType::Root_CA;
196 std::vector<
unsigned char> subject(subject_name.begin(), subject_name.end());
197 certificate.subject_info.subject_name = subject;
213 EccPoint ecc_point = coordinates;
215 ecdsa.public_key = ecc_point;
217 verification_key.key = ecdsa;
218 certificate.subject_attributes.push_back(verification_key);
223 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
224 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(365 * 24));
225 certificate.validity_restriction.push_back(start_and_end);
230 ByteBuffer data_buffer = convert_for_signing(certificate);
231 certificate.signature = m_crypto_backend->sign_data(root_key_pair().private_key, data_buffer);
A very simplistic certificate provider.
const Certificate & own_certificate() override
get own certificate for signing
Certificate generate_authorization_ticket()
generate an authorization ticket
const ecdsa256::KeyPair & aa_key_pair()
get root key (same for all instances)
void sign_authorization_ticket(Certificate &certificate)
sign an authorization ticket
std::list< Certificate > own_chain() override
const ecdsa256::KeyPair & root_key_pair()
get root key (same for all instances)
Certificate generate_aa_certificate(const std::string &subject_name)
generate a authorization authority certificate
const ecdsa256::PrivateKey & own_private_key() override
get own private key
const Certificate & aa_certificate()
get ticket signer certificate (same for all instances)
const Certificate & root_certificate()
get root certificate (same for all instances)
Certificate generate_root_certificate(const std::string &subject_name)
generate a root certificate
Uncompressed specified in TS 103 097 v1.2.1 in section 4.2.5.
described in TS 103 097 v1.2.1 (2015-06), section 6.1
void add_permission(ItsAid aid, const ByteBuffer &ssp)
void add_permission(ItsAid aid)
SubjectAssurance specified in TS 103 097 v1.2.1 in section 6.6 and 7.4.1.
VerificationKey specified in TS 103 097 v1.2.1, section 6.4.
ecdsa_nistp256_with_sha256 specified in TS 103 097 v1.2.1, section 4.2.4