116 #define CTAG( x ) ( x | BER_CONTEXT_SPECIFIC )
120 #define ENCODING( tag ) BER_##tag, CRYPT_UNUSED
121 #define ENCODING_SPECIAL( value ) \
122 FIELDTYPE_##value, CRYPT_UNUSED
123 #define ENCODING_ALIAS( tag, aliasTag ) \
125 #define ENCODING_TAGGED( tag, outerTag ) \
127 #define ENCODING_SPECIAL_TAGGED( tag, outerTag ) \
128 FIELDTYPE_##tag, outerTag
129 #define RANGE( min, max ) min, max, 0, NULL
130 #define RANGE_ATTRIBUTEBLOB 1, MAX_ATTRIBUTE_SIZE, 0, NULL
131 #define RANGE_BLOB 32, MAX_ATTRIBUTE_SIZE, 0, NULL
132 #define RANGE_BOOLEAN FALSE, TRUE, FALSE, NULL
133 #define RANGE_NONE 0, 0, 0, NULL
134 #define RANGE_OID MIN_OID_SIZE, MAX_OID_SIZE, 0, NULL
135 #define RANGE_TEXTSTRING 1, CRYPT_MAX_TEXTSIZE, 0, NULL
136 #define RANGE_TIME sizeof( time_t ), sizeof( time_t ), 0, NULL
137 #define RANGE_UNUSED CRYPT_UNUSED, CRYPT_UNUSED, 0, NULL
138 #define ENCODED_OBJECT( altEncodingTable ) \
139 0, 0, 0, ( void * ) altEncodingTable
140 #define CHECK_DNS MIN_DNS_SIZE, MAX_DNS_SIZE, 0, ( void * ) checkDNS
141 #define CHECK_HTTP MIN_URL_SIZE, MAX_URL_SIZE, 0, ( void * ) checkHTTP
142 #define CHECK_RFC822 MIN_RFC822_SIZE, MAX_RFC822_SIZE, 0, ( void * ) checkRFC822
143 #define CHECK_URL MIN_URL_SIZE, MAX_URL_SIZE, 0, ( void * ) checkURL
144 #define CHECK_X500 0, 0, 0, ( void * ) checkDirectoryName
148 #define ATTR_TYPEINFO( type, level ) \
149 ( FL_LEVEL_##level | FL_VALID_##type | \
151 #define ATTR_TYPEINFO2( type1, type2, level ) \
152 ( FL_LEVEL_##level | FL_VALID_##type1 | \
153 FL_VALID_##type2 | FL_ATTR_ATTRSTART )
154 #define ATTR_TYPEINFO3( type1, type2, type3, level ) \
155 ( FL_LEVEL_##level | FL_VALID_##type1 | \
156 FL_VALID_##type2 | FL_VALID_##type3 | \
158 #define ATTR_TYPEINFO_CRITICAL( type, level ) \
159 ( FL_LEVEL_##level | FL_VALID_##type | \
160 FL_ATTR_CRITICAL | FL_ATTR_ATTRSTART )
161 #define ATTR_TYPEINFO2_CRITICAL( type1, type2, level ) \
162 ( FL_LEVEL_##level | FL_VALID_##type1 | \
163 FL_VALID_##type2 | FL_ATTR_CRITICAL | \
165 #define ATTR_TYPEINFO3_CRITICAL( type1, type2, type3, level ) \
166 ( FL_LEVEL_##level | FL_VALID_##type1 | \
167 FL_VALID_##type2 | FL_VALID_##type3 | \
168 FL_ATTR_CRITICAL | FL_ATTR_ATTRSTART )
169 #define ATTR_TYPEINFO_CMS ( FL_ATTR_ATTRSTART )
179 #ifdef USE_CERT_OBSOLETE
193 #if defined( __GNUC__ ) && ( __GNUC__ >= 4 )
203 #if defined( _MSC_VER )
204 #pragma warning( disable: 4211 )
207 #ifdef USE_CERTIFICATES
233 #if defined( USE_CERTREV )
273 DESCRIPTION(
"signingCertificate.certs.essCertID" )
313 DESCRIPTION(
"authorityInfoAccess.accessDescription (rtcs)" )
316 {
MKOID(
"\x06\x0A\x2B\x06\x01\x04\x01\x97\x55\x03\x01\x07" ), 0,
317 DESCRIPTION(
"authorityInfoAccess.rtcs (1 3 6 1 4 1 3029 3 1 7)" )
321 DESCRIPTION(
"authorityInfoAccess.accessDescription.accessLocation (rtcs)" )
325 DESCRIPTION(
"authorityInfoAccess.accessDescription (ocsp)" )
328 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x01" ), 0,
329 DESCRIPTION(
"authorityInfoAccess.ocsp (1 3 6 1 5 5 7 48 1)" )
333 DESCRIPTION(
"authorityInfoAccess.accessDescription.accessLocation (ocsp)" )
337 DESCRIPTION(
"authorityInfoAccess.accessDescription (caIssuers)" )
340 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x02" ), 0,
341 DESCRIPTION(
"authorityInfoAccess.caIssuers (1 3 6 1 5 5 7 48 2)" )
345 DESCRIPTION(
"authorityInfoAccess.accessDescription.accessLocation (caIssuers)" )
349 DESCRIPTION(
"authorityInfoAccess.accessDescription (httpCerts)" )
352 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x06" ), 0,
353 DESCRIPTION(
"authorityInfoAccess.httpCerts (1 3 6 1 5 5 7 48 6)" )
357 DESCRIPTION(
"authorityInfoAccess.accessDescription.accessLocation (httpCerts)" )
361 DESCRIPTION(
"authorityInfoAccess.accessDescription (httpCRLs)" )
364 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x07" ), 0,
365 DESCRIPTION(
"authorityInfoAccess.httpCRLs (1 3 6 1 5 5 7 48 7)" )
369 DESCRIPTION(
"authorityInfoAccess.accessDescription.accessLocation (httpCRLs)" )
373 DESCRIPTION(
"authorityInfoAccess.accessDescription (catchAll)" )
381 #ifdef USE_CERTLEVEL_PKIX_FULL
403 DESCRIPTION(
"biometricInfo.biometricData.typeOfData" )
407 DESCRIPTION(
"biometricInfo.biometricData.hashAlgorithm" )
411 DESCRIPTION(
"biometricInfo.biometricData.dataHash" )
415 DESCRIPTION(
"biometricInfo.biometricData.sourceDataUri" )
443 DESCRIPTION(
"qcStatements.qcStatement (statementID)" )
446 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x0B\x02" ), 0,
447 DESCRIPTION(
"qcStatements.qcStatement.statementID (1 3 6 1 5 5 7 11 2)" )
450 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x0B\x01" ), 0,
451 DESCRIPTION(
"qcStatements.qcStatement.statementID (Backwards-compat.) (1 3 6 1 5 5 7 11 1)" )
455 DESCRIPTION(
"qcStatements.qcStatement.statementInfo (statementID)" )
459 DESCRIPTION(
"qcStatements.qcStatement.statementInfo.semanticsIdentifier (statementID)" )
463 DESCRIPTION(
"qcStatements.qcStatement.statementInfo.nameRegistrationAuthorities (statementID)" )
467 DESCRIPTION(
"qcStatements.qcStatement.statementInfo.nameRegistrationAuthorities.generalNames" )
505 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressFamily" )
509 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressesOrRanges" )
513 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressesOrRanges.addressPrefix" )
517 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressesOrRanges.addressRange" )
521 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressesOrRanges.addressRange.min" )
525 DESCRIPTION(
"ipAddrBlocks.ipAddressFamily.addressesOrRanges.addressRange.max" )
562 DESCRIPTION(
"autonomousSysIds.asnum.asIdsOrRanges.asId" )
566 DESCRIPTION(
"autonomousSysIds.asnum.asIdsOrRanges.asRange" )
570 DESCRIPTION(
"autonomousSysIds.asnum.asIdsOrRanges.asRange.min" )
574 DESCRIPTION(
"autonomousSysIds.asnum.asIdsOrRanges.asRange.max" )
604 #ifdef USE_CERTLEVEL_PKIX_PARTIAL
620 DESCRIPTION(
"ocspAcceptableResponses.ocsp (1 3 6 1 5 5 7 48 1 1)" )
669 DESCRIPTION(
"subjectInfoAccess.accessDescription (timeStamping)" )
672 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x03" ), 0,
673 DESCRIPTION(
"subjectInfoAccess.timeStamping (1 3 6 1 5 5 7 48 3)" )
677 DESCRIPTION(
"subjectInfoAccess.accessDescription.accessLocation (timeStamping)" )
681 DESCRIPTION(
"subjectInfoAccess.accessDescription (caRepository)" )
684 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x05" ), 0,
685 DESCRIPTION(
"subjectInfoAccess.caRepository (1 3 6 1 5 5 7 48 5)" )
689 DESCRIPTION(
"subjectInfoAccess.accessDescription.accessLocation (caRepository)" )
693 DESCRIPTION(
"subjectInfoAccess.accessDescription (signedObjectRepository)" )
696 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x09" ), 0,
697 DESCRIPTION(
"subjectInfoAccess.signedObjectRepository (1 3 6 1 5 5 7 48 9)" )
701 DESCRIPTION(
"subjectInfoAccess.accessDescription.accessLocation (signedObjectRepository)" )
705 DESCRIPTION(
"subjectInfoAccess.accessDescription (rpkiManifest)" )
708 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x0A" ), 0,
709 DESCRIPTION(
"subjectInfoAccess.rpkiManifest (1 3 6 1 5 5 7 48 10)" )
713 DESCRIPTION(
"subjectInfoAccess.accessDescription.accessLocation (rpkiManifest)" )
717 DESCRIPTION(
"subjectInfoAccess.accessDescription (signedObject)" )
720 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x30\x0B" ), 0,
721 DESCRIPTION(
"subjectInfoAccess.signedObject (1 3 6 1 5 5 7 48 11)" )
725 DESCRIPTION(
"subjectInfoAccess.accessDescription.accessLocation (signedObject)" )
729 DESCRIPTION(
"subjectInfoAccess.accessDescription (catchAll)" )
737 #if defined( USE_CERT_OBSCURE ) && defined( USE_CERTLEVEL_PKIX_PARTIAL )
770 DESCRIPTION(
"procuration.signingFor.thirdPerson" )
815 DESCRIPTION(
"admissions.content.namingAuthority" )
819 DESCRIPTION(
"admissions.content.namingAuthority.namingAuthID" )
823 DESCRIPTION(
"admissions.content.namingAuthority.namingAuthURL" )
827 DESCRIPTION(
"admissions.content.namingAuthority.namingAuthText" )
835 DESCRIPTION(
"admissions.professionInfo.professionItems" )
839 DESCRIPTION(
"admissions.professionInfo.professionItems.professionItem" )
843 DESCRIPTION(
"admissions.professionInfo.professionOIDs" )
847 DESCRIPTION(
"admissions.professionInfo.professionOIDs.professionOID" )
851 DESCRIPTION(
"admissions.professionInfo.professionItems.registrationNumber" )
871 0, 0,
RANGE( 3, 3 ) },
875 0, 0,
RANGE( 1, 255 ) },
918 DESCRIPTION(
"declarationOfMajority.fullAgeAtCountry.country" )
930 0,
RANGE( 1, 128 ) },
955 0,
RANGE( 1, 128 ) },
958 #ifdef USE_CERT_OBSOLETE
985 DESCRIPTION(
"strongExtranet.sxNetIDList.sxNetID" )
989 DESCRIPTION(
"strongExtranet.sxNetIDList.sxNetID.zone" )
993 DESCRIPTION(
"strongExtranet.sxNetIDList.sxnetID.id" )
998 #ifdef USE_CERTLEVEL_PKIX_PARTIAL
1013 DESCRIPTION(
"subjectDirectoryAttributes.attribute" )
1017 DESCRIPTION(
"subjectDirectoryAttributes.attribute.type" )
1021 DESCRIPTION(
"subjectDirectoryAttributes.attribute.values" )
1025 DESCRIPTION(
"subjectDirectoryAttributes.attribute.values.value" )
1044 0,
RANGE( 1, 64 ) },
1057 #ifdef USE_CERTLEVEL_PKIX_PARTIAL
1126 DESCRIPTION(
"basicConstraints.pathLenConstraint" )
1130 #if defined( USE_CERTREV ) && defined( USE_CERTLEVEL_PKIX_PARTIAL )
1142 #if defined( USE_CERTREV ) || defined( USE_CERTREQ )
1154 #if ( defined( USE_CERTREV ) || defined( USE_CERTREQ ) ) && \
1155 defined( USE_CERTLEVEL_PKIX_FULL )
1179 #if defined( USE_CERTREV ) && defined( USE_CERTLEVEL_PKIX_PARTIAL )
1214 DESCRIPTION(
"issuingDistributionPoint.distributionPoint" )
1218 DESCRIPTION(
"issuingDistributionPoint.distributionPoint.fullName" )
1222 DESCRIPTION(
"issuingDistributionPoint.distributionPoint.fullName.generalNames" )
1226 DESCRIPTION(
"issuingDistributionPoint.distributionPoint.fullName.generalNames.generalName" )
1230 DESCRIPTION(
"issuingDistributionPoint.onlyContainsUserCerts" )
1234 DESCRIPTION(
"issuingDistributionPoint.onlyContainsCACerts" )
1238 DESCRIPTION(
"issuingDistributionPoint.onlySomeReasons" )
1242 DESCRIPTION(
"issuingDistributionPoint.indirectCRL" )
1247 #if defined( USE_CERTREV ) && defined( USE_CERTLEVEL_PKIX_FULL )
1264 #ifdef USE_CERTLEVEL_PKIX_FULL
1287 DESCRIPTION(
"nameConstraints.permittedSubtrees" )
1291 DESCRIPTION(
"nameConstraints.permittedSubtrees.sequenceOf" )
1295 DESCRIPTION(
"nameConstraints.permittedSubtrees.sequenceOf.generalName" )
1303 DESCRIPTION(
"nameConstraints.excludedSubtrees.sequenceOf" )
1307 DESCRIPTION(
"nameConstraints.excludedSubtrees.sequenceOf.generalName" )
1335 DESCRIPTION(
"cRLDistributionPoints.distPoint.distPoint" )
1339 DESCRIPTION(
"cRLDistributionPoints.distPoint.distPoint.fullName" )
1343 DESCRIPTION(
"cRLDistributionPoints.distPoint.distPoint.fullName.generalName" )
1347 DESCRIPTION(
"cRLDistributionPoints.distPoint.reasons" )
1351 DESCRIPTION(
"cRLDistributionPoints.distPoint.cRLIssuer" )
1355 DESCRIPTION(
"cRLDistributionPoints.distPoint.cRLIssuer.generalName" )
1400 DESCRIPTION(
"certPolicies.policyInfo.policyIdentifier" )
1404 DESCRIPTION(
"certPolicies.policyInfo.policyQualifiers" )
1408 DESCRIPTION(
"certPolicies.policyInfo.policyQual" )
1411 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x01" ), 0,
1412 DESCRIPTION(
"certPolicies.policyInfo.policyQual.cps (1 3 6 1 5 5 7 2 1)" )
1416 DESCRIPTION(
"certPolicies.policyInfo.policyQuals.qualifier.cPSuri" )
1420 DESCRIPTION(
"certPolicies.policyInfo.policyQual" )
1423 {
MKOID(
"\x06\x08\x2B\x06\x01\x05\x05\x07\x02\x02" ), 0,
1424 DESCRIPTION(
"certPolicies.policyInfo.policyQual.unotice (1 3 6 1 5 5 7 2 2)" )
1428 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice" )
1432 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice.noticeRef" )
1436 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice.noticeRef.organization" )
1440 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice.noticeRef.noticeNumbers" )
1444 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice.noticeRef.noticeNumbers" )
1448 DESCRIPTION(
"certPolicies.policyInfo.policyQual.userNotice.explicitText" )
1452 #ifdef USE_CERTLEVEL_PKIX_FULL
1472 DESCRIPTION(
"policyMappings.sequenceOf.issuerDomainPolicy" )
1476 DESCRIPTION(
"policyMappings.sequenceOf.subjectDomainPolicy" )
1481 #ifdef USE_CERTLEVEL_PKIX_PARTIAL
1502 DESCRIPTION(
"authorityKeyIdentifier.keyIdentifier" )
1506 DESCRIPTION(
"authorityKeyIdentifier.authorityCertIssuer" )
1510 DESCRIPTION(
"authorityKeyIdentifier.authorityCertIssuer.generalName" )
1514 DESCRIPTION(
"authorityKeyIdentifier.authorityCertSerialNumber" )
1519 #ifdef USE_CERTLEVEL_PKIX_FULL
1533 DESCRIPTION(
"policyConstraints.requireExplicitPolicy" )
1537 DESCRIPTION(
"policyConstraints.inhibitPolicyMapping" )
1557 DESCRIPTION(
"extKeyUsage.individualCodeSigning (1 3 6 1 4 1 311 2 1 21)" )
1561 DESCRIPTION(
"extKeyUsage.commercialCodeSigning (1 3 6 1 4 1 311 2 1 22)" )
1565 DESCRIPTION(
"extKeyUsage.certTrustListSigning (1 3 6 1 4 1 311 10 3 1)" )
1569 DESCRIPTION(
"extKeyUsage.timeStampSigning (1 3 6 1 4 1 311 10 3 2)" )
1573 DESCRIPTION(
"extKeyUsage.serverGatedCrypto (1 3 6 1 4 1 311 10 3 3)" )
1577 DESCRIPTION(
"extKeyUsage.encrypedFileSystem (1 3 6 1 4 1 311 10 3 4)" )
1581 DESCRIPTION(
"extKeyUsage.serverAuth (1 3 6 1 5 5 7 3 1)" )
1585 DESCRIPTION(
"extKeyUsage.clientAuth (1 3 6 1 5 5 7 3 2)" )
1589 DESCRIPTION(
"extKeyUsage.codeSigning (1 3 6 1 5 5 7 3 3)" )
1593 DESCRIPTION(
"extKeyUsage.emailProtection (1 3 6 1 5 5 7 3 4)" )
1597 DESCRIPTION(
"extKeyUsage.ipsecEndSystem (1 3 6 1 5 5 7 3 5)" )
1601 DESCRIPTION(
"extKeyUsage.ipsecTunnel (1 3 6 1 5 5 7 3 6)" )
1605 DESCRIPTION(
"extKeyUsage.ipsecUser (1 3 6 1 5 5 7 3 7)" )
1609 DESCRIPTION(
"extKeyUsage.timeStamping (1 3 6 1 5 5 7 3 8)" )
1613 DESCRIPTION(
"extKeyUsage.ocspSigning (1 3 6 1 5 5 7 3 9)" )
1617 DESCRIPTION(
"extKeyUsage.directoryService (1 3 36 8 2 1)" )
1621 DESCRIPTION(
"extKeyUsage.anyExtendedKeyUsage(2 5 29 37 0)" )
1625 DESCRIPTION(
"extKeyUsage.serverGatedCrypto (2 16 840 1 113730 4 1)" )
1629 DESCRIPTION(
"extKeyUsage.serverGatedCryptoCA (2 16 840 1 113733 1 8 1)" )
1637 #ifdef USE_CERTLEVEL_PKIX_FULL
1647 0,
RANGE( 0, 64 ) },
1721 DESCRIPTION(
"freshestCRL.distributionPoint.distributionPoint" )
1725 DESCRIPTION(
"freshestCRL.distributionPoint.distributionPoint.fullName" )
1729 DESCRIPTION(
"freshestCRL.distributionPoint.distributionPoint.fullName.generalName" )
1733 DESCRIPTION(
"freshestCRL.distributionPoint.reasons" )
1737 DESCRIPTION(
"freshestCRL.distributionPoint.cRLIssuer" )
1741 DESCRIPTION(
"freshestCRL.distributionPoint.cRLIssuer.generalName" )
1796 0,
RANGE( 0, 64 ) },
1827 DESCRIPTION(
"toBeRevoked.group.certificateIssuer" )
1835 DESCRIPTION(
"toBeRevoked.group.reasonInfo.reasonCode" )
1843 DESCRIPTION(
"toBeRevoked.group.certificateGroup" )
1847 DESCRIPTION(
"toBeRevoked.group.certificateGroup.certificateSerialNumber" )
1892 DESCRIPTION(
"revokedGroups.revokedCertificateGroup" )
1896 DESCRIPTION(
"revokedGroups.revokedCertificateGroup.startingNumber" )
1898 0, 0,
RANGE( 1, 64 ) },
1900 DESCRIPTION(
"revokedGroups.revokedCertificateGroup.endingNumber" )
1936 DESCRIPTION(
"aaIssuingDistributionPoint.distributionPoint" )
1940 DESCRIPTION(
"aaIssuingDistributionPoint.distributionPoint.fullName" )
1944 DESCRIPTION(
"aaIssuingDistributionPoint.distributionPoint.fullName.generalName" )
1948 DESCRIPTION(
"aaIssuingDistributionPoint.onlySomeReasons" )
1952 DESCRIPTION(
"aaIssuingDistributionPoint.indirectCRL" )
1956 DESCRIPTION(
"aaIssuingDistributionPoint.containsUserAttributeCerts" )
1960 DESCRIPTION(
"aaIssuingDistributionPoint.containsAACerts" )
1964 DESCRIPTION(
"aaIssuingDistributionPoint.containsSOAPublicKeyCerts" )
1970 #ifdef USE_CERT_OBSOLETE
2052 #ifdef USE_CERT_OBSOLETE
2069 "\x30\x2D\x02\x01\x00\x30\x09\x06\x05\x2B\x0E\x03\x02\x1A\x05\x00\x30\x07\x06\x05\x67\x2A\x03\x00\x00" },
2071 DESCRIPTION(
"hashedRootKey.rootKeyThumbprint.hashData" )
2113 0, 0,
RANGE( 1, 30 ) },
2117 0, 0,
RANGE( 6, 6 ) },
2127 DESCRIPTION(
"merchantData.merNameSeq.merNames.language" )
2131 DESCRIPTION(
"merchantData.merNameSeq.merNames.name" )
2135 DESCRIPTION(
"merchantData.merNameSeq.merNames.city" )
2139 DESCRIPTION(
"merchantData.merNameSeq.merNames.stateProvince" )
2143 DESCRIPTION(
"merchantData.merNameSeq.merNames.postalCode" )
2147 DESCRIPTION(
"merchantData.merNameSeq.merNames.countryName" )
2153 0, 0,
RANGE( 1, 999 ) },
2190 DESCRIPTION(
"tunneling.tunnelingAlgIDs.tunnelingAlgID" )
2198 #if ( defined( USE_CERTREV ) || defined( USE_CERTREQ ) ) && \
2199 defined( USE_CERTLEVEL_PKIX_FULL )
2205 DESCRIPTION(
"holdInstructionCode.holdinstruction-none (1 2 840 10040 2 1)" )
2209 DESCRIPTION(
"holdInstructionCode.holdinstruction-callissuer (1 2 840 10040 2 2)" )
2213 DESCRIPTION(
"holdInstructionCode.holdinstruction-reject (1 2 840 10040 2 3)" )
2217 DESCRIPTION(
"holdInstructionCode.holdinstruction-pickupToken (1 2 840 10040 2 4)" )
2378 DESCRIPTION(
"generalName.ediPartyName.nameAssigner" )
2383 DESCRIPTION(
"generalName.ediPartyName.nameAssigner.directoryName" )
2387 DESCRIPTION(
"generalName.ediPartyName.partyName" )
2391 DESCRIPTION(
"generalName.ediPartyName.partyName.directoryName" )
2397 DESCRIPTION(
"generalName.uniformResourceIdentifier" )
2458 #ifdef USE_CMSATTR_OBSCURE
2500 DESCRIPTION(
"sMIMECapabilities.capability (des-EDE3-CBC)" )
2504 DESCRIPTION(
"sMIMECapabilities.capability.des-EDE3-CBC" )
2508 DESCRIPTION(
"sMIMECapabilities.capability (aes128-CBC)" )
2512 DESCRIPTION(
"sMIMECapabilities.capability.aes128-CBC" )
2516 DESCRIPTION(
"sMIMECapabilities.capability (cast5CBC)" )
2520 DESCRIPTION(
"sMIMECapabilities.capability.cast5CBC" )
2524 DESCRIPTION(
"sMIMECapabilities.capability.cast5CBC.parameter" )
2528 DESCRIPTION(
"sMIMECapabilities.capability (ideaCBC)" )
2532 DESCRIPTION(
"sMIMECapabilities.capability.ideaCBC (Ascom Tech variant)" )
2536 DESCRIPTION(
"sMIMECapabilities.capability (rc2CBC)" )
2540 DESCRIPTION(
"sMIMECapabilities.capability.rc2CBC" )
2544 DESCRIPTION(
"sMIMECapabilities.capability.rc2CBC.parameters" )
2548 DESCRIPTION(
"sMIMECapabilities.capability (rC5-CBCPad)" )
2552 DESCRIPTION(
"sMIMECapabilities.capability.rC5-CBCPad" )
2556 DESCRIPTION(
"sMIMECapabilities.capability.rC5-CBCPad.parameters" )
2560 DESCRIPTION(
"sMIMECapabilities.capability (fortezzaConfidentialityAlgorithm)" )
2564 DESCRIPTION(
"sMIMECapabilities.capability.fortezzaConfidentialityAlgorithm" )
2568 DESCRIPTION(
"sMIMECapabilities.capability (desCBC)" )
2572 DESCRIPTION(
"sMIMECapabilities.capability.desCBC" )
2576 DESCRIPTION(
"sMIMECapabilities.capability (sha-ng)" )
2580 DESCRIPTION(
"sMIMECapabilities.capability.sha-ng" )
2584 DESCRIPTION(
"sMIMECapabilities.capability (sha2-256)" )
2588 DESCRIPTION(
"sMIMECapabilities.capability.sha2-256" )
2592 DESCRIPTION(
"sMIMECapabilities.capability (sha1)" )
2596 DESCRIPTION(
"sMIMECapabilities.capability.sha1" )
2600 DESCRIPTION(
"sMIMECapabilities.capability (hmac-sha-ng)" )
2604 DESCRIPTION(
"sMIMECapabilities.capability.hmac-sha-ng" )
2608 DESCRIPTION(
"sMIMECapabilities.capability (hmac-sha2-256)" )
2612 DESCRIPTION(
"sMIMECapabilities.capability.hmac-sha2-256" )
2616 DESCRIPTION(
"sMIMECapabilities.capability (hmac-sha1)" )
2620 DESCRIPTION(
"sMIMECapabilities.capability.hmac-sha1" )
2624 DESCRIPTION(
"sMIMECapabilities.capability (authEnc256)" )
2628 DESCRIPTION(
"sMIMECapabilities.capability.authEnc256" )
2632 DESCRIPTION(
"sMIMECapabilities.capability (authEnc128)" )
2636 DESCRIPTION(
"sMIMECapabilities.capability.authEnc128" )
2640 DESCRIPTION(
"sMIMECapabilities.capability (rsaWithSHAng)" )
2644 DESCRIPTION(
"sMIMECapabilities.capability.rsaWithSHAng" )
2648 DESCRIPTION(
"sMIMECapabilities.capability (rsaWithSHA2-256)" )
2652 DESCRIPTION(
"sMIMECapabilities.capability.rsaWithSHA2-256" )
2656 DESCRIPTION(
"sMIMECapabilities.capability (rsaWithSHA1)" )
2660 DESCRIPTION(
"sMIMECapabilities.capability.rsaWithSHA1" )
2664 DESCRIPTION(
"sMIMECapabilities.capability (dsaWithSHA1)" )
2668 DESCRIPTION(
"sMIMECapabilities.capability.dsaWithSHA1" )
2672 DESCRIPTION(
"sMIMECapabilities.capability (ecdsaWithSHA-ng)" )
2676 DESCRIPTION(
"sMIMECapabilities.capability.ecdsaWithSHA-ng" )
2680 DESCRIPTION(
"sMIMECapabilities.capability (ecdsaWithSHA2-256)" )
2684 DESCRIPTION(
"sMIMECapabilities.capability.ecdsaWithSHA2-256" )
2688 DESCRIPTION(
"sMIMECapabilities.capability (ecdsaWithSHA1)" )
2692 DESCRIPTION(
"sMIMECapabilities.capability.ecdsaWithSHA1" )
2696 DESCRIPTION(
"sMIMECapabilities.capability (preferSignedData)" )
2700 DESCRIPTION(
"sMIMECapabilities.capability.preferSignedData" )
2704 DESCRIPTION(
"sMIMECapabilities.capability (canNotDecryptAny)" )
2708 DESCRIPTION(
"sMIMECapabilities.capability.canNotDecryptAny" )
2712 DESCRIPTION(
"sMIMECapabilities.capability (preferBinaryInside)" )
2716 DESCRIPTION(
"sMIMECapabilities.capability.preferBinaryInside" )
2720 DESCRIPTION(
"sMIMECapabilities.capability (catchAll)" )
2724 DESCRIPTION(
"sMIMECapabilities.capability.catchAll" )
2728 #ifdef USE_CMSATTR_OBSCURE
2747 0, 0,
RANGE( 16, 64 ) },
2751 0, 0,
RANGE( 0, 1 ) },
2757 DESCRIPTION(
"receiptRequest.receiptsTo.generalNames" )
2761 DESCRIPTION(
"receiptRequest.receiptsTo.generalNames.generalName" )
2789 DESCRIPTION(
"essSecurityLabel.securityPolicyIdentifier" )
2793 DESCRIPTION(
"essSecurityLabel.securityClassification" )
2801 DESCRIPTION(
"essSecurityLabel.securityCategories" )
2805 DESCRIPTION(
"essSecurityLabel.securityCategories.securityCategory" )
2809 DESCRIPTION(
"essSecurityLabel.securityCategories.securityCategory.type" )
2813 DESCRIPTION(
"essSecurityLabel.securityCategories.securityCategory.value" )
2845 DESCRIPTION(
"mlExpansionHistory.mlData.mailListIdentifier.issuerAndSerialNumber" )
2849 DESCRIPTION(
"mlExpansionHistory.mlData.expansionTime" )
2853 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.none" )
2857 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.insteadOf" )
2861 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.insteadOf.generalNames" )
2865 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.insteadOf.generalNames.generalName" )
2869 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.inAdditionTo" )
2873 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.inAdditionTo.generalNames" )
2877 DESCRIPTION(
"mlExpansionHistory.mlData.mlReceiptPolicy.inAdditionTo.generalNames.generalName" )
2932 DESCRIPTION(
"equivalentLabels.set.securityClassification" )
2936 DESCRIPTION(
"equivalentLabels.set.securityPolicyIdentifier" )
2944 DESCRIPTION(
"equivalentLabels.set.securityCategories" )
2948 DESCRIPTION(
"equivalentLabels.set.securityCategories.securityCategory" )
2952 DESCRIPTION(
"equivalentLabels.set.securityCategories.securityCategory.type" )
2956 DESCRIPTION(
"equivalentLabels.set.securityCategories.securityCategory.value" )
2961 #if defined( USE_CMSATTR_OBSCURE ) || defined( USE_CERTREV ) || defined( USE_TSP )
2988 DESCRIPTION(
"signingCertificate.certs.essCertID" )
2996 DESCRIPTION(
"signingCertificate.policies.policyInfo" )
3000 DESCRIPTION(
"signingCertificate.policies.policyInfo.policyIdentifier" )
3005 #ifdef USE_CMSATTR_OBSCURE
3030 DESCRIPTION(
"signingCertificate.certs.essCertID" )
3038 DESCRIPTION(
"signingCertificate.policies.policyInfo" )
3042 DESCRIPTION(
"signingCertificate.policies.policyInfo.policyIdentifier" )
3083 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers" )
3087 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier" )
3090 {
MKOID(
"\x06\x0B\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x05\x01" ), 0,
3091 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.cps (1 2 840 113549 1 9 16 5 1)" )
3095 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.cPSuri" )
3099 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier" )
3102 {
MKOID(
"\x06\x0B\x2A\x86\x48\x86\xF7\x0D\x01\x09\x10\x05\x02" ), 0,
3103 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.unotice (1 2 840 113549 1 9 16 5 2)" )
3107 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice" )
3111 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef" )
3115 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.organization" )
3119 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.organization" )
3123 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.noticeNumbers" )
3127 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.noticeRef.noticeNumbers" )
3131 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.explicitText" )
3135 DESCRIPTION(
"signaturePolicyID.sigPolicyQualifiers.sigPolicyQualifier.userNotice.explicitText" )
3154 DESCRIPTION(
"signatureTypeIdentifier.originatorSig (1 2 840 113549 1 9 16 9 1)" )
3158 DESCRIPTION(
"signatureTypeIdentifier.domainSig (1 2 840 113549 1 9 16 9 2)" )
3162 DESCRIPTION(
"signatureTypeIdentifier.additionalAttributesSig (1 2 840 113549 1 9 16 9 3)" )
3166 DESCRIPTION(
"signatureTypeIdentifier.reviewSig (1 2 840 113549 1 9 16 9 4)" )
3238 #ifdef USE_CMSATTR_OBSCURE
3279 DESCRIPTION(
"spcStatementType.individualCodeSigning (1 3 6 1 4 1 311 2 1 21)" )
3283 DESCRIPTION(
"spcStatementType.commercialCodeSigning (1 3 6 1 4 1 311 2 1 22)" )
3332 DESCRIPTION(
"contentType.data (1 2 840 113549 1 7 1)" )
3336 DESCRIPTION(
"contentType.signedData (1 2 840 113549 1 7 2)" )
3340 DESCRIPTION(
"contentType.envelopedData (1 2 840 113549 1 7 3)" )
3343 #ifdef USE_CMSATTR_OBSCURE
3345 DESCRIPTION(
"contentType.signedAndEnvelopedData (1 2 840 113549 1 7 4)" )
3350 DESCRIPTION(
"contentType.digestedData (1 2 840 113549 1 7 5)" )
3354 DESCRIPTION(
"contentType.encryptedData (1 2 840 113549 1 7 6)" )
3357 #ifdef USE_COMPRESSION
3359 DESCRIPTION(
"contentType.compressedData (1 2 840 113549 1 9 16 1 9)" )
3365 DESCRIPTION(
"contentType.tstInfo (1 2 840 113549 1 9 16 1 4)" )
3369 #ifdef USE_CMSATTR_OBSCURE
3371 DESCRIPTION(
"contentType.spcIndirectDataContext (1 3 6 1 4 1 311 2 1 4)" )
3377 DESCRIPTION(
"contentType.rtcsRequest (1 3 6 1 4 1 3029 4 1 4)" )
3381 DESCRIPTION(
"contentType.rtcsResponse (1 3 6 1 4 1 3029 4 1 5)" )
3385 DESCRIPTION(
"contentType.rtcsResponseExt (1 3 6 1 4 1 3029 4 1 6)" )
3390 DESCRIPTION(
"contentType.mRTD (2 23 136 1 1 1)" )
3405 assert(
isWritePtr( noAttributeEntries,
sizeof(
int ) ) );
3412 *attributeInfoPtrPtr = cmsAttributeInfo;
3418 *attributeInfoPtrPtr = extensionInfo;
3444 int nestingLevel = 0, iterationCount;
3455 firstAttributeID >= 0 && firstAttributeID < 50 ) );
3469 if( attributeInfoPtr[ 1 ].
fieldID < firstAttributeID )
3474 if( attributeInfoPtr->fieldID < firstAttributeID )
3478 for( iterationCount = 0;
3480 iterationCount < noAttributeInfoEntries;
3481 attributeInfoPtr++, iterationCount++ )
3483 const int nestingLevelDelta = \
3484 decodeNestingLevel( attributeInfoPtr->encodingFlags );
3487 if( nestingLevelDelta < 0 || nestingLevelDelta > 5 )
3501 attributeInfoPtr->fieldID <= prevFieldID )
3533 prevFieldID = attributeInfoPtr->fieldID;
3539 attributeInfoPtr->extraData == NULL )
3545 attributeInfoPtr->extraData == NULL )
3554 if( attributeInfoPtr->extraData != generalNameInfo )
3563 const ATTRIBUTE_INFO *nextAttributeInfoPtr = attributeInfoPtr + 1;
3569 if( nextAttributeInfoPtr->
fieldID < CRYPT_CERTINFO_FIRST_EXTENSION || \
3570 nextAttributeInfoPtr->
fieldID > CRYPT_CERTINFO_LAST_EXTENSION )
3576 if( seenFirstField && \
3588 if( attributeInfoPtr[ 1 ].
oid != NULL )
3593 if( attributeInfoPtr[ 1 ].
oid == NULL )
3600 if( ( attributeInfoPtr[ 1 ].encodingFlags &
FL_NONENCODING ) && \
3609 if( ( attributeInfoPtr->encodingFlags &
FL_DEFAULT ) && \
3615 if( ( attributeInfoPtr->encodingFlags &
FL_EMPTYOK ) && \
3626 int innerIterationCount;
3628 for( subTableInfoPtr = attributeInfoPtr->
extraData, \
3629 innerIterationCount = 0;
3632 subTableInfoPtr++, innerIterationCount++ )
3644 attributeInfoPtr->fieldType ==
BER_SET )
3646 nestingLevel -= nestingLevelDelta;
3649 if( !( attributeInfoPtr->fieldEncodedType ==
CRYPT_UNUSED || \
3650 ( attributeInfoPtr->fieldEncodedType >= 0 && \
3656 if( attributeInfoPtr->encodingFlags &
FL_EXPLICIT )
3658 if( ( attributeInfoPtr->fieldEncodedType < 0 ) || \
3659 ( attributeInfoPtr->fieldEncodedType >=
MAX_TAG ) )
3669 seenFirstField =
TRUE;
3671 REQUIRES_B( iterationCount < noAttributeInfoEntries );
3681 if( nestingLevel < 0 || nestingLevel > 4 )
3690 static
BOOLEAN checkExtensionTable(
IN_ARRAY( noAttributeInfoEntries ) \
3704 baseAttributeID = ( attributeInfoPtr->fieldID ==
FIELDID_FOLLOWS ) ? \
3705 attributeInfoPtr[ 1 ].
fieldID : attributeInfoPtr->fieldID;
3708 index < noAttributeInfoEntries;
3709 attributeInfoPtr++, index++ )
3713 if( !checkExtension( attributeInfoPtr, \
3714 noAttributeInfoEntries - index,
3715 baseAttributeID, isSubTable ) )
3717 DEBUG_DIAG((
"Extension '%s' definition consistency check failed",
3718 ( attributeInfoPtr->description != NULL ) ? \
3719 attributeInfoPtr->description :
"<Unknown>" ));
3731 baseAttributeID = ( attributeInfoPtr->fieldID ==
FIELDID_FOLLOWS ) ? \
3732 attributeInfoPtr[ 1 ].
fieldID + 1 : \
3733 attributeInfoPtr->fieldID + 1;
3737 for( iterationCount = 0;
3740 iterationCount < noAttributeInfoEntries;
3741 attributeInfoPtr++, iterationCount++ );
3742 ENSURES_B( iterationCount < noAttributeInfoEntries );
3744 ENSURES_B( index < noAttributeInfoEntries );
3754 static const MAP_TABLE checkNestingTbl[] = {
3760 static const MAP_TABLE checkComplianceTbl[] = {
3781 checkNestingTbl[ i ].destination );
3790 checkComplianceTbl[ i ].destination );
3796 if( !checkExtensionTable( extensionInfo,
3800 DEBUG_DIAG((
"Certificate extension definition consistency check failed" ));
3803 if( !checkExtensionTable( cmsAttributeInfo,
3807 DEBUG_DIAG((
"CMS attribute definition consistency check failed" ));
3810 if( !checkExtensionTable( generalNameInfo,
3814 DEBUG_DIAG((
"GeneralName definition consistency check failed" ));
3817 #if ( defined( USE_CERTREV ) || defined( USE_CERTREQ ) ) && \
3818 defined( USE_CERTLEVEL_PKIX_FULL )
3819 if( !checkExtensionTable( holdInstructionInfo,
3823 DEBUG_DIAG((
"HoldInstructionInfo definition consistency check failed" ));
3827 if( !checkExtensionTable( contentTypeInfo,
3831 DEBUG_DIAG((
"ContentTypeInfo definition consistency check failed" ));
3847 static const char *tldNames[] = {
3848 "ac",
"ad",
"ae",
"aero",
"af",
"ag",
"ai",
"al",
"am",
"an",
"ao",
3849 "aq",
"ar",
"arpa",
"as",
"asia",
"at",
"au",
"aw",
"ax",
"az",
"ba",
3850 "bb",
"bd",
"be",
"bf",
"bg",
"bh",
"bi",
"biz",
"bj",
"bm",
"bn",
"bo",
3851 "br",
"bs",
"bt",
"bv",
"bw",
"by",
"bz",
"ca",
"cat",
"cc",
"cd",
"cf",
3852 "cg",
"ch",
"ci",
"ck",
"cl",
"cm",
"cn",
"co",
"com",
"coop",
"cr",
3853 "cu",
"cv",
"cx",
"cy",
"cz",
"de",
"dj",
"dk",
"dm",
"do",
"dz",
"ec",
3854 "edu",
"ee",
"eg",
"er",
"es",
"et",
"eu",
"fi",
"fj",
"fk",
"fm",
"fo",
3855 "fr",
"ga",
"gb",
"gd",
"ge",
"gf",
"gg",
"gh",
"gi",
"gl",
"gm",
"gn",
3856 "gov",
"gp",
"gq",
"gr",
"gs",
"gt",
"gu",
"gw",
"gy",
"hk",
"hm",
"hn",
3857 "hr",
"ht",
"hu",
"id",
"ie",
"il",
"im",
"in",
"info",
"int",
"io",
3858 "iq",
"ir",
"is",
"it",
"je",
"jm",
"jo",
"jobs",
"jp",
"ke",
"kg",
3859 "kh",
"ki",
"km",
"kn",
"kp",
"kr",
"kw",
"ky",
"kz",
"la",
"lb",
"lc",
3860 "li",
"lk",
"lr",
"ls",
"lt",
"lu",
"lv",
"ly",
"ma",
"mc",
"md",
"me",
3861 "mg",
"mh",
"mil",
"mk",
"ml",
"mm",
"mn",
"mo",
"mobi",
"mp",
"mq",
3862 "mr",
"ms",
"mt",
"mu",
"museum",
"mv",
"mw",
"mx",
"my",
"mz",
"na",
3863 "name",
"nc",
"ne",
"net",
"nf",
"ng",
"ni",
"nl",
"no",
"np",
"nr",
3864 "nu",
"nz",
"om",
"org",
"pa",
"pe",
"pf",
"pg",
"ph",
"pk",
"pl",
"pm",
3865 "pn",
"pr",
"pro",
"ps",
"pt",
"pw",
"py",
"qa",
"re",
"ro",
"rs",
"ru",
3866 "rw",
"sa",
"sb",
"sc",
"sd",
"se",
"sg",
"sh",
"si",
"sj",
"sk",
"sl",
3867 "sm",
"sn",
"so",
"sr",
"st",
"su",
"sv",
"sy",
"sz",
"tc",
"td",
"tel",
3868 "tf",
"tg",
"th",
"tj",
"tk",
"tl",
"tm",
"tn",
"to",
"tp",
"tr",
3869 "travel",
"tt",
"tv",
"tw",
"tz",
"ua",
"ug",
"uk",
"us",
"uy",
"uz",
3870 "va",
"vc",
"ve",
"vg",
"vi",
"vn",
"vu",
"wf",
"ws",
"xxx",
"ye",
"yt",
3871 "za",
"zm",
"zw", NULL, NULL
3896 static
int checkURLString(
IN_BUFFER( urlLength )
const char *url,
3898 IN_ENUM( URL )
const URL_CHECK_TYPE urlType )
3900 const char *schema = NULL;
3908 REQUIRES( urlType > URL_NONE && urlType < URL_LAST );
3914 for( i = 0; i < urlLength; i++ )
3918 if( ch <= 0 || ch > 0x7F || !
isPrint( ch ) || \
3919 ch ==
' ' || ch ==
'<' || ch ==
'>' || ch ==
'"' || \
3920 ch ==
'{' || ch ==
'}' || ch ==
'|' || ch ==
'\\' || \
3921 ch ==
'^' || ch ==
'[' || ch ==
']' || ch ==
'`' )
3931 if( ( offset =
strFindStr( url, urlLength,
"://", 3 ) ) >= 0 )
3934 if( offset < 2 || offset > 8 || offset >= urlLength - 3 )
3940 if( ( offset = strFindCh( url, urlLength,
':' ) ) >= 0 )
3943 if( offset < 2 || offset > 8 || offset >= urlLength - 3 )
3967 if( urlLength < MIN_DNS_SIZE || urlLength >
MAX_DNS_SIZE )
3969 if( schema != NULL )
3975 ( url[ 0 ] ==
'[' && \
3976 ( url[ 1 ] ==
':' ||
isDigit( url[ 1 ] ) ) ) )
3991 if( schema != NULL )
4004 if( urlLength < MIN_URL_SIZE || urlLength >
MAX_URL_SIZE )
4006 if( schema == NULL || \
4018 if( schema == NULL || length < 3 || length > MAX_URL_SIZE )
4029 for( i = 0; i <
length; i++ )
4045 return( checkURLString( attributeListPtr->value,
4054 return( checkURLString( attributeListPtr->value,
4063 return( checkURLString( attributeListPtr->value,
4067 #ifdef USE_CERT_OBSOLETE
4074 return( checkURLString( attributeListPtr->value,
4084 static
int checkDirectoryName(
const ATTRIBUTE_LIST *attributeListPtr )
4096 &dummy, &errorType );
4100 status = checkDN( attributeListPtr->value,
4102 &dummy, &errorType );
4105 return( errorType );
4126 REQUIRES_B( fieldID >= CRYPT_CERTINFO_FIRST_EXTENSION && \
4129 if( fieldID <= CRYPT_CERTINFO_LAST_EXTENSION )