1#include <vanetza/security/exception.hpp>
2#include <vanetza/security/v2/subject_attribute.hpp>
11SubjectAttributeType get_type(
const SubjectAttribute& sub)
13 struct subject_attribute_visitor :
public boost::static_visitor<SubjectAttributeType>
17 return SubjectAttributeType::Verification_Key;
21 return SubjectAttributeType::Encryption_Key;
25 return SubjectAttributeType::Assurance_Level;
27 SubjectAttributeType operator()(
const std::list<IntX>&)
29 return SubjectAttributeType::ITS_AID_List;
31 SubjectAttributeType operator()(
const EccPoint&)
33 return SubjectAttributeType::Reconstruction_Value;
35 SubjectAttributeType operator()(
const std::list<ItsAidSsp>&)
37 return SubjectAttributeType::ITS_AID_SSP_List;
41 subject_attribute_visitor visit;
42 return boost::apply_visitor(visit, sub);
47 serialize(ar, its_aid_ssp.its_aid);
48 size_t size = its_aid_ssp.service_specific_permissions.size();
49 serialize_length(ar, size);
50 for (
auto& byte : its_aid_ssp.service_specific_permissions) {
58 size += deserialize(ar, its_aid_ssp.its_aid);
59 static const std::uintmax_t buf_size_limit = 1024;
60 const std::uintmax_t buf_size = deserialize_length(ar);
61 if (buf_size <= buf_size_limit) {
62 its_aid_ssp.service_specific_permissions.resize(buf_size);
63 size += buf_size + length_coding_size(buf_size);
64 for (std::uintmax_t i = 0; i < buf_size; ++i) {
65 ar >> its_aid_ssp.service_specific_permissions[i];
75 return sizeof(assurance.raw);
78size_t get_size(
const ItsAidSsp& its_aid_ssp)
80 size_t size = get_size(its_aid_ssp.its_aid);
81 size += its_aid_ssp.service_specific_permissions.size();
82 size += length_coding_size(its_aid_ssp.service_specific_permissions.size());
86size_t get_size(
const SubjectAttribute& sub)
88 size_t size =
sizeof(SubjectAttributeType);
89 struct subject_attribute_visitor :
public boost::static_visitor<size_t>
93 return get_size(key.key);
97 return get_size(key.key);
101 return get_size(assurance);
103 size_t operator()(
const std::list<IntX>& list)
105 size_t size = get_size(list);
106 size += length_coding_size(size);
109 size_t operator()(
const EccPoint& ecc)
111 return get_size(ecc);
113 size_t operator()(
const std::list<ItsAidSsp>& list)
115 size_t size = get_size(list);
116 size += length_coding_size(size);
121 subject_attribute_visitor visit;
122 size += boost::apply_visitor(visit, sub);
126void serialize(
OutputArchive& ar,
const SubjectAttribute& subjectAttribute)
128 struct subject_attribute_visitor :
public boost::static_visitor<>
136 serialize(m_archive, key.key);
140 serialize(m_archive, key.key);
144 m_archive << assurance.raw;
146 void operator()(
const std::list<IntX>& list)
148 serialize(m_archive, list);
150 void operator()(
const EccPoint&)
155 void operator()(
const std::list<ItsAidSsp>& list)
157 serialize(m_archive, list);
162 SubjectAttributeType type = get_type(subjectAttribute);
164 subject_attribute_visitor visit(ar);
165 boost::apply_visitor(visit, subjectAttribute);
168size_t deserialize(
InputArchive& ar, SubjectAttribute& sub)
170 SubjectAttributeType type;
172 deserialize(ar, type);
173 size +=
sizeof(type);
175 case SubjectAttributeType::Assurance_Level: {
178 size += get_size(assurance);
182 case SubjectAttributeType::Verification_Key: {
184 size += deserialize(ar, key.key);
188 case SubjectAttributeType::Encryption_Key: {
190 size += deserialize(ar, key.key);
194 case SubjectAttributeType::ITS_AID_List: {
195 std::list<IntX> intx_list;
196 size_t tmp_size = deserialize(ar, intx_list);
198 size += length_coding_size(tmp_size);
202 case SubjectAttributeType::ITS_AID_SSP_List: {
203 std::list<ItsAidSsp> itsAidSsp_list;
204 size_t tmp_size = deserialize(ar, itsAidSsp_list);
206 size += length_coding_size(tmp_size);
207 sub = itsAidSsp_list;
210 case SubjectAttributeType::Reconstruction_Value:
thrown when a deserialization error occurred
thrown when a serialization error occurred
EncryptionKey specified in TS 103 097 v1.2.1, section 6.4.
ItsAidSsp specified in TS 103 097 v1.2.1, section 6.9.
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.