summaryrefslogtreecommitdiffstats
path: root/src/tpm12/tpm_crypto.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/tpm12/tpm_crypto.h')
-rw-r--r--src/tpm12/tpm_crypto.h223
1 files changed, 223 insertions, 0 deletions
diff --git a/src/tpm12/tpm_crypto.h b/src/tpm12/tpm_crypto.h
new file mode 100644
index 0000000..f2d0701
--- /dev/null
+++ b/src/tpm12/tpm_crypto.h
@@ -0,0 +1,223 @@
+/********************************************************************************/
+/* */
+/* Platform Dependent Crypto */
+/* Written by Ken Goldman */
+/* IBM Thomas J. Watson Research Center */
+/* $Id: tpm_crypto.h 4406 2011-02-08 22:11:37Z kgoldman $ */
+/* */
+/* (c) Copyright IBM Corporation 2006, 2010. */
+/* */
+/* 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 names of the IBM 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 */
+/* HOLDER 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 TPM_CRYPTO_H
+#define TPM_CRYPTO_H
+
+#include "config.h" /* libtpms added */
+
+#include "tpm_secret.h"
+#include "tpm_types.h"
+
+/* self test */
+
+TPM_RESULT TPM_Crypto_Init(void);
+TPM_RESULT TPM_Crypto_TestSpecific(void);
+
+/* random number */
+
+TPM_RESULT TPM_Random(BYTE *buffer, size_t bytes);
+TPM_RESULT TPM_StirRandomCmd(TPM_SIZED_BUFFER *inData);
+
+/*
+ bignum
+*/
+
+TPM_RESULT TPM_BN_num_bytes(unsigned int *numBytes, TPM_BIGNUM bn_in);
+TPM_RESULT TPM_BN_is_one(TPM_BIGNUM bn_in);
+TPM_RESULT TPM_BN_mod(TPM_BIGNUM rem_in,
+ const TPM_BIGNUM a_in,
+ const TPM_BIGNUM m_in);
+TPM_RESULT TPM_BN_mask_bits(TPM_BIGNUM bn_in, unsigned int n);
+TPM_RESULT TPM_BN_rshift(TPM_BIGNUM *rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ int n);
+TPM_RESULT TPM_BN_lshift(TPM_BIGNUM *rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ int n);
+TPM_RESULT TPM_BN_add(TPM_BIGNUM rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ TPM_BIGNUM bBignum_in);
+TPM_RESULT TPM_BN_mul(TPM_BIGNUM rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ TPM_BIGNUM bBignum_in);
+TPM_RESULT TPM_BN_mod_exp(TPM_BIGNUM rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ TPM_BIGNUM pBignum_in,
+ TPM_BIGNUM nBignum_in);
+TPM_RESULT TPM_BN_mod_mul(TPM_BIGNUM rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ TPM_BIGNUM bBignum_in,
+ TPM_BIGNUM mBignum_in);
+TPM_RESULT TPM_BN_mod_add(TPM_BIGNUM rBignum_in,
+ TPM_BIGNUM aBignum_in,
+ TPM_BIGNUM bBignum_in,
+ TPM_BIGNUM mBignum_in);
+
+TPM_RESULT TPM_bin2bn(TPM_BIGNUM *bn_in,
+ const unsigned char *bin,
+ unsigned int bytes);
+TPM_RESULT TPM_bn2bin(unsigned char *bin,
+ TPM_BIGNUM bn_in);
+
+TPM_RESULT TPM_BN_new(TPM_BIGNUM *bn_in);
+void TPM_BN_free(TPM_BIGNUM bn_in);
+
+/* RSA */
+
+TPM_RESULT TPM_RSAGenerateKeyPair(unsigned char **n,
+ unsigned char **p,
+ unsigned char **q,
+ unsigned char **d,
+ int num_bit,
+ const unsigned char *earr,
+ uint32_t e_size);
+
+TPM_RESULT TPM_RSAPrivateDecrypt(unsigned char *decrypt_data,
+ uint32_t *decrypt_data_length,
+ size_t decrypt_data_size,
+ TPM_ENC_SCHEME encScheme,
+ unsigned char* encrypt_data,
+ uint32_t encrypt_data_size,
+ unsigned char *n,
+ uint32_t nbytes,
+ unsigned char *e,
+ uint32_t ebytes,
+ unsigned char *d,
+ uint32_t dbytes);
+
+TPM_RESULT TPM_RSAPublicEncrypt(unsigned char* encrypt_data,
+ size_t encrypt_data_size,
+ TPM_ENC_SCHEME encScheme,
+ const unsigned char *decrypt_data,
+ size_t decrypt_data_size,
+ unsigned char *narr,
+ uint32_t nbytes,
+ unsigned char *earr,
+ uint32_t ebytes);
+#if USE_FREEBL_CRYPTO_LIBRARY
+TPM_RESULT TPM_RSAPublicEncryptRaw(unsigned char *encrypt_data,
+ uint32_t encrypt_data_size,
+ unsigned char *decrypt_data,
+ uint32_t decrypt_data_size,
+ unsigned char *narr,
+ uint32_t nbytes,
+ unsigned char *earr,
+ uint32_t ebytes);
+#endif
+
+TPM_RESULT TPM_RSAGetPrivateKey(uint32_t *qbytes, unsigned char **qarr,
+ uint32_t *dbytes, unsigned char **darr,
+ uint32_t nbytes, unsigned char *narr,
+ uint32_t ebytes, unsigned char *earr,
+ uint32_t pbytes, unsigned char *parr);
+TPM_RESULT TPM_RSASign(unsigned char *signature,
+ unsigned int *signature_length,
+ unsigned int signature_size,
+ TPM_SIG_SCHEME sigScheme,
+ const unsigned char *message,
+ size_t message_size,
+ unsigned char *narr,
+ uint32_t nbytes,
+ unsigned char *earr,
+ uint32_t ebytes,
+ unsigned char *darr,
+ uint32_t dbytes);
+TPM_RESULT TPM_RSAVerifySHA1(unsigned char *signature,
+ unsigned int signature_size,
+ const unsigned char *message,
+ uint32_t message_size,
+ unsigned char *narr,
+ uint32_t nbytes,
+ unsigned char *earr,
+ uint32_t ebytes);
+
+/* SHA-1 */
+
+TPM_RESULT TPM_SHA1InitCmd(void **context);
+TPM_RESULT TPM_SHA1UpdateCmd(void *context, const unsigned char *data, uint32_t length);
+TPM_RESULT TPM_SHA1FinalCmd(unsigned char *md, void *context);
+void TPM_SHA1Delete(void **context);
+
+/* SHA-1 Context */
+
+TPM_RESULT TPM_Sha1Context_Load(void **context,
+ unsigned char **stream,
+ uint32_t *stream_size);
+TPM_RESULT TPM_Sha1Context_Store(TPM_STORE_BUFFER *sbuffer,
+ void *context);
+
+/*
+ TPM_SYMMETRIC_KEY_DATA
+*/
+
+TPM_RESULT TPM_SymmetricKeyData_New(TPM_SYMMETRIC_KEY_TOKEN *tpm_symmetric_key_data);
+void TPM_SymmetricKeyData_Free(TPM_SYMMETRIC_KEY_TOKEN *tpm_symmetric_key_data);
+void TPM_SymmetricKeyData_Init(TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token);
+TPM_RESULT TPM_SymmetricKeyData_Load(TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token,
+ unsigned char **stream,
+ uint32_t *stream_size);
+TPM_RESULT TPM_SymmetricKeyData_Store(TPM_STORE_BUFFER *sbuffer,
+ const TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token);
+TPM_RESULT TPM_SymmetricKeyData_GenerateKey(TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token);
+TPM_RESULT TPM_SymmetricKeyData_Encrypt(unsigned char **encrypt_data,
+ uint32_t *encrypt_length,
+ const unsigned char *decrypt_data,
+ uint32_t decrypt_length,
+ const TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token);
+TPM_RESULT TPM_SymmetricKeyData_Decrypt(unsigned char **decrypt_data,
+ uint32_t *decrypt_length,
+ const unsigned char *encrypt_data,
+ uint32_t encrypt_length,
+ const TPM_SYMMETRIC_KEY_TOKEN tpm_symmetric_key_token);
+TPM_RESULT TPM_SymmetricKeyData_CtrCrypt(unsigned char *data_out,
+ const unsigned char *data_in,
+ uint32_t data_size,
+ const unsigned char *symmetric_key,
+ uint32_t symmetric_key_size,
+ const unsigned char *ctr_in,
+ uint32_t ctr_in_size);
+TPM_RESULT TPM_SymmetricKeyData_OfbCrypt(unsigned char *data_out,
+ const unsigned char *data_in,
+ uint32_t data_size,
+ const unsigned char *symmetric_key,
+ uint32_t symmetric_key_size,
+ unsigned char *ivec_in,
+ uint32_t ivec_in_size);
+#endif