| /* Copyright 2015 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| |
| #include "Global.h" |
| #include "_TPM_Init_fp.h" |
| #include "CryptoEngine.h" |
| |
| |
| CRYPT_RESULT _cpri__AESDecryptCBC( |
| BYTE * dOut, // OUT: the decrypted data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. The size of this |
| // buffer is 16 byte |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn) // IN: data buffer |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESDecryptCFB( |
| BYTE * dOut, // OUT: the decrypted data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn) // IN: data buffer |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESDecryptECB( |
| BYTE * dOut, // OUT: the clear text data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn // IN: cipher text buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESEncryptCBC( |
| BYTE * dOut, // OUT: |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. |
| UINT32 dInSize, // IN: data size (is required to be a multiple |
| // of 16 bytes) |
| BYTE * dIn // IN: data buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESEncryptCFB( |
| BYTE * dOut, // OUT: the encrypted |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn // IN: data buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESEncryptCTR( |
| BYTE * dOut, // OUT: the encrypted data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn // IN: data buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESEncryptECB( |
| BYTE * dOut, // OUT: encrypted data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn // IN: clear text buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__AESEncryptOFB( |
| BYTE * dOut, // OUT: the encrypted/decrypted data |
| UINT32 keySizeInBits, // IN: key size in bit |
| BYTE * key, // IN: key buffer. The size of this buffer in |
| // bytes is (keySizeInBits + 7) / 8 |
| BYTE * iv, // IN/OUT: IV for decryption. The size of this |
| // buffer is 16 byte |
| UINT32 dInSize, // IN: data size |
| BYTE * dIn // IN: data buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__C_2_2_KeyExchange( |
| TPMS_ECC_POINT * outZ1, // OUT: a computed point |
| TPMS_ECC_POINT * outZ2, // OUT: and optional second point |
| TPM_ECC_CURVE curveId, // IN: the curve for the computations |
| TPM_ALG_ID scheme, // IN: the key exchange scheme |
| TPM2B_ECC_PARAMETER * dsA, // IN: static private TPM key |
| TPM2B_ECC_PARAMETER * deA, // IN: ephemeral private TPM key |
| TPMS_ECC_POINT * QsB, // IN: static public party B key |
| TPMS_ECC_POINT * QeB // IN: ephemeral public party B key |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| UINT16 _cpri__CompleteHMAC( |
| CPRI_HASH_STATE * hashState, // IN: the state of hash stack |
| TPM2B * oPadKey, // IN: the HMAC key in oPad format |
| UINT32 dOutSize, // IN: size of digest buffer |
| BYTE * dOut // OUT: hash digest |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| UINT16 _cpri__CompleteHash( |
| CPRI_HASH_STATE * hashState, // IN: the state of hash stack |
| UINT32 dOutSize, // IN: size of digest buffer |
| BYTE * dOut // OUT: hash digest |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| CRYPT_RESULT _cpri__DecryptRSA( |
| UINT32 * dOutSize, // OUT: the size of the decrypted data |
| BYTE * dOut, // OUT: the decrypted data |
| RSA_KEY * key, // IN: the key to use for decryption |
| TPM_ALG_ID padType, // IN: the type of padding |
| UINT32 cInSize, // IN: the amount of data to decrypt |
| BYTE * cIn, // IN: the data to decrypt |
| TPM_ALG_ID hashAlg, // IN: in case this is needed for the scheme |
| const char *label // IN: in case it is needed for the scheme |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__DrbgGetPutState( |
| GET_PUT direction, |
| int bufferSize, |
| BYTE * buffer) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__EccCommitCompute( |
| TPMS_ECC_POINT * K, // OUT: [d]B or [r]Q |
| TPMS_ECC_POINT * L, // OUT: [r]B |
| TPMS_ECC_POINT * E, // OUT: [r]M |
| TPM_ECC_CURVE curveId, // IN: the curve for the computations |
| TPMS_ECC_POINT * M, // IN: M (optional) |
| TPMS_ECC_POINT * B, // IN: B (optional) |
| TPM2B_ECC_PARAMETER * d, // IN: d (required) |
| TPM2B_ECC_PARAMETER * r // IN: the computed r value (required) |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| UINT32 _cpri__EccGetCurveCount( |
| void) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| const ECC_CURVE *_cpri__EccGetParametersByCurveId( |
| TPM_ECC_CURVE curveId // IN: the curveID |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return NULL; |
| } |
| |
| BOOL _cpri__EccIsPointOnCurve( |
| TPM_ECC_CURVE curveId, // IN: the curve selector |
| TPMS_ECC_POINT * Q // IN: the point. |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return 0; |
| } |
| |
| CRYPT_RESULT _cpri__EccPointMultiply( |
| TPMS_ECC_POINT * Rout, // OUT: the product point R |
| TPM_ECC_CURVE curveId, // IN: the curve to use |
| TPM2B_ECC_PARAMETER * dIn, // IN: value to multiply against the |
| // curve generator |
| TPMS_ECC_POINT * Qin, // IN: point Q |
| TPM2B_ECC_PARAMETER * uIn // IN: scalar value for the multiplier of Q |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__EncryptRSA( |
| UINT32 * cOutSize, // OUT: the size of the encrypted data |
| BYTE * cOut, // OUT: the encrypted data |
| RSA_KEY * key, // IN: the key to use for encryption |
| TPM_ALG_ID padType, // IN: the type of padding |
| UINT32 dInSize, // IN: the amount of data to encrypt |
| BYTE * dIn, // IN: the data to encrypt |
| TPM_ALG_ID hashAlg, // IN: in case this is needed |
| const char *label // IN: in case it is needed |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__GenerateKeyEcc( |
| TPMS_ECC_POINT * Qout, // OUT: the public point |
| TPM2B_ECC_PARAMETER * dOut, // OUT: the private scalar |
| TPM_ECC_CURVE curveId, // IN: the curve identifier |
| TPM_ALG_ID hashAlg, // IN: hash algorithm to use in the key |
| // generation process |
| TPM2B * seed, // IN: the seed to use |
| const char *label, // IN: A label for the generation process. |
| TPM2B * extra, // IN: Party 1 data for the KDF |
| UINT32 * counter // IN/OUT: Counter value to allow KDF |
| // iteration to be propagated across multiple functions |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__GenerateKeyRSA( |
| TPM2B * n, // OUT: The public modulu |
| TPM2B * p, // OUT: One of the prime factors of n |
| UINT16 keySizeInBits, // IN: Size of the public modulus in bit |
| UINT32 e, // IN: The public exponent |
| TPM_ALG_ID hashAlg, // IN: hash algorithm to use in the key generation proce |
| TPM2B * seed, // IN: the seed to use |
| const char *label, // IN: A label for the generation process. |
| TPM2B * extra, // IN: Party 1 data for the KDF |
| UINT32 * counter // IN/OUT: Counter value to allow KFD iteration to be |
| // propagated across multiple routine |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| UINT16 _cpri__GenerateRandom( |
| INT32 randomSize, |
| BYTE * buffer) |
| { |
| ecprintf("%s called\n", __func__); |
| return 0; |
| } |
| |
| UINT16 _cpri__GenerateSeededRandom( |
| INT32 randomSize, // IN: the size of the request |
| BYTE * random, // OUT: receives the data |
| TPM_ALG_ID hashAlg, // IN: used by KDF version but not here |
| TPM2B * seed, // IN: the seed value |
| const char *label, // IN: a label string (optional) |
| TPM2B * partyU, // IN: other data (oprtional) |
| TPM2B * partyV // IN: still more (optional) |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| TPM_ALG_ID _cpri__GetContextAlg( |
| CPRI_HASH_STATE * hashState) |
| { |
| ecprintf("%s called\n", __func__); |
| return TPM_ALG_ERROR; |
| } |
| |
| TPM_ECC_CURVE _cpri__GetCurveIdByIndex( |
| UINT16 i) |
| { |
| ecprintf("%s called\n", __func__); |
| return TPM_ECC_NONE; |
| } |
| |
| UINT16 _cpri__GetDigestSize( |
| TPM_ALG_ID hashAlg // IN: hash algorithm to look up |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| CRYPT_RESULT _cpri__GetEphemeralEcc( |
| TPMS_ECC_POINT * Qout, // OUT: the public point |
| TPM2B_ECC_PARAMETER * dOut, // OUT: the private scalar |
| TPM_ECC_CURVE curveId // IN: the curve for the key |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| LIB_EXPORT TPM_ALG_ID _cpri__GetHashAlgByIndex( |
| UINT32 index) // IN: the index |
| { |
| ecprintf("%s called\n", __func__); |
| return TPM_ALG_ERROR; |
| } |
| |
| UINT16 _cpri__GetHashBlockSize( |
| TPM_ALG_ID hashAlg // IN: hash algorithm to look up |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| INT16 _cpri__GetSymmetricBlockSize( |
| TPM_ALG_ID symmetricAlg, // IN: the symmetric algorithm |
| UINT16 keySizeInBits // IN: the key size |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| UINT16 _cpri__HashBlock( |
| TPM_ALG_ID hashAlg, // IN: The hash algorithm |
| UINT32 dataSize, // IN: size of buffer to hash |
| BYTE * data, // IN: the buffer to hash |
| UINT32 digestSize, // IN: size of the digest buffer |
| BYTE * digest // OUT: hash digest |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| void _cpri__ImportExportHashState( |
| CPRI_HASH_STATE * osslFmt, // IN/OUT: the hash state formated for use |
| // by openSSL |
| EXPORT_HASH_STATE * externalFmt, // IN/OUT: the exported hash state |
| IMPORT_EXPORT direction // |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| } |
| |
| UINT16 _cpri__KDFa( |
| TPM_ALG_ID hashAlg, // IN: hash algorithm used in HMAC |
| TPM2B * key, // IN: HMAC key |
| const char *label, // IN: a 0-byte terminated label used in KDF |
| TPM2B * contextU, // IN: context U |
| TPM2B * contextV, // IN: context V |
| UINT32 sizeInBits, // IN: size of generated key in bit |
| BYTE * keyStream, // OUT: key buffer |
| UINT32 * counterInOut, // IN/OUT: caller may provide the iteration |
| // counter for incremental operations to |
| // avoid large intermediate buffers. |
| BOOL once // IN: TRUE if only one iteration is |
| // performed FALSE if iteration count determined by "sizeInBits" |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| UINT16 _cpri__KDFe( |
| TPM_ALG_ID hashAlg, // IN: hash algorithm used in HMAC |
| TPM2B * Z, // IN: Z |
| const char *label, // IN: a 0 terminated label using in KDF |
| TPM2B * partyUInfo, // IN: PartyUInfo |
| TPM2B * partyVInfo, // IN: PartyVInfo |
| UINT32 sizeInBits, // IN: size of generated key in bit |
| BYTE * keyStream // OUT: key buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| CRYPT_RESULT _cpri__SignEcc( |
| TPM2B_ECC_PARAMETER * rOut, // OUT: r component of the signature |
| TPM2B_ECC_PARAMETER * sOut, // OUT: s component of the signature |
| TPM_ALG_ID scheme, // IN: the scheme selector |
| TPM_ALG_ID hashAlg, // IN: the hash algorithm if need |
| TPM_ECC_CURVE curveId, // IN: the curve used in the signature process |
| TPM2B_ECC_PARAMETER * dIn, // IN: the private key |
| TPM2B * digest, // IN: the digest to sign |
| TPM2B_ECC_PARAMETER * kIn // IN: k for input |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__SignRSA( |
| UINT32 * sigOutSize, // OUT: size of signature |
| BYTE * sigOut, // OUT: signature |
| RSA_KEY * key, // IN: key to use |
| TPM_ALG_ID scheme, // IN: the scheme to use |
| TPM_ALG_ID hashAlg, // IN: hash algorithm for PKSC1v1_5 |
| UINT32 hInSize, // IN: size of digest to be signed |
| BYTE * hIn // IN: digest buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| UINT16 _cpri__StartHMAC( |
| TPM_ALG_ID hashAlg, // IN: the algorithm to use |
| BOOL sequence, // IN: indicates if the state should be saved |
| CPRI_HASH_STATE * state, // IN/OUT: the state buffer |
| UINT16 keySize, // IN: the size of the HMAC key |
| BYTE * key, // IN: the HMAC key |
| TPM2B * oPadKey // OUT: the key prepared for the oPad round |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| UINT16 _cpri__StartHash( |
| TPM_ALG_ID hashAlg, // IN: hash algorithm |
| BOOL sequence, // IN: TRUE if the state should be saved |
| CPRI_HASH_STATE * hashState // OUT: the state of hash stack. |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| BOOL _cpri__Startup( |
| void) |
| { |
| ecprintf("%s called\n", __func__); |
| return 0; |
| } |
| |
| CRYPT_RESULT _cpri__StirRandom( |
| INT32 entropySize, |
| BYTE * entropy) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__TestKeyRSA( |
| TPM2B * d, // OUT: the address to receive the |
| // private exponent |
| UINT32 exponent, // IN: the public modulu |
| TPM2B * publicKey, // IN/OUT: an input if only one prime is |
| // provided. an output if both primes are provided |
| TPM2B * prime1, // IN: a first prime |
| TPM2B * prime2 // IN: an optional second prime |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| void _cpri__UpdateHash( |
| CPRI_HASH_STATE * hashState, // IN: the hash context information |
| UINT32 dataSize, // IN: the size of data to be added |
| // to the digest |
| BYTE * data // IN: data to be hashed |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| } |
| |
| CRYPT_RESULT _cpri__ValidateSignatureEcc( |
| TPM2B_ECC_PARAMETER * rIn, // IN: r component of the signature |
| TPM2B_ECC_PARAMETER * sIn, // IN: s component of the signature |
| TPM_ALG_ID scheme, // IN: the scheme selector |
| TPM_ALG_ID hashAlg, // IN: the hash algorithm used (not used |
| // in all schemes) |
| TPM_ECC_CURVE curveId, // IN: the curve used in the |
| // signature process |
| TPMS_ECC_POINT * Qin, // IN: the public point of the key |
| TPM2B * digest // IN: the digest that was signed |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| CRYPT_RESULT _cpri__ValidateSignatureRSA( |
| RSA_KEY * key, // IN: key to use |
| TPM_ALG_ID scheme, // IN: the scheme to use |
| TPM_ALG_ID hashAlg, // IN: hash algorithm |
| UINT32 hInSize, // IN: size of digest to be checked |
| BYTE * hIn, // IN: digest buffer |
| UINT32 sigInSize, // IN: size of signature |
| BYTE * sigIn, // IN: signature |
| UINT16 saltSize // IN: salt size for PSS |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| int _math__Comp( |
| const UINT32 aSize, // IN: size of a |
| const BYTE * a, // IN: a buffer |
| const UINT32 bSize, // IN: size of b |
| const BYTE * b // IN: b buffer |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| CRYPT_RESULT _math__Div( |
| const TPM2B * n, // IN: numerator |
| const TPM2B * d, // IN: denominator |
| TPM2B * q, // OUT: quotient |
| TPM2B * r // OUT: remainder |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return CRYPT_FAIL; |
| } |
| |
| int _math__uComp( |
| const UINT32 aSize, // IN: size of a |
| const BYTE * a, // IN: a |
| const UINT32 bSize, // IN: size of b |
| const BYTE * b // IN: b |
| ) |
| { |
| ecprintf("%s called\n", __func__); |
| return -1; |
| } |
| |
| void __assert_func( |
| const char *file, |
| int line, |
| const char *func) |
| { |
| ecprintf("Failure in %s, line %d, code %d\n", |
| s_failFunction, s_failLine, s_failCode); |
| while (1) |
| ; /* Let the watchdog doo the rest. */ |
| } |
| |
| CRYPT_RESULT _cpri__InitCryptoUnits( |
| FAIL_FUNCTION failFunction) |
| { |
| return CRYPT_SUCCESS; |
| } |