104 certificate->issuer.present= Vanetza_Security_IssuerIdentifier_PR_sha256AndDigest;
106 if (maybe_aa_cert_digest) {
107 const HashedId8& aa_cert_digest = *maybe_aa_cert_digest;
108 OCTET_STRING_fromBuf(
109 &(certificate->issuer.choice.sha256AndDigest),
110 reinterpret_cast<
const char *>(aa_cert_digest.data()),
111 aa_cert_digest.size()
116 certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_none;
117 std::vector<uint8_t> craciId(3, 0);
118 OCTET_STRING_fromBuf(
119 &certificate->toBeSigned.cracaId,
120 reinterpret_cast<
const char*>(craciId.data()),
123 certificate->version = 3;
124 certificate->toBeSigned.crlSeries = 0;
136 coordinates.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
137 coordinates.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
138 certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
139 certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
140 certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.present = Vanetza_Security_EccP256CurvePoint_PR_uncompressedP256;
141 OCTET_STRING_fromBuf(
142 &certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.choice.uncompressedP256.x,
143 reinterpret_cast<
const char*>(coordinates.x.data()),
146 OCTET_STRING_fromBuf(
147 &certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.choice.uncompressedP256.y,
148 reinterpret_cast<
const char*>(coordinates.y.data()),
156 certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
157 certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_hours;
158 certificate->toBeSigned.validityPeriod.duration.choice.hours = 23;
178 aa_certificate->issuer.present= Vanetza_Security_IssuerIdentifier_PR_sha256AndDigest;
180 if (maybe_root_cert_digest) {
181 const HashedId8& root_cert_digest = *maybe_root_cert_digest;
182 OCTET_STRING_fromBuf(
183 &(aa_certificate->issuer.choice.sha256AndDigest),
184 reinterpret_cast<
const char *>(root_cert_digest.data()),
185 root_cert_digest.size()
189 aa_certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_name;
190 OCTET_STRING_fromBuf(&aa_certificate->toBeSigned.id.choice.name, name.data(), name.size());
193 static const std::array<
char, 3> craciId { 0, 0, 0 };
194 OCTET_STRING_fromBuf(&aa_certificate->toBeSigned.cracaId, craciId.data(), craciId.size());
195 aa_certificate->version = 3;
196 aa_certificate->toBeSigned.crlSeries = 0;
202 asn1::PsidGroupPermissions* cert_permission_message = asn1::allocate<asn1::PsidGroupPermissions>();
203 cert_permission_message->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
204 add_psid_group_permission(cert_permission_message,aid::CA, {0x01, 0xff, 0xfc}, {0xff, 0x00, 0x03});
205 add_psid_group_permission(cert_permission_message,aid::DEN, {0x01, 0xff, 0xff, 0xff}, {0xff, 0x00, 0x00, 0x00});
206 add_psid_group_permission(cert_permission_message,aid::TLM, {0x01, 0xe0}, {0xff, 0x1f});
207 add_psid_group_permission(cert_permission_message,aid::RLT, {0x01, 0xc0}, {0xff, 0x3f});
208 add_psid_group_permission(cert_permission_message,aid::IVI, {0x01, 0xff, 0xff, 0xff, 0xff, 0xf8}, {0xff, 0x00, 0x00, 0x00, 0x00, 0x07});
209 add_psid_group_permission(cert_permission_message,aid::TLC_R, {0x02, 0xff, 0xff, 0xe0}, {0xff, 0x00, 0x00, 0x1f});
210 add_psid_group_permission(cert_permission_message,aid::GN_MGMT, {0x00}, {0xff});
216 auto coordinates = compress_public_key(m_own_key_pair.public_key);
217 aa_certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
218 aa_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
219 boost::apply_visitor(assign_compressed_ecc_point(&aa_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256), coordinates);
221 aa_certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
222 aa_certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_years;
223 aa_certificate->toBeSigned.validityPeriod.duration.choice.hours = 4;
226 encryption_key.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
227 encryption_key.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
228 aa_certificate->toBeSigned.encryptionKey = asn1::allocate<asn1::PublicEncryptionKey>();
229 aa_certificate->toBeSigned.encryptionKey->publicKey.present = Vanetza_Security_BasePublicEncryptionKey_PR_eciesNistP256;
230 aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.present = Vanetza_Security_EccP256CurvePoint_PR_uncompressedP256;
231 OCTET_STRING_fromBuf(
232 &aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.choice.uncompressedP256.x,
233 reinterpret_cast<
const char*>(encryption_key.x.data()),
234 encryption_key.x.size()
236 OCTET_STRING_fromBuf(
237 &aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.choice.uncompressedP256.y,
238 reinterpret_cast<
const char*>(encryption_key.y.data()),
239 encryption_key.y.size()
245 return aa_certificate;
253 root_certificate->issuer.present = Vanetza_Security_IssuerIdentifier_PR_self;
254 root_certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_name;
255 OCTET_STRING_fromBuf(&root_certificate->toBeSigned.id.choice.name, name.data(), name.size());
258 static const std::array<
char, 3> craciId = { 0, 0, 0 };
259 OCTET_STRING_fromBuf(&root_certificate->toBeSigned.cracaId, craciId.data(), craciId.size());
260 root_certificate->version = 3;
261 root_certificate->toBeSigned.crlSeries = 0;
271 auto cert_permission = asn1::allocate<asn1::PsidGroupPermissions>();
272 cert_permission->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
273 add_psid_group_permission(cert_permission, aid::SCR, {0x01, 0x3e}, {0xff, 0xc1});
276 auto cert_permission_message = asn1::allocate<asn1::PsidGroupPermissions>();
277 cert_permission_message->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
278 add_psid_group_permission(cert_permission_message,aid::CA, {0x01, 0xff, 0xfc}, {0xff, 0x00, 0x03});
279 add_psid_group_permission(cert_permission_message,aid::DEN, {0x01, 0xff, 0xff, 0xff}, {0xff, 0x00, 0x00, 0x00});
280 add_psid_group_permission(cert_permission_message,aid::TLM, {0x01, 0xe0}, {0xff, 0x1f});
281 add_psid_group_permission(cert_permission_message,aid::RLT, {0x01, 0xc0}, {0xff,0x3f});
282 add_psid_group_permission(cert_permission_message,aid::IVI, {0x01, 0xff, 0xff,0xff,0xff,0xf8}, {0xff, 0x00, 0x00, 0x00, 0x00, 0x07});
283 add_psid_group_permission(cert_permission_message,aid::TLC_R, {0x02, 0xff, 0xff,0xe0}, {0xff, 0x00, 0x00, 0x1f});
284 add_psid_group_permission(cert_permission_message,aid::GN_MGMT, {0x00}, {0xff});
290 EccPoint coordinates = compress_public_key(m_own_key_pair.public_key);
291 root_certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
292 root_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
293 boost::apply_visitor(assign_compressed_ecc_point(&root_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256), coordinates);
294 root_certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
295 root_certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_years;
296 root_certificate->toBeSigned.validityPeriod.duration.choice.hours = 4;
300 return root_certificate;