1#include <vanetza/common/its_aid.hpp>
4#include <vanetza/security/v2/naive_certificate_provider.hpp>
16NaiveCertificateProvider::NaiveCertificateProvider(
const Runtime& rt) :
18 m_own_key_pair(m_crypto_backend.generate_key_pair()),
19 m_own_certificate(generate_authorization_ticket()) { }
24 for (
auto& validity_restriction : m_own_certificate.validity_restriction) {
25 auto start_and_end = boost::get<StartAndEndValidity>(&validity_restriction);
26 auto renewal_deadline = convert_time32(m_runtime.now() + std::chrono::hours(1));
27 if (start_and_end && start_and_end->end_validity < renewal_deadline) {
33 return m_own_certificate;
45 return m_own_key_pair.private_key;
64 static const std::string aa_subject(
"Naive Authorization CA");
72 static const std::string root_subject(
"Naive Root CA");
87 certificate.subject_info.subject_type = SubjectType::Authorization_Ticket;
94 certificate.
add_permission(aid::DEN, ByteBuffer({ 1, 0xff, 0xff, 0xff}));
101 Uncompressed coordinates;
102 coordinates.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
103 coordinates.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
104 EccPoint ecc_point = coordinates;
106 ecdsa.public_key = ecc_point;
108 verification_key.key = ecdsa;
109 certificate.subject_attributes.push_back(verification_key);
114 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
115 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(23));
116 certificate.validity_restriction.push_back(start_and_end);
127 ByteBuffer data_buffer = convert_for_signing(certificate);
128 certificate.signature = m_crypto_backend.sign_data(
aa_key_pair().private_key, data_buffer);
140 certificate.subject_info.subject_type = SubjectType::Authorization_Authority;
143 std::vector<unsigned char> subject(subject_name.begin(), subject_name.end());
144 certificate.subject_info.subject_name = subject;
157 Uncompressed coordinates;
160 EccPoint ecc_point = coordinates;
162 ecdsa.public_key = ecc_point;
164 verification_key.key = ecdsa;
165 certificate.subject_attributes.push_back(verification_key);
170 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
171 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(23));
172 certificate.validity_restriction.push_back(start_and_end);
177 ByteBuffer data_buffer = convert_for_signing(certificate);
178 certificate.signature = m_crypto_backend.sign_data(
root_key_pair().private_key, data_buffer);
189 certificate.signer_info =
nullptr;
192 certificate.subject_info.subject_type = SubjectType::Root_CA;
195 std::vector<unsigned char> subject(subject_name.begin(), subject_name.end());
196 certificate.subject_info.subject_name = subject;
209 Uncompressed coordinates;
212 EccPoint ecc_point = coordinates;
214 ecdsa.public_key = ecc_point;
216 verification_key.key = ecdsa;
217 certificate.subject_attributes.push_back(verification_key);
222 start_and_end.start_validity = convert_time32(m_runtime.now() - std::chrono::hours(1));
223 start_and_end.end_validity = convert_time32(m_runtime.now() + std::chrono::hours(365 * 24));
224 certificate.validity_restriction.push_back(start_and_end);
229 ByteBuffer data_buffer = convert_for_signing(certificate);
230 certificate.signature = m_crypto_backend.sign_data(
root_key_pair().private_key, data_buffer);
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
described in TS 103 097 v1.2.1 (2015-06), section 6.1
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