1 /* 2 * Copyright 2015 The Chromium OS Authors. All rights reserved. 3 * Use of this source code is governed by a BSD-style license that can be 4 * found in the LICENSE file. 5 */ 6 7 #ifndef __TPM2_CPRISYM_FP_H 8 #define __TPM2_CPRISYM_FP_H 9 10 LIB_EXPORT CRYPT_RESULT _cpri__AESDecryptCBC( 11 BYTE *dOut, // OUT: the decrypted data 12 UINT32 keySizeInBits, // IN: key size in bit 13 BYTE *key, // IN: key buffer. The size of this buffer in bytes is 14 // (keySizeInBits + 7) / 8 15 BYTE *iv, // IN/OUT: IV for decryption. The size of this buffer is 16 byte 16 UINT32 dInSize, // IN: data size 17 BYTE *dIn // IN: data buffer 18 ); 19 LIB_EXPORT CRYPT_RESULT 20 _cpri__AESDecryptCFB(BYTE *dOut, // OUT: the decrypted data 21 UINT32 keySizeInBits, // IN: key size in bit 22 BYTE *key, // IN: key buffer. The size of this buffer in 23 // bytes is (keySizeInBits + 7) / 8 24 BYTE *iv, // IN/OUT: IV for decryption. 25 UINT32 dInSize, // IN: data size 26 BYTE *dIn // IN: data buffer 27 ); 28 // 29 // _cpri__AESDecryptCTR() 30 // 31 // Counter mode decryption uses the same algorithm as encryption. The 32 // _cpri__AESDecryptCTR() function is implemented as a macro call to 33 // _cpri__AESEncryptCTR(). 34 #define _cpri__AESDecryptCTR(dOut, keySize, key, iv, dInSize, dIn) \ 35 _cpri__AESEncryptCTR(((BYTE *)dOut), ((UINT32)keySize), ((BYTE *)key), \ 36 ((BYTE *)iv), ((UINT32)dInSize), ((BYTE *)dIn)) 37 LIB_EXPORT CRYPT_RESULT 38 _cpri__AESDecryptECB(BYTE *dOut, // OUT: the clear text data 39 UINT32 keySizeInBits, // IN: key size in bit 40 BYTE *key, // IN: key buffer. The size of this buffer in 41 // bytes is (keySizeInBits + 7) / 8 42 UINT32 dInSize, // IN: data size 43 BYTE *dIn // IN: cipher text buffer 44 ); 45 46 // 47 // _cpri__AESDecryptOFB() 48 // 49 // OFB encryption and decryption use the same algorithms for both. The 50 // _cpri__AESDecryptOFB() function is implemented as a macro call to 51 // _cpri__AESEncrytOFB(). 52 // 53 #define _cpri__AESDecryptOFB(dOut, keySizeInBits, key, iv, dInSize, dIn) \ 54 _cpri__AESEncryptOFB(((BYTE *)dOut), ((UINT32)keySizeInBits), ((BYTE *)key), \ 55 ((BYTE *)iv), ((UINT32)dInSize), ((BYTE *)dIn)) 56 57 // 58 // _cpri__SM4DecryptCTR() 59 // 60 // Counter mode decryption uses the same algorithm as encryption. The 61 // _cpri__SM4DecryptCTR() function is implemented as a macro call to 62 // _cpri__SM4EncryptCTR(). 63 // 64 #define _cpri__SM4DecryptCTR(dOut, keySize, key, iv, dInSize, dIn) \ 65 _cpri__SM4EncryptCTR(((BYTE *)dOut), ((UINT32)keySize), ((BYTE *)key), \ 66 ((BYTE *)iv), ((UINT32)dInSize), ((BYTE *)dIn)) 67 68 // 69 // _cpri__SM4DecryptOFB() 70 // 71 // OFB encryption and decryption use the same algorithms for both. The 72 // _cpri__SM4DecryptOFB() function is implemented as a macro call to 73 // _cpri__SM4EncrytOFB(). 74 // 75 #define _cpri__SM4DecryptOFB(dOut, keySizeInBits, key, iv, dInSize, dIn) \ 76 _cpri__SM4EncryptOFB(((BYTE *)dOut), ((UINT32)keySizeInBits), ((BYTE *)key), \ 77 ((BYTE *)iv), ((UINT32)dInSize), ((BYTE *)dIn)) 78 79 LIB_EXPORT CRYPT_RESULT _cpri__AESEncryptCBC( 80 BYTE *dOut, // OUT: 81 UINT32 keySizeInBits, // IN: key size in bit 82 BYTE *key, // IN: key buffer. The size of this buffer in bytes is 83 // (keySizeInBits + 7) / 8 84 BYTE *iv, // IN/OUT: IV for decryption. 85 UINT32 dInSize, // IN: data size (is required to be a multiple of 16 bytes) 86 BYTE *dIn // IN: data buffer 87 ); 88 LIB_EXPORT CRYPT_RESULT 89 _cpri__AESEncryptCFB(BYTE *dOut, // OUT: the encrypted 90 UINT32 keySizeInBits, // IN: key size in bit 91 BYTE *key, // IN: key buffer. The size of this buffer in 92 // bytes is (keySizeInBits + 7) / 8 93 BYTE *iv, // IN/OUT: IV for decryption. 94 UINT32 dInSize, // IN: data size 95 BYTE *dIn // IN: data buffer 96 ); 97 LIB_EXPORT CRYPT_RESULT 98 _cpri__AESEncryptCTR(BYTE *dOut, // OUT: the encrypted data 99 UINT32 keySizeInBits, // IN: key size in bit 100 BYTE *key, // IN: key buffer. The size of this buffer in 101 // bytes is (keySizeInBits + 7) / 8 102 BYTE *iv, // IN/OUT: IV for decryption. 103 UINT32 dInSize, // IN: data size 104 BYTE *dIn // IN: data buffer 105 ); 106 LIB_EXPORT CRYPT_RESULT 107 _cpri__AESEncryptECB(BYTE *dOut, // OUT: encrypted data 108 UINT32 keySizeInBits, // IN: key size in bit 109 BYTE *key, // IN: key buffer. The size of this buffer in 110 // bytes is (keySizeInBits + 7) / 8 111 UINT32 dInSize, // IN: data size 112 BYTE *dIn // IN: clear text buffer 113 ); 114 LIB_EXPORT CRYPT_RESULT _cpri__AESEncryptOFB( 115 BYTE *dOut, // OUT: the encrypted/decrypted data 116 UINT32 keySizeInBits, // IN: key size in bit 117 BYTE *key, // IN: key buffer. The size of this buffer in bytes is 118 // (keySizeInBits + 7) / 8 119 BYTE *iv, // IN/OUT: IV for decryption. The size of this buffer is 16 byte 120 UINT32 dInSize, // IN: data size 121 BYTE *dIn // IN: data buffer 122 ); 123 LIB_EXPORT INT16 _cpri__GetSymmetricBlockSize( 124 TPM_ALG_ID symmetricAlg, // IN: the symmetric algorithm 125 UINT16 keySizeInBits // IN: the key size 126 ); 127 LIB_EXPORT BOOL _cpri__SymStartup(void); 128 129 #endif // __TPM2_CPRISYM_FP_H 130