Ieee1609Dot2.md 68.2 KB
Newer Older
ASN.1 Checker's avatar
ASN.1 Checker committed
# ASN.1 module Ieee1609Dot2
 OID: _{iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) schema(1) major-version-2(2) minor-version-6(6)}_
 @note Section references in this file are to clauses in IEEE Std
 1609.2 unless indicated otherwise. Full forms of acronyms and
 abbreviations used in this file are specified in 3.2.
 

## Imports:
ASN.1 Checker's avatar
ASN.1 Checker committed
 * **[Ieee1609Dot2BaseTypes](Ieee1609Dot2BaseTypes.md)** *{iso(1) identified-organization(3) ieee(111) standards-association-numbered-series-standards(2) wave-stds(1609) dot2(2) base(1) base-types(2) major-version-2(2) minor-version-4(4)}*<br/>
ASN.1 Checker's avatar
ASN.1 Checker committed
  
ASN.1 Checker's avatar
ASN.1 Checker committed
 * **[EtsiTs103097ExtensionModule](EtsiTs103097ExtensionModule.md)** *{itu-t(0) identified-organization(4) etsi(0) itsDomain(5) wg5(5) secHeaders(103097) extension(2) major-version-1(1) minor-version-1(1)}*<br/>
ASN.1 Checker's avatar
ASN.1 Checker committed
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497 1498 1499 1500 1501 1502 1503 1504 1505 1506 1507 1508 1509 1510 1511 1512 1513 1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539 1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554 1555 1556 1557 1558 1559 1560 1561 1562 1563 1564 1565 1566 1567 1568 1569 1570 1571 1572 1573 1574 1575 1576 1577 1578 1579 1580 1581 1582 1583 1584 1585 1586 1587 1588 1589 1590 1591 1592 1593 1594 1595 1596 1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609 1610 1611 1612 1613 1614 1615 1616 1617 1618 1619 1620 1621 1622 1623 1624 1625 1626 1627 1628 1629 1630 1631 1632 1633 1634 1635 1636 1637 1638 1639 1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650 1651 1652 1653 1654 1655 1656 1657 1658 1659 1660 1661 1662 1663 1664 1665 1666 1667 1668 1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683 1684 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787
  
## Data Elements:
### <a name="Ieee1609Dot2Data"></a>Ieee1609Dot2Data
This data type is used to contain the other data types in this
 clause. The fields in the Ieee1609Dot2Data have the following meanings:

Fields:
* protocolVersion of type [**Uint8**](Ieee1609Dot2BaseTypes.md#Uint8) (3)<br>
  contains the current version of the protocol. The
   version specified in this standard is version 3, represented by the
   integer 3. There are no major or minor version numbers.


* content of type [**Ieee1609Dot2Content**](#Ieee1609Dot2Content) <br>
  contains the content in the form of an Ieee1609Dot2Content.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the Ieee1609Dot2Content.
>>>
```asn1
Ieee1609Dot2Data ::= SEQUENCE {
  protocolVersion Uint8(3),
  content         Ieee1609Dot2Content
}
```

### <a name="Ieee1609Dot2Content"></a>Ieee1609Dot2Content
In this structure:

Fields:
* unsecuredData of type [**Opaque**](Ieee1609Dot2BaseTypes.md#Opaque) <br>
  indicates that the content is an OCTET STRING to be
   consumed outside the SDS.


* signedData of type [**SignedData**](#SignedData) <br>
  indicates that the content has been signed according to
   this standard.


    
* encryptedData of type [**EncryptedData**](#EncryptedData) <br>
  indicates that the content has been encrypted
   according to this standard.


   
* signedCertificateRequest of type [**Opaque**](Ieee1609Dot2BaseTypes.md#Opaque) <br>
  indicates that the content is a 
   certificate request signed by an IEEE 1609.2 certificate or self-signed.


   
* signedX509CertificateRequest of type [**Opaque**](Ieee1609Dot2BaseTypes.md#Opaque) <br>
  indicates that the content is a 
   certificate request signed by an ITU-T X.509 certificate.


   
     ...,

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2 if it is of type signedData.
 The canonicalization applies to the SignedData.
>>>
```asn1
Ieee1609Dot2Content ::=  CHOICE { 
  unsecuredData                Opaque, 
  signedData                   SignedData,
  encryptedData                EncryptedData,
  signedCertificateRequest     Opaque,
  ...,
  signedX509CertificateRequest Opaque
}
```

### <a name="SignedData"></a>SignedData
In this structure:

Fields:
* hashId of type [**HashAlgorithm**](Ieee1609Dot2BaseTypes.md#HashAlgorithm) <br>
  indicates the hash algorithm to be used to generate the hash
   of the message for signing and verification.


* tbsData of type [**ToBeSignedData**](#ToBeSignedData) <br>
  contains the data that is hashed as input to the signature.


   
* signer of type [**SignerIdentifier**](#SignerIdentifier) <br>
  determines the keying material and hash algorithm used to
   sign the data.


   
* signature of type [**Signature**](Ieee1609Dot2BaseTypes.md#Signature) <br>
  contains the digital signature itself, calculated as
   specified in 5.3.1.
     - If signer indicates the choice self, then the signature calculation
   is parameterized as follows:
       - Data input is equal to the COER encoding of the tbsData field
   canonicalized according to the encoding considerations given in 6.3.6.
       - Verification type is equal to self.
       - Signer identifier input is equal to the empty string.
     - If signer indicates certificate or digest, then the signature
   calculation is parameterized as follows:
       - Data input is equal to the COER encoding of the tbsData field
   canonicalized according to the encoding considerations given in 6.3.6.
       - Verification type is equal to certificate.
       - Signer identifier input equal to the COER-encoding of the
   Certificate that is to be used to verify the SPDU, canonicalized according
   to the encoding considerations given in 6.4.3.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the ToBeSignedData and the Signature.
>>>
```asn1
SignedData ::= SEQUENCE { 
  hashId    HashAlgorithm,
  tbsData   ToBeSignedData,
  signer    SignerIdentifier,
  signature Signature
}
```

### <a name="ToBeSignedData"></a>ToBeSignedData
This structure contains the data to be hashed when generating or
 verifying a signature. See 6.3.4 for the specification of the input to the
 hash.

Fields:
* payload of type [**SignedDataPayload**](#SignedDataPayload) <br>
  contains data that is provided by the entity that invokes
   the SDS.


* headerInfo of type [**HeaderInfo**](#HeaderInfo) <br>
  contains additional data that is inserted by the SDS.
   This structure is used as follows to determine the "data input" to the 
   hash operation for signing or verification as specified in 5.3.1.2.2 or 
   5.3.1.3.
     - If payload does not contain the field omitted, the data input to the 
   hash operation is the COER encoding of the ToBeSignedData. 
     - If payload field in this ToBeSignedData instance contains the field 
   omitted, the data input to the hash operation is the COER encoding of the
   ToBeSignedData, concatenated with the hash of the omitted payload. The hash
   of the omitted payload is calculated with the same hash algorithm that is 
   used to calculate the hash of the data input for signing or verification. 
   The data input to the hash operation is simply the COER enocding of the 
   ToBeSignedData, concatenated with the hash of the omitted payload: there is
   no additional wrapping or length indication. As noted in 5.2.4.3.4, the 
   means by which the signer and verifier establish the contents of the 
   omitted payload are out of scope for this standard.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the SignedDataPayload if it is of type data, and to the 
 HeaderInfo.
>>>
```asn1
ToBeSignedData ::= SEQUENCE { 
  payload    SignedDataPayload,
  headerInfo HeaderInfo
}
```

### <a name="SignedDataPayload"></a>SignedDataPayload
This structure contains the data payload of a ToBeSignedData. This 
 structure contains at least one of the optional elements, and may contain 
 more than one. See 5.2.4.3.4 for more details.
 The security profile in Annex C allows an implementation of this standard 
 to state which forms of Signed¬Data¬Payload are supported by that 
 implementation, and also how the signer and verifier are intended to obtain
 the external data for hashing. The specification of an SDEE that uses 
 external data is expected to be explicit and unambiguous about how this 
 data is obtained and how it is formatted prior to processing by the hash 
 function.

Fields:
* data of type [**Ieee1609Dot2Data**](#Ieee1609Dot2Data)  OPTIONAL<br>
  contains data that is explicitly transported within the
   structure.


* extDataHash of type [**HashedData**](#HashedData)  OPTIONAL<br>
  contains the hash of data that is not explicitly 
   transported within the structure, and which the creator of the structure 
   wishes to cryptographically bind to the signature. 


   
* omitted of type **NULL**  OPTIONAL<br>
  indicates that there is external data to be included in the
   hash calculation for the signature.The mechanism for including the external
   data in the hash calculation is specified in 6.3.6.


   
     ...,

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the Ieee1609Dot2Data.
>>>
```asn1
SignedDataPayload ::= SEQUENCE { 
  data        Ieee1609Dot2Data OPTIONAL,
  extDataHash HashedData OPTIONAL,
  ...,
  omitted     NULL OPTIONAL
} (WITH COMPONENTS {..., data PRESENT} |
   WITH COMPONENTS {..., extDataHash PRESENT} |
   WITH COMPONENTS {..., omitted PRESENT})
```

### <a name="HashedData"></a>HashedData
This structure contains the hash of some data with a specified hash
 algorithm. See 5.3.3 for specification of the permitted hash algorithms.

Fields:
* sha256HashedData of type [**HashedId32**](Ieee1609Dot2BaseTypes.md#HashedId32) <br>
  indicates data hashed with SHA-256.


* sha384HashedData of type [**HashedId48**](Ieee1609Dot2BaseTypes.md#HashedId48) <br>
  indicates data hashed with SHA-384.


   
     ...,
* sm3HashedData of type [**HashedId32**](Ieee1609Dot2BaseTypes.md#HashedId32) <br>
  indicates data hashed with SM3.


   

>>>
NOTE:&emsp;Critical information fields: If present, this is a critical 
 information field as defined in 5.2.6. An implementation that does not 
 recognize the indicated CHOICE for this type when verifying a signed SPDU 
 shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, 
 that is, it is invalid in the sense that its validity cannot be established.
>>>
```asn1
HashedData::= CHOICE { 
  sha256HashedData HashedId32,
  ...,
  sha384HashedData HashedId48,
  sm3HashedData    HashedId32
}
```

### <a name="HeaderInfo"></a>HeaderInfo
This structure contains information that is used to establish
 validity by the criteria of 5.2.

Fields:
* psid of type [**Psid**](Ieee1609Dot2BaseTypes.md#Psid) <br>
  indicates the application area with which the sender is
   claiming the payload is to be associated.


* generationTime of type [**Time64**](Ieee1609Dot2BaseTypes.md#Time64)  OPTIONAL<br>
  indicates the time at which the structure was
   generated. See 5.2.5.2.2 and 5.2.5.2.3 for discussion of the use of this
   field.


   
* expiryTime of type [**Time64**](Ieee1609Dot2BaseTypes.md#Time64)  OPTIONAL<br>
  if present, contains the time after which the data
   is no longer considered relevant. If both generationTime and
   expiryTime are present, the signed SPDU is invalid if generationTime is
   not strictly earlier than expiryTime.


   
* generationLocation of type [**ThreeDLocation**](Ieee1609Dot2BaseTypes.md#ThreeDLocation)  OPTIONAL<br>
  if present, contains the location at which the
   signature was generated.


   
* p2pcdLearningRequest of type [**HashedId3**](Ieee1609Dot2BaseTypes.md#HashedId3)  OPTIONAL<br>
  if present, is used by the SDS to request 
   certificates for which it has seen identifiers and does not know the 
   entire certificate. A specification of this peer-to-peer certificate 
   distribution (P2PCD) mechanism is given in Clause 8. This field is used 
   for the separate-certificate-pdu flavor of P2PCD and shall only be present 
   if inlineP2pcdRequest is not present. The HashedId3 is calculated with the 
   whole-certificate hash algorithm, determined as described in 6.4.3, 
   applied to the COER-encoded certificate, canonicalized as defined in the 
   definition of Certificate.


   
* missingCrlIdentifier of type [**MissingCrlIdentifier**](#MissingCrlIdentifier)  OPTIONAL<br>
  if present, is used by the SDS to request
   CRLs which it knows to have been issued and have not received. This is
   provided for future use and the associated mechanism is not defined in
   this version of this standard.


   
* encryptionKey of type [**EncryptionKey**](Ieee1609Dot2BaseTypes.md#EncryptionKey)  OPTIONAL<br>
  if present, is used to provide a key that is to 
   be used to encrypt at least one response to this SPDU. The SDEE 
   specification is expected to specify which response SPDUs are to be 
   encrypted with this key. One possible use of this key to encrypt a 
   response is specified in 6.3.35, 6.3.37, and 6.3.34. An encryptionKey 
   field of type symmetric should only be used if the SignedData containing 
   this field is securely encrypted by some means.


   
* inlineP2pcdRequest of type [**SequenceOfHashedId3**](Ieee1609Dot2BaseTypes.md#SequenceOfHashedId3)  OPTIONAL<br>
  if present, is used by the SDS to request
   unknown certificates per the inline peer-to-peer certificate distribution
   mechanism is given in Clause 8. This field shall only be present if
   p2pcdLearningRequest is not present. The HashedId3 is calculated with the
   whole-certificate hash algorithm, determined as described in 6.4.3, applied
   to the COER-encoded certificate, canonicalized as defined in the definition
   of Certificate.


   
     ...,
* requestedCertificate of type [**Certificate**](#Certificate)  OPTIONAL<br>
  if present, is used by the SDS to provide
   certificates per the "inline" version of the peer-to-peer certificate
   distribution mechanism given in Clause 8.


   
* pduFunctionalType of type [**PduFunctionalType**](#PduFunctionalType)  OPTIONAL<br>
  if present, is used to indicate that the SPDU is
   to be consumed by a process other than an application process as defined
   in ISO 21177 [B14a]. See 6.3.23b for more details.


   
* contributedExtensions of type [**ContributedExtensionBlocks**](#ContributedExtensionBlocks)  OPTIONAL<br>
  if present, is used to contain additional 
   extensions defined using the ContributedExtensionBlocks structure.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization
 applies to the EncryptionKey. If encryptionKey is present, and indicates
 the choice public, and contains a BasePublicEncryptionKey that is an
 elliptic curve point (i.e., of type EccP256CurvePoint or 
 EccP384CurvePoint), then the elliptic curve point is encoded in compressed
 form, i.e., such that the choice indicated within the Ecc*CurvePoint is
 compressed-y-0 or compressed-y-1.
 The canonicalization does not apply to any fields after the extension 
 marker, including any fields in contributedExtensions.
>>>
```asn1
HeaderInfo ::= SEQUENCE { 
  psid                  Psid,
  generationTime        Time64 OPTIONAL,
  expiryTime            Time64 OPTIONAL,
  generationLocation    ThreeDLocation OPTIONAL,
  p2pcdLearningRequest  HashedId3 OPTIONAL,
  missingCrlIdentifier  MissingCrlIdentifier OPTIONAL,
  encryptionKey         EncryptionKey OPTIONAL,
  ...,
  inlineP2pcdRequest    SequenceOfHashedId3 OPTIONAL,
  requestedCertificate  Certificate OPTIONAL,
  pduFunctionalType     PduFunctionalType OPTIONAL,
  contributedExtensions ContributedExtensionBlocks OPTIONAL
}
```

### <a name="MissingCrlIdentifier"></a>MissingCrlIdentifier
This structure may be used to request a CRL that the SSME knows to
 have been issued and has not yet received. It is provided for future use
 and its use is not defined in this version of this standard.

Fields:
* cracaId of type [**HashedId3**](Ieee1609Dot2BaseTypes.md#HashedId3) <br>
  is the HashedId3 of the CRACA, as defined in 5.1.3. The 
   HashedId3 is calculated with the whole-certificate hash algorithm, 
   determined as described in 6.4.3, applied to the COER-encoded certificate,
   canonicalized as defined in the definition of Certificate.


* crlSeries of type [**CrlSeries**](Ieee1609Dot2BaseTypes.md#CrlSeries) <br>
  is the requested CRL Series value. See 5.1.3 for more
   information.
   


   
```asn1
MissingCrlIdentifier ::= SEQUENCE { 
  cracaId   HashedId3,
  crlSeries CrlSeries,
  ...
}
```


### <a name="PduFunctionalType"></a>PduFunctionalType
This data structure identifies the functional entity that is 
 intended to consume an SPDU, for the case where that functional entity is 
 not an application process, and are instead security support services for an
 application process. Further details and the intended use of this field are 
 defined in ISO 21177 [B20].
```asn1
PduFunctionalType ::= INTEGER (0..255)
```

```asn1
tlsHandshake             PduFunctionalType ::= 1
iso21177ExtendedAuth     PduFunctionalType ::= 2
iso21177SessionExtension PduFunctionalType ::= 3
```


### <a name="ContributedExtensionBlocks"></a>ContributedExtensionBlocks
This type is used for clarity of definitions.
```asn1
ContributedExtensionBlocks ::= SEQUENCE (SIZE(1..MAX)) OF
  ContributedExtensionBlock
```

### <a name="ContributedExtensionBlock"></a>ContributedExtensionBlock
This data structure defines the format of an extension block
 provided by an identified contributor by using the temnplate provided
 in the class IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION constraint
 to the objects in the set Ieee1609Dot2HeaderInfoContributedExtensions.

Fields:
* contributorId of type [**IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION**](#IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION) .&id({
    Ieee1609Dot2HeaderInfoContributedExtensions
  })<br>
  uniquely identifies the contributor.


* extns of type **SEQUENCE**  (SIZE(1..MAX)) OF<br>
  contains a list of extensions from that contributor. 
   Extensions are expected and not required to follow the format specified 
   in 6.5.
   


   
```asn1
ContributedExtensionBlock ::= SEQUENCE {
  contributorId IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION.&id({
    Ieee1609Dot2HeaderInfoContributedExtensions
  }),
  extns         SEQUENCE (SIZE(1..MAX)) OF
    IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION.&Extn({
    Ieee1609Dot2HeaderInfoContributedExtensions
  }{@.contributorId})
}
```

### <a name="IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION"></a>IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION
This Information Object Class defines the class that provides a 
 template for defining extension blocks.

Fields:
* id of type [**HeaderInfoContributorId**](#HeaderInfoContributorId)  UNIQUE<br>
```asn1
IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION ::= CLASS {
  &id   HeaderInfoContributorId UNIQUE,
  &Extn
} WITH SYNTAX {&Extn IDENTIFIED BY &id}
```


### <a name="Ieee1609Dot2HeaderInfoContributedExtensions"></a>Ieee1609Dot2HeaderInfoContributedExtensions
This structure is an ASN.1 Information Object Set listing the 
 defined contributed extension types and the associated 
 HeaderInfoContributorId values. In this version of this standard two 
 extension types are defined: Ieee1609ContributedHeaderInfoExtension and 
 EtsiOriginatingHeaderInfoExtension.
```asn1
Ieee1609Dot2HeaderInfoContributedExtensions
  IEEE1609DOT2-HEADERINFO-CONTRIBUTED-EXTENSION ::= {
  {Ieee1609ContributedHeaderInfoExtension IDENTIFIED BY 
        ieee1609HeaderInfoContributorId} |
  {EtsiOriginatingHeaderInfoExtension IDENTIFIED BY
    etsiHeaderInfoContributorId},
  ...
}
```


### <a name="HeaderInfoContributorId"></a>HeaderInfoContributorId
This is an integer used to identify a HeaderInfo extension
 contributing organization. In this version of this standard two values are
 defined: 
   - ieee1609OriginatingExtensionId indicating extensions originating with 
 IEEE 1609.
   - etsiOriginatingExtensionId indicating extensions originating with 
 ETSI TC ITS.
```asn1
HeaderInfoContributorId ::= INTEGER (0..255)
```

```asn1
ieee1609HeaderInfoContributorId HeaderInfoContributorId ::= 1
etsiHeaderInfoContributorId     HeaderInfoContributorId ::= 2
```

### <a name="SignerIdentifier"></a>SignerIdentifier
This structure allows the recipient of data to determine which
 keying material to use to authenticate the data. It also indicates the
 verification type to be used to generate the hash for verification, as
 specified in 5.3.1.

Fields:
* digest of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
  If the choice indicated is digest:
     - The structure contains the HashedId8 of the relevant certificate. The
   HashedId8 is calculated with the whole-certificate hash algorithm,
   determined as described in 6.4.3.
     - The verification type is certificate and the certificate data
   passed to the hash function as specified in 5.3.1 is the authorization
   certificate.


* certificate of type [**SequenceOfCertificate**](#SequenceOfCertificate) <br>
  If the choice indicated is certificate:
     - The structure contains one or more Certificate structures, in order
   such that the first certificate is the authorization certificate and each
   subsequent certificate is the issuer of the one before it.
     - The verification type is certificate and the certificate data
   passed to the hash function as specified in 5.3.1 is the authorization
   certificate.


   
* self of type **NULL** <br>
  If the choice indicated is self:
     - The structure does not contain any data beyond the indication that
   the choice value is self.
     - The verification type is self-signed.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to every Certificate in the certificate field.
>>>
```asn1
SignerIdentifier ::= CHOICE { 
  digest      HashedId8,
  certificate SequenceOfCertificate,
  self        NULL,
  ...
}
```


### <a name="Countersignature"></a>Countersignature
This data structure is used to perform a countersignature over an
 already-signed SPDU. This is the profile of an Ieee1609Dot2Data containing
 a signedData. The tbsData within content is composed of a payload
 containing the hash (extDataHash) of the externally generated, pre-signed
 SPDU over which the countersignature is performed.
```asn1
Countersignature ::= Ieee1609Dot2Data (WITH COMPONENTS {...,
  content (WITH COMPONENTS {..., 
    signedData  (WITH COMPONENTS {..., 
      tbsData (WITH COMPONENTS {..., 
        payload (WITH COMPONENTS {..., 
          data ABSENT,
          extDataHash PRESENT
        }),
        headerInfo(WITH COMPONENTS {..., 
          generationTime PRESENT,
          expiryTime ABSENT,
          generationLocation ABSENT,
          p2pcdLearningRequest ABSENT,
          missingCrlIdentifier ABSENT,
          encryptionKey ABSENT
        })
      })
    })
  })
})
```

### <a name="EncryptedData"></a>EncryptedData
This data structure encodes data that has been encrypted to one or 
 more recipients using the recipients’ public or symmetric keys as 
 specified in 5.3.4.

Fields:
* recipients of type [**SequenceOfRecipientInfo**](#SequenceOfRecipientInfo) <br>
  contains one or more RecipientInfos. These entries may
   be more than one RecipientInfo, and more than one type of RecipientInfo,
   as long as all entries are indicating or containing the same data encryption
   key.


* ciphertext of type [**SymmetricCiphertext**](#SymmetricCiphertext) <br>
  contains the encrypted data. This is the encryption of
   an encoded Ieee1609Dot2Data structure as specified in 5.3.4.2.


   

>>>
NOTE:&emsp;If the plaintext is raw data, i.e., it has not been output from a 
 previous operation of the SDS, then it is trivial to encapsulate it in an
 Ieee1609Dot2Data of type unsecuredData as noted in 4.2.2.2.2. For example,
 '03 80 08 01 23 45 67 89 AB CD EF' is the C-OER encoding of '01 23 45 67 
 89 AB CD EF' encapsulated in an Ieee1609Dot2Data of type unsecuredData. 
 The first byte of the encoding 03 is the protocolVersion, the second byte 
 80 indicates the choice unsecuredData, and the third byte 08 is the length 
 of the raw data '01 23 45 67 89 AB CD EF'.
>>>
```asn1
EncryptedData ::= SEQUENCE {
  recipients SequenceOfRecipientInfo,
  ciphertext SymmetricCiphertext
}
```

### <a name="RecipientInfo"></a>RecipientInfo
This data structure is used to transfer the data encryption key to
 an individual recipient of an EncryptedData. The option pskRecipInfo is
 selected if the EncryptedData was encrypted using the static encryption
 key approach specified in 5.3.4. The other options are selected if the
 EncryptedData was encrypted using the ephemeral encryption key approach
 specified in 5.3.4. The meanings of the choices are:


 See Annex C.7 for guidance on when it may be appropriate to use
 each of these approaches.

Fields:
* pskRecipInfo of type [**PreSharedKeyRecipientInfo**](#PreSharedKeyRecipientInfo) <br>
  The data was encrypted directly using a pre-shared 
   symmetric key.


* symmRecipInfo of type [**SymmRecipientInfo**](#SymmRecipientInfo) <br>
  The data was encrypted with a data encryption key,
   and the data encryption key was encrypted using a symmetric key.


   
* certRecipInfo of type [**PKRecipientInfo**](#PKRecipientInfo) <br>
  The data was encrypted with a data encryption key, 
   the data encryption key was encrypted using a public key encryption scheme,
   where the public encryption key was obtained from a certificate. In this 
   case, the parameter P1 to ECIES as defined in 5.3.5 is the hash of the 
   certificate, calculated with the whole-certificate hash algorithm, 
   determined as described in 6.4.3, applied to the COER-encoded certificate, 
   canonicalized as defined in the definition of Certificate.


   
* signedDataRecipInfo of type [**PKRecipientInfo**](#PKRecipientInfo) <br>
  The data was encrypted with a data encryption 
   key, the data encryption key was encrypted using a public key encryption 
   scheme, where the public encryption key was obtained as the public response 
   encryption key from a SignedData. In this case, if ECIES is the encryption 
   algorithm, then the parameter P1 to ECIES as defined in 5.3.5 is the 
   SHA-256 hash of the Ieee1609Dot2Data of type signedData containing the 
   response encryption key, canonicalized as defined in the definition of 
   Ieee1609Dot2Data.


    
* rekRecipInfo of type [**PKRecipientInfo**](#PKRecipientInfo) <br>
  The data was encrypted with a data encryption key, 
   the data encryption key was encrypted using a public key encryption scheme,
   where the public encryption key was not obtained from a Signed-Data or a 
   certificate. In this case, the SDEE specification is expected to specify 
   how the public key is obtained, and if ECIES is the encryption algorithm, 
   then the parameter P1 to ECIES as defined in 5.3.5 is the hash of the 
   empty string.


    

>>>
NOTE:&emsp;The material input to encryption is the bytes of the encryption key 
 with no headers, encapsulation, or length indication. Contrast this to 
 encryption of data, where the data is encapsulated in an Ieee1609Dot2Data.
>>>
```asn1
RecipientInfo ::= CHOICE {
  pskRecipInfo        PreSharedKeyRecipientInfo,
  symmRecipInfo       SymmRecipientInfo,
  certRecipInfo       PKRecipientInfo, 
  signedDataRecipInfo PKRecipientInfo, 
  rekRecipInfo        PKRecipientInfo 
}
```


### <a name="SequenceOfRecipientInfo"></a>SequenceOfRecipientInfo
This type is used for clarity of definitions.
```asn1
SequenceOfRecipientInfo ::= SEQUENCE OF RecipientInfo
```


### <a name="PreSharedKeyRecipientInfo"></a>PreSharedKeyRecipientInfo
This data structure is used to indicate a symmetric key that may 
 be used directly to decrypt a SymmetricCiphertext. It consists of the 
 low-order 8 bytes of the hash of the COER encoding of a 
 SymmetricEncryptionKey structure containing the symmetric key in question. 
 The HashedId8 is calculated with the hash algorithm determined as 
 specified in 5.3.9.3. The symmetric key may be established by any 
 appropriate means agreed by the two parties to the exchange.
```asn1
PreSharedKeyRecipientInfo ::= HashedId8
```

### <a name="SymmRecipientInfo"></a>SymmRecipientInfo
This data structure contains the following fields:

Fields:
* recipientId of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
  contains the hash of the symmetric key encryption key 
   that may be used to decrypt the data encryption key. It consists of the 
   low-order 8 bytes of the hash of the COER encoding of a 
   SymmetricEncryptionKey structure containing the symmetric key in question. 
   The HashedId8 is calculated with the hash algorithm determined as 
   specified in 5.3.9.4. The symmetric key may be established by any 
   appropriate means agreed by the two parties to the exchange.


* encKey of type [**SymmetricCiphertext**](#SymmetricCiphertext) <br>
  contains the encrypted data encryption key within a 
   SymmetricCiphertext, where the data encryption key is input to the data 
   encryption key encryption process with no headers, encapsulation, or 
   length indication.
   


    
```asn1
SymmRecipientInfo ::= SEQUENCE { 
  recipientId HashedId8, 
  encKey      SymmetricCiphertext
}
```

### <a name="PKRecipientInfo"></a>PKRecipientInfo
This data structure contains the following fields:

Fields:
* recipientId of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
  contains the hash of the container for the encryption
   public key as specified in the definition of RecipientInfo. Specifically,
   depending on the choice indicated by the containing RecipientInfo structure:
     - If the containing RecipientInfo structure indicates certRecipInfo,
   this field contains the HashedId8 of the certificate. The HashedId8 is
   calculated with the whole-certificate hash algorithm, determined as
   described in 6.4.3, applied to the COER-encoded certificate, canonicalized
   as defined in the definition of Certificate.
     - If the containing RecipientInfo structure indicates 
   signedDataRecipInfo, this field contains the HashedId8 of the 
   Ieee1609Dot2Data of type signedData that contained the encryption key, 
   with that Ieee¬¬1609¬Dot2¬¬Data canonicalized per 6.3.4. The HashedId8 is 
   calculated with the hash algorithm determined as specified in 5.3.9.5.
     - If the containing RecipientInfo structure indicates rekRecipInfo, this 
   field contains the HashedId8 of the COER encoding of a PublicEncryptionKey 
   structure containing the response encryption key. The HashedId8 is 
   calculated with the hash algorithm determined as specified in 5.3.9.5.


* encKey of type [**EncryptedDataEncryptionKey**](#EncryptedDataEncryptionKey) <br>
  contains the encrypted data encryption key, where the data 
   encryption key is input to the data encryption key encryption process with 
   no headers, encapsulation, or length indication. 
   


    
```asn1
PKRecipientInfo ::= SEQUENCE { 
  recipientId HashedId8, 
  encKey      EncryptedDataEncryptionKey
}
```

### <a name="EncryptedDataEncryptionKey"></a>EncryptedDataEncryptionKey
This data structure contains an encrypted data encryption key, 
 where the data encryption key is input to the data encryption key 
 encryption process with no headers, encapsulation, or length indication.


 Critical information fields: If present and applicable to
 the receiving SDEE, this is a critical information field as defined in
 5.2.6. If an implementation receives an encrypted SPDU and determines that
 one or more RecipientInfo fields are relevant to it, and if all of those
 RecipientInfos contain an EncryptedDataEncryptionKey such that the
 implementation does not recognize the indicated CHOICE, the implementation
 shall indicate that the encrypted SPDU is not decryptable.

Fields:
* eciesNistP256 of type [**EciesP256EncryptedKey**](Ieee1609Dot2BaseTypes.md#EciesP256EncryptedKey) <br>
* eciesBrainpoolP256r1 of type [**EciesP256EncryptedKey**](Ieee1609Dot2BaseTypes.md#EciesP256EncryptedKey) <br>
   
* ecencSm2256 of type [**EcencP256EncryptedKey**](Ieee1609Dot2BaseTypes.md#EcencP256EncryptedKey) <br>
   
     ...,
```asn1
EncryptedDataEncryptionKey ::= CHOICE { 
  eciesNistP256        EciesP256EncryptedKey,
  eciesBrainpoolP256r1 EciesP256EncryptedKey,
  ...,
  ecencSm2256          EcencP256EncryptedKey
}
```

### <a name="SymmetricCiphertext"></a>SymmetricCiphertext
This data structure encapsulates a ciphertext generated with an
 approved symmetric algorithm.

Fields:
* aes128ccm of type [**One28BitCcmCiphertext**](#One28BitCcmCiphertext) <br>
* sm4Ccm of type [**One28BitCcmCiphertext**](#One28BitCcmCiphertext) <br>
   
     ...,

>>>
NOTE:&emsp;Critical information fields: If present, this is a critical
 information field as defined in 5.2.6. An implementation that does not
 recognize the indicated CHOICE value for this type in an encrypted SPDU
 shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, 
 that is, it is invalid in the sense that its validity cannot be established.
>>>
```asn1
SymmetricCiphertext ::= CHOICE {
  aes128ccm One28BitCcmCiphertext,
  ...,
  sm4Ccm    One28BitCcmCiphertext
}
```

### <a name="One28BitCcmCiphertext"></a>One28BitCcmCiphertext
This data structure encapsulates an encrypted ciphertext for any 
 symmetric algorithm with 128-bit blocks in CCM mode. The ciphertext is 
 16 bytes longer than the corresponding plaintext due to the inclusion of 
 the message authentication code (MAC). The plaintext resulting from a 
 correct decryption of the ciphertext is either a COER-encoded 
 Ieee1609Dot2Data structure (see 6.3.41), or a 16-byte symmetric key 
 (see 6.3.44).


 The ciphertext is 16 bytes longer than the corresponding plaintext.

 The plaintext resulting from a correct decryption of the
 ciphertext is a COER-encoded Ieee1609Dot2Data structure.

Fields:
* nonce of type **OCTET STRING**  (SIZE (12))<br>
  contains the nonce N as specified in 5.3.8.


* ccmCiphertext of type [**Opaque**](Ieee1609Dot2BaseTypes.md#Opaque) <br>
  contains the ciphertext C as specified in 5.3.8.


   

>>>
NOTE:&emsp;In the name of this structure, "One28" indicates that the 
 symmetric cipher block size is 128 bits. It happens to also be the case 
 that the keys used for both AES-128-CCM and SM4-CCM are also 128 bits long. 
 This is, however, not what “One28” refers to. Since the cipher is used in 
 counter mode, i.e., as a stream cipher, the fact that that block size is 128
 bits affects only the size of the MAC and does not affect the size of the
 raw ciphertext.
>>>
```asn1
One28BitCcmCiphertext ::= SEQUENCE {
  nonce         OCTET STRING (SIZE (12)),
  ccmCiphertext Opaque 
}
```


### <a name="Aes128CcmCiphertext"></a>Aes128CcmCiphertext
This type is defined only for backwards compatibility.
```asn1
Aes128CcmCiphertext ::= One28BitCcmCiphertext
```


### <a name="TestCertificate"></a>TestCertificate
This structure is a profile of the structure CertificateBase which
 specifies the valid combinations of fields to transmit implicit and
 explicit certificates.

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the CertificateBase.
>>>
```asn1
TestCertificate ::= Certificate
```


### <a name="SequenceOfCertificate"></a>SequenceOfCertificate
This type is used for clarity of definitions.
```asn1
SequenceOfCertificate ::= SEQUENCE OF Certificate
```

### <a name="CertificateBase"></a>CertificateBase
The fields in this structure have the following meaning:

Fields:
* version of type [**Uint8**](Ieee1609Dot2BaseTypes.md#Uint8) (3)<br>
  contains the version of the certificate format. In this
   version of the data structures, this field is set to 3.


* type of type [**CertificateType**](#CertificateType) <br>
  states whether the certificate is implicit or explicit. This
   field is set to explicit for explicit certificates and to implicit for
   implicit certificates. See ExplicitCertificate and ImplicitCertificate for
   more details.


   
* issuer of type [**IssuerIdentifier**](#IssuerIdentifier) <br>
  identifies the issuer of the certificate.


   
* toBeSigned of type [**ToBeSignedCertificate**](#ToBeSignedCertificate) <br>
  is the certificate contents. This field is an input to
   the hash when generating or verifying signatures for an explicit
   certificate, or generating or verifying the public key from the
   reconstruction value for an implicit certificate. The details of how this
   field are encoded are given in the description of the
   ToBeSignedCertificate type.


   
* signature of type [**Signature**](Ieee1609Dot2BaseTypes.md#Signature)  OPTIONAL<br>
  is included in an ExplicitCertificate. It is the
   signature, calculated by the signer identified in the issuer field, over
   the hash of toBeSigned. The hash is calculated as specified in 5.3.1, where:
     - Data input is the encoding of toBeSigned following the COER.
     - Signer identifier input depends on the verification type, which in
   turn depends on the choice indicated by issuer. If the choice indicated by
   issuer is self, the verification type is self-signed and the signer
   identifier input is the empty string. If the choice indicated by issuer is
   not self, the verification type is certificate and the signer identifier
   input is the canonicalized COER encoding of the certificate indicated by
   issuer. The canonicalization is carried out as specified in the 
   Canonicalization section of this subclause.


   

>>>
NOTE:&emsp;Whole-certificate hash: If the entirety of a certificate is hashed 
 to calculate a HashedId3, HashedId8, or HashedId10, the algorithm used for 
 this purpose is known as the whole-certificate hash. The method used to 
 determine the whole-certificate hash algorithm is specified in 5.3.9.2.
>>>
```asn1
CertificateBase ::= SEQUENCE {
  version    Uint8(3),
  type       CertificateType,
  issuer     IssuerIdentifier,
  toBeSigned ToBeSignedCertificate,
  signature  Signature OPTIONAL
}
```


### <a name="CertificateType"></a>CertificateType
This enumerated type indicates whether a certificate is explicit or
 implicit.

>>>
NOTE:&emsp;Critical information fields: If present, this is a critical
 information field as defined in 5.2.5. An implementation that does not
 recognize the indicated CHOICE for this type when verifying a signed SPDU
 shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, 
 that is, it is invalid in the sense that its validity cannot be 
 established.
>>>
```asn1
CertificateType ::= ENUMERATED {
  explicit,
  implicit,
  ...
}
```


### <a name="ImplicitCertificate"></a>ImplicitCertificate
This is a profile of the CertificateBase structure providing all
 the fields necessary for an implicit certificate, and no others.
```asn1
ImplicitCertificate ::= CertificateBase (WITH COMPONENTS {...,
  type(implicit),
  toBeSigned(WITH COMPONENTS {...,
    verifyKeyIndicator(WITH COMPONENTS {reconstructionValue})
  }),
  signature ABSENT
})
```


### <a name="ExplicitCertificate"></a>ExplicitCertificate
This is a profile of the CertificateBase structure providing all
 the fields necessary for an explicit certificate, and no others.
```asn1
ExplicitCertificate ::= CertificateBase (WITH COMPONENTS {...,
  type(explicit),
  toBeSigned (WITH COMPONENTS {...,
    verifyKeyIndicator(WITH COMPONENTS {verificationKey})
  }),
  signature PRESENT
})
```

### <a name="IssuerIdentifier"></a>IssuerIdentifier
This structure allows the recipient of a certificate to determine
 which keying material to use to authenticate the certificate.


 If the choice indicated is sha256AndDigest, sha384AndDigest, or 
 sm3AndDigest:
   - The structure contains the HashedId8 of the issuing certificate. The 
 HashedId8 is calculated with the whole-certificate hash algorithm, 
 determined as described in 6.4.3, applied to the COER-encoded certificate, 
 canonicalized as defined in the definition of Certificate. 
   - The hash algorithm to be used to generate the hash of the certificate 
 for verification is SHA-256 (in the case of sha256AndDigest), SM3 (in the 
 case of sm3AndDigest) or SHA-384 (in the case of sha384AndDigest).
   - The certificate is to be verified with the public key of the
 indicated issuing certificate.

 If the choice indicated is self:
   - The structure indicates what hash algorithm is to be used to generate
 the hash of the certificate for verification.
   - The certificate is to be verified with the public key indicated by
 the verifyKeyIndicator field in theToBeSignedCertificate.

Fields:
* sha256AndDigest of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
* self of type [**HashAlgorithm**](Ieee1609Dot2BaseTypes.md#HashAlgorithm) <br>
   
* sha384AndDigest of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
   
     ...,
* sm3AndDigest of type [**HashedId8**](Ieee1609Dot2BaseTypes.md#HashedId8) <br>
   

>>>
NOTE:&emsp;Critical information fields: If present, this is a critical
 information field as defined in 5.2.5. An implementation that does not
 recognize the indicated CHOICE for this type when verifying a signed SPDU
 shall indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, 
 that is, it is invalid in the sense that its validity cannot be 
 established.
>>>
```asn1
IssuerIdentifier ::= CHOICE { 
  sha256AndDigest HashedId8,
  self            HashAlgorithm,
  ...,
  sha384AndDigest HashedId8,
  sm3AndDigest    HashedId8
}
```

### <a name="ToBeSignedCertificate"></a>ToBeSignedCertificate
The fields in the ToBeSignedCertificate structure have the
 following meaning:


 For both implicit and explicit certificates, when the certificate
 is hashed to create or recover the public key (in the case of an implicit
 certificate) or to generate or verify the signature (in the case of an
 explicit certificate), the hash is Hash (Data input) || Hash (
 Signer identifier input), where:
   - Data input is the COER encoding of toBeSigned, canonicalized
 as described above.
   - Signer identifier input depends on the verification type,
 which in turn depends on the choice indicated by issuer. If the choice
 indicated by issuer is self, the verification type is self-signed and the
 signer identifier input is the empty string. If the choice indicated by
 issuer is not self, the verification type is certificate and the signer
 identifier input is the COER encoding of the canonicalization per 6.4.3 of
 the certificate indicated by issuer.

 In other words, for implicit certificates, the value H (CertU) in SEC 4,
 section 3, is for purposes of this standard taken to be H [H
 (canonicalized ToBeSignedCertificate from the subordinate certificate) ||
 H (entirety of issuer Certificate)]. See 5.3.2 for further discussion,
 including material differences between this standard and SEC 4 regarding
 how the hash function output is converted from a bit string to an integer.

Fields:
* id of type [**CertificateId**](#CertificateId) <br>
  contains information that is used to identify the certificate
   holder if necessary.


* cracaId of type [**HashedId3**](Ieee1609Dot2BaseTypes.md#HashedId3) <br>
  identifies the Certificate Revocation Authorization CA
   (CRACA) responsible for certificate revocation lists (CRLs) on which this
   certificate might appear. Use of the cracaId is specified in 5.1.3. The
   HashedId3 is calculated with the whole-certificate hash algorithm,
   determined as described in 6.4.3, applied to the COER-encoded certificate, 
   canonicalized as defined in the definition of Certificate.


   
* crlSeries of type [**CrlSeries**](Ieee1609Dot2BaseTypes.md#CrlSeries) <br>
  represents the CRL series relevant to a particular
   Certificate Revocation Authorization CA (CRACA) on which the certificate
   might appear. Use of this field is specified in 5.1.3.


   
* validityPeriod of type [**ValidityPeriod**](Ieee1609Dot2BaseTypes.md#ValidityPeriod) <br>
  contains the validity period of the certificate.


   
* region of type [**GeographicRegion**](Ieee1609Dot2BaseTypes.md#GeographicRegion)  OPTIONAL<br>
  if present, indicates the validity region of the
   certificate. If it is omitted the validity region is indicated as follows:
     - If enclosing certificate is self-signed, i.e., the choice indicated
   by the issuer field in the enclosing certificate structure is self, the
   certificate is valid worldwide.
     - Otherwise, the certificate has the same validity region as the
   certificate that issued it.


   
* assuranceLevel of type [**SubjectAssurance**](Ieee1609Dot2BaseTypes.md#SubjectAssurance)  OPTIONAL<br>
  indicates the assurance level of the certificate
   holder.


   
* appPermissions of type [**SequenceOfPsidSsp**](Ieee1609Dot2BaseTypes.md#SequenceOfPsidSsp)  OPTIONAL<br>
  indicates the permissions that the certificate
   holder has to sign application data with this certificate. A valid
   instance of appPermissions contains any particular Psid value in at most
   one entry.


   
* certIssuePermissions of type [**SequenceOfPsidGroupPermissions**](#SequenceOfPsidGroupPermissions)  OPTIONAL<br>
  indicates the permissions that the certificate
   holder has to sign certificates with this certificate. A valid instance of
   this array contains no more than one entry whose psidSspRange field
   indicates all. If the array has multiple entries and one entry has its
   psidSspRange field indicate all, then the entry indicating all specifies
   the permissions for all PSIDs other than the ones explicitly specified in
   the other entries. See the description of PsidGroupPermissions for further
   discussion.


   
* certRequestPermissions of type [**SequenceOfPsidGroupPermissions**](#SequenceOfPsidGroupPermissions)  OPTIONAL<br>
  indicates the permissions that the 
   certificate holder can request in its certificate. A valid instance of this
   array contains no more than one entry whose psidSspRange field indicates 
   all. If the array has multiple entries and one entry has its psidSspRange 
   field indicate all, then the entry indicating all specifies the permissions 
   for all PSIDs other than the ones explicitly specified in the other entries.
   See the description of PsidGroupPermissions for further discussion.


   
* canRequestRollover of type **NULL**  OPTIONAL<br>
  indicates that the certificate may be used to
   sign a request for another certificate with the same permissions. This
   field is provided for future use and its use is not defined in this
   version of this standard.


    
* encryptionKey of type [**PublicEncryptionKey**](Ieee1609Dot2BaseTypes.md#PublicEncryptionKey)  OPTIONAL<br>
  contains a public key for encryption for which the
   certificate holder holds the corresponding private key.


   
* verifyKeyIndicator of type [**VerificationKeyIndicator**](#VerificationKeyIndicator) <br>
  contains material that may be used to recover
   the public key that may be used to verify data signed by this certificate.


   
* flags of type **BIT STRING**  {usesCubk (0)} (SIZE (8)) OPTIONAL<br>
  indicates additional yes/no properties of the certificate 
   holder. The only bit with defined semantics in this string in this version 
   of this standard is usesCubk. If set, the usesCubk bit indicates that the 
   certificate holder supports the compact unified butterfly key response. 
   Further material about the compact unified butterfly key response can be 
   found in IEEE Std 1609.2.1.


   
     ...,
* appExtensions of type [**SequenceOfAppExtensions**](#SequenceOfAppExtensions) <br>
  indicates additional permissions that may be applied
   to application activities that the certificate holder is carrying out. 


   
* certIssueExtensions of type [**SequenceOfCertIssueExtensions**](#SequenceOfCertIssueExtensions) <br>
  indicates additional permissions to issue 
   certificates containing endEntityExtensions. 


   
* certRequestExtension of type [**SequenceOfCertRequestExtensions**](#SequenceOfCertRequestExtensions) <br>
   
If the PublicEncryptionKey contains a BasePublicEncryptionKey that is an 
 elliptic curve point (i.e., of type EccP256CurvePoint or EccP384CurvePoint),
 then the elliptic curve point is encoded in compressed form, i.e., such 
 that the choice indicated within the Ecc*CurvePoint is compressed-y-0 or 
 compressed-y-1.

>>>
NOTE:&emsp;Critical information fields:
   - If present, appPermissions is a critical information field as defined 
 in 5.2.6. If an implementation of verification does not support the number 
 of PsidSsp in the appPermissions field of a certificate that signed a 
 signed SPDU, that implementation shall indicate that the signed SPDU is 
 invalid in the sense of 4.2.2.3.2, that is, it is invalid in the sense 
 that its validity cannot be established.. A conformant implementation 
 shall support appPermissions fields containing at least eight entries. 
 It may be the case that an implementation of verification does not support 
 the number of entries in  the appPermissions field and the appPermissions 
 field is not relevant to the verification: this will occur, for example, 
 if the certificate in question is a CA certificate and so the 
 certIssuePermissions field is relevant to the verification and the 
 appPermissions field is not. In this case, whether the implementation 
 indicates that the signed SPDU is valid (because it could validate all 
 relevant fields) or invalid (because it could not parse the entire 
 certificate) is implementation-specific.
   - If present, certIssuePermissions is a critical information field as 
 defined in 5.2.6. If an implementation of verification does not support 
 the number of PsidGroupPermissions in the certIssuePermissions field of a 
 CA certificate in the chain of a signed SPDU, the implementation shall 
 indicate that the signed SPDU is invalid in the sense of 4.2.2.3.2, that 
 is, it is invalid in the sense that its validity cannot be established. 
 A conformant implementation shall support certIssuePermissions fields 
 containing at least eight entries.
 It may be the case that an implementation of verification does not support
 the number of entries in  the certIssuePermissions field and the 
 certIssuePermissions field is not relevant to the verification: this will 
 occur, for example, if the certificate in question is the signing 
 certificate for the SPDU and so the appPermissions field is relevant to 
 the verification and the certIssuePermissions field is not. In this case, 
 whether the implementation indicates that the signed SPDU is valid 
 (because it could validate all relevant fields) or invalid (because it 
 could not parse the entire certificate) is implementation-specific.
   - If present, certRequestPermissions is a critical information field as 
 defined in 5.2.6. If an implementaiton of verification of a certificate 
 request does not support the number of PsidGroupPermissions in 
 certRequestPermissions, the implementation shall indicate that the signed 
 SPDU is invalid in the sense of 4.2.2.3.2, that is, it is invalid in the 
 sense that its validity cannot be established. A conformant implementation 
 shall support certRequestPermissions fields containing at least eight 
 entries.
 It may be the case that an implementation of verification does not support 
 the number of entries in  the certRequestPermissions field and the 
 certRequestPermissions field is not relevant to the verification: this will 
 occur, for example, if the certificate in question is the signing 
 certificate for the SPDU and so the appPermissions field is relevant to 
 the verification and the certRequestPermissions field is not. In this 
 case, whether the implementation indicates that the signed SPDU is valid 
 (because it could validate all relevant fields) or invalid (because it 
 could not parse the entire certificate) is implementation-specific.
>>>
```asn1
ToBeSignedCertificate ::= SEQUENCE { 
  id                     CertificateId,
  cracaId                HashedId3,
  crlSeries              CrlSeries,
  validityPeriod         ValidityPeriod,
  region                 GeographicRegion OPTIONAL,
  assuranceLevel         SubjectAssurance OPTIONAL,
  appPermissions         SequenceOfPsidSsp OPTIONAL,
  certIssuePermissions   SequenceOfPsidGroupPermissions OPTIONAL,
  certRequestPermissions SequenceOfPsidGroupPermissions OPTIONAL, 
  canRequestRollover     NULL OPTIONAL,
  encryptionKey          PublicEncryptionKey OPTIONAL,
  verifyKeyIndicator     VerificationKeyIndicator,
  ...,
  flags                  BIT STRING {usesCubk (0)} (SIZE (8)) OPTIONAL,
  appExtensions          SequenceOfAppExtensions,
  certIssueExtensions    SequenceOfCertIssueExtensions,
  certRequestExtension   SequenceOfCertRequestExtensions
}
(WITH COMPONENTS { ..., appPermissions PRESENT} |
 WITH COMPONENTS { ..., certIssuePermissions PRESENT} |
 WITH COMPONENTS { ..., certRequestPermissions PRESENT})
```

### <a name="CertificateId"></a>CertificateId
This structure contains information that is used to identify the
 certificate holder if necessary.

Fields:
* linkageData of type [**LinkageData**](#LinkageData) <br>
  is used to identify the certificate for revocation
   purposes in the case of certificates that appear on linked certificate
   CRLs. See 5.1.3 and 7.3 for further discussion.


* name of type [**Hostname**](Ieee1609Dot2BaseTypes.md#Hostname) <br>
  is used to identify the certificate holder in the case of
   non-anonymous certificates. The contents of this field are a matter of
   policy and are expected to be human-readable.


   
* binaryId of type **OCTET STRING** (SIZE(1..64))<br>
  supports identifiers that are not human-readable.


   
* none of type **NULL** <br>
  indicates that the certificate does not include an identifier.


   

>>>
NOTE:&emsp;Critical information fields:
   - If present, this is a critical information field as defined in 5.2.6.
 An implementation that does not recognize the choice indicated in this
 field shall reject a signed SPDU as invalid.
>>>
```asn1
CertificateId ::= CHOICE {
  linkageData LinkageData,
  name        Hostname,
  binaryId    OCTET STRING(SIZE(1..64)),
  none        NULL,
  ...
}
```

### <a name="LinkageData"></a>LinkageData
This structure contains information that is matched against
 information obtained from a linkage ID-based CRL to determine whether the
 containing certificate has been revoked. See 5.1.3.4 and 7.3 for details
 of use.

Fields:
* iCert of type [**IValue**](Ieee1609Dot2BaseTypes.md#IValue) <br>
* linkage-value of type [**LinkageValue**](Ieee1609Dot2BaseTypes.md#LinkageValue) <br>
   
* group-linkage-value of type [**GroupLinkageValue**](Ieee1609Dot2BaseTypes.md#GroupLinkageValue)  OPTIONAL<br>
    
```asn1
LinkageData ::= SEQUENCE {
  iCert               IValue,
  linkage-value       LinkageValue, 
  group-linkage-value GroupLinkageValue OPTIONAL
}
```

### <a name="PsidGroupPermissions"></a>PsidGroupPermissions
This type indicates which type of permissions may appear in
 end-entity certificates the chain of whose permissions passes through the
 PsidGroupPermissions field containing this value. If app is indicated, the
 end-entity certificate may contain an appPermissions field. If enroll is
 indicated, the end-entity certificate may contain a certRequestPermissions
 field.

This structure states the permissions that a certificate holder has
 with respect to issuing and requesting certificates for a particular set
 of PSIDs. For examples, see D.5.3 and D.5.4.

Fields:
* subjectPermissions of type [**SubjectPermissions**](#SubjectPermissions) <br>
  indicates PSIDs and SSP Ranges covered by this
   field.


* minChainLength of type **INTEGER**  DEFAULT 1<br>
  and chainLengthRange indicate how long the
   certificate chain from this certificate to the end-entity certificate is
   permitted to be. As specified in 5.1.2.1, the length of the certificate
   chain is the number of certificates "below" this certificate in the chain,
   down to and including the end-entity certificate. The length is permitted
   to be (a) greater than or equal to minChainLength certificates and (b)
   less than or equal to minChainLength + chainLengthRange certificates. A
   value of 0 for minChainLength is not permitted when this type appears in
   the certIssuePermissions field of a ToBeSignedCertificate; a certificate
   that has a value of 0 for this field is invalid. The value -1 for
   chainLengthRange is a special case: if the value of chainLengthRange is -1
   it indicates that the certificate chain may be any length equal to or
   greater than minChainLength. See the examples below for further discussion.


   
* chainLengthRange of type **INTEGER**  DEFAULT 0<br>
    
* eeType of type [**EndEntityType**](#EndEntityType)  DEFAULT {app}<br>
  takes one or more of the values app and enroll and indicates
   the type of certificates or requests that this instance of
   PsidGroupPermissions in the certificate is entitled to authorize. 
   Different instances of PsidGroupPermissions within a ToBeSignedCertificate
   may have different values for eeType.
     - If this field indicates app, the chain is allowed to end in an 
   authorization certificate, i.e., a certficate in which these permissions 
   appear in an appPermissions field (in other words, if the field does not 
   indicate app and the chain ends in an authorization certificate, the 
   chain shall be considered invalid).
     - If this field indicates enroll, the chain is allowed to end in an 
   enrollment certificate, i.e., a certificate in which these permissions 
   appear in a certReqPermissions permissions field (in other words, if the 
   field does not indicate enroll and the chain ends in an enrollment 
   certificate, the chain shall be considered invalid).
   


    
```asn1
PsidGroupPermissions ::= SEQUENCE {
  subjectPermissions SubjectPermissions,
  minChainLength     INTEGER DEFAULT 1, 
  chainLengthRange   INTEGER DEFAULT 0, 
  eeType             EndEntityType DEFAULT {app}
}
```


### <a name="SequenceOfPsidGroupPermissions"></a>SequenceOfPsidGroupPermissions
This type is used for clarity of definitions.
```asn1
SequenceOfPsidGroupPermissions ::= SEQUENCE OF PsidGroupPermissions
```

### <a name="SubjectPermissions"></a>SubjectPermissions
This indicates the PSIDs and associated SSPs for which certificate
 issuance or request permissions are granted by a PsidGroupPermissions
 structure. If this takes the value explicit, the enclosing
 PsidGroupPermissions structure grants certificate issuance or request
 permissions for the indicated PSIDs and SSP Ranges. If this takes the
 value all, the enclosing PsidGroupPermissions structure grants certificate
 issuance or request permissions for all PSIDs not indicated by other
 PsidGroupPermissions in the same certIssuePermissions or
 certRequestPermissions field.

Fields:
* explicit of type [**SequenceOfPsidSspRange**](Ieee1609Dot2BaseTypes.md#SequenceOfPsidSspRange) <br>
* all of type **NULL** <br>
   

>>>
NOTE:&emsp;Critical information fields:
   - If present, this is a critical information field as defined in 5.2.6.
 An implementation that does not recognize the indicated CHOICE when
 verifying a signed SPDU shall indicate that the signed SPDU is
 invalidin the sense of 4.2.2.3.2, that is, it is invalid in the sense that
 its validity cannot be established.
   - If present, explicit is a critical information field as defined in
 5.2.6. An implementation that does not support the number of PsidSspRange
 in explicit when verifying a signed SPDU shall indicate that the signed
 SPDU is invalid in the sense of 4.2.2.3.2, that is, it is invalid in the 
 sense that its validity cannot be established. A conformant implementation
 shall support explicit fields containing at least eight entries.
>>>
```asn1
SubjectPermissions ::= CHOICE {
  explicit SequenceOfPsidSspRange,
  all      NULL,
  ...
}
```

### <a name="VerificationKeyIndicator"></a>VerificationKeyIndicator
The contents of this field depend on whether the certificate is an
 implicit or an explicit certificate.

Fields:
* verificationKey of type [**PublicVerificationKey**](Ieee1609Dot2BaseTypes.md#PublicVerificationKey) <br>
  is included in explicit certificates. It contains
   the public key to be used to verify signatures generated by the holder of
   the Certificate.


* reconstructionValue of type [**EccP256CurvePoint**](Ieee1609Dot2BaseTypes.md#EccP256CurvePoint) <br>
  is included in implicit certificates. It
   contains the reconstruction value, which is used to recover the public key
   as specified in SEC 4 and 5.3.2.


   

>>>
NOTE:&emsp;Canonicalization: This data structure is subject to canonicalization 
 for the relevant operations specified in 6.1.2. The canonicalization 
 applies to the PublicVerificationKey and to the EccP256CurvePoint. The 
 EccP256CurvePoint is encoded in compressed form, i.e., such that the 
 choice indicated within the EccP256CurvePoint is compressed-y-0 or 
 compressed-y-1.
>>>
```asn1
VerificationKeyIndicator ::= CHOICE {
  verificationKey     PublicVerificationKey,
  reconstructionValue EccP256CurvePoint,
  ...
}
```


### <a name="Ieee1609HeaderInfoExtensionId"></a>Ieee1609HeaderInfoExtensionId
This structure uses the parameterized type Extension to define an 
 Ieee1609ContributedHeaderInfoExtension as an open Extension Content field 
 identified by an extension identifier. The extension identifier value is 
 unique to extensions defined by ETSI and need not be unique among all 
 extension identifier values defined by all contributing organizations.

This is an integer used to identify an 
 Ieee1609ContributedHeaderInfoExtension.
```asn1
Ieee1609HeaderInfoExtensionId ::= ExtId
```

```asn1
p2pcd8ByteLearningRequestId Ieee1609HeaderInfoExtensionId ::= 1
```


### <a name="Ieee1609HeaderInfoExtensions"></a>Ieee1609HeaderInfoExtensions
This is the ASN.1 Information Object Class that associates IEEE 
 1609 HeaderInfo contributed extensions with the appropriate 
 Ieee1609HeaderInfoExtensionId value.
```asn1
Ieee1609HeaderInfoExtensions EXT-TYPE ::= {
  {HashedId8 IDENTIFIED BY p2pcd8ByteLearningRequestId},
  ...
}
```


### <a name="SequenceOfAppExtensions"></a>SequenceOfAppExtensions
This structure contains any AppExtensions that apply to the 
 certificate holder. As specified in 5.2.4.2.3, each individual 
 AppExtension type is associated with consistency conditions, specific to 
 that extension, that govern its consistency with SPDUs signed by the 
 certificate holder and with the CertIssueExtensions in the CA certificates 
 in that certificate holder’s chain. Those consistency conditions are 
 specified for each individual AppExtension below.
```asn1
SequenceOfAppExtensions ::= SEQUENCE (SIZE(1..MAX)) OF AppExtension
```

### <a name="AppExtension"></a>AppExtension
This structure contains an individual AppExtension. AppExtensions 
 specified in this standard are drawn from the ASN.1 Information Object Set 
 SetCertExtensions. This set, and its use in the AppExtension type, is 
 structured so that each AppExtension is associated with a 
 CertIssueExtension and a CertRequestExtension and all are identified by 
 the same id value. In this structure:

Fields:
* id of type [**CERT-EXT-TYPE**](Ieee1609Dot2BaseTypes.md#CERT-EXT-TYPE) .&id({SetCertExtensions})<br>
  identifies the extension type.


* content of type [**CERT-EXT-TYPE**](Ieee1609Dot2BaseTypes.md#CERT-EXT-TYPE) .&App({SetCertExtensions}{@.id})<br>
  provides the content of the extension.
   


   
```asn1
AppExtension ::= SEQUENCE {
  id      CERT-EXT-TYPE.&id({SetCertExtensions}),
  content CERT-EXT-TYPE.&App({SetCertExtensions}{@.id})
}
```


### <a name="SequenceOfCertIssueExtensions"></a>SequenceOfCertIssueExtensions
This field contains any CertIssueExtensions that apply to the 
 certificate holder. As specified in 5.2.4.2.3, each individual 
 CertIssueExtension type is associated with consistency conditions, 
 specific to that extension, that govern its consistency with 
 AppExtensions in certificates issued by the certificate holder and with 
 the CertIssueExtensions in the CA certificates in that certificate 
 holder’s chain. Those consistency conditions are specified for each 
 individual CertIssueExtension below.
```asn1
SequenceOfCertIssueExtensions ::= 
  SEQUENCE (SIZE(1..MAX)) OF CertIssueExtension
```

### <a name="CertIssueExtension"></a>CertIssueExtension
This field contains an individual CertIssueExtension. 
 CertIssueExtensions specified in this standard are drawn from the ASN.1 
 Information Object Set SetCertExtensions. This set, and its use in the 
 CertIssueExtension type, is structured so that each CertIssueExtension 
 is associated with a AppExtension and a CertRequestExtension and all are 
 identified by the same id value. In this structure:

Fields:
* id of type [**CERT-EXT-TYPE**](Ieee1609Dot2BaseTypes.md#CERT-EXT-TYPE) .&id({SetCertExtensions})<br>
  identifies the extension type.


* permissions of type [**CHOICE**](#CHOICE)  {
    specific  CERT-EXT-TYPE.&Issue({SetCertExtensions}{@.id})<br>
  indicates the permissions. Within this field.
     - all indicates that the certificate is entitled to issue all values of
   the extension.
     - specific is used to specify which values of the extension may be 
   issued in the case where all does not apply.
   


   
* all of type **NULL** <br>
   
```asn1
CertIssueExtension ::= SEQUENCE {
  id          CERT-EXT-TYPE.&id({SetCertExtensions}),
  permissions CHOICE {
    specific  CERT-EXT-TYPE.&Issue({SetCertExtensions}{@.id}),
    all       NULL
  }
}
```


### <a name="SequenceOfCertRequestExtensions"></a>SequenceOfCertRequestExtensions
This field contains any CertRequestExtensions that apply to the 
 certificate holder. As specified in 5.2.4.2.3, each individual 
 CertRequestExtension type is associated with consistency conditions, 
 specific to that extension, that govern its consistency with 
 AppExtensions in certificates issued by the certificate holder and with 
 the CertRequestExtensions in the CA certificates in that certificate 
 holder’s chain. Those consistency conditions are specified for each 
 individual CertRequestExtension below.
```asn1
SequenceOfCertRequestExtensions ::= SEQUENCE (SIZE(1..MAX)) OF CertRequestExtension
```

### <a name="CertRequestExtension"></a>CertRequestExtension
This field contains an individual CertRequestExtension. 
 CertRequestExtensions specified in this standard are drawn from the 
 ASN.1 Information Object Set SetCertExtensions. This set, and its use in 
 the CertRequestExtension type, is structured so that each 
 CertRequestExtension is associated with a AppExtension and a 
 CertRequestExtension and all are identified by the same id value. In this 
 structure:

Fields:
* id of type [**CERT-EXT-TYPE**](Ieee1609Dot2BaseTypes.md#CERT-EXT-TYPE) .&id({SetCertExtensions})<br>
  identifies the extension type.


* permissions of type [**CHOICE**](#CHOICE)  {
    content   CERT-EXT-TYPE.&Req({SetCertExtensions}{@.id})<br>
  indicates the permissions. Within this field.
     - all indicates that the certificate is entitled to issue all values of
   the extension.
     - specific is used to specify which values of the extension may be 
   issued in the case where all does not apply.
   


   
* all of type **NULL** <br>
   
```asn1
CertRequestExtension ::= SEQUENCE {
  id      CERT-EXT-TYPE.&id({SetCertExtensions}),
  permissions CHOICE {
    content   CERT-EXT-TYPE.&Req({SetCertExtensions}{@.id}),
    all       NULL
  }
}
```


### <a name="OperatingOrganizationId"></a>OperatingOrganizationId
This type is the AppExtension used to identify an operating 
 organization. The associated CertIssueExtension and CertRequestExtension 
 are both of type OperatingOrganizationId.
 To determine consistency between this type and an SPDU, the SDEE 
 specification for that SPDU is required to specify how the SPDU can be 
 used to determine an OBJECT IDENTIFIER (for example, by including the 
 full OBJECT IDENTIFIER in the SPDU, or by including a RELATIVE-OID with 
 clear instructions about how a full OBJECT IDENTIFIER can be obtained from
 the RELATIVE-OID). The SPDU is then consistent with this type if the 
 OBJECT IDENTIFIER determined from the SPDU is identical to the OBJECT 
 IDENTIFIER contained in this field.
 This AppExtension does not have consistency conditions with a 
 corresponding CertIssueExtension. It can appear in a certificate issued 
 by any CA.
```asn1
OperatingOrganizationId ::= OBJECT IDENTIFIER
```

```asn1
certExtId-OperatingOrganization ExtId ::= 1
```

```asn1
instanceOperatingOrganizationCertExtensions CERT-EXT-TYPE ::= {
  ID      certExtId-OperatingOrganization 
  APP     OperatingOrganizationId
  ISSUE   NULL
  REQUEST NULL
}
```


### <a name="SetCertExtensions"></a>SetCertExtensions
This Information Object Set is a collection of Information Objects 
 used to contain the AppExtension, CertIssueExtension, and 
 CertRequestExtension types associated with a specific use of certificate 
 extensions. In this version of this standard it only has a single entry 
 instanceOperatingOrganizationCertExtensions.
```asn1
SetCertExtensions CERT-EXT-TYPE ::= {
  instanceOperatingOrganizationCertExtensions,
  ...
}
```



This Information Object is an instance of the Information Object 
 Class CERT-EXT-TYPE. It is defined to bind together the AppExtension, 
 CertIssueExtension, and CertRequestExtension types associated with the 
 use of an operating organization identifier, and to assocaute them all 
 with the extension identifier value certExtId-OperatingOrganization.
  This Information Object Set is a collection of Information Objects 
 used to contain the AppExtension, CertIssueExtension, and 
 CertRequestExtension types associated with a specific use of certificate 
 extensions. In this version of this standard it only has a single entry 
 instanceOperatingOrganizationCertExtensions.