Changeset 52600 in vbox for trunk/include/iprt/crypto
- Timestamp:
- Sep 4, 2014 10:59:00 PM (10 years ago)
- Location:
- trunk/include/iprt/crypto
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/iprt/crypto/pkcs7.h
r52537 r52600 85 85 /** Signing time (PKCS \#9), use pSigningTime. */ 86 86 RTCRPKCS7ATTRIBUTETYPE_SIGNING_TIME, 87 /** Microsoft timestamp info (RFC-3161) signed data, use pContentInfo. */ 88 RTCRPKCS7ATTRIBUTETYPE_MS_TIMESTAMP, 87 89 /** Blow the type up to 32-bits. */ 88 90 RTCRPKCS7ATTRIBUTETYPE_32BIT_HACK = 0x7fffffff … … 115 117 /** Signing time(s) (RTCRPKCS7ATTRIBUTETYPE_SIGNING_TIME). */ 116 118 PRTASN1SETOFTIMES pSigningTime; 119 /** Microsoft timestamp (RFC-3161 signed data). */ 120 struct RTCRPKCS7SETOFCONTENTINFOS *pContentInfos; 117 121 } uValues; 118 122 } RTCRPKCS7ATTRIBUTE; … … 173 177 * Value: SignerInfo. */ 174 178 #define RTCR_PKCS9_ID_COUNTER_SIGNATURE_OID "1.2.840.113549.1.9.6" 179 /** Microsoft timestamp (RTF-3161) counter signature (SignedData). 180 * @remarks This isn't defined by PKCS \#9, but lumped in here for 181 * convenience. It's actually listed as SPC by MS. */ 182 #define RTCR_PKCS9_ID_MS_TIMESTAMP "1.3.6.1.4.1.311.3.3.1" 175 183 /** @} */ 184 176 185 177 186 /** … … 193 202 */ 194 203 RTDECL(PCRTASN1TIME) RTCrPkcs7SignerInfo_GetSigningTime(PCRTCRPKCS7SIGNERINFO pThis, PCRTCRPKCS7SIGNERINFO *ppSignerInfo); 204 205 206 /** 207 * Get the (first) timestamp from within a Microsoft timestamp server counter 208 * signature. 209 * 210 * @returns Pointer to the signing time if found, NULL if not. 211 * @param pThis The SignerInfo to search. 212 * @param ppContentInfo Where to return the pointer to the counter 213 * signature, optional. 214 */ 215 RTDECL(PCRTASN1TIME) RTCrPkcs7SignerInfo_GetMsTimestamp(PCRTCRPKCS7SIGNERINFO pThis, 216 struct RTCRPKCS7CONTENTINFO const **ppContentInfo); 195 217 196 218 … … 223 245 */ 224 246 RTASN1OCTETSTRING Content; 247 /** Pointer to the CMS octet string that's inside the Content, NULL if PKCS \#7. 248 * 249 * Hack alert! When transitioning from PKCS \#7 to CMS, the designers decided to 250 * change things and add another wrapper. This time we're talking about a real 251 * octet string, not like the one above which is really an explicit content tag. 252 * When constructing or decoding CMS content, this will be the same pointer as 253 * Content.pEncapsulated, while the union below will be holding the same pointer 254 * as pCmsContent->pEncapsulated. 255 */ 256 PRTASN1OCTETSTRING pCmsContent; 225 257 /** Same as Content.pEncapsulated, except a choice of known types. */ 226 258 union … … 230 262 /** ContentType is RTCRSPCINDIRECTDATACONTENT_OID. */ 231 263 struct RTCRSPCINDIRECTDATACONTENT *pIndirectDataContent; 264 /** ContentType is RTCRTSPTSTINFO_OID. */ 265 struct RTCRTSPTSTINFO *pTstInfo; 232 266 /** Generic / Unknown / User. */ 233 267 PRTASN1CORE pCore; … … 238 272 /** Pointer to the const IPRT representation of a PKCS \#7 ContentInfo. */ 239 273 typedef RTCRPKCS7CONTENTINFO const *PCRTCRPKCS7CONTENTINFO; 240 241 274 RTASN1TYPE_STANDARD_PROTOTYPES(RTCRPKCS7CONTENTINFO, RTDECL, RTCrPkcs7ContentInfo, SeqCore.Asn1Core); 275 RTASN1_IMPL_GEN_SET_OF_TYPEDEFS_AND_PROTOS(RTCRPKCS7SETOFCONTENTINFOS, RTCRPKCS7CONTENTINFO, RTDECL, RTCrPkcs7SetOfContentInfos); 242 276 243 277 RTDECL(bool) RTCrPkcs7ContentInfo_IsSignedData(PCRTCRPKCS7CONTENTINFO pThis); 278 279 280 /** 281 * PKCS \#7 Certificate choice. 282 */ 283 typedef enum RTCRPKCS7CERTCHOICE 284 { 285 RTCRPKCS7CERTCHOICE_INVALID = 0, 286 RTCRPKCS7CERTCHOICE_X509, 287 RTCRPKCS7CERTCHOICE_EXTENDED_PKCS6, 288 RTCRPKCS7CERTCHOICE_AC_V1, 289 RTCRPKCS7CERTCHOICE_AC_V2, 290 RTCRPKCS7CERTCHOICE_OTHER, 291 RTCRPKCS7CERTCHOICE_END, 292 RTCRPKCS7CERTCHOICE_32BIT_HACK = 0x7fffffff 293 } RTCRPKCS7CERTCHOICE; 294 295 296 /** 297 * Common representation for PKCS \#7 ExtendedCertificateOrCertificate and the 298 * CMS CertificateChoices types. 299 */ 300 typedef struct RTCRPKCS7CERT 301 { 302 /** Dummy ASN.1 record, not encoded. */ 303 RTASN1DUMMY Dummy; 304 /** The value allocation. */ 305 RTASN1ALLOCATION Allocation; 306 /** The choice of value. */ 307 RTCRPKCS7CERTCHOICE enmChoice; 308 /** The value union. */ 309 union 310 { 311 /** Standard X.509 certificate (RTCRCMSCERTIFICATECHOICE_X509). */ 312 PRTCRX509CERTIFICATE pX509Cert; 313 /** Extended PKCS \#6 certificate (RTCRCMSCERTIFICATECHOICE_EXTENDED_PKCS6). */ 314 PRTASN1CORE pExtendedCert; 315 /** Attribute certificate version 1 (RTCRCMSCERTIFICATECHOICE_AC_V1). */ 316 PRTASN1CORE pAcV1; 317 /** Attribute certificate version 2 (RTCRCMSCERTIFICATECHOICE_AC_V2). */ 318 PRTASN1CORE pAcV2; 319 /** Other certificate (RTCRCMSCERTIFICATECHOICE_OTHER). */ 320 PRTASN1CORE pOtherCert; 321 } u; 322 } RTCRPKCS7CERT; 323 /** Pointer to the IPRT representation of PKCS \#7 or CMS certificate. */ 324 typedef RTCRPKCS7CERT *PRTCRPKCS7CERT; 325 /** Pointer to the const IPRT representation of PKCS \#7 or CMS certificate. */ 326 typedef RTCRPKCS7CERT const *PCRTCRPKCS7CERT; 327 RTASN1TYPE_STANDARD_PROTOTYPES(RTCRPKCS7CERT, RTDECL, RTCrPkcs7Cert, Dummy.Asn1Core); 328 RTASN1_IMPL_GEN_SET_OF_TYPEDEFS_AND_PROTOS(RTCRPKCS7SETOFCERTS, RTCRPKCS7CERT, RTDECL, RTCrPkcs7SetOfCerts); 329 330 RTDECL(PCRTCRX509CERTIFICATE) RTCrPkcs7SetOfCerts_FindX509ByIssuerAndSerialNumber(PCRTCRPKCS7SETOFCERTS pCertificates, 331 PCRTCRX509NAME pIssuer, 332 PCRTASN1INTEGER pSerialNumber); 244 333 245 334 … … 258 347 RTCRPKCS7CONTENTINFO ContentInfo; 259 348 /** Certificates, optional, implicit tag 0. (Required by Authenticode.) */ 260 RTCR X509CERTIFICATESCertificates;349 RTCRPKCS7SETOFCERTS Certificates; 261 350 /** Certificate revocation lists, optional, implicit tag 1. 262 351 * Not used by Authenticode, so currently stubbed. */ … … 270 359 typedef RTCRPKCS7SIGNEDDATA const *PCRTCRPKCS7SIGNEDDATA; 271 360 RTASN1TYPE_STANDARD_PROTOTYPES(RTCRPKCS7SIGNEDDATA, RTDECL, RTCrPkcs7SignedData, SeqCore.Asn1Core); 361 RTASN1_IMPL_GEN_SET_OF_TYPEDEFS_AND_PROTOS(RTCRPKCS7SETOFSIGNEDDATA, RTCRPKCS7SIGNEDDATA, RTDECL, RTCrPkcs7SetOfSignedData); 272 362 273 363 /** PKCS \#7 SignedData object ID. */ … … 276 366 /** PKCS \#7 SignedData version number 1. */ 277 367 #define RTCRPKCS7SIGNEDDATA_V1 1 368 /* No version 2 seems to exist. */ 369 /** CMS SignedData version number 3. 370 * This should only be used if there are version 1 attribute certificates 371 * present, or if there are version 3 SignerInfo items present, or if 372 * enmcCountInfo is not id-data (RFC-5652, section 5.1). */ 373 #define RTCRPKCS7SIGNEDDATA_V3 3 374 /** CMS SignedData version number 4. 375 * This should only be used if there are version 2 attribute certificates 376 * present (RFC-5652, section 5.1). */ 377 #define RTCRPKCS7SIGNEDDATA_V4 4 378 /** CMS SignedData version number 5. 379 * This should only be used if there are certificates or/and CRLs of the 380 * OTHER type present (RFC-5652, section 5.1). */ 381 #define RTCRPKCS7SIGNEDDATA_V5 5 278 382 279 383 … … 384 488 * signing time attributes and use the @a pValidationTime instead. */ 385 489 #define RTCRPKCS7VERIFY_SD_F_ALWAYS_USE_SIGNING_TIME_IF_PRESENT RT_BIT_32(0) 490 /** Same as RTCRPKCS7VERIFY_SD_F_ALWAYS_USE_SIGNING_TIME_IF_PRESENT for the MS 491 * timestamp counter sigantures. */ 492 #define RTCRPKCS7VERIFY_SD_F_ALWAYS_USE_MS_TIMESTAMP_IF_PRESENT RT_BIT_32(1) 386 493 /** Only use signging time attributes from counter signatures. */ 387 #define RTCRPKCS7VERIFY_SD_F_COUNTER_SIGNATURE_SIGNING_TIME_ONLY RT_BIT_32( 1)494 #define RTCRPKCS7VERIFY_SD_F_COUNTER_SIGNATURE_SIGNING_TIME_ONLY RT_BIT_32(2) 388 495 /** Don't validate the counter signature containing the signing time, just use 389 496 * it unverified. This is useful if we don't necessarily have the root 390 * certificates for the timestamp server handy, but use with great care. */ 391 #define RTCRPKCS7VERIFY_SD_F_USE_SIGNING_TIME_UNVERIFIED RT_BIT_32(2) 497 * certificates for the timestamp server handy, but use with great care. 498 * @sa RTCRPKCS7VERIFY_SD_F_USE_MS_TIMESTAMP_UNVERIFIED */ 499 #define RTCRPKCS7VERIFY_SD_F_USE_SIGNING_TIME_UNVERIFIED RT_BIT_32(3) 500 /** Don't validate the MS counter signature containing the signing timestamp. 501 * @sa RTCRPKCS7VERIFY_SD_F_USE_SIGNING_TIME_UNVERIFIED */ 502 #define RTCRPKCS7VERIFY_SD_F_USE_MS_TIMESTAMP_UNVERIFIED RT_BIT_32(4) 503 /** Do not consider timestamps in microsoft counter signatures. */ 504 #define RTCRPKCS7VERIFY_SD_F_IGNORE_MS_TIMESTAMP RT_BIT_32(5) 505 /** The signed data requires certificates to have the timestamp extended 506 * usage bit present. This is used for recursivly verifying MS timestamp 507 * signatures. */ 508 #define RTCRPKCS7VERIFY_SD_F_USAGE_TIMESTAMPING RT_BIT_32(6) 509 392 510 /** Indicates internally that we're validating a counter signature and should 393 511 * use different rules when checking out the authenticated attributes. -
trunk/include/iprt/crypto/x509.h
r52537 r52600 1023 1023 RTDECL(int) RTCrX509CertPathsSetUntrustedStore(RTCRX509CERTPATHS hCertPaths, RTCRSTORE hUntrustedStore); 1024 1024 RTDECL(int) RTCrX509CertPathsSetUntrustedArray(RTCRX509CERTPATHS hCertPaths, PCRTCRX509CERTIFICATE paCerts, uint32_t cCerts); 1025 RTDECL(int) RTCrX509CertPathsSetUntrustedSet(RTCRX509CERTPATHS hCertPaths, struct RTCRPKCS7SETOFCERTS const *pSetOfCerts); 1025 1026 RTDECL(int) RTCrX509CertPathsSetValidTime(RTCRX509CERTPATHS hCertPaths, PCRTTIME pTime); 1026 1027 RTDECL(int) RTCrX509CertPathsSetValidTimeSpec(RTCRX509CERTPATHS hCertPaths, PCRTTIMESPEC pTimeSpec);
Note:
See TracChangeset
for help on using the changeset viewer.