idnits 2.17.1 draft-hoffman-cms-new-asn1-00.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 17. -- Found old boilerplate from RFC 3978, Section 5.5, updated by RFC 4748 on line 1376. -- Found old boilerplate from RFC 3979, Section 5, paragraph 1 on line 1387. -- Found old boilerplate from RFC 3979, Section 5, paragraph 2 on line 1394. -- Found old boilerplate from RFC 3979, Section 5, paragraph 3 on line 1400. Checking nits according to https://www.ietf.org/id-info/1id-guidelines.txt: ---------------------------------------------------------------------------- == No 'Intended status' indicated for this document; assuming Proposed Standard 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 222: '... j INTEGER OPTIONAL, -- subgroup...' RFC 2119 keyword, line 223: '...dationParms ValidationParms OPTIONAL }...' RFC 2119 keyword, line 268: '... keyLength INTEGER (1..MAX) OPTIONAL,...' RFC 2119 keyword, line 274: '...InfoObjectSet}{@algorithm}) OPTIONAL }...' RFC 2119 keyword, line 300: '...tood. Algorithms SHOULD be ordered by...' (45 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 RFC4108, 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) -- 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 (November 8, 2007) is 6013 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 1254 -- Looks like a reference, but probably isn't: '1' on line 1257 -- Looks like a reference, but probably isn't: '2' on line 1259 == Missing Reference: 'CMSALG' is mentioned on line 340, but not defined == Missing Reference: 'CMS' is mentioned on line 351, but not defined -- Looks like a reference, but probably isn't: '3' on line 649 -- Looks like a reference, but probably isn't: '4' on line 487 == Unused Reference: 'ETH' is defined on line 1315, 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' -- Possible downref: Normative reference to a draft: ref. 'NEW-PKIX' ** Obsolete normative reference: RFC 3851 (Obsoleted by RFC 5751) ** Obsolete normative reference: RFC 3852 (Obsoleted by RFC 5652) Summary: 5 errors (**), 0 flaws (~~), 5 warnings (==), 19 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, 3851, 3852, 4108, J. Schaad 5 5035, 5083, 5084 Soaring Hawk Consulting 6 (if approved) November 8, 2007 7 Expires: May 11, 2008 9 New ASN.1 Modules for CMS and S/MIME 10 draft-hoffman-cms-new-asn1-00.txt 12 Status of this Memo 14 By submitting this Internet-Draft, each author represents that any 15 applicable patent or other IPR claims of which he or she is aware 16 have been or will be disclosed, and any of which he or she becomes 17 aware will be disclosed, in accordance with Section 6 of BCP 79. 19 Internet-Drafts are working documents of the Internet Engineering 20 Task Force (IETF), its areas, and its working groups. Note that 21 other groups may also distribute working documents as Internet- 22 Drafts. 24 Internet-Drafts are draft documents valid for a maximum of six months 25 and may be updated, replaced, or obsoleted by other documents at any 26 time. It is inappropriate to use Internet-Drafts as reference 27 material or to cite them other than as "work in progress." 29 The list of current Internet-Drafts can be accessed at 30 http://www.ietf.org/ietf/1id-abstracts.txt. 32 The list of Internet-Draft Shadow Directories can be accessed at 33 http://www.ietf.org/shadow.html. 35 This Internet-Draft will expire on May 11, 2008. 37 Copyright Notice 39 Copyright (C) The IETF Trust (2007). 41 Abstract 43 The Cryptographic Message Syntax (CMS) format, and many associated 44 formats, are expressed using ASN.1. The current ASN.1 modules 45 conform to the 1988 version of ASN.1. This document updates those 46 ASN.1 modules to conform to the 2002 version of ASN.1. There are no 47 bits-on-the-wire changes to any of the formats; this is simply a 48 change to the syntax. 50 Table of Contents 52 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . 3 53 1.1. Issues . . . . . . . . . . . . . . . . . . . . . . . . . . 3 54 1.1.1. More Modules To Be Added . . . . . . . . . . . . . . . 3 55 1.1.2. Algorithm Structure . . . . . . . . . . . . . . . . . 4 56 1.1.3. Module OIDs Changing . . . . . . . . . . . . . . . . . 4 57 2. ASN.1 Module for RFC 3370 . . . . . . . . . . . . . . . . . . 4 58 3. ASN.1 Module for RFC 3851 . . . . . . . . . . . . . . . . . . 7 59 4. ASN.1 Module for RFC 3852 . . . . . . . . . . . . . . . . . . 9 60 5. ASN.1 Module for RFC 4108 . . . . . . . . . . . . . . . . . . 18 61 6. ASN.1 Module for RFC 5035 . . . . . . . . . . . . . . . . . . 22 62 7. ASN.1 Module for RFC 5083 . . . . . . . . . . . . . . . . . . 28 63 8. ASN.1 Module for RFC 5084 . . . . . . . . . . . . . . . . . . 29 64 9. Security Considerations . . . . . . . . . . . . . . . . . . . 29 65 10. Normative References . . . . . . . . . . . . . . . . . . . . . 30 66 Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . . 30 67 Intellectual Property and Copyright Statements . . . . . . . . . . 32 69 1. Introduction 71 Some developers would like the IETF to use the latest version of 72 ASN.1 in its standards. Most of the RFCs that relate to security 73 protocols still use ASN.1 from the 1988 standard, which has been 74 deprecated. This is particularly true for the standards that relate 75 to PKIX, CMS, and S/MIME. 77 This document updates the following RFCs to use ASN.1 modules that 78 conform to the 2002 version of ASN.1 [ASN1-2002]. Note that not all 79 the modules are updated; some are included to simply make the set 80 compete. 82 o RFC 3370, CMS Algorithms [RFC3370] 84 o RFC 3851, S/MIME Version 3.1 Message Specification [RFC3851] 86 o RFC 3852, CMS main [RFC3852] 88 o RFC 4108, Using CMS to Protect Firmware Packages [RFC4108] 90 o RFC 5035, Enhanced Security Services (ESS) [RFC5035] 92 o RFC-to-be 5083, CMS Authenticated-Enveloped-Data Content Type 93 [RFC5083] 95 o RFC-to-be 5084, Using AES-CCM and AES-GCM Authenticated Encryption 96 in CMS [RFC5084] 98 Note that some of the modules in this document get some of their 99 definitions from places different than the modules in the original 100 RFCs. The idea is that these modules, when combined with the modules 101 in [NEW-PKIX] can stand on their own and do not need to import 102 definitions from anywhere else. 104 1.1. Issues 106 This section will be removed before final publication. 108 1.1.1. More Modules To Be Added 110 There are many modules from standards-track RFCs that are not listed 111 in this document or the companion document on PKIX. We will discuss 112 with the two communities which modules are appropriate for the two 113 documents. We will also consider making "super-modules", individual 114 modules which might update multiple RFCs at one time. We may also 115 add objects to some of the modules. 117 1.1.2. Algorithm Structure 119 Algorithms are currently not defined here. We need to discuss what 120 structure we want for algorithm objects. Currently, we just do 121 "parameter, OID", but we could add more. Because we don't know what 122 the final structure is, the object sets in the various modules are 123 commented out. We will fix this before finishing this project. 125 1.1.3. Module OIDs Changing 127 The OIDs given in the modules in this version of the document are the 128 same as the OIDs from the original modules, even though some of the 129 modules have changed syntax. That is clearly incorrect. In a later 130 version of this document, we will change the OIDs for every changed 131 module. 133 2. ASN.1 Module for RFC 3370 135 CryptographicMessageSyntaxAlgorithms 136 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 137 smime(16) modules(0) cmsalg-2001(16) } 138 DEFINITIONS IMPLICIT TAGS ::= 139 BEGIN 141 -- The following is easier than importing it from PKIX1Explicit88, 142 -- and makes the module stand-alone 143 ALGORITHM ::= TYPE-IDENTIFIER 145 -- Algorithm Identifiers 147 sha-1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 148 oiw(14) secsig(3) algorithm(2) 26 } 150 md5 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 151 rsadsi(113549) digestAlgorithm(2) 5 } 153 id-dsa OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 154 x9-57(10040) x9cm(4) 1 } 156 id-dsa-with-sha1 OBJECT IDENTIFIER ::= { iso(1) member-body(2) 157 us(840) x9-57(10040) x9cm(4) 3 } 159 rsaEncryption OBJECT IDENTIFIER ::= { iso(1) member-body(2) 160 us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 1 } 162 md5WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) 163 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 4 } 165 sha1WithRSAEncryption OBJECT IDENTIFIER ::= { iso(1) 166 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 5 } 168 dh-public-number OBJECT IDENTIFIER ::= { iso(1) member-body(2) 169 us(840) ansi-x942(10046) number-type(2) 1 } 171 id-alg-ESDH OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 172 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 5 } 174 id-alg-SSDH OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 175 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 10 } 177 id-alg-CMS3DESwrap OBJECT IDENTIFIER ::= { iso(1) member-body(2) 178 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 6 } 180 id-alg-CMSRC2wrap OBJECT IDENTIFIER ::= { iso(1) member-body(2) 181 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) alg(3) 7 } 183 des-ede3-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) 184 us(840) rsadsi(113549) encryptionAlgorithm(3) 7 } 186 rc2-cbc OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 187 rsadsi(113549) encryptionAlgorithm(3) 2 } 189 hMAC-SHA1 OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) 190 dod(6) internet(1) security(5) mechanisms(5) 8 1 2 } 192 id-PBKDF2 OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 193 rsadsi(113549) pkcs(1) pkcs-5(5) 12 } 195 -- Public Key Types 197 Dss-Pub-Key ::= INTEGER -- Y 199 RSAPublicKey ::= SEQUENCE { 200 modulus INTEGER, -- n 201 publicExponent INTEGER } -- e 203 DHPublicKey ::= INTEGER -- y = g^x mod p 205 -- Signature Value Types 207 Dss-Sig-Value ::= SEQUENCE { 208 r INTEGER, 209 s INTEGER } 211 -- Algorithm Identifier Parameter Types 213 Dss-Parms ::= SEQUENCE { 214 p INTEGER, 215 q INTEGER, 216 g INTEGER } 218 DHDomainParameters ::= SEQUENCE { 219 p INTEGER, -- odd prime, p=jq +1 220 g INTEGER, -- generator, g 221 q INTEGER, -- factor of p-1 222 j INTEGER OPTIONAL, -- subgroup factor 223 validationParms ValidationParms OPTIONAL } 225 ValidationParms ::= SEQUENCE { 226 seed BIT STRING, 227 pgenCounter INTEGER } 229 KeyWrapAlgorithm ::= 230 AlgorithmIdentifier {{SupportedKeyWrapAlgorithms}} 232 SupportedKeyWrapAlgorithms ALGORITHM ::= { ... } 234 RC2wrapParameter ::= RC2ParameterVersion 236 RC2ParameterVersion ::= INTEGER 238 CBCParameter ::= IV 240 IV ::= OCTET STRING -- exactly 8 octets 242 RC2CBCParameter ::= SEQUENCE { 243 rc2ParameterVersion INTEGER (1..256), 244 iv OCTET STRING } -- exactly 8 octets 246 algid-hMAC-SHA1 ALGORITHM ::= { NULL IDENTIFIED BY hMAC-SHA1 } 248 -- Another way to do the following would be: 249 -- alg-hMAC-SHA1 AlgorithmIdentifier{{PBKDF2-PRFs}} ::= 250 { algorithm hMAC-SHA1, parameters NULL:NULL } 252 PBKDF2-PRFsAlgorithmIdentifier ::= AlgorithmIdentifier{{PBKDF2-PRFs}} 254 alg-hMAC-SHA1 PBKDF2-PRFsAlgorithmIdentifier ::= 255 { algorithm hMAC-SHA1, parameters NULL:NULL } 257 PBKDF2-SaltSources ALGORITHM ::= { ... } 258 PBKDF2-PRFs ALGORITHM ::= { algid-hMAC-SHA1, ... } 260 PBKDF2-SaltSourcesAlgorithmIdentifier ::= 261 AlgorithmIdentifier {{PBKDF2-SaltSources}} 263 PBKDF2-params ::= SEQUENCE { 264 salt CHOICE { 265 specified OCTET STRING, 266 otherSource PBKDF2-SaltSourcesAlgorithmIdentifier }, 267 iterationCount INTEGER (1..MAX), 268 keyLength INTEGER (1..MAX) OPTIONAL, 269 prf PBKDF2-PRFsAlgorithmIdentifier DEFAULT 270 alg-hMAC-SHA1 } 272 AlgorithmIdentifier { ALGORITHM:InfoObjectSet } ::= SEQUENCE { 273 algorithm ALGORITHM.&id({InfoObjectSet}), 274 parameters ALGORITHM.&Type({InfoObjectSet}{@algorithm}) OPTIONAL } 276 END 278 3. ASN.1 Module for RFC 3851 280 SecureMimeMessageV3dot1 281 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 282 smime(16) modules(0) msg-v3dot1(21) } 283 DEFINITIONS IMPLICIT TAGS ::= 284 BEGIN 286 IMPORTS 288 SubjectKeyIdentifier, IssuerAndSerialNumber, RecipientKeyIdentifier 289 FROM CryptographicMessageSyntax 290 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 291 smime(16) modules(0) cms-2004(24) }; 293 -- id-aa is the arc with all new authenticated and unauthenticated 294 -- attributes produced the by S/MIME Working Group 296 id-aa OBJECT IDENTIFIER ::= {iso(1) member-body(2) usa(840) 297 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) attributes(2)} 299 -- S/MIME Capabilities provides a method of broadcasting the symmetric 300 -- capabilities understood. Algorithms SHOULD be ordered by 301 -- preference and grouped by type 302 smimeCapabilities OBJECT IDENTIFIER ::= 303 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 15} 305 SMIME-CAPS ::= TYPE-IDENTIFIER 307 SMIMECapability ::= SEQUENCE { 308 capabilityID SMIME-CAPS. 309 &id({SMimeCapsSet}), 310 parameters SMIME-CAPS. 311 &Type({SMimeCapsSet}{@capabilityID}) OPTIONAL } 313 SMimeCapsSet SMIME-CAPS ::= { ... } 315 SMIMECapabilities ::= SEQUENCE OF SMIMECapability 317 -- Encryption Key Preference provides a method of broadcasting the 318 -- preferred encryption certificate. 320 id-aa-encrypKeyPref OBJECT IDENTIFIER ::= {id-aa 11} 322 SMIMEEncryptionKeyPreference ::= CHOICE { 323 issuerAndSerialNumber [0] IssuerAndSerialNumber, 324 receipentKeyId [1] RecipientKeyIdentifier, 325 subjectAltKeyIdentifier [2] SubjectKeyIdentifier 326 } 328 id-smime OBJECT IDENTIFIER ::= { iso(1) member-body(2) 329 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 16 } 331 id-cap OBJECT IDENTIFIER ::= { id-smime 11 } 333 -- The preferBinaryInside indicates an ability to receive messages 334 -- with binary encoding inside the CMS wrapper 336 id-cap-preferBinaryInside OBJECT IDENTIFIER ::= { id-cap 1 } 338 -- The following list the OIDs to be used with S/MIME V3 340 -- Signature Algorithms Not Found in [CMSALG] 341 -- 342 -- md2WithRSAEncryption OBJECT IDENTIFIER ::= 343 -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-1(1) 344 -- 2} 345 -- 346 -- Other Signed Attributes 347 -- 348 -- signingTime OBJECT IDENTIFIER ::= 349 -- {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 350 -- 5} 351 -- See [CMS] for a description of how to encode the attribute 352 -- value. 354 SMIMECapabilitiesParametersForRC2CBC ::= INTEGER 355 -- (RC2 Key Length (number of bits)) 357 END 359 4. ASN.1 Module for RFC 3852 361 CryptographicMessageSyntax2004 362 { iso(1) member-body(2) us(840) rsadsi(113549) 363 pkcs(1) pkcs-9(9) smime(16) modules(0) cms-2004(24) } 364 DEFINITIONS IMPLICIT TAGS ::= 365 BEGIN 367 IMPORTS 369 ALGORITHM, Certificate, CertificateList, CertificateSerialNumber, 370 Name 371 FROM PKIX1Explicit88 372 { iso(1) identified-organization(3) dod(6) internet(1) 373 security(5) mechanisms(5) pkix(7) id-mod(0) 374 id-pkix1-explicit(18) } 376 AttributeCertificate 377 FROM PKIXAttributeCertificate 378 { iso(1) identified-organization(3) dod(6) internet(1) 379 security(5) mechanisms(5) pkix(7) id-mod(0) 380 id-mod-attribute-cert(12) } 382 AttributeCertificateV1 383 FROM AttributeCertificateVersion1 384 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 385 smime(16) modules(0) v1AttrCert(15) } ; 387 -- Cryptographic Message Syntax 389 CONTENT-TYPE ::= TYPE-IDENTIFIER 390 ContentType ::= OBJECT IDENTIFIER 392 ContentInfo ::= SEQUENCE { 393 contentType CONTENT-TYPE. 394 &id({ContentSet}), 396 content [0] EXPLICIT CONTENT-TYPE. 397 &Type({ContentSet}{@contentType})} 399 ContentSet CONTENT-TYPE ::= { 400 -- Define the set of content types to be recognized. 401 ct-Data | ct-SignedData | ct-EncryptedData | ct-EnvelopedData | 402 ct-AuthenticatedData | ct-DigestedData, ... } 404 SignedData ::= SEQUENCE { 405 version CMSVersion, 406 digestAlgorithms SET OF DigestAlgorithmIdentifier, 407 encapContentInfo EncapsulatedContentInfo, 408 certificates [0] IMPLICIT CertificateSet OPTIONAL, 409 crls [1] IMPLICIT RevocationInfoChoices OPTIONAL, 410 signerInfos SignerInfos } 412 DigestAlgorithmList ALGORITHM ::= { -- alg-sha-1 | alg-md5, -- ... } 414 SignatureAlgorithmList ALGORITHM ::= 415 { -- alg-dsa-with-sha1 | alg-md5WithRSAEncryption -- 416 -- | alg-sha1WithRSAEncryption, -- ... } 418 SignerInfos ::= SET OF SignerInfo 420 EncapsulatedContentInfo ::= SEQUENCE { 421 eContentType CONTENT-TYPE.&id({ContentSet}), 422 eContent [0] EXPLICIT OCTET STRING 423 ( CONTAINING CONTENT-TYPE. 424 &Type({ContentSet}{@eContentType})) OPTIONAL } 426 SignerInfo ::= SEQUENCE { 427 version CMSVersion, 428 sid SignerIdentifier, 429 digestAlgorithm DigestAlgorithmIdentifier, 430 signedAttrs [0] IMPLICIT AuthAttributes OPTIONAL, 431 signatureAlgorithm SignatureAlgorithmIdentifier, 432 signature SignatureValue, 433 unsignedAttrs [1] IMPLICIT Attributes 434 {{UnsignedAttributes}} OPTIONAL } 436 AuthAttributes ::= Attributes {{ SignedAttributes }} 438 SignerIdentifier ::= CHOICE { 439 issuerAndSerialNumber IssuerAndSerialNumber, 440 subjectKeyIdentifier [0] SubjectKeyIdentifier } 442 SignedAttributes ATTRIBUTE ::= 443 { attr-signingTime | attr-messageDigest | attr-contentType, ... } 445 UnsignedAttributes ATTRIBUTE ::= { attr-countersignature, ... } 447 SignatureValue ::= OCTET STRING 449 EnvelopedData ::= SEQUENCE { 450 version CMSVersion, 451 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 452 recipientInfos RecipientInfos, 453 encryptedContentInfo EncryptedContentInfo, 454 unprotectedAttrs [1] IMPLICIT Attributes 455 {{UnprotectedAttributes}} OPTIONAL } 457 OriginatorInfo ::= SEQUENCE { 458 certs [0] IMPLICIT CertificateSet OPTIONAL, 459 crls [1] IMPLICIT RevocationInfoChoices OPTIONAL } 461 RecipientInfos ::= SET SIZE (1..MAX) OF RecipientInfo 463 EncryptedContentInfo ::= SEQUENCE { 464 contentType CONTENT-TYPE.&id({ContentSet}), 465 contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 466 encryptedContent [0] IMPLICIT OCTET STRING OPTIONAL } 468 -- If you want to do constraints, you might use: 469 -- EncryptedContentInfo ::= SEQUENCE { 470 -- contentType CONTENT-TYPE.&id({ContentSet}), 471 -- contentEncryptionAlgorithm ContentEncryptionAlgorithmIdentifier, 472 -- encryptedContent [0] IMPLICIT ENCRYPTED {CONTENT-TYPE. 473 -- &Type({ContentSet}{@contentType}) OPTIONAL } 474 -- ENCRYPTED {ToBeEncrypted} ::= OCTET STRING ( CONSTRAINED BY 475 -- { ToBeEncrypted } ) 477 ContentEncryptionAlgorithmList ALGORITHM ::= 478 { -- alg-des-ede3-cbc | alg-rd2-cbc, -- ... } 480 UnprotectedAttributes ATTRIBUTE ::= { ... } 482 RecipientInfo ::= CHOICE { 483 ktri KeyTransRecipientInfo, 484 kari [1] KeyAgreeRecipientInfo, 485 kekri [2] KEKRecipientInfo, 486 pwri [3] PasswordRecipientInfo, 487 ori [4] OtherRecipientInfo } 489 EncryptedKey ::= OCTET STRING 491 KeyTransRecipientInfo ::= SEQUENCE { 492 version CMSVersion, -- always set to 0 or 2 493 rid RecipientIdentifier, 494 keyEncryptionAlgorithm AlgorithmIdentifier 495 {{KeyTransportAlgorithmList}}, 496 encryptedKey EncryptedKey } 498 KeyTransportAlgorithmList ALGORITHM ::= 499 { -- alg-rsaEncryption, -- ... } 501 RecipientIdentifier ::= CHOICE { 502 issuerAndSerialNumber IssuerAndSerialNumber, 503 subjectKeyIdentifier [0] SubjectKeyIdentifier } 505 KeyAgreeRecipientInfo ::= SEQUENCE { 506 version CMSVersion, -- always set to 3 507 originator [0] EXPLICIT OriginatorIdentifierOrKey, 508 ukm [1] EXPLICIT UserKeyingMaterial OPTIONAL, 509 keyEncryptionAlgorithm AlgorithmIdentifier 510 {{KeyAgreementAlgorithmList}}, 511 recipientEncryptedKeys RecipientEncryptedKeys } 513 KeyAgreementAlgorithmList ALGORITHM ::= 514 { -- alg-ESDH | alg-SSDH, -- ... } 516 OriginatorIdentifierOrKey ::= CHOICE { 517 issuerAndSerialNumber IssuerAndSerialNumber, 518 subjectKeyIdentifier [0] SubjectKeyIdentifier, 519 originatorKey [1] OriginatorPublicKey } 521 OriginatorPublicKey ::= SEQUENCE { 522 algorithm AlgorithmIdentifier {{AlgorithmList}}, 523 publicKey BIT STRING } 525 RecipientEncryptedKeys ::= SEQUENCE OF RecipientEncryptedKey 527 RecipientEncryptedKey ::= SEQUENCE { 528 rid KeyAgreeRecipientIdentifier, 529 encryptedKey EncryptedKey } 531 KeyEncryptKeyAlgorithmList ALGORITHM ::= 532 { -- alg-CMS3DESwrap | alg-CMSRC2wrap, -- ... } 534 KeyEncryptionAlgorithmList ALGORITHM ::= { ... } 536 KeyAgreeRecipientIdentifier ::= CHOICE { 537 issuerAndSerialNumber IssuerAndSerialNumber, 538 rKeyId [0] IMPLICIT RecipientKeyIdentifier } 540 RecipientKeyIdentifier ::= SEQUENCE { 541 subjectKeyIdentifier SubjectKeyIdentifier, 542 date GeneralizedTime OPTIONAL, 543 other OtherKeyAttribute OPTIONAL } 545 SubjectKeyIdentifier ::= OCTET STRING 547 KEKRecipientInfo ::= SEQUENCE { 548 version CMSVersion, -- always set to 4 549 kekid KEKIdentifier, 550 keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, 551 encryptedKey EncryptedKey } 553 KEKIdentifier ::= SEQUENCE { 554 keyIdentifier OCTET STRING, 555 date GeneralizedTime OPTIONAL, 556 other OtherKeyAttribute OPTIONAL } 558 PasswordRecipientInfo ::= SEQUENCE { 559 version CMSVersion, -- always set to 0 560 keyDerivationAlgorithm [0] KeyDerivationAlgorithmIdentifier 561 OPTIONAL, 562 keyEncryptionAlgorithm KeyEncryptionAlgorithmIdentifier, 563 encryptedKey EncryptedKey } 565 OTHER-RECIPIENT ::= TYPE-IDENTIFIER 567 OtherRecipientInfo ::= SEQUENCE { 568 oriType OTHER-RECIPIENT. 569 &id({SupportedOtherRecipInfo}), 570 oriValue OTHER-RECIPIENT. 571 &Type({SupportedOtherRecipInfo}{@oriType})} 573 SupportedOtherRecipInfo OTHER-RECIPIENT ::= { ... } 575 DigestedData ::= SEQUENCE { 576 version CMSVersion, 577 digestAlgorithm DigestAlgorithmIdentifier, 578 encapContentInfo EncapsulatedContentInfo, 579 digest Digest } 581 Digest ::= OCTET STRING 583 EncryptedData ::= SEQUENCE { 584 version CMSVersion, 585 encryptedContentInfo EncryptedContentInfo, 586 unprotectedAttrs [1] IMPLICIT Attributes 587 {{UnprotectedAttributes}} OPTIONAL } 589 AuthenticatedData ::= SEQUENCE { 590 version CMSVersion, 591 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 592 recipientInfos RecipientInfos, 593 macAlgorithm MessageAuthenticationCodeAlgorithm, 594 digestAlgorithm [1] DigestAlgorithmIdentifier OPTIONAL, 595 encapContentInfo EncapsulatedContentInfo, 596 authAttrs [2] IMPLICIT AuthAttributes OPTIONAL, 597 mac MessageAuthenticationCode, 598 unauthAttrs [3] IMPLICIT UnauthAttributes OPTIONAL } 600 AuthAttributes ::= SET SIZE (1..MAX) OF Attribute 601 {{SupportedAttributes}} 603 UnauthAttributes ::= SET SIZE (1..MAX) OF Attribute 604 {{SupportedAttributes}} 606 MessageAuthenticationCode ::= OCTET STRING 608 DigestAlgorithmIdentifier ::= AlgorithmIdentifier 609 {{DigestAlgorithmList}} 611 SignatureAlgorithmIdentifier ::= AlgorithmIdentifier 612 {{SignatureAlgorithmList}} 614 KeyEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier 615 {{KeyEncryptionAlgorithmList}} 617 ContentEncryptionAlgorithmIdentifier ::= AlgorithmIdentifier 618 {{ContentEncryptionAlgorithmList}} 620 MessageAuthenticationCodeAlgorithm ::= AlgorithmIdentifier 621 {{AlgorithmList}} 623 KeyDerivationAlgorithmIdentifier ::= AlgorithmIdentifier 624 {{AlgorithmList}} 626 AlgorithmList ALGORITHM ::= { ... } 628 RevocationInfoChoices ::= SET OF RevocationInfoChoice 630 RevocationInfoChoice ::= CHOICE { 631 crl CertificateList, 632 other [1] IMPLICIT OtherRevocationInfoFormat } 634 OTHER-REVOK-INFO ::= TYPE-IDENTIFIER 636 OtherRevocationInfoFormat ::= SEQUENCE { 637 otherRevInfoFormat OTHER-REVOK-INFO. 638 &id({SupportedOtherRevokInfo}), 639 otherRevInfo OTHER-REVOK-INFO. 640 &Type({SupportedOtherRevokInfo}{@otherRevInfoFormat})} 642 SupportedOtherRevokInfo OTHER-REVOK-INFO ::= { ... } 644 CertificateChoices ::= CHOICE { 645 certificate Certificate, 646 extendedCertificate [0] IMPLICIT ExtendedCertificate, -- Obsolete 647 v1AttrCert [1] IMPLICIT AttributeCertificateV1, -- Obsolete 648 v2AttrCert [2] IMPLICIT AttributeCertificateV2, 649 other [3] IMPLICIT OtherCertificateFormat } 651 AttributeCertificateV2 ::= AttributeCertificate 653 OTHER-CERT-FMT ::= TYPE-IDENTIFIER 655 OtherCertificateFormat ::= SEQUENCE { 656 otherCertFormat OTHER-CERT-FMT. 657 &id({SupportedCertFormats}), 658 otherCert OTHER-CERT-FMT. 659 &Type({SupportedCertFormats}{@otherCertFormat})} 661 SupportedCertFormats OTHER-CERT-FMT ::= { ... } 663 CertificateSet ::= SET OF CertificateChoices 665 IssuerAndSerialNumber ::= SEQUENCE { 666 issuer Name, 667 serialNumber CertificateSerialNumber } 669 CMSVersion ::= INTEGER { v0(0), v1(1), v2(2), v3(3), v4(4), v5(5) } 671 UserKeyingMaterial ::= OCTET STRING 673 KEY-ATTRIBUTE ::= TYPE-IDENTIFIER 675 OtherKeyAttribute ::= SEQUENCE { 676 keyAttrId KEY-ATTRIBUTE. 677 &id({SupportedKeyAttributes}), 678 keyAttr KEY-ATTRIBUTE. 679 &Type({SupportedKeyAttributes}{@keyAttrId})} 681 SupportedKeyAttributes KEY-ATTRIBUTE ::= { ... } 683 -- Content Type Object Identifiers 684 id-ct-contentInfo OBJECT IDENTIFIER ::= { iso(1) member-body(2) 685 us(840) rsadsi(113549) pkcs(1) pkcs9(9) smime(16) ct(1) 6 } 687 ct-Data CONTENT-TYPE ::= {OCTET STRING IDENTIFIED BY id-data} 689 id-data OBJECT IDENTIFIER ::= { iso(1) member-body(2) 690 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 1 } 692 ct-SignedData CONTENT-TYPE ::= 693 { SignedData IDENTIFIED BY id-signedData} 695 id-signedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 696 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 2 } 698 ct-EnvelopedData CONTENT-TYPE ::= 699 { EnvelopedData IDENTIFIED BY id-envelopedData} 701 id-envelopedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 702 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 3 } 704 ct-DigestedData CONTENT-TYPE ::= 705 { DigestedData IDENTIFIED BY id-digestedData} 707 id-digestedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 708 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 5 } 710 ct-EncryptedData CONTENT-TYPE ::= 711 { EncryptedData IDENTIFIED BY id-encryptedData} 713 id-encryptedData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 714 us(840) rsadsi(113549) pkcs(1) pkcs7(7) 6 } 716 ct-AuthenticatedData CONTENT-TYPE ::= 717 { AuthenticatedData IDENTIFIED BY id-ct-authData} 719 id-ct-authData OBJECT IDENTIFIER ::= { iso(1) member-body(2) 720 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) ct(1) 2 } 722 -- The CMS Attributes 724 MessageDigest ::= OCTET STRING 726 SigningTime ::= Time 728 Time ::= CHOICE { 729 utcTime UTCTime, 730 generalTime GeneralizedTime } 732 Countersignature ::= SignerInfo 734 -- Attribute Object Identifiers 736 attr-contentType ATTRIBUTE ::= 737 { ContentType IDENTIFIED BY id-contentType } 739 id-contentType OBJECT IDENTIFIER ::= { iso(1) member-body(2) 740 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 3 } 742 attr-messageDigest ATTRIBUTE ::= 743 { OCTET STRING IDENTIFIED BY id-messageDigest} 745 id-messageDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) 746 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 4 } 748 attr-signingTime ATTRIBUTE ::= 749 { Time IDENTIFIED BY id-signingTime } 751 id-signingTime OBJECT IDENTIFIER ::= { iso(1) member-body(2) 752 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 5 } 754 attr-countersignature ATTRIBUTE ::= 755 { SignerInfo IDENTIFIED BY id-countersignature } 757 id-countersignature OBJECT IDENTIFIER ::= { iso(1) member-body(2) 758 us(840) rsadsi(113549) pkcs(1) pkcs9(9) 6 } 760 -- Obsolete Extended Certificate syntax from PKCS#6 762 ExtendedCertificateOrCertificate ::= CHOICE { 763 certificate Certificate, 764 extendedCertificate [0] IMPLICIT ExtendedCertificate } 766 ExtendedCertificate ::= SEQUENCE { 767 extendedCertificateInfo ExtendedCertificateInfo, 768 signatureAlgorithm SignatureAlgorithmIdentifier, 769 signature Signature } 771 ExtendedCertificateInfo ::= SEQUENCE { 772 version CMSVersion, 773 certificate Certificate, 774 attributes UnauthAttributes } 776 Signature ::= BIT STRING 778 -- Class definitions used in the module 779 AlgorithmIdentifier { ALGORITHM:IOSet } ::= SEQUENCE { 780 algorithm ALGORITHM.&id({IOSet}), 781 parameters ALGORITHM.&Type({IOSet}{@algorithm}) OPTIONAL } 783 ATTRIBUTE ::= TYPE-IDENTIFIER 785 Attribute{ATTRIBUTE: AttrList} ::= SEQUENCE { 786 attrType ATTRIBUTE. 787 &id({AttrList}), 788 attrValues SET OF ATTRIBUTE. 789 &Type({AttrList}{@attrType}) } 791 SupportedAttributes ATTRIBUTE ::= { ... } 793 Attributes { ATTRIBUTE:AttrList } ::= 794 SET SIZE (1..MAX) OF Attribute {{ AttrList }} 796 END 798 5. ASN.1 Module for RFC 4108 800 CMSFirmwareWrapper 801 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 802 smime(16) modules(0) cms-firmware-wrap(22) } 803 DEFINITIONS IMPLICIT TAGS ::= 804 BEGIN 806 IMPORTS 808 EnvelopedData 809 FROM CryptographicMessageSyntax 810 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 811 smime(16) modules(0) cms-2004(24) }; 813 -- Firmware Package Content Type and Object Identifier 815 id-ct-firmwarePackage OBJECT IDENTIFIER ::= { 816 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 817 smime(16) ct(1) 16 } 819 FirmwarePkgData ::= OCTET STRING 821 -- Firmware Package Signed Attributes and Object Identifiers 823 id-aa-firmwarePackageID OBJECT IDENTIFIER ::= { 824 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 825 smime(16) aa(2) 35 } 827 FirmwarePackageIdentifier ::= SEQUENCE { 828 name PreferredOrLegacyPackageIdentifier, 829 stale PreferredOrLegacyStalePackageIdentifier OPTIONAL } 831 PreferredOrLegacyPackageIdentifier ::= CHOICE { 832 preferred PreferredPackageIdentifier, 833 legacy OCTET STRING } 835 PreferredPackageIdentifier ::= SEQUENCE { 836 fwPkgID OBJECT IDENTIFIER, 837 verNum INTEGER (0..MAX) } 839 PreferredOrLegacyStalePackageIdentifier ::= CHOICE { 840 preferredStaleVerNum INTEGER (0..MAX), 841 legacyStaleVersion OCTET STRING } 843 id-aa-targetHardwareIDs OBJECT IDENTIFIER ::= { 844 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 845 smime(16) aa(2) 36 } 847 TargetHardwareIdentifiers ::= SEQUENCE OF OBJECT IDENTIFIER 849 id-aa-decryptKeyID OBJECT IDENTIFIER ::= { 850 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 851 smime(16) aa(2) 37 } 853 DecryptKeyIdentifier ::= OCTET STRING 855 id-aa-implCryptoAlgs OBJECT IDENTIFIER ::= { 856 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 857 smime(16) aa(2) 38 } 859 ImplementedCryptoAlgorithms ::= SEQUENCE OF OBJECT IDENTIFIER 861 id-aa-implCompressAlgs OBJECT IDENTIFIER ::= { 862 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 863 smime(16) aa(2) 43 } 865 ImplementedCompressAlgorithms ::= SEQUENCE OF OBJECT IDENTIFIER 867 id-aa-communityIdentifiers OBJECT IDENTIFIER ::= { 868 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 869 smime(16) aa(2) 40 } 871 CommunityIdentifiers ::= SEQUENCE OF CommunityIdentifier 873 CommunityIdentifier ::= CHOICE { 874 communityOID OBJECT IDENTIFIER, 875 hwModuleList HardwareModules } 877 HardwareModules ::= SEQUENCE { 878 hwType OBJECT IDENTIFIER, 879 hwSerialEntries SEQUENCE OF HardwareSerialEntry } 881 HardwareSerialEntry ::= CHOICE { 882 all NULL, 883 single OCTET STRING, 884 block SEQUENCE { 885 low OCTET STRING, 886 high OCTET STRING } } 888 id-aa-firmwarePackageInfo OBJECT IDENTIFIER ::= { 889 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 890 smime(16) aa(2) 42 } 892 FirmwarePackageInfo ::= SEQUENCE { 893 fwPkgType INTEGER OPTIONAL, 894 dependencies SEQUENCE OF 895 PreferredOrLegacyPackageIdentifier OPTIONAL } 897 -- Firmware Package Unsigned Attributes and Object Identifiers 899 id-aa-wrappedFirmwareKey OBJECT IDENTIFIER ::= { 900 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 901 smime(16) aa(2) 39 } 903 WrappedFirmwareKey ::= EnvelopedData 905 -- Firmware Package Load Receipt Content Type and Object Identifier 907 id-ct-firmwareLoadReceipt OBJECT IDENTIFIER ::= { 908 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 909 smime(16) ct(1) 17 } 911 FirmwarePackageLoadReceipt ::= SEQUENCE { 912 version FWReceiptVersion DEFAULT v1, 913 hwType OBJECT IDENTIFIER, 914 hwSerialNum OCTET STRING, 915 fwPkgName PreferredOrLegacyPackageIdentifier, 916 trustAnchorKeyID OCTET STRING OPTIONAL, 917 decryptKeyID [1] OCTET STRING OPTIONAL } 919 FWReceiptVersion ::= INTEGER { v1(1) } 921 -- Firmware Package Load Error Report Content Type 922 -- and Object Identifier 924 id-ct-firmwareLoadError OBJECT IDENTIFIER ::= { 925 iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 926 smime(16) ct(1) 18 } 928 FirmwarePackageLoadError ::= SEQUENCE { 929 version FWErrorVersion DEFAULT v1, 930 hwType OBJECT IDENTIFIER, 931 hwSerialNum OCTET STRING, 932 errorCode FirmwarePackageLoadErrorCode, 933 vendorErrorCode VendorLoadErrorCode OPTIONAL, 934 fwPkgName PreferredOrLegacyPackageIdentifier OPTIONAL, 935 config [1] SEQUENCE OF CurrentFWConfig OPTIONAL } 937 FWErrorVersion ::= INTEGER { v1(1) } 939 CurrentFWConfig ::= SEQUENCE { 940 fwPkgType INTEGER OPTIONAL, 941 fwPkgName PreferredOrLegacyPackageIdentifier } 943 FirmwarePackageLoadErrorCode ::= ENUMERATED { 944 decodeFailure (1), 945 badContentInfo (2), 946 badSignedData (3), 947 badEncapContent (4), 948 badCertificate (5), 949 badSignerInfo (6), 950 badSignedAttrs (7), 951 badUnsignedAttrs (8), 952 missingContent (9), 953 noTrustAnchor (10), 954 notAuthorized (11), 955 badDigestAlgorithm (12), 956 badSignatureAlgorithm (13), 957 unsupportedKeySize (14), 958 signatureFailure (15), 959 contentTypeMismatch (16), 960 badEncryptedData (17), 961 unprotectedAttrsPresent (18), 962 badEncryptContent (19), 963 badEncryptAlgorithm (20), 964 missingCiphertext (21), 965 noDecryptKey (22), 966 decryptFailure (23), 967 badCompressAlgorithm (24), 968 missingCompressedContent (25), 969 decompressFailure (26), 970 wrongHardware (27), 971 stalePackage (28), 972 notInCommunity (29), 973 unsupportedPackageType (30), 974 missingDependency (31), 975 wrongDependencyVersion (32), 976 insufficientMemory (33), 977 badFirmware (34), 978 unsupportedParameters (35), 979 breaksDependency (36), 980 otherError (99) } 982 VendorLoadErrorCode ::= INTEGER 984 -- Other Name syntax for Hardware Module Name 986 id-on-hardwareModuleName OBJECT IDENTIFIER ::= { 987 iso(1) identified-organization(3) dod(6) internet(1) security(5) 988 mechanisms(5) pkix(7) on(8) 4 } 990 HardwareModuleName ::= SEQUENCE { 991 hwType OBJECT IDENTIFIER, 992 hwSerialNum OCTET STRING } 994 END 996 6. ASN.1 Module for RFC 5035 998 ExtendedSecurityServices-2006 999 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1000 smime(16) modules(0) id-mod-ess-2006(30) } 1001 DEFINITIONS IMPLICIT TAGS ::= 1002 BEGIN 1004 IMPORTS 1006 ContentType, IssuerAndSerialNumber, SubjectKeyIdentifier 1007 FROM CryptographicMessageSyntax2004 1008 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1009 smime(16) modules(0) cms-2004(24) } 1011 AlgorithmIdentifier, CertificateSerialNumber 1012 FROM PKIX1Explicit88 1013 { iso(1) identified-organization(3) dod(6) internet(1) security(5) 1014 mechanisms(5) pkix(7) id-mod(0) id-pkix1-explicit(18) } 1016 PolicyInformation, GeneralNames 1017 FROM PKIX1Implicit88 1018 {iso(1) identified-organization(3) dod(6) internet(1) security(5) 1019 mechanisms(5) pkix(7) id-mod(0) id-pkix1-implicit(19)}; 1021 -- Extended Security Services 1022 -- The construct "SEQUENCE SIZE (1..MAX) OF" appears in several ASN.1 1023 -- constructs in this module. A valid ASN.1 SEQUENCE can have zero or 1024 -- more entries. The SIZE (1..MAX) construct constrains the SEQUENCE 1025 -- tp have at least one entry. MAX indicates the upper bound is 1026 -- unspecified. Implementations are free to choose an upper bound 1027 -- that suits their environment. 1029 -- Section 2.7 1031 ReceiptRequest ::= SEQUENCE { 1032 signedContentIdentifier ContentIdentifier, 1033 receiptsFrom ReceiptsFrom, 1034 receiptsTo SEQUENCE SIZE (1..ub-receiptsTo) OF GeneralNames 1035 } 1037 ub-receiptsTo INTEGER ::= 16 1039 id-aa-receiptRequest OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1040 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 1} 1042 ContentIdentifier ::= OCTET STRING 1044 id-aa-contentIdentifier OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1045 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 7} 1047 ReceiptsFrom ::= CHOICE { 1048 allOrFirstTier [0] AllOrFirstTier, 1049 -- formerly "allOrNone [0]AllOrNone" 1050 receiptList [1] SEQUENCE OF GeneralNames } 1052 AllOrFirstTier ::= INTEGER { -- Formerly AllOrNone 1053 allReceipts (0), 1054 firstTierRecipients (1) } 1056 -- Section 2.8 1058 Receipt ::= SEQUENCE { 1059 version ESSVersion, 1060 contentType ContentType, 1061 signedContentIdentifier ContentIdentifier, 1062 originatorSignatureValue OCTET STRING } 1064 id-ct-receipt OBJECT IDENTIFIER ::= { iso(1) member-body(2) us(840) 1065 rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-ct(1) 1} 1067 ESSVersion ::= INTEGER { v1(1) } 1069 -- Section 2.9 1071 ContentHints ::= SEQUENCE { 1072 contentDescription UTF8String (SIZE (1..MAX)) OPTIONAL, 1073 contentType ContentType } 1075 id-aa-contentHint OBJECT IDENTIFIER ::= 1076 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1077 smime(16) id-aa(2) 4} 1079 -- Section 2.10 1081 MsgSigDigest ::= OCTET STRING 1083 id-aa-msgSigDigest OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1084 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 5} 1086 -- Section 2.11 1088 ContentReference ::= SEQUENCE { 1089 contentType ContentType, 1090 signedContentIdentifier ContentIdentifier, 1091 originatorSignatureValue OCTET STRING } 1093 id-aa-contentReference OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1094 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 10 } 1096 -- Section 3.2 1098 ESSSecurityLabel ::= SET { 1099 security-policy-identifier SecurityPolicyIdentifier, 1100 security-classification SecurityClassification OPTIONAL, 1101 privacy-mark ESSPrivacyMark OPTIONAL, 1102 security-categories SecurityCategories OPTIONAL } 1104 id-aa-securityLabel OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1105 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 2} 1106 SecurityPolicyIdentifier ::= OBJECT IDENTIFIER 1108 SecurityClassification ::= INTEGER { 1109 unmarked (0), 1110 unclassified (1), 1111 restricted (2), 1112 confidential (3), 1113 secret (4), 1114 top-secret (5) 1115 } (0..ub-integer-options) 1117 ub-integer-options INTEGER ::= 256 1119 ESSPrivacyMark ::= CHOICE { 1120 pString PrintableString (SIZE (1..ub-privacy-mark-length)), 1121 utf8String UTF8String (SIZE (1..MAX)) 1122 } 1124 ub-privacy-mark-length INTEGER ::= 128 1126 SecurityCategories ::= SET SIZE (1..ub-security-categories) OF 1127 SecurityCategory 1129 ub-security-categories INTEGER ::= 64 1131 SECURITY-CATEGORY ::= TYPE-IDENTIFIER 1133 SecurityCategory ::= SEQUENCE { 1134 type [0] SECURITY-CATEGORY. 1135 &id({SupportedSecurityCategories}), 1136 value [1] SECURITY-CATEGORY. 1137 &Type({SupportedSecurityCategories}{@type}) 1138 } 1140 SupportedSecurityCategories SECURITY-CATEGORY ::= { ... } 1142 --Note: The aforementioned SecurityCategory syntax produces identical 1143 --hex encodings as the following SecurityCategory syntax that is 1144 --documented in the X.411 specification: 1145 -- 1146 --SecurityCategory ::= SEQUENCE { 1147 -- type [0] SECURITY-CATEGORY, 1148 -- value [1] ANY DEFINED BY type } 1149 -- 1150 --SECURITY-CATEGORY MACRO ::= 1151 --BEGIN 1152 --TYPE NOTATION ::= type | empty 1153 --VALUE NOTATION ::= value (VALUE OBJECT IDENTIFIER) 1154 --END 1156 -- Section 3.4 1157 EquivalentLabels ::= SEQUENCE OF ESSSecurityLabel 1159 id-aa-equivalentLabels OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1160 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 9} 1162 -- Section 4.4 1164 MLExpansionHistory ::= SEQUENCE 1165 SIZE (1..ub-ml-expansion-history) OF MLData 1167 id-aa-mlExpandHistory OBJECT IDENTIFIER ::= { iso(1) member-body(2) 1168 us(840) rsadsi(113549) pkcs(1) pkcs-9(9) smime(16) id-aa(2) 3 } 1170 ub-ml-expansion-history INTEGER ::= 64 1172 MLData ::= SEQUENCE { 1173 mailListIdentifier EntityIdentifier, 1174 expansionTime GeneralizedTime, 1175 mlReceiptPolicy MLReceiptPolicy OPTIONAL } 1177 EntityIdentifier ::= CHOICE { 1178 issuerAndSerialNumber IssuerAndSerialNumber, 1179 subjectKeyIdentifier SubjectKeyIdentifier } 1181 MLReceiptPolicy ::= CHOICE { 1182 none [0] NULL, 1183 insteadOf [1] SEQUENCE SIZE (1..MAX) OF GeneralNames, 1184 inAdditionTo [2] SEQUENCE SIZE (1..MAX) OF GeneralNames } 1186 -- Section 5.4 1188 SigningCertificate ::= SEQUENCE { 1189 certs SEQUENCE OF ESSCertID, 1190 policies SEQUENCE OF PolicyInformation OPTIONAL 1191 } 1193 id-aa-signingCertificate OBJECT IDENTIFIER ::= { iso(1) 1194 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1195 smime(16) id-aa(2) 12 } 1197 SigningCertificateV2 ::= SEQUENCE { 1198 certs SEQUENCE OF ESSCertIDv2, 1199 policies SEQUENCE OF PolicyInformation OPTIONAL 1200 } 1202 id-aa-signingCertificateV2 OBJECT IDENTIFIER ::= { iso(1) 1203 member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs9(9) 1204 smime(16) id-aa(2) 47 } 1206 id-sha256 OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) 1207 country(16) us(840) organization(1) gov(101) 1208 csor(3) nistalgorithm(4) hashalgs(2) 1 } 1210 ESSCertIDv2 ::= SEQUENCE { 1211 hashAlgorithm AlgorithmIdentifier 1212 DEFAULT { algorithm id-sha256 }, 1213 certHash Hash, 1214 issuerSerial IssuerSerial OPTIONAL 1215 } 1217 ESSCertID ::= SEQUENCE { 1218 certHash Hash, 1219 issuerSerial IssuerSerial OPTIONAL 1220 } 1222 Hash ::= OCTET STRING 1224 IssuerSerial ::= SEQUENCE { 1225 issuer GeneralNames, 1226 serialNumber CertificateSerialNumber 1227 } 1229 END 1231 7. ASN.1 Module for RFC 5083 1233 CMS-AuthEnvelopedData-2007 1234 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1235 pkcs-9(9) smime(16) modules(0) cms-authEnvelopedData(31) } 1236 DEFINITIONS IMPLICIT TAGS ::= 1237 BEGIN 1239 IMPORTS 1241 AuthAttributes, CMSVersion, EncryptedContentInfo, 1242 MessageAuthenticationCode, OriginatorInfo, RecipientInfos, 1243 UnauthAttributes 1244 FROM CryptographicMessageSyntax2004 1245 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1246 smime(16) modules(0) cms-2004(24) } ; 1248 id-ct-authEnvelopedData OBJECT IDENTIFIER ::= 1249 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-9(9) 1250 smime(16) ct(1) 23 } 1252 AuthEnvelopedData ::= SEQUENCE { 1253 version CMSVersion, 1254 originatorInfo [0] IMPLICIT OriginatorInfo OPTIONAL, 1255 recipientInfos RecipientInfos, 1256 authEncryptedContentInfo EncryptedContentInfo, 1257 authAttrs [1] IMPLICIT AuthAttributes OPTIONAL, 1258 mac MessageAuthenticationCode, 1259 unauthAttrs [2] IMPLICIT UnauthAttributes OPTIONAL } 1261 END 1263 8. ASN.1 Module for RFC 5084 1265 CMS-AES-CCM-and-AES-GCM 1266 { iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) 1267 pkcs-9(9) smime(16) modules(0) cms-aes-ccm-and-gcm(32) } 1268 DEFINITIONS IMPLICIT TAGS ::= 1269 BEGIN 1271 -- Object Identifiers 1273 aes OBJECT IDENTIFIER ::= { joint-iso-itu-t(2) country(16) us(840) 1274 organization(1) gov(101) csor(3) nistAlgorithm(4) 1 } 1276 id-aes128-CCM OBJECT IDENTIFIER ::= { aes 7 } 1278 id-aes192-CCM OBJECT IDENTIFIER ::= { aes 27 } 1280 id-aes256-CCM OBJECT IDENTIFIER ::= { aes 47 } 1282 id-aes128-GCM OBJECT IDENTIFIER ::= { aes 6 } 1284 id-aes192-GCM OBJECT IDENTIFIER ::= { aes 26 } 1286 id-aes256-GCM OBJECT IDENTIFIER ::= { aes 46 } 1288 -- Parameters for AigorithmIdentifier 1290 CCMParameters ::= SEQUENCE { 1291 aes-nonce OCTET STRING (SIZE(7..13)), 1292 aes-ICVlen AES-CCM-ICVlen DEFAULT 12 } 1294 AES-CCM-ICVlen ::= INTEGER (4 | 6 | 8 | 10 | 12 | 14 | 16) 1296 GCMParameters ::= SEQUENCE { 1297 aes-nonce OCTET STRING, -- recommended size is 12 octets 1298 aes-ICVlen AES-GCM-ICVlen DEFAULT 12 } 1300 AES-GCM-ICVlen ::= INTEGER (12 | 13 | 14 | 15 | 16) 1302 END 1304 9. Security Considerations 1306 Even though all the RFCs in this document are security-related, the 1307 document itself does not have any security considerations. The ASN.1 1308 modules keep the same bits-on-the-wire as the modules that they 1309 replace. 1311 10. Normative References 1313 [ASN1-2002] 1314 ITU-T, "ITU-T Recommendation X.680 Information technology 1315 [ETH] Abstract Syntax Notation One (ASN.1): Specification 1316 of basic notation", ITU-T X.680, 2002. 1318 [NEW-PKIX] 1319 Hoffman, P. and J. Schaad, "New ASN.1 Modules for PKIX", 1320 draft-hoffman-pkix-new-asn1 (work in progress), 1321 November 2007. 1323 [RFC3370] Housley, R., "Cryptographic Message Syntax (CMS) 1324 Algorithms", RFC 3370, August 2002. 1326 [RFC3851] Ramsdell, B., "Secure/Multipurpose Internet Mail 1327 Extensions (S/MIME) Version 3.1 Message Specification", 1328 RFC 3851, July 2004. 1330 [RFC3852] Housley, R., "Cryptographic Message Syntax (CMS)", 1331 RFC 3852, July 2004. 1333 [RFC4108] Housley, R., "Using Cryptographic Message Syntax (CMS) to 1334 Protect Firmware Packages", RFC 4108, August 2005. 1336 [RFC5035] Schaad, J., "Enhanced Security Services (ESS) Update: 1337 Adding CertID Algorithm Agility", RFC 5035, August 2007. 1339 [RFC5083] Housley, R., "Cryptographic Message Syntax (CMS) 1340 Authenticated-Enveloped-Data Content Type", RFC-to- 1341 be 5083, November 2007. 1343 [RFC5084] Housley, R., "Using AES-CCM and AES-GCM Authenticated 1344 Encryption in the Cryptographic Message Syntax (CMS)", 1345 RFC-to-be 5084, November 2007. 1347 Authors' Addresses 1349 Paul Hoffman 1350 VPN Consortium 1351 127 Segre Place 1352 Santa Cruz, CA 95060 1353 US 1355 Phone: 1-831-426-9827 1356 Email: paul.hoffman@vpnc.org 1357 Jim Schaad 1358 Soaring Hawk Consulting 1360 Email: jimsch@exmsft.com 1362 Full Copyright Statement 1364 Copyright (C) The IETF Trust (2007). 1366 This document is subject to the rights, licenses and restrictions 1367 contained in BCP 78, and except as set forth therein, the authors 1368 retain all their rights. 1370 This document and the information contained herein are provided on an 1371 "AS IS" basis and THE CONTRIBUTOR, THE ORGANIZATION HE/SHE REPRESENTS 1372 OR IS SPONSORED BY (IF ANY), THE INTERNET SOCIETY, THE IETF TRUST AND 1373 THE INTERNET ENGINEERING TASK FORCE DISCLAIM ALL WARRANTIES, EXPRESS 1374 OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTY THAT THE USE OF 1375 THE INFORMATION HEREIN WILL NOT INFRINGE ANY RIGHTS OR ANY IMPLIED 1376 WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. 1378 Intellectual Property 1380 The IETF takes no position regarding the validity or scope of any 1381 Intellectual Property Rights or other rights that might be claimed to 1382 pertain to the implementation or use of the technology described in 1383 this document or the extent to which any license under such rights 1384 might or might not be available; nor does it represent that it has 1385 made any independent effort to identify any such rights. Information 1386 on the procedures with respect to rights in RFC documents can be 1387 found in BCP 78 and BCP 79. 1389 Copies of IPR disclosures made to the IETF Secretariat and any 1390 assurances of licenses to be made available, or the result of an 1391 attempt made to obtain a general license or permission for the use of 1392 such proprietary rights by implementers or users of this 1393 specification can be obtained from the IETF on-line IPR repository at 1394 http://www.ietf.org/ipr. 1396 The IETF invites any interested party to bring to its attention any 1397 copyrights, patents or patent applications, or other proprietary 1398 rights that may cover technology that may be required to implement 1399 this standard. Please address the information to the IETF at 1400 ietf-ipr@ietf.org. 1402 Acknowledgment 1404 Funding for the RFC Editor function is provided by the IETF 1405 Administrative Support Activity (IASA).