idnits 2.17.1 draft-ietf-smime-new-asn1-01.txt: Checking boilerplate required by RFC 5378 and the IETF Trust (see https://trustee.ietf.org/license-info): ---------------------------------------------------------------------------- ** It looks like you're using RFC 3978 boilerplate. You should update this to the boilerplate described in the IETF Trust License Policy document (see https://trustee.ietf.org/license-info), which is required now. -- Found old boilerplate from RFC 3978, Section 5.1 on line 18. -- Found old boilerplate from RFC 3978, Section 5.5, updated by RFC 4748 on line 2602. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 2613. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 2620. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 2626. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- No issues found here. Checking nits according to https://www.ietf.org/id-info/checklist : ---------------------------------------------------------------------------- ** The document seems to lack an IANA Considerations section. (See Section 2.2 of https://www.ietf.org/id-info/checklist for how to handle the case when there are no actions for IANA.) ** The document seems to lack a both a reference to RFC 2119 and the recommended RFC 2119 boilerplate, even if it appears to use RFC 2119 keywords. RFC 2119 keyword, line 183: '... -- Parameters MUST be encoded in st...' RFC 2119 keyword, line 184: '...t, -- Parameters SHOULD be encoded in ...' RFC 2119 keyword, line 185: '..., -- Parameters SHOULD NOT be encoded...' RFC 2119 keyword, line 186: '... -- Parameters MUST NOT be encoded i...' RFC 2119 keyword, line 213: '... &Params OPTIONAL,...' (86 more instances...) -- The draft header indicates that this document updates RFC3370, but the abstract doesn't seem to mention this, which it should. -- The draft header indicates that this document updates RFC3565, but the abstract doesn't seem to mention this, which it should. -- The draft header indicates that this document updates RFC3851, but the abstract doesn't seem to mention this, which it should. -- The draft header indicates that this document updates RFC3852, but the abstract doesn't seem to mention this, which it should. Miscellaneous warnings: ---------------------------------------------------------------------------- == The copyright year in the IETF Trust Copyright Line does not match the current year (Using the creation date from RFC3370, updated by this document, for RFC5378 checks: 2001-04-25) (Using the creation date from RFC3565, updated by this document, for RFC5378 checks: 2000-11-22) -- The document seems to lack a disclaimer for pre-RFC5378 work, but may have content which was first submitted before 10 November 2008. If you have contacted all the original authors and they are all willing to grant the BCP78 rights to the IETF Trust, then this is fine, and you can ignore this comment. If not, you may need to add the pre-RFC5378 disclaimer. (See the Legal Provisions document at https://trustee.ietf.org/license-info for more information.) -- The document date (July 10, 2008) is 5769 days in the past. Is this intentional? Checking references for intended status: Proposed Standard ---------------------------------------------------------------------------- (See RFCs 3967 and 4897 for information about using normative references to lower-maturity documents in RFCs) -- Looks like a reference, but probably isn't: '0' on line 2322 -- Looks like a reference, but probably isn't: '1' on line 2323 -- Looks like a reference, but probably isn't: '2' on line 2324 == Missing Reference: 'CMSALG' is mentioned on line 956, but not defined == Missing Reference: 'CMS' is mentioned on line 2457, but not defined -- Looks like a reference, but probably isn't: '3' on line 2325 -- Looks like a reference, but probably isn't: '4' on line 2326 == Missing Reference: 'PROFILE' is mentioned on line 2288, but not defined == Missing Reference: 'ACPROF' is mentioned on line 2291, but not defined == Missing Reference: 'MSG' is mentioned on line 2424, but not defined == Unused Reference: 'ETH' is defined on line 2499, but no explicit reference was found in the text -- Possible downref: Non-RFC (?) normative reference: ref. 'ASN1-2002' -- Possible downref: Non-RFC (?) normative reference: ref. 'ETH' ** Downref: Normative reference to an Informational draft: draft-ietf-pkix-new-asn1 (ref. 'NEW-PKIX') ** Obsolete normative reference: RFC 3851 (Obsoleted by RFC 5751) ** Obsolete normative reference: RFC 3852 (Obsoleted by RFC 5652) Summary: 6 errors (**), 0 flaws (~~), 7 warnings (==), 18 comments (--). Run idnits with the --verbose option for more detailed information about the items above. -------------------------------------------------------------------------------- 2 Network Working Group P. Hoffman 3 Internet-Draft VPN Consortium 4 Updates: 3370, 3565, 3851, 3852, J. Schaad 5 4108, 4998, 5035, 5083, 5084 Soaring Hawk Consulting 6 (if approved) July 10, 2008 7 Intended status: Standards Track 8 Expires: January 11, 2009 10 New ASN.1 Modules for CMS and S/MIME 11 draft-ietf-smime-new-asn1-01.txt 13 Status of this Memo 15 By submitting this Internet-Draft, each author represents that any 16 applicable patent or other IPR claims of which he or she is aware 17 have been or will be disclosed, and any of which he or she becomes 18 aware will be disclosed, in accordance with Section 6 of BCP 79. 20 Internet-Drafts are working documents of the Internet Engineering 21 Task Force (IETF), its areas, and its working groups. Note that 22 other groups may also distribute working documents as Internet- 23 Drafts. 25 Internet-Drafts are draft documents valid for a maximum of six months 26 and may be updated, replaced, or obsoleted by other documents at any 27 time. It is inappropriate to use Internet-Drafts as reference 28 material or to cite them other than as "work in progress." 30 The list of current Internet-Drafts can be accessed at 31 http://www.ietf.org/ietf/1id-abstracts.txt. 33 The list of Internet-Draft Shadow Directories can be accessed at 34 http://www.ietf.org/shadow.html. 36 This Internet-Draft will expire on January 11, 2009. 38 Copyright Notice 40 Copyright (C) The IETF Trust (2008). 42 Abstract 44 The Cryptographic Message Syntax (CMS) format, and many associated 45 formats, are expressed using ASN.1. The current ASN.1 modules 46 conform to the 1988 version of ASN.1. This document updates those 47 ASN.1 modules to conform to the 2002 version of ASN.1. There are no 48 bits-on-the-wire changes to any of the formats; this is simply a 49 change to the syntax. 51 Table of Contents 53 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 54 1.1. Issues . . . . . . . . . . . . . . . . . . . . . . . . . . 4 55 1.1.1. More Modules To Be Added . . . . . . . . . . . . . . . 4 56 1.1.2. Algorithm Structure . . . . . . . . . . . . . . . . . 4 57 1.1.3. Module OIDs Changing . . . . . . . . . . . . . . . . . 4 58 2. ASN.1 Module AlgorithmInformation . . . . . . . . . . . . . . 4 59 3. ASN.1 Module for RFC 3370 . . . . . . . . . . . . . . . . . . 12 60 4. ASN.1 Module for RFC 3565 . . . . . . . . . . . . . . . . . . 19 61 5. ASN.1 Module for RFC 3851 . . . . . . . . . . . . . . . . . . 19 62 6. ASN.1 Module for RFC 3852 . . . . . . . . . . . . . . . . . . 22 63 7. ASN.1 Module for RFC 4108 . . . . . . . . . . . . . . . . . . 32 64 8. ASN.1 Module for RFC 4998 . . . . . . . . . . . . . . . . . . 37 65 9. ASN.1 Module for RFC 5035 . . . . . . . . . . . . . . . . . . 39 66 10. ASN.1 Module for RFC 5083 . . . . . . . . . . . . . . . . . . 45 67 11. ASN.1 Module for RFC 5084 . . . . . . . . . . . . . . . . . . 46 68 12. ASN.1 Module for RFC 5275 . . . . . . . . . . . . . . . . . . 46 69 13. Security Considerations . . . . . . . . . . . . . . . . . . . 53 70 14. Normative References . . . . . . . . . . . . . . . . . . . . . 53 71 Appendix A. Change History . . . . . . . . . . . . . . . . . . . 54 72 A.1. Changes between draft-hoffman-cms-new-asn1-00 and 73 draft-ietf-smime-new-asn1-00 . . . . . . . . . . . . . . . 55 74 A.2. Changes between draft-ietf-smime-new-asn1-00 and -01 . . . 55 75 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 55 76 Intellectual Property and Copyright Statements . . . . . . . . . . 56 78 1. Introduction 80 Some developers would like the IETF to use the latest version of 81 ASN.1 in its standards. Most of the RFCs that relate to security 82 protocols still use ASN.1 from the 1988 standard, which has been 83 deprecated. This is particularly true for the standards that relate 84 to PKIX, CMS, and S/MIME. 86 This document updates the following RFCs to use ASN.1 modules that 87 conform to the 2002 version of ASN.1 [ASN1-2002]. Note that not all 88 the modules are updated; some are included to simply make the set 89 complete. 91 o RFC 3370, CMS Algorithms [RFC3370] 93 o RFC 3565, Use of AES in CMS [RFC3565] 95 o RFC 3851, S/MIME Version 3.1 Message Specification [RFC3851] 97 o RFC 3852, CMS main [RFC3852] 99 o RFC 4108, Using CMS to Protect Firmware Packages [RFC4108] 101 o RFC 4998, Evidence Record Syntax (ERS) [RFC4998] 103 o RFC 5035, Enhanced Security Services (ESS) [RFC5035] 105 o RFC 5083, CMS Authenticated-Enveloped-Data Content Type [RFC5083] 107 o RFC 5084, Using AES-CCM and AES-GCM Authenticated Encryption in 108 CMS [RFC5084] 110 o RFC 5275, CMS Symmetric Key Management and Distribution [RFC5275] 112 Note that some of the modules in this document get some of their 113 definitions from places different than the modules in the original 114 RFCs. The idea is that these modules, when combined with the modules 115 in [NEW-PKIX] can stand on their own and do not need to import 116 definitions from anywhere else. 118 The document also includes a module of common defintions called 119 "AlgorithmInformation". These definitions are used here and in 120 [NEW-PKIX]. 122 Note that some of the modules here import definitions from the common 123 definitions module, "PKIX-CommonTypes", in [NEW-PKIX]. 125 1.1. Issues 127 This section will be removed before final publication. 129 1.1.1. More Modules To Be Added 131 There are many modules from standards-track RFCs that are not listed 132 in this document or the companion document on PKIX. We will discuss 133 with the two communities which modules are appropriate for the two 134 documents. We will also consider making "super-modules", individual 135 modules which might update multiple RFCs at one time. We may also 136 add objects to some of the modules. 138 1.1.2. Algorithm Structure 140 Algorithms are currently not defined here. We need to discuss what 141 structure we want for algorithm objects. Currently, we just do 142 "parameter, OID", but we could add more. Because we don't know what 143 the final structure is, the object sets in the various modules are 144 commented out. We will fix this before finishing this project. 146 1.1.3. Module OIDs Changing 148 The OIDs given in the modules in this version of the document are the 149 same as the OIDs from the original modules, even though some of the 150 modules have changed syntax. That is clearly incorrect. In a later 151 version of this document, we will change the OIDs for every changed 152 module. 154 2. ASN.1 Module AlgorithmInformation 156 This section contains a module that is imported by many other modules 157 in this document and in [NEW-PKIX]. This module does not come from 158 any existing RFC. 160 AlgorithmInformation 161 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 162 mechanisms(5) pkix(7) id-mod(0) id-mod-algorithInformation(99)} 164 DEFINITIONS ::= 165 BEGIN 167 EXPORTS ALL; 168 IMPORTS ; 170 -- Suggested prefixes for algorithm objects are: 171 -- 172 -- mda- Message Digest Algorithms 173 -- sa- Signature Algorithms 174 -- kta- Key Transport Algorithms (Asymetric) 175 -- kaa- Key Agreement Algorithms (Asymetric) 176 -- kwa- Key Wrap Algorithms (Symetric) 177 -- kda- Key Derivation Algorithms 178 -- maca- Message Authentication Code Algorithms 179 -- pk- Public Key 180 -- sea- Symmetric Encryption Algorithm 182 ParamOptions ::= ENUMERATED { 183 required, -- Parameters MUST be encoded in structure 184 preferedPresent, -- Parameters SHOULD be encoded in structure 185 preferedAbsent, -- Parameters SHOULD NOT be encoded in structure 186 absent, -- Parameters MUST NOT be encoded in structure 187 notPresent, 188 inheritable -- Parameters are inheritied if not present 189 } 191 -- DIGEST-ALGORITHM 192 -- 193 -- Describes the basic information for ASN.1 and a digest 194 -- algorithm. 195 -- 196 -- &id - contains the OID identifying the digest algorithm 197 -- &Params - contains the type for the algoithm parameters, 198 -- if present; absent implies no paameters 199 -- ¶mPresence - parameter presence requirement 200 -- 201 -- Additional information such as the length of the hash could also 202 -- be encoded. 203 -- 204 -- Example: 205 -- sha1 DIGEST-ALGORITHM ::= { 206 -- IDENTIFIER id-sha1 207 -- PARAM NULL 208 -- PARMS ARE preferedAbsent 209 -- } 211 DIGEST-ALGORITHM ::= CLASS { 212 &id OBJECT IDENTIFIER, 213 &Params OPTIONAL, 214 ¶mPresence ParamOptions DEFAULT required 215 } WITH SYNTAX { 216 IDENTIFIER &id 217 [PARAMS [&Params] [ARE ¶mPresence] ] 218 } 219 -- SIGNATURE-ALGORITHM 220 -- 221 -- Describes the basic properities of a signature algorithm 222 -- 223 -- &id - contains the OID identifying the signature algoithm 224 -- &Params - contains the type for the algoithm parameters, 225 -- if present; absent implies no paameters 226 -- ¶mPresence - parameter presence requirement 227 -- &HashSet - The set of hash algorithms used with this 228 -- signature algoirthm 229 -- &PublicKeySet - the set of public key algorithms for this 230 -- signature algorithm 231 -- Example: 232 -- sig-RSA-PSS SIGNATURE-ALGORITHM ::= { 233 -- IDENTIFIER id-RSASSA-PSS 234 -- PARAMS RSASSA-PSS-params 235 -- ARE required 236 -- HASH SET {sha1 | md5, ... } 237 -- PUBLIC KEY SET { pk-rsa | pk-rsa-pss } 238 -- } 240 SIGNATURE-ALGORITHM ::= CLASS { 241 &id OBJECT IDENTIFIER, 242 &Params OPTIONAL, 243 &Value OPTIONAL, 244 ¶mPresence ParamOptions DEFAULT required, 245 &HashSet DIGEST-ALGORITHM OPTIONAL, 246 &PublicKeySet PUBLIC-KEY OPTIONAL 247 } WITH SYNTAX { 248 IDENTIFIER &id 249 [VALUE &Value] 250 [PARAMS [&Params] ARE ¶mPresence ] 251 [USES &HashSet] 252 [PUBKEYS &PublicKeySet] 253 } 255 -- PUBLIC-KEY 256 -- 257 -- Describes the basic properities of a public key 258 -- 259 -- &id - contains the OID identifying the public key 260 -- &Params - contains the type for the algoithm parameters, 261 -- if present; absent implies no paameters 262 -- ¶mPresence - parameter presence requirement 263 -- &KeyValue - contains the type for the key value 264 -- 265 -- Could add information about the keyUsage bits 266 -- 267 -- Example: 268 -- pk-rsa-pss PUBLIC-KEY ::= { 269 -- IDENTIFIER id-RSASSA-PSS 270 -- KEY RSAPublicKey 271 -- HAS PARAMS RSASSA-PSS-params 272 -- PARAMS ARE optional 273 -- } 275 PUBLIC-KEY ::= CLASS { 276 &id OBJECT IDENTIFIER, 277 &Params OPTIONAL, 278 ¶mPresence ParamOptions DEFAULT required, 279 &KeyValue, 280 &PrivateKey OPTIONAL 281 } WITH SYNTAX { 282 IDENTIFIER &id 283 KEY &KeyValue 284 [PARAMS [&Params] ARE ¶mPresence] 285 [PRIVATE KEY &PrivateKey] 286 } 288 -- KEY-TRANSPORT 289 -- 290 -- Describes the basic properities of a key transport algorithm 291 -- 292 -- &id - contains the OID identifying the key transport algorithm 293 -- &Params - contains the type for the algoithm parameters, 294 -- if present; absent implies no paameters 295 -- ¶mPresence - parameter presence requirement 296 -- &PublicKeySet - specify which public keys are used with 297 -- this algorithm 298 -- 299 -- Example: 300 -- rsaTransport KEY-TRANSPORT ::= { 301 -- &id rsaEncryption 302 -- &Params NULL 303 -- ¶mPresence required 304 -- &PublicKeySet { pk-rsa | pk-rsa-pss } 305 -- } 307 KEY-TRANSPORT ::= CLASS { 308 &id OBJECT IDENTIFIER UNIQUE, 309 &Params, 310 ¶mPresnce ParamOptions, 311 &PublicKeySet PUBLIC-KEY OPTIONAL 312 } 314 -- KEY-AGREE 315 -- 316 -- Describes the basic properities of a key agreement algorithm 317 -- 318 -- &id - contains the OID identifying the key transport algorithm 319 -- &Params - contains the type for the algoithm parameters, 320 -- if present; absent implies no paameters 321 -- ¶mPresence - parameter presence requirement 322 -- &Ukm - type of user keying material used 323 -- &PublicKeySet - specify which public keys are used with 324 -- this algorithm 325 -- 326 -- Additional items could be a restricted set of key wrap algoithms 327 -- 328 -- Example: 329 -- dh-static-ephemerial KEY-TRANSPORT ::= { 330 -- &id id-alg-ESDH 331 -- &Params KeyWrapAlgorithm 332 -- ¶mPresence required 333 -- - - user key material is not ASN.1 encoded. 334 -- &PublicKeySet { 335 -- {IDENTIFIER dh-public-number KEY DHPublicKey 336 -- HASH PARAMS DHDomainParamters PARAMS ARE inheritable } 337 -- } 338 -- } 340 KEY-AGREE ::= CLASS { 341 &id OBJECT IDENTIFIER UNIQUE, 342 &Params OPTIONAL, 343 ¶mPresence ParamOptions DEFAULT required, 344 &Ukm OPTIONAL, 345 &PublicKeySet PUBLIC-KEY OPTIONAL 346 } WITH SYNTAX { 347 IDENTIFIER &id 348 [PARAMS [&Params] ARE ¶mPresence] 349 [PUBLIC KEY &PublicKeySet] 350 [UKM &Ukm] 351 } 353 -- KEY-WRAP 354 -- 355 -- Describes the basic properities of a key wrap algorithm 356 -- 357 -- &id - contains the OID identifying the key transport algorithm 358 -- &Params - contains the type for the algoithm parameters, 359 -- if present; absent implies no paameters 360 -- ¶mPresence - parameter presence requirement 361 -- 362 -- Example: 364 -- cms3DESwrap KEY-WRAP ::= { 365 -- &id id-alg-CMS3DESwrap 366 -- &Params NULL 367 -- ¶mPresence required 368 -- } 370 KEY-WRAP ::= CLASS { 371 &id OBJECT IDENTIFIER UNIQUE, 372 &Params OPTIONAL, 373 ¶mPresence ParamOptions DEFAULT required 374 } WITH SYNTAX { 375 IDENTIFIER &id 376 [PARAMS [&Params] ARE ¶mPresence] 377 } 379 -- KEY-DERIVATION 380 -- 381 -- Describes the basic properities of a key transport algorithm 382 -- 383 -- &id - contains the OID identifying the key transport algorithm 384 -- &Params - contains the type for the algoithm parameters, 385 -- if present; absent implies no paameters 386 -- ¶mPresence - parameter presence requirement 387 -- 388 -- Could add information about defaults for the derivation algorithm 389 -- such as PRFs 390 -- 391 -- Example: 392 -- pbkdf2 KEY-DERIVATION ::= { 393 -- &id id-PBKF2 394 -- &Params PBKDF2-params 395 -- ¶mPresence required 396 -- } 398 KEY-DERIVATION ::= CLASS { 399 &id OBJECT IDENTIFIER UNIQUE, 400 &Params OPTIONAL, 401 ¶mPresence ParamOptions DEFAULT required 402 } WITH SYNTAX { 403 IDENTIFIER &id 404 PARAMS [&Params] ARE ¶mPresence 405 } 407 -- BULK-ENCRYPTION 408 -- 409 -- Describes the basic properities of a bulk encryption algorithm 410 -- 411 -- &id - contains the OID identifying the key transport algorithm 412 -- &Params - contains the type for the algoithm parameters, 413 -- if present; absent implies no paameters 414 -- ¶mPresence - parameter presence requirement 415 -- 416 -- Example: 417 -- aes128 BULK-ENCRYPTION ::= { 418 -- &id id-aes128-CBC 419 -- &Params AES-IV 420 -- ¶mPresence required 421 -- } 423 BULK-ENCRYPTION ::= CLASS { 424 &id OBJECT IDENTIFIER UNIQUE, 425 &Params, 426 ¶mPresence ParamOptions DEFAULT required 427 } WITH SYNTAX { 428 OID &id 429 PARAMS &Params [ARE ¶mPresence] 430 } 432 -- MAC-ALGORITHM 433 -- 434 -- Describes the basic properities of a key transport algorithm 435 -- 436 -- &id - contains the OID identifying the key transport algorithm 437 -- &Params - contains the type for the algoithm parameters, 438 -- if present; absent implies no paameters 439 -- ¶mPresence - parameter presence requirement 440 -- 441 -- It would make sense to also add minimum and maximum MAC lengths 442 -- 443 -- Example: 444 -- hmac-sha1 MAC-ALGORITHM ::= { 445 -- &id hMAC-SHA1 446 -- &Params NULL 447 -- ¶mPresence perferedAbsent 448 -- } 450 MAC-ALGORITHM ::= CLASS { 451 &id OBJECT IDENTIFIER UNIQUE, 452 &Params OPTIONAL, 453 ¶mPresence ParamOptions DEFAULT required 454 } WITH SYNTAX { 455 OID &id 456 [PARAMS [&Params] [ARE ¶mPresence]] 457 } 459 -- CONTENT-ENCRYPTION 460 -- 461 -- Describes the basic properities of a symetric encryption 462 -- algorithm 463 -- 464 -- &id - contains the OID identifying the key transport algorithm 465 -- &Params - contains the type for the algoithm parameters, 466 -- if present; absent implies no paameters 467 -- ¶mPresence - parameter presence requirement 468 -- 469 -- Example: 470 -- cms3DESwrap KEY-WRAP ::= { 471 -- &id id-alg-CMS3DESwrap 472 -- &Params NULL 473 -- ¶mPresence required 474 -- } 476 CONTENT-ENCRYPTION ::= CLASS { 477 &id OBJECT IDENTIFIER UNIQUE, 478 &Params OPTIONAL, 479 ¶mPresence ParamOptions DEFAULT required 480 } WITH SYNTAX { 481 IDENTIFIER &id 482 [PARAMS [&Params] ARE ¶mPresence] 483 } 485 AlgorithmIdentifier{ALGORITHM-TYPE, ALGORITHM-TYPE:AlgorithmSet} ::= 486 SEQUENCE { 487 algorithm ALGORITHM-TYPE.&id({AlgorithmSet}), 488 parameters ALGORITHM-TYPE. 489 &Params({AlgorithmSet}{@algorithm}) OPTIONAL 490 } 492 -- ALGORITHM 493 -- 494 -- Describes a generic algorithm identifier 495 -- 496 -- &id - contains the OID identifying the key transport algorithm 497 -- &Params - contains the type for the algoithm parameters, 498 -- if present; absent implies no paameters 499 -- 500 -- This would be used for cases where an unknown algorithm is 501 -- used. One should consider using TYPE-IDENTIFIER in these cases. 503 ALGORITHM ::= CLASS { 504 &id OBJECT IDENTIFIER UNIQUE, 505 &Params OPTIONAL 506 } WITH SYNTAX { 507 IDENTIFIER &id [PARAMS &Params] 509 } 511 END 513 3. ASN.1 Module for RFC 3370 515 CryptographicMessageSyntaxAlgorithms 516 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 517 smime(16) modules(0) cmsalg-2001(16) } 518 DEFINITIONS IMPLICIT TAGS ::= 519 BEGIN 521 IMPORTS 523 ParamOptions, DIGEST-ALGORITHM, SIGNATURE-ALGORITHM, 524 PUBLIC-KEY, KEY-DERIVATION, KEY-WRAP, MAC-ALGORITHM, 525 KEY-AGREE, KEY-TRANSPORT, CONTENT-ENCRYPTION, ALGORITHM, 526 AlgorithmIdentifier 527 FROM AlgorithmInformation 528 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 529 mechanisms(5) pkix(7) id-mod(0) id-mod-algorithInformation(99)} 531 --FROM PKIX-CommonTypes 532 -- {iso(1) identified-organization(3) dod(6) internet(1) 533 -- security(5) mechanisms(5) pkix(7) id-mod(0) 534 -- id-mod-pkixCommon(43) } 535 ; 537 -- 538 -- Create the object sets for each of the different type of signature 539 -- algorithms defined by this module. 540 -- 541 -- Philosophy: Sean Turner raised the question about wheither theses 542 -- object sets should be defined as being extensible. My response is 543 -- as follows: 544 -- 545 -- If the working group believes that this document would be updated 546 -- in the future for the definition of new algorithms, or that 547 -- this document would be updated to reference (and thus include) 548 -- new algorithms defined in other documents, then these object 549 -- sets need to be marked as extensible. 550 -- If the working group believes that new algorithms will be defined 551 -- by the creation of new documents, then these object sets do not 552 -- need to be extensible. 553 -- In either case, documents that are referencing these objects sets 554 -- should probably be marked as being extensible in the location 555 -- they are being used. Thus in the main PKIX document you would 556 -- have 557 -- 558 -- SIGNED{ToBeSigned} ::= SEQUENCE { 559 -- toBeSigned ToBeSigned, 560 -- algorithm AlgorithmIdentifier 561 -- {SIGNATURE-ALGORITHM, {Sa-PKIXAlgorithms, ...}}, 562 -- signature BIT STRING 563 -- } 564 -- 565 -- Future versions might include additional algorithm drafts and 566 -- use the line 567 -- algorithm AlgorithmIdentifier 568 -- {SIGNATURE-ALGORITHM, 569 -- {Sa-PKIXAlgorithms, ..., Sa-NewPKIXAlgorithms}}, 570 -- 572 -- Signature algorithms in this document 574 Sa-CMSAlgorithms SIGNATURE-ALGORITHM ::= { 575 sa-dsa-with-sha1 | 576 sa-md5WithRSAEncryption | 577 sa-sha1WithRSAEncryption } 579 -- Hash algorthms in this document 581 Mda-CMSAlgorithms DIGEST-ALGORITHM ::= { mda-md5 | 582 mda-sha1 } 584 -- Public Key Algorithms in this document 586 Pk-CMSAlgorithms PUBLIC-KEY ::= { pk-dsa | pk-rsa | pk-dh } 588 -- 590 Kta-CMSAlgorithms KEY-TRANSPORT ::= {...} 592 -- Key Agreement Algorithms 594 Kaa-CMSAlgorithms KEY-AGREE ::= {kaa-esdh | kaa-ssdh} 596 -- Key Wrap Algorithms 598 Kwa-CMSAlgorithms KEY-WRAP ::= { ... } 600 -- Message Authenticaiton Code Algorithms 601 Mac-CMSAlgorithms MAC-ALGORITHM ::= {...} 603 -- 605 Cea-CMSAlgorithms CONTENT-ENCRYPTION ::= {...} 607 -- Algorithm Identifiers 609 sha-1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 610 oiw(14) secsig(3) algorithm(2) 26 } 612 md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 613 rsadsi(113549) digestAlgorithm(2) 5 } 615 id-dsa OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 616 x9-57(10040) x9cm(4) 1 } 618 id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) 619 us(840) x9-57(10040) x9cm(4) 3 } 621 rsaEncryption OBJECT IDENTIFIER ::= { iso(1) member-body(2) 622 us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 1 } 624 md5WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) 625 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 4 } 627 sha1WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) 628 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 5 } 630 dh-public-number OBJECT IDENTIFIER ::= { iso(1) member-body(2) 631 us(840) ansi-x942(10046) number-type(2) 1 } 633 id-alg-ESDH OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 634 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 5 } 636 id-alg-SSDH OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 637 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 10 } 639 id-alg-CMS3DESwrap OBJECT IDENTIFIER ::= { iso(1) member-body(2) 640 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6 } 642 id-alg-CMSRC2wrap OBJECT IDENTIFIER ::= { iso(1) member-body(2) 643 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 7 } 645 des-ede3-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) 646 us(840) rsadsi(113549) encryptionAlgorithm(3) 7 } 648 rc2-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 649 rsadsi(113549) encryptionAlgorithm(3) 2 } 651 hMAC-SHA1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 652 dod(6) internet(1) security(5) mechanisms(5) 8 1 2 } 654 id-PBKDF2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 655 rsadsi(113549) pkcs(1) pkcs-5(5) 12 } 657 -- Public Key Types 659 Dss-Pub-Key ::= INTEGER -- Y 661 RSAPublicKey ::= SEQUENCE { 662 modulus INTEGER, -- n 663 publicExponent INTEGER } -- e 665 DHPublicKey ::= INTEGER -- y = g^x mod p 667 -- Signature Value Types 669 Dss-Sig-Value ::= SEQUENCE { 670 r INTEGER, 671 s INTEGER } 673 -- Algorithm Identifier Parameter Types 675 Dss-Parms ::= SEQUENCE { 676 p INTEGER, 677 q INTEGER, 678 g INTEGER } 680 DHDomainParameters ::= SEQUENCE { 681 p INTEGER, -- odd prime, p=jq +1 682 g INTEGER, -- generator, g 683 q INTEGER, -- factor of p-1 684 j INTEGER OPTIONAL, -- subgroup factor 685 validationParms ValidationParms OPTIONAL } 687 ValidationParms ::= SEQUENCE { 688 seed BIT STRING, 689 pgenCounter INTEGER } 691 KeyWrapAlgorithm ::= 692 AlgorithmIdentifier {KEY-WRAP, {Kwa-CMSAlgorithms }} 694 RC2wrapParameter ::= RC2ParameterVersion 695 RC2ParameterVersion ::= INTEGER 697 CBCParameter ::= IV 699 IV ::= OCTET STRING -- exactly 8 octets 701 RC2CBCParameter ::= SEQUENCE { 702 rc2ParameterVersion INTEGER (1..256), 703 iv OCTET STRING } -- exactly 8 octets 705 maca-hMAC-SHA1 MAC-ALGORITHM ::= { 706 OID hMAC-SHA1 707 PARAMS NULL ARE required 708 } 710 -- Another way to do the following would be: 711 -- alg-hMAC-SHA1 AlgorithmIdentifier{{PBKDF2-PRFs}} ::= 712 -- { algorithm hMAC-SHA1, parameters NULL:NULL } 714 PBKDF2-PRFsAlgorithmIdentifier ::= AlgorithmIdentifier{ ALGORITHM, 715 {PBKDF2-PRFs} } 717 alg-hMAC-SHA1 -- PBKDF2-PRFsAlgorithmIdentifier ::= 718 ALGORITHM ::= 719 { IDENTIFIER hMAC-SHA1 PARAMS NULL } 721 PBKDF2-SaltSources ALGORITHM ::= { ... } 723 PBKDF2-PRFs ALGORITHM ::= { alg-hMAC-SHA1, ... } 725 PBKDF2-SaltSourcesAlgorithmIdentifier ::= 726 AlgorithmIdentifier {ALGORITHM, {PBKDF2-SaltSources}} 728 defaultPBKDF2 PBKDF2-PRFsAlgorithmIdentifier ::= 729 { algorithm alg-hMAC-SHA1.&id, parameters NULL:NULL } 731 PBKDF2-params ::= SEQUENCE { 732 salt CHOICE { 733 specified OCTET STRING, 734 otherSource PBKDF2-SaltSourcesAlgorithmIdentifier }, 735 iterationCount INTEGER (1..MAX), 736 keyLength INTEGER (1..MAX) OPTIONAL, 737 prf PBKDF2-PRFsAlgorithmIdentifier DEFAULT 738 defaultPBKDF2 739 } 741 mda-sha1 DIGEST-ALGORITHM ::= { 742 IDENTIFIER sha-1 PARAMS NULL ARE preferedAbsent } 744 mda-md5 DIGEST-ALGORITHM ::= { 745 IDENTIFIER md5 PARAMS NULL ARE preferedAbsent } 747 pk-dsa PUBLIC-KEY ::= { 748 IDENTIFIER id-dsa 749 KEY Dss-Pub-Key 750 PARAMS Dss-Parms ARE inheritable 751 } 753 sa-dsa-with-sha1 SIGNATURE-ALGORITHM ::= { 754 IDENTIFIER id-dsa-with-sha1 755 VALUE Dss-Sig-Value 756 PARAMS Dss-Parms ARE inheritable 757 USES {mda-sha1} 758 PUBKEYS {pk-dsa} 759 } 761 pk-rsa PUBLIC-KEY ::= { 762 IDENTIFIER rsaEncryption 763 KEY RSAPublicKey 764 PARAMS NULL ARE required 765 } 767 sa-rsa SIGNATURE-ALGORITHM ::= { 768 IDENTIFIER rsaEncryption 769 -- value is not ASN.1 encoded 770 PARAMS NULL ARE required 771 USES {mda-sha1 | mda-md5, ...} 772 PUBKEYS { pk-rsa} 773 } 775 sa-sha1WithRSAEncryption SIGNATURE-ALGORITHM ::= { 776 IDENTIFIER sha1WithRSAEncryption 777 -- value is not ASN.1 encoded 778 PARAMS NULL ARE required 779 USES {mda-sha1} 780 PUBKEYS {pk-rsa} 781 } 783 sa-md5WithRSAEncryption SIGNATURE-ALGORITHM ::= { 784 IDENTIFIER md5WithRSAEncryption 785 -- value is not ASN.1 encoded 786 PARAMS NULL ARE required 787 USES {mda-md5} 788 PUBKEYS {pk-rsa} 789 } 791 -- No ASN.1 encoding is applied to the signature value 792 -- for these items 794 pk-dh PUBLIC-KEY ::= { 795 IDENTIFIER dh-public-number 796 KEY DHPublicKey 797 PARAMS DHDomainParameters ARE inheritable 798 } 800 kaa-esdh KEY-AGREE ::= { 801 IDENTIFIER id-alg-ESDH 802 PARAMS KeyWrapAlgorithm ARE required 803 PUBLIC KEY { pk-dh } 804 } 806 kaa-ssdh KEY-AGREE ::= { 807 IDENTIFIER id-alg-SSDH 808 PARAMS KeyWrapAlgorithm ARE required 809 PUBLIC KEY {pk-dh} 810 } 812 KeyTransportAlgorithms ALGORITHM ::= {...} 814 SymmetricKeyEncryptionAlgorthms KEY-WRAP ::= 815 { kwa-3DESWrap | kwa-RC2Wrap } 817 kwa-3DESWrap KEY-WRAP ::= { 818 IDENTIFIER id-alg-CMS3DESwrap PARAMS NULL ARE required 819 } 820 kwa-RC2Wrap KEY-WRAP ::= { 821 IDENTIFIER id-alg-CMSRC2wrap PARAMS RC2wrapParameter ARE required 822 } 824 KeyDerivationAlgorithms KEY-DERIVATION ::= { 825 kda-PBKDF2} 827 kda-PBKDF2 KEY-DERIVATION ::= { 828 IDENTIFIER id-PBKDF2 829 PARAMS PBKDF2-params ARE required 830 } 832 ContentEncryptionAlgorthms ALGORITHM ::= {...} 834 END 836 4. ASN.1 Module for RFC 3565 838 CMSAesRsaesOaep {iso(1) member-body(2) us(840) rsadsi(113549) 839 pkcs(1) pkcs-9(9) smime(16) modules(0) id-mod-cms-aes(19) } 840 DEFINITIONS IMPLICIT TAGS ::= 841 BEGIN 843 -- AES information object identifiers -- 845 aes OBJECT IDENTIFIER ::= 846 { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) 847 csor(3) nistAlgorithms(4) 1 } 849 -- AES using CBC-chaining mode for key sizes of 128, 192, 256 851 id-aes128-CBC OBJECT IDENTIFIER ::= { aes 2 } 852 id-aes192-CBC OBJECT IDENTIFIER ::= { aes 22 } 853 id-aes256-CBC OBJECT IDENTIFIER ::= { aes 42 } 855 -- AES-IV is a the parameter for all the above object identifiers. 857 AES-IV ::= OCTET STRING (SIZE(16)) 859 -- AES Key Wrap Algorithm Identifiers - Parameter is absent 861 id-aes128-wrap OBJECT IDENTIFIER ::= { aes 5 } 862 id-aes192-wrap OBJECT IDENTIFIER ::= { aes 25 } 863 id-aes256-wrap OBJECT IDENTIFIER ::= { aes 45 } 865 END 867 5. ASN.1 Module for RFC 3851 869 SecureMimeMessageV3dot1 870 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 871 smime(16) modules(0) msg-v3dot1(21) } 872 DEFINITIONS IMPLICIT TAGS ::= 873 BEGIN 875 IMPORTS 877 SubjectKeyIdentifier, IssuerAndSerialNumber, RecipientKeyIdentifier, 878 CMS-ATTRIBUTE 879 FROM CryptographicMessageSyntax2004 880 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 881 smime(16) modules(0) cms-2004(24) } 883 rc2-cbc 884 FROM CryptographicMessageSyntaxAlgorithms 885 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 886 smime(16) modules(0) cmsalg-2001(16) }; 888 SMimeAttributeSet CMS-ATTRIBUTE ::= 889 { attr-smimeCapabilities | attr-encrypKeyPref } 891 -- id-aa is the arc with all new authenticated and unauthenticated 892 -- attributes produced the by S/MIME Working Group 894 id-aa OBJECT IDENTIFIER ::= 895 { iso(1) member-body(2) usa(840) rsadsi(113549) pkcs(1) pkcs-9(9) 896 smime(16) attributes(2)} 898 -- S/MIME Capabilities provides a method of broadcasting the symmetric 899 -- capabilities understood. Algorithms SHOULD be ordered by 900 -- preference and grouped by type 902 attr-smimeCapabilities CMS-ATTRIBUTE ::= 903 { TYPE SMIMECapabilities IDENTIFIED BY smimeCapabilities } 905 smimeCapabilities OBJECT IDENTIFIER ::= 906 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 907 15 } 909 SMIME-CAPS ::= CLASS { 910 &Type OPTIONAL, 911 &id OBJECT IDENTIFIER UNIQUE 912 } 913 WITH SYNTAX {TYPE &Type IDENTIFIED BY &id } 915 SMIMECapability ::= SEQUENCE { 916 capabilityID SMIME-CAPS. 917 &id({SMimeCapsSet}), 918 parameters SMIME-CAPS. 919 &Type({SMimeCapsSet}{@capabilityID}) OPTIONAL 920 } 922 SMimeCapsSet SMIME-CAPS ::= 923 { cap-preferBinaryInside | cap-RC2CBC, ... } 925 SMIMECapabilities ::= SEQUENCE OF SMIMECapability 926 -- Encryption Key Preference provides a method of broadcasting the 927 -- preferred encryption certificate. 929 attr-encrypKeyPref CMS-ATTRIBUTE ::= 930 { TYPE SMIMEEncryptionKeyPreference 931 IDENTIFIED BY id-aa-encrypKeyPref } 933 id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} 935 SMIMEEncryptionKeyPreference ::= CHOICE { 936 issuerAndSerialNumber [0] IssuerAndSerialNumber, 937 receipentKeyId [1] RecipientKeyIdentifier, 938 subjectAltKeyIdentifier [2] SubjectKeyIdentifier 939 } 941 id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) 942 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 16 } 944 id-cap OBJECT IDENTIFIER ::= { id-smime 11 } 946 -- The preferBinaryInside indicates an ability to receive messages 947 -- with binary encoding inside the CMS wrapper 949 cap-preferBinaryInside SMIME-CAPS ::= 950 { TYPE NULL IDENTIFIED BY id-cap-preferBinaryInside } 952 id-cap-preferBinaryInside OBJECT IDENTIFIER ::= { id-cap 1 } 954 -- The following list the OIDs to be used with S/MIME V3 956 -- Signature Algorithms Not Found in [CMSALG] 957 -- 958 -- md2WithRSAEncryption OBJECT IDENTIFIER ::= 959 -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 960 -- 2} 961 -- 962 -- Other Signed Attributes 963 -- 964 -- signingTime OBJECT IDENTIFIER ::= 965 -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 966 -- 5} 967 -- See [CMS] for a description of how to encode the attribute 968 -- value. 970 cap-RC2CBC SMIME-CAPS ::= 971 { TYPE SMIMECapabilitiesParametersForRC2CBC 972 IDENTIFIED BY rc2-cbc} 973 SMIMECapabilitiesParametersForRC2CBC ::= INTEGER (40 | 128, ...) 974 -- (RC2 Key Length (number of bits)) 976 END 978 6. ASN.1 Module for RFC 3852 980 This module has an ASN.1 idiom for noting in which version of CMS 981 changes were made from the original PKCS #10; that idiom is "[[v:", 982 where "v" is an integer. For example: 984 RevocationInfoChoice ::= CHOICE { 985 crl CertificateList, 986 ..., 987 [[5: other [1] IMPLICIT OtherRevocationInfoFormat ]] } 989 Similarly, this module adds the ASN.1 idiom for extensiblity (the 990 "...,") in all places that have been extended in the past. See the 991 example above. 993 CryptographicMessageSyntax2004 994 { iso(1) member-body(2) us(840) rsadsi(113549) 995 pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) } 996 DEFINITIONS IMPLICIT TAGS ::= 997 BEGIN 999 IMPORTS 1001 ParamOptions, DIGEST-ALGORITHM, SIGNATURE-ALGORITHM, 1002 PUBLIC-KEY, KEY-DERIVATION, KEY-WRAP, MAC-ALGORITHM, 1003 KEY-AGREE, KEY-TRANSPORT, CONTENT-ENCRYPTION, ALGORITHM, 1004 AlgorithmIdentifier 1005 FROM AlgorithmInformation 1006 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 1007 mechanisms(5) pkix(7) id-mod(0) id-mod-algorithInformation(99)} 1009 Sa-CMSAlgorithms, Mda-CMSAlgorithms, Kaa-CMSAlgorithms, 1010 Mac-CMSAlgorithms, Kwa-CMSAlgorithms, Cea-CMSAlgorithms, 1011 Kta-CMSAlgorithms 1012 FROM CryptographicMessageSyntaxAlgorithms 1013 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1014 smime(16) modules(0) cmsalg-2001(16) } 1016 Certificate, CertificateList, CertificateSerialNumber, 1017 Name, ATTRIBUTE 1018 FROM PKIX1Explicit88 1019 { iso(1) identified-organization(3) dod(6) internet(1) 1020 security(5) mechanisms(5) pkix(7) id-mod(0) 1021 id-pkix1-explicit(18) } 1023 AttributeCertificate 1024 FROM PKIXAttributeCertificate 1025 { iso(1) identified-organization(3) dod(6) internet(1) 1026 security(5) mechanisms(5) pkix(7) id-mod(0) 1027 id-mod-attribute-cert(12) } 1029 AttributeCertificateV1 1030 FROM AttributeCertificateVersion1 1031 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1032 smime(16) modules(0) v1AttrCert(15) } ; 1034 -- Cryptographic Message Syntax 1036 -- The following are used for version numbers using the ASN.1 1037 -- idiom "[[n:" 1038 -- Version 1 = PKCS #7 1039 -- Version 2 = S/MIME V2 1040 -- Version 3 = RFC 2630 1041 -- Version 4 = RFC 3369 1042 -- Version 5 = RFC 3852 1044 CONTENT-TYPE ::= TYPE-IDENTIFIER 1045 ContentType ::= CONTENT-TYPE.&id 1047 ContentInfo ::= SEQUENCE { 1048 contentType CONTENT-TYPE. 1049 &id({ContentSet}), 1050 content [0] EXPLICIT CONTENT-TYPE. 1051 &Type({ContentSet}{@contentType})} 1053 ContentSet CONTENT-TYPE ::= { 1054 -- Define the set of content types to be recognized. 1055 ct-Data | ct-SignedData | ct-EncryptedData | ct-EnvelopedData | 1056 ct-AuthenticatedData | ct-DigestedData, ... } 1058 SignedData ::= SEQUENCE { 1059 version CMSVersion, 1060 digestAlgorithms SET OF DigestAlgorithmIdentifier, 1061 encapContentInfo EncapsulatedContentInfo, 1062 certificates [0] IMPLICIT CertificateSet OPTIONAL, 1063 crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, 1064 signerInfos SignerInfos } 1066 SignerInfos ::= SET OF SignerInfo 1067 EncapsulatedContentInfo ::= SEQUENCE { 1068 eContentType CONTENT-TYPE.&id({ContentSet}), 1069 eContent [0] EXPLICIT OCTET STRING 1070 ( CONTAINING CONTENT-TYPE. 1071 &Type({ContentSet}{@eContentType})) OPTIONAL } 1073 SignerInfo ::= SEQUENCE { 1074 version CMSVersion, 1075 sid SignerIdentifier, 1076 digestAlgorithm DigestAlgorithmIdentifier, 1077 signedAttrs [0] IMPLICIT SignedAttributes OPTIONAL, 1078 signatureAlgorithm SignatureAlgorithmIdentifier, 1079 signature SignatureValue, 1080 unsignedAttrs [1] IMPLICIT Attributes 1081 {{UnsignedAttributes}} OPTIONAL } 1083 SignedAttributes ::= Attributes {{ SignedAttributesSet }} 1085 SignerIdentifier ::= CHOICE { 1086 issuerAndSerialNumber IssuerAndSerialNumber, 1087 ..., 1088 [[3: subjectKeyIdentifier [0] SubjectKeyIdentifier ]] } 1090 SignedAttributesSet CMS-ATTRIBUTE ::= 1091 { attr-signingTime | attr-messageDigest | attr-contentType, ... } 1093 UnsignedAttributes CMS-ATTRIBUTE ::= { attr-countersignature, ... } 1095 SignatureValue ::= OCTET STRING 1097 EnvelopedData ::= SEQUENCE { 1098 version CMSVersion, 1099 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 1100 recipientInfos RecipientInfos, 1101 encryptedContentInfo EncryptedContentInfo, 1102 ..., 1103 [[2: unprotectedAttrs [1] IMPLICIT Attributes 1104 {{ UnprotectedAttributes }} OPTIONAL ]] } 1106 OriginatorInfo ::= SEQUENCE { 1107 certs [0] IMPLICIT CertificateSet OPTIONAL, 1108 crls [1] IMPLICIT RevocationInfoChoices OPTIONAL } 1110 RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo 1112 EncryptedContentInfo ::= SEQUENCE { 1113 contentType CONTENT-TYPE.&id({ContentSet}), 1114 contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 1115 encryptedContent [0] IMPLICIT OCTET STRING OPTIONAL } 1117 -- If you want to do constraints, you might use: 1118 -- EncryptedContentInfo ::= SEQUENCE { 1119 -- contentType CONTENT-TYPE.&id({ContentSet}), 1120 -- contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 1121 -- encryptedContent [0] IMPLICIT ENCRYPTED {CONTENT-TYPE. 1122 -- &Type({ContentSet}{@contentType}) OPTIONAL } 1123 -- ENCRYPTED {ToBeEncrypted} ::= OCTET STRING ( CONSTRAINED BY 1124 -- { ToBeEncrypted } ) 1126 UnprotectedAttributes CMS-ATTRIBUTE ::= { ... } 1128 RecipientInfo ::= CHOICE { 1129 ktri KeyTransRecipientInfo, 1130 ..., 1131 [[3: kari [1] KeyAgreeRecipientInfo ]], 1132 [[4: kekri [2] KEKRecipientInfo]], 1133 [[5: pwri [3] PasswordRecipientInfo, 1134 ori [4] OtherRecipientInfo ]] } 1136 EncryptedKey ::= OCTET STRING 1138 KeyTransRecipientInfo ::= SEQUENCE { 1139 version CMSVersion, -- always set to 0 or 2 1140 rid RecipientIdentifier, 1141 keyEncryptionAlgorithm AlgorithmIdentifier 1142 {KEY-TRANSPORT, {KeyTransportAlgorithmSet}}, 1143 encryptedKey EncryptedKey } 1145 KeyTransportAlgorithmSet KEY-TRANSPORT ::= { Kta-CMSAlgorithms, ... } 1147 RecipientIdentifier ::= CHOICE { 1148 issuerAndSerialNumber IssuerAndSerialNumber, 1149 ..., 1150 [[2: subjectKeyIdentifier [0] SubjectKeyIdentifier ]] } 1152 KeyAgreeRecipientInfo ::= SEQUENCE { 1153 version CMSVersion, -- always set to 3 1154 originator [0] EXPLICIT OriginatorIdentifierOrKey, 1155 ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL, 1156 keyEncryptionAlgorithm AlgorithmIdentifier 1157 {KEY-AGREE, {KeyAgreementAlgorithmSet}}, 1158 recipientEncryptedKeys RecipientEncryptedKeys } 1160 KeyAgreementAlgorithmSet KEY-AGREE ::= { Kaa-CMSAlgorithms, ... } 1162 OriginatorIdentifierOrKey ::= CHOICE { 1163 issuerAndSerialNumber IssuerAndSerialNumber, 1164 subjectKeyIdentifier [0] SubjectKeyIdentifier, 1165 originatorKey [1] OriginatorPublicKey } 1167 OriginatorPublicKey ::= SEQUENCE { 1168 algorithm AlgorithmIdentifier {PUBLIC-KEY, {...}}, 1169 publicKey BIT STRING } 1171 RecipientEncryptedKeys ::= SEQUENCE OF RecipientEncryptedKey 1173 RecipientEncryptedKey ::= SEQUENCE { 1174 rid KeyAgreeRecipientIdentifier, 1175 encryptedKey EncryptedKey } 1177 KeyAgreeRecipientIdentifier ::= CHOICE { 1178 issuerAndSerialNumber IssuerAndSerialNumber, 1179 rKeyId [0] IMPLICIT RecipientKeyIdentifier } 1181 RecipientKeyIdentifier ::= SEQUENCE { 1182 subjectKeyIdentifier SubjectKeyIdentifier, 1183 date GeneralizedTime OPTIONAL, 1184 other OtherKeyAttribute OPTIONAL } 1186 SubjectKeyIdentifier ::= OCTET STRING 1188 KEKRecipientInfo ::= SEQUENCE { 1189 version CMSVersion, -- always set to 4 1190 kekid KEKIdentifier, 1191 keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, 1192 encryptedKey EncryptedKey } 1194 KEKIdentifier ::= SEQUENCE { 1195 keyIdentifier OCTET STRING, 1196 date GeneralizedTime OPTIONAL, 1197 other OtherKeyAttribute OPTIONAL } 1199 PasswordRecipientInfo ::= SEQUENCE { 1200 version CMSVersion, -- always set to 0 1201 keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier 1202 OPTIONAL, 1203 keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, 1204 encryptedKey EncryptedKey } 1206 OTHER-RECIPIENT ::= TYPE-IDENTIFIER 1208 OtherRecipientInfo ::= SEQUENCE { 1209 oriType OTHER-RECIPIENT. 1210 &id({SupportedOtherRecipInfo}), 1212 oriValue OTHER-RECIPIENT. 1213 &Type({SupportedOtherRecipInfo}{@oriType})} 1215 SupportedOtherRecipInfo OTHER-RECIPIENT ::= { ... } 1217 DigestedData ::= SEQUENCE { 1218 version CMSVersion, 1219 digestAlgorithm DigestAlgorithmIdentifier, 1220 encapContentInfo EncapsulatedContentInfo, 1221 digest Digest } 1223 Digest ::= OCTET STRING 1225 EncryptedData ::= SEQUENCE { 1226 version CMSVersion, 1227 encryptedContentInfo EncryptedContentInfo, 1228 ..., 1229 [[2: unprotectedAttrs [1] IMPLICIT Attributes 1230 {{UnprotectedAttributes}} OPTIONAL ]] } 1232 AuthenticatedData ::= SEQUENCE { 1233 version CMSVersion, 1234 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 1235 recipientInfos RecipientInfos, 1236 macAlgorithm MessageAuthenticationCodeAlgorithm, 1237 digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL, 1238 encapContentInfo EncapsulatedContentInfo, 1239 authAttrs [2] IMPLICIT AuthAttributes OPTIONAL, 1240 mac MessageAuthenticationCode, 1241 unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL } 1243 AuthAttributes ::= SET SIZE (1..MAX) OF Attribute 1244 {{SupportedAttributes}} 1246 UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute 1247 {{SupportedAttributes}} 1249 MessageAuthenticationCode ::= OCTET STRING 1251 DigestAlgorithmIdentifier ::= AlgorithmIdentifier 1252 {DIGEST-ALGORITHM, {DigestAlgorithmSet}} 1254 DigestAlgorithmSet DIGEST-ALGORITHM ::= { Mda-CMSAlgorithms, ... } 1256 SignatureAlgorithmIdentifier ::= AlgorithmIdentifier 1257 {SIGNATURE-ALGORITHM, {SignatureAlgorithmSet}} 1259 SignatureAlgorithmSet SIGNATURE-ALGORITHM ::= 1260 { Sa-CMSAlgorithms, ... } 1262 KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier 1263 {KEY-WRAP, {KeyEncryptionAlgorithmSet}} 1265 KeyEncryptionAlgorithmSet KEY-WRAP ::= { Kwa-CMSAlgorithms, ... } 1267 ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier 1268 {CONTENT-ENCRYPTION, {ContentEncryptionAlgorithmSet}} 1270 ContentEncryptionAlgorithmSet CONTENT-ENCRYPTION ::= 1271 { Cea-CMSAlgorithms, ... } 1273 MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier 1274 {MAC-ALGORITHM, {MessageAuthenticationCodeAlgorithmSet}} 1276 MessageAuthenticationCodeAlgorithmSet MAC-ALGORITHM ::= 1277 { Mac-CMSAlgorithms, ... } 1279 KeyDerivationAlgorithmIdentifier ::= AlgorithmIdentifier 1280 {KEY-DERIVATION, {...}} 1282 RevocationInfoChoices ::= SET OF RevocationInfoChoice 1284 RevocationInfoChoice ::= CHOICE { 1285 crl CertificateList, 1286 ..., 1287 [[5: other [1] IMPLICIT OtherRevocationInfoFormat ]] } 1289 OTHER-REVOK-INFO ::= TYPE-IDENTIFIER 1291 OtherRevocationInfoFormat ::= SEQUENCE { 1292 otherRevInfoFormat OTHER-REVOK-INFO. 1293 &id({SupportedOtherRevokInfo}), 1294 otherRevInfo OTHER-REVOK-INFO. 1295 &Type({SupportedOtherRevokInfo}{@otherRevInfoFormat})} 1297 SupportedOtherRevokInfo OTHER-REVOK-INFO ::= { ... } 1299 CertificateChoices ::= CHOICE { 1300 certificate Certificate, 1301 extendedCertificate [0] IMPLICIT ExtendedCertificate, 1302 -- Obsolete 1303 ..., 1304 [[3: v1AttrCert [1] IMPLICIT AttributeCertificateV1]], 1305 -- Obsolete 1306 [[4: v2AttrCert [2] IMPLICIT AttributeCertificateV2]], 1307 [[5: other [3] IMPLICIT OtherCertificateFormat]] } 1309 AttributeCertificateV2 ::= AttributeCertificate 1311 OTHER-CERT-FMT ::= TYPE-IDENTIFIER 1313 OtherCertificateFormat ::= SEQUENCE { 1314 otherCertFormat OTHER-CERT-FMT. 1315 &id({SupportedCertFormats}), 1316 otherCert OTHER-CERT-FMT. 1317 &Type({SupportedCertFormats}{@otherCertFormat})} 1319 SupportedCertFormats OTHER-CERT-FMT ::= { ... } 1321 CertificateSet ::= SET OF CertificateChoices 1323 IssuerAndSerialNumber ::= SEQUENCE { 1324 issuer Name, 1325 serialNumber CertificateSerialNumber } 1327 CMSVersion ::= INTEGER { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) } 1329 UserKeyingMaterial ::= OCTET STRING 1331 KEY-ATTRIBUTE ::= TYPE-IDENTIFIER 1333 OtherKeyAttribute ::= SEQUENCE { 1334 keyAttrId KEY-ATTRIBUTE. 1335 &id({SupportedKeyAttributes}), 1336 keyAttr KEY-ATTRIBUTE. 1337 &Type({SupportedKeyAttributes}{@keyAttrId})} 1339 SupportedKeyAttributes KEY-ATTRIBUTE ::= { ... } 1341 -- Content Type Object Identifiers 1343 id-ct-contentInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1344 us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 6 } 1346 ct-Data CONTENT-TYPE ::= {OCTET STRING IDENTIFIED BY id-data} 1348 id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1349 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 } 1351 ct-SignedData CONTENT-TYPE ::= 1352 { SignedData IDENTIFIED BY id-signedData} 1354 id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1355 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 } 1357 ct-EnvelopedData CONTENT-TYPE ::= 1358 { EnvelopedData IDENTIFIED BY id-envelopedData} 1360 id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1361 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 } 1363 ct-DigestedData CONTENT-TYPE ::= 1364 { DigestedData IDENTIFIED BY id-digestedData} 1366 id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1367 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 } 1369 ct-EncryptedData CONTENT-TYPE ::= 1370 { EncryptedData IDENTIFIED BY id-encryptedData} 1372 id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1373 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 } 1375 ct-AuthenticatedData CONTENT-TYPE ::= 1376 { AuthenticatedData IDENTIFIED BY id-ct-authData} 1378 id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1379 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 } 1381 -- The CMS Attributes 1383 MessageDigest ::= OCTET STRING 1385 SigningTime ::= Time 1387 Time ::= CHOICE { 1388 utcTime UTCTime, 1389 generalTime GeneralizedTime } 1391 Countersignature ::= SignerInfo 1393 -- Attribute Object Identifiers 1395 attr-contentType CMS-ATTRIBUTE ::= 1396 { TYPE ContentType IDENTIFIED BY id-contentType } 1398 id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1399 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 } 1401 attr-messageDigest CMS-ATTRIBUTE ::= 1402 { TYPE MessageDigest IDENTIFIED BY id-messageDigest} 1404 id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1405 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 } 1407 attr-signingTime CMS-ATTRIBUTE ::= 1408 { TYPE SigningTime IDENTIFIED BY id-signingTime } 1410 id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1411 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 } 1413 attr-countersignature CMS-ATTRIBUTE ::= 1414 { TYPE Countersignature IDENTIFIED BY id-countersignature } 1416 id-countersignature OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1417 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6 } 1419 -- Obsolete Extended Certificate syntax from PKCS#6 1421 ExtendedCertificateOrCertificate ::= CHOICE { 1422 certificate Certificate, 1423 extendedCertificate [0] IMPLICIT ExtendedCertificate } 1425 ExtendedCertificate ::= SEQUENCE { 1426 extendedCertificateInfo ExtendedCertificateInfo, 1427 signatureAlgorithm SignatureAlgorithmIdentifier, 1428 signature Signature } 1430 ExtendedCertificateInfo ::= SEQUENCE { 1431 version CMSVersion, 1432 certificate Certificate, 1433 attributes UnauthAttributes } 1435 Signature ::= BIT STRING 1437 -- Class definitions used in the module 1439 CMS-ATTRIBUTE ::= ATTRIBUTE 1441 Attribute{ CMS-ATTRIBUTE:AttrList } ::= SEQUENCE { 1442 attrType CMS-ATTRIBUTE. 1443 &id({AttrList}), 1444 attrValues SET OF CMS-ATTRIBUTE. 1445 &Type({AttrList}{@attrType}) } 1447 SupportedAttributes CMS-ATTRIBUTE ::= { ... } 1449 Attributes { CMS-ATTRIBUTE:AttrList } ::= 1450 SET SIZE (1..MAX) OF Attribute {{ AttrList }} 1452 END 1454 7. ASN.1 Module for RFC 4108 1456 CMSFirmwareWrapper 1457 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1458 smime(16) modules(0) cms-firmware-wrap(22) } 1459 DEFINITIONS IMPLICIT TAGS ::= 1460 BEGIN 1462 IMPORTS 1464 OTHER-NAME 1465 FROM PKIX1Implicit88 1466 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 1467 mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } 1469 EnvelopedData, CONTENT-TYPE, CMS-ATTRIBUTE 1470 FROM CryptographicMessageSyntax 1471 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1472 smime(16) modules(0) cms-2004(24) }; 1474 FirmwareContentTypes CONTENT-TYPE ::= { 1475 ct-firmwarePackage | ct-firmwareLoadReceipt | 1476 ct-firmwareLoadError } 1478 FirmwareSignedAttrs CMS-ATTRIBUTE ::= { 1479 aa-firmwarePackageID | aa-targetHardwareIDs | 1480 aa-decryptKeyID | aa-implCryptoAlgs | aa-implCompressAlgs | 1481 aa-communityIdentifiers | aa-firmwarePackageInfo } 1483 FirmwareUnsignedAttrs CMS-ATTRIBUTE ::= { 1484 aa-wrappedFirmwareKey } 1486 FirmwareOtherNames OTHER-NAME ::= { 1487 on-hardwareModuleName } 1489 -- Firmware Package Content Type and Object Identifier 1491 ct-firmwarePackage CONTENT-TYPE ::= 1492 { FirmwarePkgData IDENTIFIED BY id-ct-firmwarePackage } 1494 id-ct-firmwarePackage OBJECT IDENTIFIER ::= { 1495 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1496 smime(16) ct(1) 16 } 1498 FirmwarePkgData ::= OCTET STRING 1500 -- Firmware Package Signed Attributes and Object Identifiers 1501 aa-firmwarePackageID CMS-ATTRIBUTE ::= 1502 { TYPE FirmwarePackageIdentifier IDENTIFIED BY 1503 id-aa-firmwarePackageID } 1505 id-aa-firmwarePackageID OBJECT IDENTIFIER ::= { 1506 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1507 smime(16) aa(2) 35 } 1509 FirmwarePackageIdentifier ::= SEQUENCE { 1510 name PreferredOrLegacyPackageIdentifier, 1511 stale PreferredOrLegacyStalePackageIdentifier OPTIONAL } 1513 PreferredOrLegacyPackageIdentifier ::= CHOICE { 1514 preferred PreferredPackageIdentifier, 1515 legacy OCTET STRING } 1517 PreferredPackageIdentifier ::= SEQUENCE { 1518 fwPkgID OBJECT IDENTIFIER, 1519 verNum INTEGER (0..MAX) } 1521 PreferredOrLegacyStalePackageIdentifier ::= CHOICE { 1522 preferredStaleVerNum INTEGER (0..MAX), 1523 legacyStaleVersion OCTET STRING } 1525 aa-targetHardwareIDs CMS-ATTRIBUTE ::= 1526 { TYPE TargetHardwareIdentifiers IDENTIFIED BY 1527 id-aa-targetHardwareIDs } 1529 id-aa-targetHardwareIDs OBJECT IDENTIFIER ::= { 1530 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1531 smime(16) aa(2) 36 } 1533 TargetHardwareIdentifiers ::= SEQUENCE OF OBJECT IDENTIFIER 1535 aa-decryptKeyID CMS-ATTRIBUTE ::= 1536 { TYPE DecryptKeyIdentifier IDENTIFIED BY id-aa-decryptKeyID} 1538 id-aa-decryptKeyID OBJECT IDENTIFIER ::= { 1539 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1540 smime(16) aa(2) 37 } 1542 DecryptKeyIdentifier ::= OCTET STRING 1544 aa-implCryptoAlgs CMS-ATTRIBUTE ::= 1545 { TYPE ImplementedCryptoAlgorithms IDENTIFIED BY 1546 id-aa-implCryptoAlgs } 1548 id-aa-implCryptoAlgs OBJECT IDENTIFIER ::= { 1549 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1550 smime(16) aa(2) 38 } 1552 ImplementedCryptoAlgorithms ::= SEQUENCE OF OBJECT IDENTIFIER 1554 aa-implCompressAlgs CMS-ATTRIBUTE ::= 1555 { TYPE ImplementedCompressAlgorithms IDENTIFIED BY 1556 id-aa-implCompressAlgs } 1558 id-aa-implCompressAlgs OBJECT IDENTIFIER ::= { 1559 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1560 smime(16) aa(2) 43 } 1562 ImplementedCompressAlgorithms ::= SEQUENCE OF OBJECT IDENTIFIER 1564 aa-communityIdentifiers CMS-ATTRIBUTE ::= 1565 { TYPE CommunityIdentifiers IDENTIFIED BY 1566 id-aa-communityIdentifiers } 1568 id-aa-communityIdentifiers OBJECT IDENTIFIER ::= { 1569 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1570 smime(16) aa(2) 40 } 1572 CommunityIdentifiers ::= SEQUENCE OF CommunityIdentifier 1574 CommunityIdentifier ::= CHOICE { 1575 communityOID OBJECT IDENTIFIER, 1576 hwModuleList HardwareModules } 1578 HardwareModules ::= SEQUENCE { 1579 hwType OBJECT IDENTIFIER, 1580 hwSerialEntries SEQUENCE OF HardwareSerialEntry } 1582 HardwareSerialEntry ::= CHOICE { 1583 all NULL, 1584 single OCTET STRING, 1585 block SEQUENCE { 1586 low OCTET STRING, 1587 high OCTET STRING } } 1589 aa-firmwarePackageInfo CMS-ATTRIBUTE ::= 1590 { TYPE FirmwarePackageInfo IDENTIFIED BY 1591 id-aa-firmwarePackageInfo } 1593 id-aa-firmwarePackageInfo OBJECT IDENTIFIER ::= { 1594 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1595 smime(16) aa(2) 42 } 1597 FirmwarePackageInfo ::= SEQUENCE { 1598 fwPkgType INTEGER OPTIONAL, 1599 dependencies SEQUENCE OF 1600 PreferredOrLegacyPackageIdentifier OPTIONAL } 1602 -- Firmware Package Unsigned Attributes and Object Identifiers 1604 aa-wrappedFirmwareKey CMS-ATTRIBUTE ::= 1605 { TYPE WrappedFirmwareKey IDENTIFIED BY 1606 id-aa-wrappedFirmwareKey } 1608 id-aa-wrappedFirmwareKey OBJECT IDENTIFIER ::= { 1609 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1610 smime(16) aa(2) 39 } 1612 WrappedFirmwareKey ::= EnvelopedData 1614 -- Firmware Package Load Receipt Content Type and Object Identifier 1616 ct-firmwareLoadReceipt CONTENT-TYPE ::= 1617 { FirmwarePackageLoadReceipt IDENTIFIED BY 1618 id-ct-firmwareLoadReceipt } 1620 id-ct-firmwareLoadReceipt OBJECT IDENTIFIER ::= { 1621 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1622 smime(16) ct(1) 17 } 1624 FirmwarePackageLoadReceipt ::= SEQUENCE { 1625 version FWReceiptVersion DEFAULT v1, 1626 hwType OBJECT IDENTIFIER, 1627 hwSerialNum OCTET STRING, 1628 fwPkgName PreferredOrLegacyPackageIdentifier, 1629 trustAnchorKeyID OCTET STRING OPTIONAL, 1630 decryptKeyID [1] OCTET STRING OPTIONAL } 1632 FWReceiptVersion ::= INTEGER { v1(1) } 1634 -- Firmware Package Load Error Report Content Type 1635 -- and Object Identifier 1637 ct-firmwareLoadError CONTENT-TYPE ::= 1638 { FirmwarePackageLoadError 1639 IDENTIFIED BY id-ct-firmwareLoadError } 1641 id-ct-firmwareLoadError OBJECT IDENTIFIER ::= { 1642 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1643 smime(16) ct(1) 18 } 1645 FirmwarePackageLoadError ::= SEQUENCE { 1646 version FWErrorVersion DEFAULT v1, 1647 hwType OBJECT IDENTIFIER, 1648 hwSerialNum OCTET STRING, 1649 errorCode FirmwarePackageLoadErrorCode, 1650 vendorErrorCode VendorLoadErrorCode OPTIONAL, 1651 fwPkgName PreferredOrLegacyPackageIdentifier OPTIONAL, 1652 config [1] SEQUENCE OF CurrentFWConfig OPTIONAL } 1654 FWErrorVersion ::= INTEGER { v1(1) } 1656 CurrentFWConfig ::= SEQUENCE { 1657 fwPkgType INTEGER OPTIONAL, 1658 fwPkgName PreferredOrLegacyPackageIdentifier } 1660 FirmwarePackageLoadErrorCode ::= ENUMERATED { 1661 decodeFailure (1), 1662 badContentInfo (2), 1663 badSignedData (3), 1664 badEncapContent (4), 1665 badCertificate (5), 1666 badSignerInfo (6), 1667 badSignedAttrs (7), 1668 badUnsignedAttrs (8), 1669 missingContent (9), 1670 noTrustAnchor (10), 1671 notAuthorized (11), 1672 badDigestAlgorithm (12), 1673 badSignatureAlgorithm (13), 1674 unsupportedKeySize (14), 1675 signatureFailure (15), 1676 contentTypeMismatch (16), 1677 badEncryptedData (17), 1678 unprotectedAttrsPresent (18), 1679 badEncryptContent (19), 1680 badEncryptAlgorithm (20), 1681 missingCiphertext (21), 1682 noDecryptKey (22), 1683 decryptFailure (23), 1684 badCompressAlgorithm (24), 1685 missingCompressedContent (25), 1686 decompressFailure (26), 1687 wrongHardware (27), 1688 stalePackage (28), 1689 notInCommunity (29), 1690 unsupportedPackageType (30), 1691 missingDependency (31), 1692 wrongDependencyVersion (32), 1693 insufficientMemory (33), 1694 badFirmware (34), 1695 unsupportedParameters (35), 1696 breaksDependency (36), 1697 otherError (99) } 1699 VendorLoadErrorCode ::= INTEGER 1701 -- Other Name syntax for Hardware Module Name 1703 on-hardwareModuleName OTHER-NAME ::= 1704 { HardwareModuleName IDENTIFIED BY id-on-hardwareModuleName } 1706 id-on-hardwareModuleName OBJECT IDENTIFIER ::= { 1707 iso(1) identified-organization(3) dod(6) internet(1) security(5) 1708 mechanisms(5) pkix(7) on(8) 4 } 1710 HardwareModuleName ::= SEQUENCE { 1711 hwType OBJECT IDENTIFIER, 1712 hwSerialNum OCTET STRING } 1714 END 1716 8. ASN.1 Module for RFC 4998 1718 ERS {iso(1) identified-organization(3) dod(6) internet(1) 1719 security(5) mechanisms(5) ltans(11) id-mod(0) id-mod-ers(1) 1720 id-mod-ers-v1(1) } 1721 DEFINITIONS IMPLICIT TAGS ::= 1722 BEGIN 1724 IMPORTS 1726 Attribute{}, AlgorithmIdentifier{}, ATTRIBUTE, ALGORITHM 1727 FROM PKIX-CommonTypes 1728 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 1729 mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon(43) } 1731 ContentInfo, CMS-ATTRIBUTE 1732 FROM CryptographicMessageSyntax2004 1733 { iso(1) member-body(2) us(840) rsadsi(113549) 1734 pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) } ; 1736 ltans OBJECT IDENTIFIER ::= 1737 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 1738 mechanisms(5) ltans(11) } 1740 EvidenceRecord ::= SEQUENCE { 1741 version INTEGER { v1(1) } , 1742 digestAlgorithms SEQUENCE OF AlgorithmIdentifier{{...}}, 1743 cryptoInfos [0] CryptoInfos OPTIONAL, 1744 encryptionInfo [1] EncryptionInfo OPTIONAL, 1745 archiveTimeStampSequence ArchiveTimeStampSequence 1746 } 1748 CryptoInfos ::= SEQUENCE SIZE (1..MAX) OF Attribute{{...}} 1750 ArchiveTimeStamp ::= SEQUENCE { 1751 digestAlgorithm [0] AlgorithmIdentifier{{...}} OPTIONAL, 1752 attributes [1] Attributes OPTIONAL, 1753 reducedHashtree [2] SEQUENCE OF PartialHashtree OPTIONAL, 1754 timeStamp ContentInfo 1755 } 1757 PartialHashtree ::= SEQUENCE OF OCTET STRING 1759 Attributes ::= SET SIZE (1..MAX) OF Attribute{{...}} 1761 ArchiveTimeStampChain ::= SEQUENCE OF ArchiveTimeStamp 1763 ArchiveTimeStampSequence ::= SEQUENCE OF ArchiveTimeStampChain 1765 EncryptionInfo ::= SEQUENCE { 1766 encryptionInfoType ENCINFO-TYPE. 1767 &id({SupportedEncryptionAlgorithms}), 1768 encryptionInfoValue ENCINFO-TYPE. 1769 &Type({SupportedEncryptionAlgorithms} 1770 {@encryptionInfoType}) 1771 } 1773 ENCINFO-TYPE ::= TYPE-IDENTIFIER 1775 SupportedEncryptionAlgorithms ENCINFO-TYPE ::= {...} 1777 er-Internal CMS-ATTRIBUTE ::= 1778 { TYPE EvidenceRecord IDENTIFIED BY id-aa-er-internal } 1780 id-aa-er-internal OBJECT IDENTIFIER ::= 1781 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1782 smime(16) id-aa(2) 49 } 1784 er-External CMS-ATTRIBUTE ::= 1785 { TYPE EvidenceRecord IDENTIFIED BY id-aa-er-external } 1787 id-aa-er-external OBJECT IDENTIFIER ::= 1788 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1789 smime(16) id-aa(2) 50 } 1791 END 1793 9. ASN.1 Module for RFC 5035 1795 ExtendedSecurityServices-2006 1796 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1797 smime(16) modules(0) id-mod-ess-2006(30) } 1798 DEFINITIONS IMPLICIT TAGS ::= 1799 BEGIN 1801 IMPORTS 1803 Attribute{}, AlgorithmIdentifier{}, ATTRIBUTE, ALGORITHM 1804 FROM PKIX-CommonTypes 1805 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 1806 mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon(43) } 1808 ContentType, IssuerAndSerialNumber, SubjectKeyIdentifier, 1809 CMS-ATTRIBUTE, CONTENT-TYPE 1810 FROM CryptographicMessageSyntax2004 1811 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1812 smime(16) modules(0) cms-2004(24) } 1814 CertificateSerialNumber 1815 FROM PKIX1Explicit88 1816 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 1817 mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } 1819 PolicyInformation, GeneralNames 1820 FROM PKIX1Implicit88 1821 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 1822 mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19)}; 1824 EssSignedAttributes CMS-ATTRIBUTE ::= { 1825 aa-receiptRequest | aa-contentIdentifier | aa-contentHint | 1826 aa-msgSigDigest | aa-contentReference | aa-securityLabel | 1827 aa-equivalentLabels | aa-mlExpandHistory | aa-signingCertificate | 1828 aa-signingCertificateV2 } 1830 EssContentTypes CONTENT-TYPE ::= { ct-receipt } 1831 -- Extended Security Services 1832 -- The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1 1833 -- constructs in this module. A valid ASN.1 SEQUENCE can have zero or 1834 -- more entries. The SIZE (1..MAX) construct constrains the SEQUENCE 1835 -- tp have at least one entry. MAX indicates the upper bound is 1836 -- unspecified. Implementations are free to choose an upper bound 1837 -- that suits their environment. 1839 -- Section 2.7 1841 aa-receiptRequest CMS-ATTRIBUTE ::= 1842 { TYPE ReceiptRequest IDENTIFIED BY id-aa-receiptRequest} 1844 ReceiptRequest ::= SEQUENCE { 1845 signedContentIdentifier ContentIdentifier, 1846 receiptsFrom ReceiptsFrom, 1847 receiptsTo SEQUENCE SIZE (1..ub-receiptsTo) OF GeneralNames 1848 } 1850 ub-receiptsTo INTEGER ::= 16 1852 id-aa-receiptRequest OBJECT IDENTIFIER ::= 1853 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1854 smime(16) id-aa(2) 1} 1856 aa-contentIdentifier CMS-ATTRIBUTE ::= 1857 { TYPE ContentIdentifier IDENTIFIED BY id-aa-contentIdentifier} 1859 ContentIdentifier ::= OCTET STRING 1861 id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1862 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 7} 1864 ct-receipt CONTENT-TYPE ::= 1865 { Receipt IDENTIFIED BY id-ct-receipt } 1867 ReceiptsFrom ::= CHOICE { 1868 allOrFirstTier [0] AllOrFirstTier, 1869 -- formerly "allOrNone [0]AllOrNone" 1870 receiptList [1] SEQUENCE OF GeneralNames } 1872 AllOrFirstTier ::= INTEGER { -- Formerly AllOrNone 1873 allReceipts (0), 1874 firstTierRecipients (1) } 1876 -- Section 2.8 1877 Receipt ::= SEQUENCE { 1878 version ESSVersion, 1879 contentType ContentType, 1880 signedContentIdentifier ContentIdentifier, 1881 originatorSignatureValue OCTET STRING } 1883 id-ct-receipt OBJECT IDENTIFIER ::= 1884 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1885 smime(16) id-ct(1) 1} 1887 ESSVersion ::= INTEGER { v1(1) } 1889 -- Section 2.9 1891 aa-contentHint CMS-ATTRIBUTE ::= 1892 { TYPE ContentHints IDENTIFIED BY id-aa-contentHint } 1894 ContentHints ::= SEQUENCE { 1895 contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL, 1896 contentType ContentType } 1898 id-aa-contentHint OBJECT IDENTIFIER ::= 1899 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1900 smime(16) id-aa(2) 4} 1902 -- Section 2.10 1904 aa-msgSigDigest CMS-ATTRIBUTE ::= 1905 { TYPE MsgSigDigest IDENTIFIED BY id-aa-msgSigDigest } 1907 MsgSigDigest ::= OCTET STRING 1909 id-aa-msgSigDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1910 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 5} 1912 -- Section 2.11 1914 aa-contentReference CMS-ATTRIBUTE ::= 1915 { TYPE ContentReference IDENTIFIED BY id-aa-contentReference } 1917 ContentReference ::= SEQUENCE { 1918 contentType ContentType, 1919 signedContentIdentifier ContentIdentifier, 1920 originatorSignatureValue OCTET STRING } 1922 id-aa-contentReference OBJECT IDENTIFIER ::= 1923 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1924 smime(16) id-aa(2) 10 } 1926 -- Section 3.2 1928 aa-securityLabel CMS-ATTRIBUTE ::= 1929 { TYPE ESSSecurityLabel IDENTIFIED BY id-aa-securityLabel } 1931 ESSSecurityLabel ::= SET { 1932 security-policy-identifier SecurityPolicyIdentifier, 1933 security-classification SecurityClassification OPTIONAL, 1934 privacy-mark ESSPrivacyMark OPTIONAL, 1935 security-categories SecurityCategories OPTIONAL } 1937 id-aa-securityLabel OBJECT IDENTIFIER ::= 1938 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1939 smime(16) id-aa(2) 2} 1940 SecurityPolicyIdentifier ::= OBJECT IDENTIFIER 1942 SecurityClassification ::= INTEGER { 1943 unmarked (0), 1944 unclassified (1), 1945 restricted (2), 1946 confidential (3), 1947 secret (4), 1948 top-secret (5) 1949 } (0..ub-integer-options) 1951 ub-integer-options INTEGER ::= 256 1953 ESSPrivacyMark ::= CHOICE { 1954 pString PrintableString (SIZE (1..ub-privacy-mark-length)), 1955 utf8String UTF8String (SIZE (1..MAX)) 1956 } 1958 ub-privacy-mark-length INTEGER ::= 128 1960 SecurityCategories ::= 1961 SET SIZE (1..ub-security-categories) OF SecurityCategory 1963 ub-security-categories INTEGER ::= 64 1965 SECURITY-CATEGORY ::= TYPE-IDENTIFIER 1967 SecurityCategory ::= SEQUENCE { 1968 type [0] SECURITY-CATEGORY. 1969 &id({SupportedSecurityCategories}), 1970 value [1] SECURITY-CATEGORY. 1971 &Type({SupportedSecurityCategories}{@type}) 1973 } 1975 SupportedSecurityCategories SECURITY-CATEGORY ::= { ... } 1977 --Note: The aforementioned SecurityCategory syntax produces identical 1978 --hex encodings as the following SecurityCategory syntax that is 1979 --documented in the X.411 specification: 1980 -- 1981 --SecurityCategory ::= SEQUENCE { 1982 -- type [0] SECURITY-CATEGORY, 1983 -- value [1] ANY DEFINED BY type } 1984 -- 1985 --SECURITY-CATEGORY MACRO ::= 1986 --BEGIN 1987 --TYPE NOTATION ::= type | empty 1988 --VALUE NOTATION ::= value (VALUE OBJECT IDENTIFIER) 1989 --END 1991 -- Section 3.4 1993 aa-equivalentLabels CMS-ATTRIBUTE ::= 1994 { TYPE EquivalentLabels IDENTIFIED BY id-aa-equivalentLabels } 1996 EquivalentLabels ::= SEQUENCE OF ESSSecurityLabel 1998 id-aa-equivalentLabels OBJECT IDENTIFIER ::= 1999 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2000 smime(16) id-aa(2) 9} 2002 -- Section 4.4 2004 aa-mlExpandHistory CMS-ATTRIBUTE ::= 2005 { TYPE MLExpansionHistory IDENTIFIED BY id-aa-mlExpandHistory } 2007 MLExpansionHistory ::= SEQUENCE 2008 SIZE (1..ub-ml-expansion-history) OF MLData 2010 id-aa-mlExpandHistory OBJECT IDENTIFIER ::= 2011 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2012 smime(16) id-aa(2) 3 } 2014 ub-ml-expansion-history INTEGER ::= 64 2016 MLData ::= SEQUENCE { 2017 mailListIdentifier EntityIdentifier, 2018 expansionTime GeneralizedTime, 2019 mlReceiptPolicy MLReceiptPolicy OPTIONAL } 2021 EntityIdentifier ::= CHOICE { 2022 issuerAndSerialNumber IssuerAndSerialNumber, 2023 subjectKeyIdentifier SubjectKeyIdentifier } 2025 MLReceiptPolicy ::= CHOICE { 2026 none [0] NULL, 2027 insteadOf [1] SEQUENCE SIZE (1..MAX) OF GeneralNames, 2028 inAdditionTo [2] SEQUENCE SIZE (1..MAX) OF GeneralNames } 2030 -- Section 5.4 2032 aa-signingCertificate CMS-ATTRIBUTE ::= 2033 { TYPE SigningCertificate IDENTIFIED BY 2034 id-aa-signingCertificate } 2036 SigningCertificate ::= SEQUENCE { 2037 certs SEQUENCE OF ESSCertID, 2038 policies SEQUENCE OF PolicyInformation OPTIONAL 2039 } 2041 id-aa-signingCertificate OBJECT IDENTIFIER ::= 2042 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 2043 smime(16) id-aa(2) 12 } 2045 aa-signingCertificateV2 CMS-ATTRIBUTE ::= 2046 { TYPE SigningCertificateV2 IDENTIFIED BY 2047 id-aa-signingCertificateV2 } 2049 SigningCertificateV2 ::= SEQUENCE { 2050 certs SEQUENCE OF ESSCertIDv2, 2051 policies SEQUENCE OF PolicyInformation OPTIONAL 2052 } 2054 id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= 2055 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 2056 smime(16) id-aa(2) 47 } 2058 id-sha256 OBJECT IDENTIFIER ::= 2059 { joint-iso-itu-t(2) country(16) us(840) organization(1) gov(101) 2060 csor(3) nistalgorithm(4) hashalgs(2) 1 } 2062 HashAlgorithm ::= AlgorithmIdentifier{{...}} 2064 ESSCertIDv2 ::= SEQUENCE { 2065 hashAlgorithm HashAlgorithm 2066 DEFAULT { algorithm id-sha256 }, 2067 certHash Hash, 2068 issuerSerial IssuerSerial OPTIONAL 2070 } 2072 ESSCertID ::= SEQUENCE { 2073 certHash Hash, 2074 issuerSerial IssuerSerial OPTIONAL 2075 } 2077 Hash ::= OCTET STRING 2079 IssuerSerial ::= SEQUENCE { 2080 issuer GeneralNames, 2081 serialNumber CertificateSerialNumber 2082 } 2084 END 2086 10. ASN.1 Module for RFC 5083 2088 CMS-AuthEnvelopedData-2007 2089 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 2090 pkcs-9(9) smime(16) modules(0) cms-authEnvelopedData(31) } 2091 DEFINITIONS IMPLICIT TAGS ::= 2092 BEGIN 2094 IMPORTS 2096 AuthAttributes, CMSVersion, EncryptedContentInfo, 2097 MessageAuthenticationCode, OriginatorInfo, RecipientInfos, 2098 UnauthAttributes 2099 FROM CryptographicMessageSyntax2004 2100 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2101 smime(16) modules(0) cms-2004(24) } ; 2103 id-ct-authEnvelopedData OBJECT IDENTIFIER ::= 2104 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2105 smime(16) ct(1) 23 } 2107 AuthEnvelopedData ::= SEQUENCE { 2108 version CMSVersion, 2109 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 2110 recipientInfos RecipientInfos, 2111 authEncryptedContentInfo EncryptedContentInfo, 2112 authAttrs [1] IMPLICIT AuthAttributes OPTIONAL, 2113 mac MessageAuthenticationCode, 2114 unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL } 2116 END 2118 11. ASN.1 Module for RFC 5084 2120 CMS-AES-CCM-and-AES-GCM 2121 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 2122 pkcs-9(9) smime(16) modules(0) cms-aes-ccm-and-gcm(32) } 2123 DEFINITIONS IMPLICIT TAGS ::= 2124 BEGIN 2126 -- Object Identifiers 2128 aes OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) 2129 organization(1) gov(101) csor(3) nistAlgorithm(4) 1 } 2131 id-aes128-CCM OBJECT IDENTIFIER ::= { aes 7 } 2133 id-aes192-CCM OBJECT IDENTIFIER ::= { aes 27 } 2135 id-aes256-CCM OBJECT IDENTIFIER ::= { aes 47 } 2137 id-aes128-GCM OBJECT IDENTIFIER ::= { aes 6 } 2139 id-aes192-GCM OBJECT IDENTIFIER ::= { aes 26 } 2141 id-aes256-GCM OBJECT IDENTIFIER ::= { aes 46 } 2143 -- Parameters for AigorithmIdentifier 2145 CCMParameters ::= SEQUENCE { 2146 aes-nonce OCTET STRING (SIZE(7..13)), 2147 aes-ICVlen AES-CCM-ICVlen DEFAULT 12 } 2149 AES-CCM-ICVlen ::= INTEGER (4 | 6 | 8 | 10 | 12 | 14 | 16) 2151 GCMParameters ::= SEQUENCE { 2152 aes-nonce OCTET STRING, -- recommended size is 12 octets 2153 aes-ICVlen AES-GCM-ICVlen DEFAULT 12 } 2155 AES-GCM-ICVlen ::= INTEGER (12 | 13 | 14 | 15 | 16) 2157 END 2159 12. ASN.1 Module for RFC 5275 2161 SMIMESymmetricKeyDistribution 2162 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2163 smime(16) modules(0) symkeydist(12) } 2164 DEFINITIONS IMPLICIT TAGS ::= 2165 BEGIN 2167 IMPORTS 2169 Attribute{}, AlgorithmIdentifier{}, Extensions{}, EXTENSION, 2170 ATTRIBUTE, ALGORITHM 2171 FROM PKIX-CommonTypes 2172 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 2173 mechanisms(5) pkix(7) id-mod(0) id-mod-pkixCommon(43) } 2175 GeneralName 2176 FROM PKIX1Implicit88 2177 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 2178 mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19) } 2180 Certificate 2181 FROM PKIX1Explicit88 2182 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 2183 mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } 2185 RecipientInfos, KEKIdentifier,CertificateSet 2186 FROM CryptographicMessageSyntax2004 2187 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2188 smime(16) modules(0) cms-2004(24) } 2190 id-alg-CMS3DESwrap 2191 FROM CryptographicMessageSyntaxAlgorithms 2192 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2193 smime(16) modules(0) cmsalg-2001(16) } 2195 AttributeCertificate 2196 FROM PKIXAttributeCertificate 2197 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 2198 mechanisms(5) pkix(7) id-mod(0) id-mod-attribute-cert(12) } 2200 CMC-CONTROL 2201 FROM EnrollmentMessageSyntax 2202 { iso(1) identified-organization(3) dod(4) internet(1) security(5) 2203 mechansims(5) pkix(7) id-mod(0) id-mod-cmc2002(23) }; 2205 -- This defines the GL symmetric key distribution object identifier 2206 -- arc. 2208 id-skd OBJECT IDENTIFIER ::= 2209 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 2210 smime(16) skd(8) } 2212 ControlSet CMC-CONTROL ::= { 2213 skd-glUseKEK | skd-glDelete | skd-glAddMember | 2214 skd-glDeleteMember | skd-glRekey | skd-glAddOwner | 2215 skd-glRemoveOwner | skd-glKeyCompromise | 2216 skd-glkRefresh | skd-glaQueryRequest | skd-glProvideCert | 2217 skd-glManageCert | skd-glKey, ... } 2219 -- This defines the GL Use KEK control attribute 2221 skd-glUseKEK CMC-CONTROL ::= 2222 { GLUseKEK IDENTIFIED BY id-skd-glUseKEK } 2224 id-skd-glUseKEK OBJECT IDENTIFIER ::= { id-skd 1} 2226 GLUseKEK ::= SEQUENCE { 2227 glInfo GLInfo, 2228 glOwnerInfo SEQUENCE SIZE (1..MAX) OF GLOwnerInfo, 2229 glAdministration GLAdministration DEFAULT 1, 2230 glKeyAttributes GLKeyAttributes OPTIONAL 2231 } 2233 GLInfo ::= SEQUENCE { 2234 glName GeneralName, 2235 glAddress GeneralName 2236 } 2238 GLOwnerInfo ::= SEQUENCE { 2239 glOwnerName GeneralName, 2240 glOwnerAddress GeneralName, 2241 certificates Certificates OPTIONAL 2242 } 2244 GLAdministration ::= INTEGER { 2245 unmanaged (0), 2246 managed (1), 2247 closed (2) 2248 } 2250 KeyWrapAlgorithm ::= AlgorithmIdentifier {{...}} 2252 GLKeyAttributes ::= SEQUENCE { 2253 rekeyControlledByGLO [0] BOOLEAN DEFAULT FALSE, 2254 recipientsNotMutuallyAware [1] BOOLEAN DEFAULT TRUE, 2255 duration [2] INTEGER DEFAULT 0, 2256 generationCounter [3] INTEGER DEFAULT 2, 2257 requestedAlgorithm [4] KeyWrapAlgorithm 2258 DEFAULT {algorithm id-alg-CMS3DESwrap} 2259 } 2260 -- This defines the Delete GL control attribute. 2261 -- It has the simple type GeneralName. 2263 skd-glDelete CMC-CONTROL ::= 2264 { DeleteGL IDENTIFIED BY id-skd-glDelete } 2266 id-skd-glDelete OBJECT IDENTIFIER ::= { id-skd 2} 2267 DeleteGL ::= GeneralName 2269 -- This defines the Add GL Member control attribute 2271 skd-glAddMember CMC-CONTROL ::= 2272 { GLAddMember IDENTIFIED BY id-skd-glAddMember } 2274 id-skd-glAddMember OBJECT IDENTIFIER ::= { id-skd 3} 2275 GLAddMember ::= SEQUENCE { 2276 glName GeneralName, 2277 glMember GLMember 2278 } 2280 GLMember ::= SEQUENCE { 2281 glMemberName GeneralName, 2282 glMemberAddress GeneralName OPTIONAL, 2283 certificates Certificates OPTIONAL 2284 } 2286 Certificates ::= SEQUENCE { 2287 pKC [0] Certificate OPTIONAL, 2288 -- See [PROFILE] 2289 aC [1] SEQUENCE SIZE (1.. MAX) OF 2290 AttributeCertificate OPTIONAL, 2291 -- See [ACPROF] 2292 certPath [2] CertificateSet OPTIONAL 2293 -- From [CMS] 2294 } 2296 -- This defines the Delete GL Member control attribute 2298 skd-glDeleteMember CMC-CONTROL ::= 2299 { GLDeleteMember IDENTIFIED BY id-skd-glDeleteMember } 2301 id-skd-glDeleteMember OBJECT IDENTIFIER ::= { id-skd 4} 2303 GLDeleteMember ::= SEQUENCE { 2304 glName GeneralName, 2305 glMemberToDelete GeneralName 2306 } 2307 -- This defines the Delete GL Member control attribute 2309 skd-glRekey CMC-CONTROL ::= 2310 { GLRekey IDENTIFIED BY id-skd-glRekey } 2312 id-skd-glRekey OBJECT IDENTIFIER ::= { id-skd 5} 2314 GLRekey ::= SEQUENCE { 2315 glName GeneralName, 2316 glAdministration GLAdministration OPTIONAL, 2317 glNewKeyAttributes GLNewKeyAttributes OPTIONAL, 2318 glRekeyAllGLKeys BOOLEAN OPTIONAL 2319 } 2321 GLNewKeyAttributes ::= SEQUENCE { 2322 rekeyControlledByGLO [0] BOOLEAN OPTIONAL, 2323 recipientsNotMutuallyAware [1] BOOLEAN OPTIONAL, 2324 duration [2] INTEGER OPTIONAL, 2325 generationCounter [3] INTEGER OPTIONAL, 2326 requestedAlgorithm [4] AlgorithmIdentifier{{...}} 2327 OPTIONAL 2328 } 2330 -- This defines the Add and Delete GL Owner control attributes 2332 skd-glAddOwner CMC-CONTROL ::= 2333 { GLOwnerAdministration IDENTIFIED BY id-skd-glAddOwner } 2335 id-skd-glAddOwner OBJECT IDENTIFIER ::= { id-skd 6} 2337 skd-glRemoveOwner CMC-CONTROL ::= 2338 { GLOwnerAdministration IDENTIFIED BY id-skd-glRemoveOwner } 2340 id-skd-glRemoveOwner OBJECT IDENTIFIER ::= { id-skd 7} 2342 GLOwnerAdministration ::= SEQUENCE { 2343 glName GeneralName, 2344 glOwnerInfo GLOwnerInfo 2345 } 2347 -- This defines the GL Key Compromise control attribute. 2348 -- It has the simple type GeneralName. 2350 skd-glKeyCompromise CMC-CONTROL ::= 2351 { GLKCompromise IDENTIFIED BY id-skd-glKeyCompromise } 2353 id-skd-glKeyCompromise OBJECT IDENTIFIER ::= { id-skd 8} 2354 GLKCompromise ::= GeneralName 2355 -- This defines the GL Key Refresh control attribute. 2357 skd-glkRefresh CMC-CONTROL ::= 2358 { GLKRefresh IDENTIFIED BY id-skd-glkRefresh } 2360 id-skd-glkRefresh OBJECT IDENTIFIER ::= { id-skd 9} 2362 GLKRefresh ::= SEQUENCE { 2363 glName GeneralName, 2364 dates SEQUENCE SIZE (1..MAX) OF Date 2365 } 2367 Date ::= SEQUENCE { 2368 start GeneralizedTime, 2369 end GeneralizedTime OPTIONAL 2370 } 2372 -- This defines the GLA Query Request control attribute. 2374 skd-glaQueryRequest CMC-CONTROL ::= 2375 { GLAQueryRequest IDENTIFIED BY id-skd-glaQueryRequest } 2377 id-skd-glaQueryRequest OBJECT IDENTIFIER ::= { id-skd 11} 2379 SKD-QUERY ::= TYPE-IDENTIFIER 2381 SkdQuerySet SKD-QUERY ::= {...} 2383 GLAQueryRequest ::= SEQUENCE { 2384 glaRequestType SKD-QUERY.&id ({SkdQuerySet}), 2385 glaRequestValue SKD-QUERY. 2386 &Type ({SkdQuerySet}{@glaRequestType}) 2387 } 2389 -- This defines the GLA Query Response control attribute. 2391 skd-glaQueryResponse CMC-CONTROL ::= 2392 { GLAQueryResponse IDENTIFIED BY id-skd-glaQueryResponse } 2394 id-skd-glaQueryResponse OBJECT IDENTIFIER ::= { id-skd 12} 2396 SKD-RESPONSE ::= TYPE-IDENTIFIER 2398 SkdResponseSet SKD-RESPONSE ::= {...} 2400 GLAQueryResponse ::= SEQUENCE { 2401 glaResponseType SKD-RESPONSE. 2402 &id({SkdResponseSet}), 2404 glaResponseValue SKD-RESPONSE. 2405 &Type({SkdResponseSet}{@glaResponseType})} 2407 -- This defines the GLA Request/Response (glaRR) arc for 2408 -- glaRequestType/glaResponseType. 2410 id-cmc-glaRR OBJECT IDENTIFIER ::= 2411 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 2412 mechanisms(5) pkix(7) cmc(7) glaRR(99) } 2414 -- This defines the Algorithm Request 2416 id-cmc-gla-skdAlgRequest OBJECT IDENTIFIER ::= { id-cmc-glaRR 1 } 2417 SKDAlgRequest ::= NULL 2419 -- This defines the Algorithm Response 2421 id-cmc-gla-skdAlgResponse OBJECT IDENTIFIER ::= { id-cmc-glaRR 2 } 2423 -- Note that the response for algorithmSupported request is the 2424 -- smimeCapabilities attribute as defined in MsgSpec [MSG]. 2425 -- This defines the control attribute to request an updated 2426 -- certificate to the GLA. 2428 skd-glProvideCert CMC-CONTROL ::= 2429 { GLManageCert IDENTIFIED BY id-skd-glProvideCert } 2431 id-skd-glProvideCert OBJECT IDENTIFIER ::= { id-skd 13} 2433 GLManageCert ::= SEQUENCE { 2434 glName GeneralName, 2435 glMember GLMember 2436 } 2438 -- This defines the control attribute to return an updated 2439 -- certificate to the GLA. It has the type GLManageCert. 2441 skd-glManageCert CMC-CONTROL ::= 2442 { GLManageCert IDENTIFIED BY id-skd-glManageCert } 2444 id-skd-glManageCert OBJECT IDENTIFIER ::= { id-skd 14} 2446 -- This defines the control attribute to distribute the GL shared 2447 -- KEK. 2449 skd-glKey CMC-CONTROL ::= 2450 { GLKey IDENTIFIED BY id-skd-glKey } 2452 id-skd-glKey OBJECT IDENTIFIER ::= { id-skd 15} 2454 GLKey ::= SEQUENCE { 2455 glName GeneralName, 2456 glIdentifier KEKIdentifier, -- See [CMS] 2457 glkWrapped RecipientInfos, -- See [CMS] 2458 glkAlgorithm AlgorithmIdentifier{{...}}, 2459 glkNotBefore GeneralizedTime, 2460 glkNotAfter GeneralizedTime 2461 } 2463 -- This defines the CMC error types 2465 id-cet-skdFailInfo OBJECT IDENTIFIER ::= 2466 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 2467 mechanisms(5) pkix(7) cet(15) skdFailInfo(1) } 2469 SKDFailInfo ::= INTEGER { 2470 unspecified (0), 2471 closedGL (1), 2472 unsupportedDuration (2), 2473 noGLACertificate (3), 2474 invalidCert (4), 2475 unsupportedAlgorithm (5), 2476 noGLONameMatch (6), 2477 invalidGLName (7), 2478 nameAlreadyInUse (8), 2479 noSpam (9), 2480 deniedAccess (10), 2481 alreadyAMember (11), 2482 notAMember (12), 2483 alreadyAnOwner (13), 2484 notAnOwner (14) } 2486 END 2488 13. Security Considerations 2490 Even though all the RFCs in this document are security-related, the 2491 document itself does not have any security considerations. The ASN.1 2492 modules keep the same bits-on-the-wire as the modules that they 2493 replace. 2495 14. Normative References 2497 [ASN1-2002] 2498 ITU-T, "ITU-T Recommendation X.680 Information technology 2499 [ETH] Abstract Syntax Notation One (ASN.1): Specification 2500 of basic notation", ITU-T X.680, 2002. 2502 [NEW-PKIX] 2503 Hoffman, P. and J. Schaad, "New ASN.1 Modules for PKIX", 2504 draft-ietf-pkix-new-asn1 (work in progress), 2505 December 2007. 2507 [RFC3370] Housley, R., "Cryptographic Message Syntax (CMS) 2508 Algorithms", RFC 3370, August 2002. 2510 [RFC3565] Schaad, J., "Use of the Advanced Encryption Standard (AES) 2511 Encryption Algorithm in Cryptographic Message Syntax 2512 (CMS)", RFC 3565, July 2003. 2514 [RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail 2515 Extensions (S/MIME) Version 3.1 Message Specification", 2516 RFC 3851, July 2004. 2518 [RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)", 2519 RFC 3852, July 2004. 2521 [RFC4108] Housley, R., "Using Cryptographic Message Syntax (CMS) to 2522 Protect Firmware Packages", RFC 4108, August 2005. 2524 [RFC4998] Gondrom, T., Brandner, R., and U. Pordesch, "Evidence 2525 Record Syntax (ERS)", RFC 4998, August 2007. 2527 [RFC5035] Schaad, J., "Enhanced Security Services (ESS) Update: 2528 Adding CertID Algorithm Agility", RFC 5035, August 2007. 2530 [RFC5083] Housley, R., "Cryptographic Message Syntax (CMS) 2531 Authenticated-Enveloped-Data Content Type", RFC 5083, 2532 November 2007. 2534 [RFC5084] Housley, R., "Using AES-CCM and AES-GCM Authenticated 2535 Encryption in the Cryptographic Message Syntax (CMS)", 2536 RFC 5084, November 2007. 2538 [RFC5275] Turner, S., "CMS Symmetric Key Management and 2539 Distribution", RFC 5275, June 2008. 2541 Appendix A. Change History 2543 [[ This entire section is to be removed upon publication. ]] 2545 A.1. Changes between draft-hoffman-cms-new-asn1-00 and 2546 draft-ietf-smime-new-asn1-00 2548 Changed the draft name. 2550 Added RFC 3565, 2552 Added RFC 4998. 2554 Made RFCs-to-be 5083 and 5084 into RFCs. 2556 In RFC 3370, a line in the comment staring with "Another way to 2557 do..." was not commented out when it should have been. 2559 In RFC 3851, the name of the module from which we are importing was 2560 wrong, although the OID was right. 2562 In RFC 3852, added the "...," and "[[v:" ASN.1 idioms to indicate 2563 which version of CMS added the various extensions. 2565 A.2. Changes between draft-ietf-smime-new-asn1-00 and -01 2567 Added RFC 5275. 2569 Added module for algorithm classes, and modified RFC 3370 and RFC 2570 3852 to uses the classes defined. 2572 Authors' Addresses 2574 Paul Hoffman 2575 VPN Consortium 2576 127 Segre Place 2577 Santa Cruz, CA 95060 2578 US 2580 Phone: 1-831-426-9827 2581 Email: paul.hoffman@vpnc.org 2583 Jim Schaad 2584 Soaring Hawk Consulting 2586 Email: jimsch@exmsft.com 2588 Full Copyright Statement 2590 Copyright (C) The IETF Trust (2008). 2592 This document is subject to the rights, licenses and restrictions 2593 contained in BCP 78, and except as set forth therein, the authors 2594 retain all their rights. 2596 This document and the information contained herein are provided on an 2597 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 2598 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND 2599 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS 2600 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF 2601 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 2602 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 2604 Intellectual Property 2606 The IETF takes no position regarding the validity or scope of any 2607 Intellectual Property Rights or other rights that might be claimed to 2608 pertain to the implementation or use of the technology described in 2609 this document or the extent to which any license under such rights 2610 might or might not be available; nor does it represent that it has 2611 made any independent effort to identify any such rights. Information 2612 on the procedures with respect to rights in RFC documents can be 2613 found in BCP 78 and BCP 79. 2615 Copies of IPR disclosures made to the IETF Secretariat and any 2616 assurances of licenses to be made available, or the result of an 2617 attempt made to obtain a general license or permission for the use of 2618 such proprietary rights by implementers or users of this 2619 specification can be obtained from the IETF on-line IPR repository at 2620 http://www.ietf.org/ipr. 2622 The IETF invites any interested party to bring to its attention any 2623 copyrights, patents or patent applications, or other proprietary 2624 rights that may cover technology that may be required to implement 2625 this standard. Please address the information to the IETF at 2626 ietf-ipr@ietf.org. 2628 Acknowledgment 2630 Funding for the RFC Editor function is provided by the IETF 2631 Administrative Support Activity (IASA).