102 certificate->issuer.present= Vanetza_Security_IssuerIdentifier_PR_sha256AndDigest;
104 if (maybe_aa_cert_digest) {
105 const HashedId8& aa_cert_digest = *maybe_aa_cert_digest;
106 OCTET_STRING_fromBuf(
107 &(certificate->issuer.choice.sha256AndDigest),
108 reinterpret_cast<const char *
>(aa_cert_digest.data()),
109 aa_cert_digest.size()
114 certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_none;
115 std::vector<uint8_t> craciId(3, 0);
116 OCTET_STRING_fromBuf(
117 &certificate->toBeSigned.cracaId,
118 reinterpret_cast<const char*
>(craciId.data()),
121 certificate->version = 3;
122 certificate->toBeSigned.crlSeries = 0;
125 certificate.add_permission(aid::CA, ByteBuffer({ 1, 0, 0 }));
126 certificate.add_permission(aid::DEN, ByteBuffer({ 1, 0xff, 0xff, 0xff}));
127 certificate.add_permission(aid::GN_MGMT, ByteBuffer({}));
128 certificate.add_permission(aid::IPV6_ROUTING, ByteBuffer({}));
134 coordinates.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
135 coordinates.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
136 certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
137 certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
138 certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.present = Vanetza_Security_EccP256CurvePoint_PR_uncompressedP256;
139 OCTET_STRING_fromBuf(
140 &certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.choice.uncompressedP256.x,
141 reinterpret_cast<const char*
>(coordinates.x.data()),
144 OCTET_STRING_fromBuf(
145 &certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256.choice.uncompressedP256.y,
146 reinterpret_cast<const char*
>(coordinates.y.data()),
154 certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
155 certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_hours;
156 certificate->toBeSigned.validityPeriod.duration.choice.hours = 23;
176 aa_certificate->issuer.present= Vanetza_Security_IssuerIdentifier_PR_sha256AndDigest;
178 if (maybe_root_cert_digest) {
179 const HashedId8& root_cert_digest = *maybe_root_cert_digest;
180 OCTET_STRING_fromBuf(
182 reinterpret_cast<const char *
>(root_cert_digest.data()),
183 root_cert_digest.size()
187 aa_certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_name;
188 std::string root_name =
"AA-cert";
189 ByteBuffer root_name_encoded(root_name.begin(), root_name.end());
190 OCTET_STRING_fromBuf(
192 reinterpret_cast<const char*
>(root_name_encoded.data()),
193 root_name_encoded.size()
197 std::vector<uint8_t> craciId(3, 0);
198 OCTET_STRING_fromBuf(
200 reinterpret_cast<const char*
>(craciId.data()),
210 asn1::PsidGroupPermissions* cert_permission_message = asn1::allocate<asn1::PsidGroupPermissions>();
211 cert_permission_message->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
212 add_psid_group_permission(cert_permission_message,aid::CA,{0x01, 0xff, 0xfc}, {0xff, 0x00, 0x03});
213 add_psid_group_permission(cert_permission_message,aid::DEN,{0x01, 0xff, 0xff, 0xff}, {0xff, 0x00, 0x00, 0x00});
214 add_psid_group_permission(cert_permission_message,aid::TLM,{0x01, 0xe0}, {0xff, 0x1f});
215 add_psid_group_permission(cert_permission_message,aid::RLT,{0x01, 0xc0}, {0xff,0x3f});
216 add_psid_group_permission(cert_permission_message,aid::IVI,{0x01, 0xff, 0xff,0xff,0xff,0xf8}, {0xff,0x00,0x00,0x00,0x00,0x07});
217 add_psid_group_permission(cert_permission_message,aid::TLC_R,{0x02, 0xff, 0xff,0xe0}, {0xff, 0x00, 0x00, 0x1f});
218 add_psid_group_permission(cert_permission_message,aid::GN_MGMT,{0x00}, {0xff});
224 auto coordinates = compress_public_key(m_own_key_pair.public_key);
225 aa_certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
226 aa_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
227 boost::apply_visitor(assign_compressed_ecc_point(&
aa_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256), coordinates);
229 aa_certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
230 aa_certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_years;
231 aa_certificate->toBeSigned.validityPeriod.duration.choice.hours = 4;
234 encryption_key.x.assign(m_own_key_pair.public_key.x.begin(), m_own_key_pair.public_key.x.end());
235 encryption_key.y.assign(m_own_key_pair.public_key.y.begin(), m_own_key_pair.public_key.y.end());
236 aa_certificate->toBeSigned.encryptionKey = asn1::allocate<asn1::PublicEncryptionKey>();
237 aa_certificate->toBeSigned.encryptionKey->publicKey.present = Vanetza_Security_BasePublicEncryptionKey_PR_eciesNistP256;
238 aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.present = Vanetza_Security_EccP256CurvePoint_PR_uncompressedP256;
239 OCTET_STRING_fromBuf(
240 &
aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.choice.uncompressedP256.x,
241 reinterpret_cast<const char*
>(encryption_key.x.data()),
242 encryption_key.x.size()
244 OCTET_STRING_fromBuf(
245 &
aa_certificate->toBeSigned.encryptionKey->publicKey.choice.eciesNistP256.choice.uncompressedP256.y,
246 reinterpret_cast<const char*
>(encryption_key.y.data()),
247 encryption_key.y.size()
261 root_certificate->issuer.present = Vanetza_Security_IssuerIdentifier_PR_self;
262 root_certificate->toBeSigned.id.present = Vanetza_Security_CertificateId_PR_name;
263 std::string root_name =
"Root-CA";
264 ByteBuffer root_name_encoded(root_name.begin(), root_name.end());
265 OCTET_STRING_fromBuf(
267 reinterpret_cast<const char*
>(root_name_encoded.data()),
268 root_name_encoded.size()
272 std::vector<uint8_t> craciId(3, 0);
273 OCTET_STRING_fromBuf(
275 reinterpret_cast<const char*
>(craciId.data()),
289 auto cert_permission = asn1::allocate<asn1::PsidGroupPermissions>();
290 cert_permission->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
291 add_psid_group_permission(cert_permission,aid::SCR,{0x01, 0x3e}, {0xff, 0xc1});
294 auto cert_permission_message = asn1::allocate<asn1::PsidGroupPermissions>();
295 cert_permission_message->subjectPermissions.present = Vanetza_Security_SubjectPermissions_PR_explicit;
296 add_psid_group_permission(cert_permission_message,aid::CA,{0x01, 0xff, 0xfc}, {0xff, 0x00, 0x03});
297 add_psid_group_permission(cert_permission_message,aid::DEN,{0x01, 0xff, 0xff, 0xff}, {0xff, 0x00, 0x00, 0x00});
298 add_psid_group_permission(cert_permission_message,aid::TLM,{0x01, 0xe0}, {0xff, 0x1f});
299 add_psid_group_permission(cert_permission_message,aid::RLT,{0x01, 0xc0}, {0xff,0x3f});
300 add_psid_group_permission(cert_permission_message,aid::IVI,{0x01, 0xff, 0xff,0xff,0xff,0xf8}, {0xff,0x00,0x00,0x00,0x00,0x07});
301 add_psid_group_permission(cert_permission_message,aid::TLC_R,{0x02, 0xff, 0xff,0xe0}, {0xff, 0x00, 0x00, 0x1f});
302 add_psid_group_permission(cert_permission_message,aid::GN_MGMT,{0x00}, {0xff});
308 EccPoint coordinates = compress_public_key(m_own_key_pair.public_key);
309 root_certificate->toBeSigned.verifyKeyIndicator.present = Vanetza_Security_VerificationKeyIndicator_PR_verificationKey;
310 root_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.present = Vanetza_Security_PublicVerificationKey_PR_ecdsaNistP256;
311 boost::apply_visitor(assign_compressed_ecc_point(&
root_certificate->toBeSigned.verifyKeyIndicator.choice.verificationKey.choice.ecdsaNistP256), coordinates);
312 root_certificate->toBeSigned.validityPeriod.start = v2::convert_time32(m_runtime.now() - std::chrono::hours(1));;
313 root_certificate->toBeSigned.validityPeriod.duration.present = Vanetza_Security_Duration_PR_years;