123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * Copyright (C) 2011-2018 Intel Corporation. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- * * Neither the name of Intel Corporation nor the names of its
- * contributors may be used to endorse or promote products derived
- * from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
- * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
- * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
- * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
- * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- */
- #ifndef _PROTECTED_OUTPUT_CERTIFICATES_H
- #define _PROTECTED_OUTPUT_CERTIFICATES_H
- #ifdef __cplusplus
- extern "C" {
- #endif
- #pragma pack(push)
- #pragma pack(1)
- /*
- * EC-DSA keys and signatures lengths
- */
- #define ECDSA_PRIVKEY_LEN 32
- #define ECDSA_PUBKEY_LEN 64
- #define ECDSA_SECKEY_LEN 32
- #define ECDSA_SIGNATURE_LEN 64
- /* Data structures */
- // EC-DSA Private Key
- typedef unsigned char EcDsaPrivKey[ECDSA_PRIVKEY_LEN];
- // EC-DSA Public Key
- typedef unsigned char EcDsaPubKey[ECDSA_PUBKEY_LEN];
- // EC-DSA Session Key
- typedef unsigned char EcDsaSecKey[ECDSA_SECKEY_LEN];
- // EC-DSA Signature
- typedef unsigned char EcDsaSig[ECDSA_SIGNATURE_LEN];
- /*
- * 3rd Party Certificate
- */
- // Type of the certificate: PROTECTED_OUTPUT
- #define PUBCERT3P_TYPE_PROTECTED_OUTPUT 0x00000000
- #define PUBCERT3P_TYPE_MV_SRV 0x00000001
- #define PUBCERT3P_TYPE_RESERVED 0x00000000
- #define PUBCERT3P_TYPE_AACS_PLAYBACK 0x00000001
- #define PUBCERT3P_TYPE_AACS_ADVANCED_USAGE 0x00000002
- #define PUBCERT3P_TYPE_AACS_ISV_KEY_PROVISIONING 0x00000003
- // Issuer id: Intel
- #define PUBCERT3P_ISSUER_ID 0x00000000
- // PROTECTED_OUTPUT 1.5 3rd Party Certificate
- typedef struct _Cert3p {
- // 3rd Party signed part
- struct _SignBy3p {
- unsigned int CertificateType;
- unsigned char TimeValidStart[8];
- unsigned char TimeValidEnd[8];
- unsigned int Id3p;
- unsigned int IssuerId;
- EcDsaPubKey PubKey3p;
- } SignBy3p;
- EcDsaSig Sign3p;
- // Intel signed part,
- struct _SignedByIntel
- {
- unsigned char TimeValidStart[8];
- unsigned char TimeValidEnd[8];
- EcDsaPubKey PubKeyVerify3p;
- } SignByIntel;
- EcDsaSig SignIntel;
- } Cert3p;
- // 3rd Party Certificate Signed By Intel structs, added after RCRs / MV1.0 in 2010
- typedef struct _Cert3pIntelSigned {
- unsigned char TimeValidStart[8];
- unsigned char TimeValidEnd[8];
- EcDsaPubKey PubKeyVerify3p;
- EcDsaSig SignIntel;
- } Cert3pIntelSigned;
- typedef struct _Cert3pIntelSigned1 {
- unsigned short IntelSignedVersion;
- unsigned char TimeValidStart[8];
- unsigned char TimeValidEnd[8];
- unsigned short IntelSignedCertificateType;
- EcDsaPubKey PubKeyVerify3p;
- EcDsaSig SignIntel;
- } Cert3pIntelSigned1;
- // PROTECTED_OUTPUT2.0/MV 1.0 3rd Party Certificate
- typedef struct _Cert3pMV {
- // 3rd Party signed part
- struct _SignBy3p {
- unsigned int CertificateType;
- unsigned char TimeValidStart[8];
- unsigned char TimeValidEnd[8];
- unsigned int Id3p;
- unsigned int IssuerId;
- EcDsaPubKey PubKey3p;
- } SignBy3p;
- EcDsaSig Sign3p;
- // Intel signed part, modified after RCRs
- union
- {
- Cert3pIntelSigned IntelSigned;
- Cert3pIntelSigned1 IntelSigned1;
- } SignByIntel;
- } Cert3pMV;
- /*
- * Cert3pType, enumerates type of new Cert3p type, added in RCR, define if MV command are allowed
- */
- typedef enum _Cert3pType
- {
- PROTECTED_OUTPUT_EPID_PUBCERT3P_TYPE_PROTECTED_OUTPUT15, //IntelSignedVersion = 0, IntelSignedCertificateType = 0;
- PROTECTED_OUTPUT_EPID_PUBCERT3P_TYPE_PROTECTED_OUTPUT20, //IntelSignedVersion = 1, IntelSignedCertificateType = 0;
- PROTECTED_OUTPUT_EPID_PUBCERT3P_TYPE_MV_APP, //IntelSignedVersion = 1, IntelSignedCertificateType = 1;
- PROTECTED_OUTPUT_EPID_PUBCERT3P_TYPE_MV_SRV //IntelSignedVersion = 1, IntelSignedCertificateType = 1, CertificateType = 0x00000001 (Server) for Trusted Time
- } Cert3pType;
- /*
- * SafeID Certificate
- */
- // PCH SafeID Public Certificate
- typedef struct _SafeIdCert {
- unsigned char sver[2];
- unsigned char blobid[2];
- unsigned int Gid;
- unsigned char h1[64];
- unsigned char h2[64];
- unsigned char w[192];
- EcDsaSig SignIntel;
- } SafeIdCert;
- /*
- * SafeID Standard Parameters (crtyptosystem context)
- */
- typedef struct _SafeIdParams {
- unsigned char sver[2];
- unsigned char blobid[2];
- unsigned char p[32];
- unsigned char q[32];
- unsigned char h[4];
- unsigned char a[32];
- unsigned char b[32];
- unsigned char coeff0[32];
- unsigned char coeff1[32];
- unsigned char coeff2[32];
- unsigned char qnr[32];
- unsigned char orderG2[96];
- unsigned char p_prim[32];
- unsigned char q_prim[32];
- unsigned char h_prim[4];
- unsigned char a_prim[32];
- unsigned char b_prim[32];
- unsigned char g1[64];
- unsigned char g2[192];
- unsigned char g3[64];
- EcDsaSig SignIntel;
- } SafeIdParams;
- /**
- * SafeID Private Key Based Revocation List
- */
- typedef struct _SafeIdPrivKeyRlHdr {
- unsigned char sver[2];
- unsigned char blobid[2];
- unsigned int Gid;
- unsigned int RlVer;
- unsigned int n;
- } SafeIdPrivKeyRlHdr;
- #define SAFEID_F_KEY_SIZE 32
- #define SAFEID_B_K_SIZE 128
- #define SAFEID_SVER 0x0100
- #define SAFEID_KEY_REV_LIST_BLOBID 0x0d00
- #define SAFEID_SIG_REV_LIST_BLOBID 0x0e00
- /*
- * SafeId certificates, parameters and signatures lengths; application certificates length
- */
- #define CERTIFICATE_3P_LEN sizeof(Cert3p)
- #define SAFEID_PARAM_LEN sizeof(SafeIdParams) // SafeID cryptosystem context length
- #define SAFEID_CERT_LEN sizeof(SafeIdCert) // SafeID certificate length
- #define SAFEID_SIG_LEN 569 // SafeID signature length
- // SafeID Signature
- typedef unsigned char SafeIdSig[SAFEID_SIG_LEN];
- #pragma pack(pop)
- #ifdef __cplusplus
- }
- #endif
- #endif//_PROTECTED_OUTPUT_CERTIFICATES_H
|