ITS
encodeSecurity.cpp
Go to the documentation of this file.
1 #include <encodeSecurity.h>
2 
3 #include <QDataStream>
4 
5 /* Helpers */
6 static quint8 intx_lentghs[] =
7 {
8  0x00,
9  0x80,
10  0xC0,
11  0xE0,
12  0xF0,
13  0xF0,
14  0xF8,
15  0xFC,
16  0xFE
17 };
18 
19 QByteArray encode_INTEGER(quint64 v, int l)
20 {
21  QByteArray encode;
22  QDataStream ds(&encode, QIODevice::WriteOnly);
23 
24  for(int i = l ; i ; i--){
25  ds << (quint8)(v >> (8 * (i - 1)));
26  v -= (v >> (8 * (i - 1))) << (8 * (i - 1));
27  }
28 
29  return encode;
30 }
31 
32 QByteArray encode_SINTEGER(quint64 v, int l)
33 {
34  QByteArray encode;
35  QDataStream ds(&encode, QIODevice::WriteOnly);
36 
37  for(int i = l ; i ; i--){
38  ds << (qint8)(v >> (8 * (i - 1)));
39  v -= (v >> (8 * (i - 1))) << (8 * (i - 1));
40  }
41 
42  return encode;
43 }
44 
46 {
47  QByteArray encode;
48  QDataStream ds(&encode, QIODevice::WriteOnly);
49 
50  for(int i = 0 ; i < o.size ; i++)
51  ds << (quint8)o.buf[i];
52 
53  return encode;
54 }
55 
56 QByteArray encode_Opaque(Opaque_t opaque)
57 {
58  QByteArray encode;
59  QDataStream ds(&encode, QIODevice::WriteOnly);
60 
61  QByteArray length = encode_INTX(opaque.length);
62  QByteArray value = encode_OCTET_STRING(opaque.value);
63 
64  ds.writeRawData(length.data(), length.length());
65  ds.writeRawData(value.data(), value.length());
66 
67  return encode;
68 }
69 
70 QByteArray encode_Opaque(Opaque_t opaque, int length)
71 {
72  Q_UNUSED(length);
73  QByteArray encode;
74  QDataStream ds(&encode, QIODevice::WriteOnly);
75 
76  QByteArray value = encode_OCTET_STRING(opaque.value);
77  ds.writeRawData(value.data(), value.length());
78 
79  return encode;
80 }
81 
82 /* Basic Format Elements */
83 QByteArray encode_INTX(IntX_t intx)
84 {
85  char encode[8] = {0x00};
86  int nbBytes = 0, i;
87 
88  if(!intx)
89  return QByteArray(encode, 1);
90 
91  for(i = 7 ; i > -1 && intx ; i--)
92  {
93  encode[i] = intx & 0xFF;
94  intx >>= 8;
95  nbBytes++;
96  }
97 
98  if(intx_lentghs[nbBytes] & encode[8 - nbBytes])
99  nbBytes++;
100 
101  encode[8 - nbBytes] |= intx_lentghs[nbBytes - 1];
102 
103  return QByteArray(&encode[8 - nbBytes], nbBytes);
104 }
105 
106 QByteArray encode_PublicKeyAlgorithm(PublicKeyAlgorithm_t algorithm){return encode_INTEGER(algorithm, 1);}
107 QByteArray encode_SymmetricAlgorithm(SymmetricAlgorithm_t algorithm){return encode_INTEGER(algorithm, 1);}
109 {
110  QByteArray encode;
111  QDataStream ds(&encode, QIODevice::WriteOnly);
112 
113  QByteArray algorithm = encode_PublicKeyAlgorithm(key.algorithm);
114  QByteArray publicKey;
115  QByteArray supportedSymmAlg;
116  QByteArray otherKey;
117 
118  ds.writeRawData(algorithm.data(), algorithm.length());
119  switch (key.algorithm)
120  {
123  ds.writeRawData(publicKey.data(), publicKey.length());
124  break;
128  ds.writeRawData(supportedSymmAlg.data(), supportedSymmAlg.length());
129  ds.writeRawData(publicKey.data(), publicKey.length());
130  break;
131  default:
133  ds.writeRawData(otherKey.data(), otherKey.length());
134  break;
135  }
136 
137  return encode;
138 }
139 
140 QByteArray encode_EccPoint(EccPoint_t point)
141 {
142  QByteArray encode;
143  QDataStream ds(&encode, QIODevice::WriteOnly);
144 
145  QByteArray type = encode_EccPointType(point.type);
146  QByteArray x = encode_Opaque(point.x, 32);
147  QByteArray y;
148  QByteArray data;
149 
150  ds.writeRawData(type.data(), type.length());
151  ds.writeRawData(x.data(), x.length());
152  switch (point.type)
153  {
157  break;
160  ds.writeRawData(y.data(), y.length());
161  break;
162  default:
164  ds.writeRawData(data.data(), data.length());
165  break;
166  }
167 
168  return encode;
169 }
170 
172 
174 {
175  QByteArray encode;
176  QDataStream ds(&encode, QIODevice::WriteOnly);
177 
178  QByteArray symmAlgorithm = encode_SymmetricAlgorithm(encParams.symm_algorithm);
179  QByteArray nonce;
180  QByteArray params;
181 
182  ds.writeRawData(symmAlgorithm.data(), symmAlgorithm.length());
183  switch (encParams.symm_algorithm)
184  {
187  ds.writeRawData(nonce.data(), nonce.length());
188  break;
189  default:
191  ds.writeRawData(params.data(), params.length());
192  break;
193  }
194 
195  return encode;
196 }
197 
198 QByteArray encode_Signature(Signature_t signature)
199 {
200  QByteArray encode;
201  QDataStream ds(&encode, QIODevice::WriteOnly);
202 
203  QByteArray algorithm = encode_PublicKeyAlgorithm(signature.algorithm);
204  QByteArray ecdsaSignature;
205  QByteArray sign;
206 
207  ds.writeRawData(algorithm.data(), algorithm.length());
208  switch (signature.algorithm)
209  {
212  ds.writeRawData(ecdsaSignature.data(), ecdsaSignature.length());
213  break;
214  default:
216  ds.writeRawData(sign.data(), sign.length());
217  break;
218  }
219 
220  return encode;
221 }
222 
224 {
225  QByteArray encode;
226  QDataStream ds(&encode, QIODevice::WriteOnly);
227 
228  QByteArray R = encode_EccPoint(ecdsa.r);
229  QByteArray s = encode_Opaque(ecdsa.s, 32);
230 
231  ds.writeRawData(R.data(), R.length());
232  ds.writeRawData(s.data(), s.length());
233 
234  return encode;
235 }
236 
237 QByteArray encode_SignerInfo(SignerInfo_t signerInfo)
238 {
239  QByteArray encode;
240  QDataStream ds(&encode, QIODevice::WriteOnly);
241 
242  QByteArray type = encode_SignerInfoType(signerInfo.type);
243  QByteArray digest;
244  QByteArray certificate;
245  QByteArray certificates;
246  QDataStream certificatesDS(&certificates, QIODevice::WriteOnly);
247  QByteArray algorithm;
248  QByteArray info;
249  QByteArray var;
250 
251  ds.writeRawData(type.data(), type.length());
252  switch (signerInfo.type)
253  {
256  ds.writeRawData(digest.data(), digest.length());
257  break;
260  ds.writeRawData(certificate.data(), certificate.length());
261  break;
263  for(int i = 0 ; i < signerInfo.signer_info.choice.certificate_chain.certificates.list.count ; i++)
264  {
266  certificatesDS.writeRawData(certificate.data(), certificate.length());
267  }
268  var = encode_INTX(certificates.length());
269  ds.writeRawData(var.data(), var.length());
270  ds.writeRawData(certificates.data(), certificates.length());
271  break;
275  ds.writeBytes(algorithm.data(), algorithm.length());
276  ds.writeRawData(digest.data(), digest.length());
277  break;
278  default:
280  ds.writeRawData(info.data(), info.length());
281  break;
282  }
283 
284  return encode;
285 }
286 
288 QByteArray encode_HashedId8(HashedId8_t hash){return encode_OCTET_STRING(hash);}
289 QByteArray encode_HashedId3(HashedId3_t hash){return encode_OCTET_STRING(hash);}
290 QByteArray encode_Time32(Time32_t time){return encode_INTEGER(time, 4);}
291 QByteArray encode_Time64(Time64_t time){return encode_OCTET_STRING(time);}
292 
294 {
295  QByteArray encode;
296  QDataStream ds(&encode, QIODevice::WriteOnly);
297 
298  QByteArray t = encode_Time64(time.time);
299  QByteArray logStdDev = encode_INTEGER(time.log_std_dev, 1);
300 
301  ds.writeRawData(t.data(), t.length());
302  ds.writeRawData(logStdDev.data(), logStdDev.length());
303 
304  return encode;
305 }
306 
307 QByteArray encode_Duration(Duration_t duration){return encode_INTEGER(duration, 2);}
308 
310 {
311  QByteArray encode;
312  QDataStream ds(&encode, QIODevice::WriteOnly);
313 
314  QByteArray latitude = encode_SINTEGER(location.latitude, 4);
315  QByteArray longitude = encode_SINTEGER(location.longitude, 4);
316 
317  ds.writeRawData(latitude.data(), latitude.length());
318  ds.writeRawData(longitude.data(), longitude.length());
319 
320  return encode;
321 }
322 
324 {
325  QByteArray encode;
326  QDataStream ds(&encode, QIODevice::WriteOnly);
327 
328  QByteArray latitude = encode_SINTEGER(location.latitude, 4);
329  QByteArray longitude = encode_SINTEGER(location.longitude, 4);
330  QByteArray elevation = encode_Opaque(location.elevation, 2);
331 
332  ds.writeRawData(latitude.data(), latitude.length());
333  ds.writeRawData(longitude.data(), longitude.length());
334  ds.writeRawData(elevation.data(), elevation.length());
335 
336  return encode;
337 }
338 
340 {
341  QByteArray encode;
342  QDataStream ds(&encode, QIODevice::WriteOnly);
343 
344  QByteArray regionType = encode_RegionType(region.region_type);
345  QByteArray circularRegion;
346  QByteArray rectangularRegion;
347  QByteArray polygonalRegion;
348  QByteArray idRegion;
349  QByteArray otherRegion;
350 
351  ds.writeRawData(regionType.data(), regionType.length());
352  switch (region.region_type)
353  {
354  case RegionType_circle:
356  ds.writeRawData(circularRegion.data(), circularRegion.length());
357  break;
359  for(int i = 0 ; i < region.geographic_region.choice.rectangle.rectangular_region.list.count ; i++)
360  {
362  ds.writeRawData(rectangularRegion.data(), rectangularRegion.length());
363  }
364  break;
365  case RegionType_polygon:
367  ds.writeRawData(polygonalRegion.data(), polygonalRegion.length());
368  break;
369  case RegionType_id:
371  ds.writeRawData(idRegion.data(), idRegion.length());
372  break;
373  case RegionType_none:
374  break;
375  default:
377  ds.writeRawData(otherRegion.data(), otherRegion.length());
378  break;
379  }
380 
381  return encode;
382 }
383 
385 
387 {
388  QByteArray encode;
389  QDataStream ds(&encode, QIODevice::WriteOnly);
390 
391  QByteArray center = encode_TwoDLocation(region.center);
392  QByteArray radius = encode_INTEGER(region.radius, 2);
393 
394  ds.writeRawData(center.data(), center.length());
395  ds.writeRawData(radius.data(), radius.length());
396 
397  return encode;
398 }
399 
401 {
402  QByteArray encode;
403  QDataStream ds(&encode, QIODevice::WriteOnly);
404 
405  QByteArray northwest = encode_TwoDLocation(region.northwest);
406  QByteArray southEast = encode_TwoDLocation(region.southeast);
407 
408  ds.writeRawData(northwest.data(), northwest.length());
409  ds.writeRawData(southEast.data(), southEast.length());
410 
411  return encode;
412 }
413 
415 {
416  QByteArray encode;
417  QDataStream ds(&encode, QIODevice::WriteOnly);
418 
419  QByteArray polygonalRegion;
420  QByteArray var = encode_INTX(polygon.list.count);
421 
422  ds.writeRawData(var.data(), var.length());
423  for(int i = 0 ; i < polygon.list.count ; i++)
424  {
425  polygonalRegion = encode_TwoDLocation(*polygon.list.array[i]);
426  ds.writeRawData(polygonalRegion.data(), polygonalRegion.length());
427  }
428 
429  return encode;
430 }
431 
433 {
434  QByteArray encode;
435  QDataStream ds(&encode, QIODevice::WriteOnly);
436 
437  QByteArray regionDictionary = encode_RegionDictionary(id.region_dictionary);
438  QByteArray regionIdentifier = encode_INTEGER(id.region_identifier, 2);
439  QByteArray localRegion = encode_INTX(id.local_region);
440 
441  ds.writeRawData(regionDictionary.data(), regionDictionary.length());
442  ds.writeRawData(regionIdentifier.data(), regionIdentifier.length());
443  ds.writeRawData(localRegion.data(), localRegion.length());
444 
445  return encode;
446 }
447 
448 QByteArray encode_RegionDictionary(RegionDictionary_t dictionary){return encode_INTEGER(dictionary, 1);}
449 
450 /* Security Header */
452 {
453  QByteArray encode;
454  QDataStream ds(&encode, QIODevice::WriteOnly);
455 
456  QByteArray protocolVersion = encode_INTEGER(header.protocol_version, 1);
457  QByteArray headerFields;
458  QDataStream headerFieldsDS(&headerFields, QIODevice::WriteOnly);
459  QByteArray field;
460  QByteArray var;
461 
462  ds.writeRawData(protocolVersion.data(), protocolVersion.length());
463  for(int i = 0 ; i < header.header_fields.list.count ; i++)
464  {
465  field = encode_HeaderField(*header.header_fields.list.array[i]);
466  headerFieldsDS.writeRawData(field.data(), field.length());
467  }
468  var = encode_INTX(headerFields.length());
469  ds.writeRawData(var.data(), var.length());
470  ds.writeRawData(headerFields.data(), headerFields.length());
471 
472  return encode;
473 }
474 
476 {
477  QByteArray encode;
478  QDataStream ds(&encode, QIODevice::WriteOnly);
479 
480  QByteArray type = encode_HeaderFieldType(field.type);
481  QByteArray generationTime;
482  QByteArray generationTimeWithStandardDeviation;
483  QByteArray expiryTime;
484  QByteArray generationLocation;
485  QByteArray digests;
486  QDataStream digestsDS(&digests, QIODevice::WriteOnly);
487  QByteArray digest;
488  QByteArray itsAid;
489  QByteArray signer;
490  QByteArray encParams;
491  QByteArray recipients;
492  QDataStream recipientsDS(&recipients, QIODevice::WriteOnly);
493  QByteArray recipient;
494  QByteArray otherHeader;
495  QByteArray var;
496 
497  ds.writeRawData(type.data(), type.length());
498  switch (field.type)
499  {
502  ds.writeRawData(generationTime.data(), generationTime.length());
503  break;
506  ds.writeRawData(generationTimeWithStandardDeviation.data(), generationTimeWithStandardDeviation.length());
507  break;
510  ds.writeRawData(expiryTime.data(), expiryTime.length());
511  break;
514  ds.writeRawData(generationLocation.data(), generationLocation.length());
515  break;
517  for(int i = 0 ; i < field.header_field.choice.request_unrecognized_certificate.digests.list.count ; i++)
518  {
520  digestsDS.writeRawData(digest.data(), digest.length());
521  }
522  var = encode_INTX(digests.length());
523  ds.writeRawData(var.data(), var.length());
524  ds.writeRawData(digests.data(), digests.length());
525  break;
528  ds.writeRawData(itsAid.data(), itsAid.length());
529  break;
532  ds.writeRawData(signer.data(), signer.length());
533  break;
536  ds.writeRawData(encParams.data(), encParams.length());
537  break;
539  for(int i = 0 ; i < field.header_field.choice.recipient_info_header_field.recipients.list.count ; i++)
540  {
542  recipientsDS.writeRawData(recipient.data(), recipient.length());
543  }
544  var = encode_INTX(recipients.length());
545  ds.writeRawData(var.data(), var.length());
546  ds.writeRawData(recipients.data(), recipients.length());
547  break;
548  default:
550  ds.writeRawData(otherHeader.data(), otherHeader.length());
551  break;
552  }
553 
554  return encode;
555 }
556 
558 
560 {
561  QByteArray encode;
562  QDataStream ds(&encode, QIODevice::WriteOnly);
563 
564  QByteArray fields;
565  QDataStream fieldsDS(&fields, QIODevice::WriteOnly);
566  QByteArray field;
567  QByteArray var;
568 
569  for(int i = 0 ; i < trailer.trailer_fields.list.count ; i++)
570  {
571  field = encode_TrailerField(*trailer.trailer_fields.list.array[i]);
572  fieldsDS.writeRawData(field.data(), field.length());
573  }
574  var = encode_INTX(fields.length());
575  ds.writeRawData(var.data(), var.length());
576  ds.writeRawData(fields.data(), fields.length());
577 
578  return encode;
579 }
580 
582 {
583  QByteArray encode;
584  QDataStream ds(&encode, QIODevice::WriteOnly);
585 
586  QByteArray type = encode_TrailerFieldType(field.type);
587  QByteArray signature;
588  QByteArray securityField;
589 
590  ds.writeRawData(type.data(), type.length());
591  switch (field.type)
592  {
595  ds.writeRawData(signature.data(), signature.length());
596  break;
597  default:
599  ds.writeRawData(securityField.data(), securityField.length());
600  break;
601  }
602 
603  return encode;
604 }
605 
607 
609 {
610  QByteArray encode;
611  QDataStream ds(&encode, QIODevice::WriteOnly);
612 
613  QByteArray certId = encode_HashedId8(recipient.cert_id);
614  QByteArray pkEncryption = encode_PublicKeyAlgorithm(recipient.pk_encryption);
615  QByteArray encKey;
616 
617  ds.writeRawData(certId.data(), certId.length());
618  ds.writeRawData(pkEncryption.data(), pkEncryption.length());
619  switch (recipient.pk_encryption)
620  {
623  ds.writeRawData(encKey.data(), encKey.length());
624  break;
625  default:
627  ds.writeRawData(encKey.data(), encKey.length());
628  break;
629  }
630 
631  return encode;
632 }
633 
635 {
636  QByteArray encode;
637  QDataStream ds(&encode, QIODevice::WriteOnly);
638 
639  QByteArray v = encode_EccPoint(ecies.v);
640  QByteArray c = encode_Opaque(ecies.c, 16);
641  QByteArray t = encode_Opaque(ecies.t, 16);
642 
643  ds.writeRawData(v.data(), v.length());
644  ds.writeRawData(c.data(), c.length());
645  ds.writeRawData(t.data(), t.length());
646 
647  return encode;
648 }
649 
650 /* Certificate Format */
652 {
653  QByteArray encode;
654  QDataStream ds(&encode, QIODevice::WriteOnly);
655 
656  QByteArray version = encode_INTEGER(certificate.version, 1);
657  QByteArray signerInfo = encode_SignerInfo(*certificate.signer_info_certificate);
658  QByteArray subjectInfo = encode_SubjectInfo(certificate.subject_info);
659  QByteArray subjectAttributes;
660  QDataStream subjectAttributesDS(&subjectAttributes, QIODevice::WriteOnly);
661  QByteArray subjectAttribute;
662  QByteArray var;
663  QByteArray validityRestrictions;
664  QDataStream validityRestrictionsDS(&validityRestrictions, QIODevice::WriteOnly);
665  QByteArray validityRestriction;
666  QByteArray signature = encode_Signature(certificate.signature_certificate);
667  int i;
668 
669  ds.writeRawData(version.data(), version.length());
670  ds.writeRawData(signerInfo.data(), signerInfo.length());
671  ds.writeRawData(subjectInfo.data(), subjectInfo.length());
672  for(i = 0 ; i < certificate.subject_attributes.list.count ; i++)
673  {
674  subjectAttribute = encode_SubjectAttribute(*certificate.subject_attributes.list.array[i]);
675  subjectAttributesDS.writeRawData(subjectAttribute.data(), subjectAttribute.length());
676  }
677  var = encode_INTX(subjectAttributes.length());
678  ds.writeRawData(var.data(), var.length());
679  ds.writeRawData(subjectAttributes.data(), subjectAttributes.length());
680  for(i = 0 ; i < certificate.validity_restrictions.list.count ; i++)
681  {
683  validityRestrictionsDS.writeRawData(validityRestriction.data(), validityRestriction.length());
684  }
685  var = encode_INTX(validityRestrictions.length());
686  ds.writeRawData(var.data(), var.length());
687  ds.writeRawData(validityRestrictions.data(), validityRestrictions.length());
688  ds.writeRawData(signature.data(), signature.length());
689 
690  return encode;
691 }
692 
694 {
695  QByteArray encode;
696  QDataStream ds(&encode, QIODevice::WriteOnly);
697 
698  QByteArray subjectType = encode_SubjectType(info.subject_type);
699  QByteArray subjectName = encode_Opaque(info.subject_name);
700 
701  ds.writeRawData(subjectType.data(), subjectType.length());
702  ds.writeRawData(subjectName.data(), subjectName.length());
703 
704  return encode;
705 }
706 
708 
710 {
711  QByteArray encode;
712  QDataStream ds(&encode, QIODevice::WriteOnly);
713 
714  QByteArray type = encode_SubjectAttributeType(subject.type);
715  QByteArray key;
716  QByteArray rv;
717  QByteArray assuranceLevel;
718  QByteArray itsAidLists;
719  QDataStream itsAidListsDS(&itsAidLists, QIODevice::WriteOnly);
720  QByteArray itsAidList;
721  QByteArray var;
722  QByteArray itsAidSspLists;
723  QDataStream itsAidSspListsDS(&itsAidSspLists, QIODevice::WriteOnly);
724  QByteArray itsAidSspList;
725  QByteArray otherAttribute;
726 
727  ds.writeRawData(type.data(), type.length());
728  switch (subject.type)
729  {
733  ds.writeRawData(key.data(), key.length());
734  break;
737  ds.writeRawData(rv.data(), rv.length());
738  break;
741  ds.writeRawData(assuranceLevel.data(), assuranceLevel.length());
742  break;
744  for(int i = 0 ; i < subject.subject_attribute.choice.its_aid_list.its_aid.list.count ; i++)
745  {
746  itsAidList = encode_INTX(*subject.subject_attribute.choice.its_aid_list.its_aid.list.array[i]);
747  itsAidListsDS.writeRawData(itsAidList.data(), itsAidList.length());
748  }
749  var = encode_INTX(itsAidLists.length());
750  ds.writeRawData(var.data(), var.length());
751  ds.writeRawData(itsAidLists.data(), itsAidLists.length());
752  break;
754  for(int i = 0 ; i < subject.subject_attribute.choice.its_aid_ssp_list.its_aid_ssp.list.count ; i++)
755  {
756  itsAidSspList = encode_ItsAidSsp(*subject.subject_attribute.choice.its_aid_ssp_list.its_aid_ssp.list.array[i]);
757  itsAidSspListsDS.writeRawData(itsAidSspList.data(), itsAidSspList.length());
758  }
759  var = encode_INTX(itsAidSspLists.length());
760  ds.writeRawData(var.data(), var.length());
761  ds.writeRawData(itsAidSspLists.data(), itsAidSspLists.length());
762  break;
763  default:
765  ds.writeRawData(otherAttribute.data(), otherAttribute.length());
766  break;
767  }
768 
769  return encode;
770 }
771 
773 QByteArray encode_SubjectAssurance(SubjectAssurance_t subject){return encode_Opaque(subject, 1);}
774 
776 {
777  QByteArray encode;
778  QDataStream ds(&encode, QIODevice::WriteOnly);
779 
781  QByteArray endValidity;
782  QByteArray startValidity;
783  QByteArray duration;
784  QByteArray region;
785  QByteArray data;
786 
787  ds.writeRawData(type.data(), type.length());
788  switch (validityRestriction.type)
789  {
792  ds.writeRawData(endValidity.data(), endValidity.length());
793  break;
797  ds.writeRawData(startValidity.data(), startValidity.length());
798  ds.writeRawData(endValidity.data(), endValidity.length());
799  break;
803  ds.writeRawData(startValidity.data(), startValidity.length());
804  ds.writeRawData(duration.data(), duration.length());
805  break;
808  ds.writeRawData(region.data(), region.length());
809  break;
810  default:
812  ds.writeRawData(data.data(), data.length());
813  break;
814  }
815 
816  return encode;
817 }
818 
820 
822 {
823  QByteArray encode;
824  QDataStream ds(&encode, QIODevice::WriteOnly);
825 
826  QByteArray itsAid = encode_INTX(ssp.its_aid_ssp);
827  QByteArray serviceSpecificPermission = encode_Opaque(ssp.service_specific_permissions);
828 
829  ds.writeRawData(itsAid.data(), itsAid.length());
830  ds.writeRawData(serviceSpecificPermission.data(), serviceSpecificPermission.length());
831 
832  return encode;
833 }
struct ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u::time_start_and_duration time_start_and_duration
QByteArray encode_INTEGER(quint64 v, int l)
encode_INTEGER Encode an unsigned integer.
struct HeaderField::header_field::HeaderField__header_field_u::request_unrecognized_certificate::digests digests
QByteArray encode_TrailerFieldType(TrailerFieldType_t type)
encode_TrailerFieldType Encode a TrailerFieldType.
RegionType_t region_type
QByteArray encode_HeaderFieldType(HeaderFieldType_t type)
encode_HeaderFieldType Encode an HeaderFieldType.
long RegionDictionary_t
union HeaderField::header_field::HeaderField__header_field_u choice
QByteArray encode_EccPoint(EccPoint_t point)
encode_EccPoint Encode an EccPoint.
QByteArray encode_SignerInfo(SignerInfo_t signerInfo)
encode_SignerInfo Encode a SignerInfo.
long IntX_t
Definition: IntX.h:21
static IntX_t intx[NSECURE_FIELDS]
HeaderFieldType_t type
Definition: HeaderField.h:53
struct SignerInfo * signer_info_certificate
Definition: Certificate.h:33
QByteArray encode_SignerInfoType(SignerInfoType_t type)
encode_SignerInfoType Encode a SignerInfoType.
QByteArray encode_SubjectAssurance(SubjectAssurance_t subject)
encode_SubjectAssurance Encode a SubjectAssurance.
union EncryptionParameters::encryption_parameters::EncryptionParameters__encryption_parameters_u choice
PublicKeyAlgorithm_t pk_encryption
Definition: RecipientInfo.h:35
union SignerInfo::signer_info::SignerInfo__signer_info_u choice
static Certificate_t certificate[NSECURE_FIELDS]
QByteArray encode_Opaque(Opaque_t opaque)
encode_Opaque Encode an Opaque with unknown length.
QByteArray encode_EciesEncryptedKey(EciesEncryptedKey_t ecies)
encode_EciesEncryptedKey Encode an EciesEncryptedKey.
SignerInfoType_t type
Definition: SignerInfo.h:43
protocolVersion
Definition: ItsPduHeader.h:23
struct EccPoint::ecc_point::EccPoint__ecc_point_u::uncompressed uncompressed
struct SignerInfo::signer_info::SignerInfo__signer_info_u::certificate_chain certificate_chain
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::its_aid_ssp_list its_aid_ssp_list
UINT32_t Time32_t
Definition: Time32.h:21
long SymmetricAlgorithm_t
struct HeaderField::header_field::HeaderField__header_field_u::generation_time generation_time
QByteArray encode_Certificate(Certificate_t certificate)
encode_Certificate Encode a Certificate.
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::recontruction_value recontruction_value
struct EccPoint::ecc_point::EccPoint__ecc_point_u::unknown_ecc_point unknown_ecc_point
static RectangularRegion_t rectangularRegion[NSECURE_FIELDS]
struct HeaderField::header_field::HeaderField__header_field_u::request_unrecognized_certificate request_unrecognized_certificate
struct PublicKey::public_key::PublicKey__public_key_u::ecdsa_nistp256_with_sha256_public_key ecdsa_nistp256_with_sha256_public_key
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::circle circle
QByteArray encode_TrailerField(TrailerField_t field)
encode_TrailerField Encode a TrailerField.
long TrailerFieldType_t
Opaque_t service_specific_permissions
Definition: ItsAidSsp.h:25
IntX_t its_aid_ssp
Definition: ItsAidSsp.h:24
QByteArray encode_Time64(Time64_t time)
encode_Time64 Encode a Time64.
QByteArray encode_OCTET_STRING(OCTET_STRING_t o)
encode_OCTET_STRING Encode an OCTET_STRING.
long SignerInfoType_t
QByteArray encode_PolygonalRegion(PolygonalRegion_t polygon)
encode_PolygonalRegion Encode a PolygonalRegion.
TrailerFieldType_t type
Definition: TrailerField.h:33
UINT8_t version
Definition: Certificate.h:32
union SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u choice
static RecipientInfo_t recipient[NSECURE_FIELDS]
union GeographicRegion::geographic_region::GeographicRegion__geographic_region_u choice
INT32_t latitude
Definition: TwoDLocation.h:23
struct GeographicRegion::geographic_region geographic_region
struct SubjectAttribute::subject_attribute subject_attribute
long SubjectAttributeType_t
struct HeaderField::header_field::HeaderField__header_field_u::expiration expiration
struct HeaderField::header_field::HeaderField__header_field_u::generation_location generation_location
ValidityRestrictionType_t type
QByteArray encode_HeaderField(HeaderField_t field)
encode_HeaderField Encode an HeaderField.
EccPointType_t type
Definition: EccPoint.h:35
Definition: Opaque.h:23
struct TrailerField::trailer_field trailer_field
union TrailerField::trailer_field::TrailerField__trailer_field_u choice
QByteArray encode_Signature(Signature_t signature)
encode_Signature Encode a Signature.
QByteArray encode_IdentifiedRegion(IdentifiedRegion_t id)
encode_IdentifiedRegion Encode a IdentifiedRegion.
struct Certificate::validity_restrictions validity_restrictions
QByteArray encode_SINTEGER(quint64 v, int l)
encode_INTEGER Encode an signed integer.
struct SignerInfo::signer_info::SignerInfo__signer_info_u::unknown_signer_info unknown_signer_info
QByteArray encode_RegionDictionary(RegionDictionary_t dictionary)
encode_RegionDictionary Encode a RegionDictionary.
struct ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u::unknown_validity_restriction unknown_validity_restriction
QByteArray encode_Time32(Time32_t time)
encode_Time32 Encode a Time32.
struct Certificate::subject_attributes subject_attributes
struct HeaderField::header_field::HeaderField__header_field_u::recipient_info_header_field::recipients recipients
QByteArray encode_SymmetricAlgorithm(SymmetricAlgorithm_t algorithm)
encode_SymmetricAlgorithm Encode a SymmetricAlgorithm.
TwoDLocation_t center
struct RecipientInfo::recipient_info::RecipientInfo__recipient_info_u::unknown_recipient_info unknown_recipient_info
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::its_aid_list::its_aid its_aid
IntX_t length
Definition: Opaque.h:24
union PublicKey::public_key::PublicKey__public_key_u choice
QByteArray encode_PublicKey(PublicKey_t key)
encode_PublicKey Encode a PublicKey.
struct ValidityRestriction::validity_restriction validity_restriction
struct SignerInfo::signer_info::SignerInfo__signer_info_u::certificate certificate
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::its_aid_ssp_list::its_aid_ssp its_aid_ssp
struct EncryptionParameters::encryption_parameters::EncryptionParameters__encryption_parameters_u::aes_128_ccm aes_128_ccm
union ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u choice
QByteArray encode_HashedId8(HashedId8_t hash)
encode_HashedId8 Encode an HashedId8.
SubjectAttributeType_t type
QByteArray encode_ValidityRestrictionType(ValidityRestrictionType_t type)
encode_ValidityRestrictionType Encode a ValidityRestrictionType.
QByteArray encode_EncryptionParameters(EncryptionParameters_t encParams)
encode_EncryptionParameters Encode an EncryptionParameters.
QByteArray encode_INTX(IntX_t intx)
encode_INTX Encode an INTX.
struct Signature::sign::Signature__sign_u::unknown_signature unknown_signature
struct SignerInfo::signer_info::SignerInfo__signer_info_u::certificate_chain::certificates certificates
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::its_aid_list its_aid_list
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::rectangle::rectangular_region rectangular_region
SubjectType_t subject_type
Definition: SubjectInfo.h:24
struct SecuredHeader::header_fields header_fields
QByteArray encode_RegionType(RegionType_t type)
encode_RegionType Encode a RegionType.
long HeaderFieldType_t
QByteArray encode_ValidityRestriction(ValidityRestriction_t validityRestriction)
encode_ValidityRestriction Encode a ValidityRestriction.
QByteArray encode_HashedId3(HashedId3_t hash)
encode_HashedId3 Encode an HashedId3.
QByteArray encode_SubjectAttributeType(SubjectAttributeType_t type)
encode_SubjectAttributeType Encode SubjectAttributeType.
struct ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u::time_end time_end
long ValidityRestrictionType_t
INT32_t longitude
Definition: TwoDLocation.h:24
Security layer encoder.
struct PublicKey::public_key public_key
struct Signature::sign sign
QByteArray encode_Duration(Duration_t duration)
encode_Duration Encode a Duration.
struct SignerInfo::signer_info signer_info
QByteArray encode_PublicKeyAlgorithm(PublicKeyAlgorithm_t algorithm)
encode_PublicKeyAlgorithm Encode a PublicKeyAlgorithm.
Opaque_t x
Definition: EccPoint.h:36
union RecipientInfo::recipient_info::RecipientInfo__recipient_info_u choice
struct PublicKey::public_key::PublicKey__public_key_u::unknown_public_key unknown_public_key
QByteArray encode_SubjectInfo(SubjectInfo_t info)
encode_SubjectInfo Encode a SubjectInfo.
QByteArray encode_EccPointType(EccPointType_t type)
encode_EccPointType Encode an EccPointType.
QByteArray encode_SecuredHeader(SecuredHeader_t header)
encode_SecuredHeader Encode a SecuredHeader.
QByteArray encode_CircularRegion(CircularRegion_t region)
encode_CircularRegion Encode a CircularRegion.
Opaque_t elevation
struct SignerInfo::signer_info::SignerInfo__signer_info_u::certificate_digest_with_sha256 certificate_digest_with_sha256
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::id id
Signature_t signature_certificate
Definition: Certificate.h:47
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::assurance_level assurance_level
PublicKeyAlgorithm_t algorithm
Definition: PublicKey.h:35
QByteArray encode_GeographicRegion(GeographicRegion_t region)
encode_GeographicRegion Encode a GeographicRegion.
QByteArray encode_ThreeDLocation(ThreeDLocation_t location)
encode_ThreeDLocation Encode a ThreeDLocation.
static quint8 intx_lentghs[]
struct RecipientInfo::recipient_info::RecipientInfo__recipient_info_u::ecies_nistp256_recipient_info ecies_nistp256_recipient_info
TwoDLocation_t southeast
struct Signature::sign::Signature__sign_u::ecdsa_nistp256_with_sha256_signature ecdsa_nistp256_with_sha256_signature
struct SignerInfo::signer_info::SignerInfo__signer_info_u::certificate_digest_with_other_algorithm certificate_digest_with_other_algorithm
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::polygon polygon
QByteArray encode_TwoDLocation(TwoDLocation_t location)
encode_TwoDLocation Encode a TwoDLocation.
QByteArray encode_Time64WithStandardDeviation(Time64WithStandardDeviation_t time)
encode_Time64WithStandardDeviation Encode a Time64WithStandardDeviation.
struct ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u::region region
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::rectangle rectangle
long EccPointType_t
Definition: EccPointType.h:29
long PublicKeyAlgorithm_t
Opaque_t subject_name
Definition: SubjectInfo.h:25
OCTET_STRING_t value
Definition: Opaque.h:25
struct TrailerField::trailer_field::TrailerField__trailer_field_u::signature_trailer_field signature_trailer_field
PublicKeyAlgorithm_t algorithm
Definition: Signature.h:33
uint8_t * buf
Definition: OCTET_STRING.h:15
long RegionType_t
Definition: RegionType.h:31
static ValidityRestriction_t validityRestriction[NSECURE_FIELDS]
QByteArray encode_SubjectType(SubjectType_t type)
encode_SubjectType Encode a SubjectType.
QByteArray encode_SecureTrailer(SecureTrailer_t trailer)
encode_SecureTrailer Encode a SecureTrailer.
QByteArray encode_RecipientInfo(RecipientInfo_t recipient)
encode_RecipientInfo Encode a RecipientInfo.
struct EccPoint::ecc_point ecc_point
union Signature::sign::Signature__sign_u choice
static ItsAidSsp_t ssp[NSECURE_FIELDS]
SubjectInfo_t subject_info
Definition: Certificate.h:34
struct GeographicRegion::geographic_region::GeographicRegion__geographic_region_u::unknown_geographic_region unknown_geographic_region
union EccPoint::ecc_point::EccPoint__ecc_point_u choice
struct HeaderField::header_field::HeaderField__header_field_u::its_aid_header_field its_aid_header_field
struct EncryptionParameters::encryption_parameters::EncryptionParameters__encryption_parameters_u::unknown_encryption_parameters unknown_encryption_parameters
QByteArray encode_ItsAidSsp(ItsAidSsp_t ssp)
encode_ItsAidSsp Encode an ItsAidSsp.
SymmetricAlgorithm_t symm_algorithm
struct PublicKey::public_key::PublicKey__public_key_u::ecies_nistp256_public_key ecies_nistp256_public_key
UINT16_t Duration_t
Definition: Duration.h:21
struct HeaderField::header_field header_field
EccPoint_t r
struct HeaderField::header_field::HeaderField__header_field_u::generation_time_with_standard_deviation generation_time_with_standard_deviation
struct HeaderField::header_field::HeaderField__header_field_u::signer_info_header_field signer_info_header_field
struct HeaderField::header_field::HeaderField__header_field_u::recipient_info_header_field recipient_info_header_field
HashedId8_t cert_id
Definition: RecipientInfo.h:34
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::unknown_subject_attribute unknown_subject_attribute
struct TrailerField::trailer_field::TrailerField__trailer_field_u::unknown_trailer_field unknown_trailer_field
QByteArray encode_SubjectAttribute(SubjectAttribute_t subject)
encode_SubjectAttribute Encode a SubjectAttribute.
struct EncryptionParameters::encryption_parameters encryption_parameters
struct RecipientInfo::recipient_info recipient_info
QByteArray encode_RectangularRegion(RectangularRegion_t region)
encode_RectangularRegion Encode a RectangularRegion.
long SubjectType_t
Definition: SubjectType.h:31
QByteArray encode_EcdsaSignature(EcdsaSignature_t ecdsa)
encode_EcdsaSignature Encode an EcdsaSignature.
struct ValidityRestriction::validity_restriction::ValidityRestriction__validity_restriction_u::time_start_and_end time_start_and_end
struct SubjectAttribute::subject_attribute::SubjectAttribute__subject_attribute_u::encryption_key encryption_key
struct HeaderField::header_field::HeaderField__header_field_u::encryption_parameters_header_field encryption_parameters_header_field
struct SecureTrailer::trailer_fields trailer_fields
TwoDLocation_t northwest
struct HeaderField::header_field::HeaderField__header_field_u::unknown_header_field unknown_header_field
UINT8_t protocol_version
Definition: SecuredHeader.h:30