Initial commit to seed TPM2.0 source code directory
LICENSE file text copied from TCG library specification. README
describes the procedure used to extract source code from parts 3 and 4
of the specification.
The python scripts and part{34}.txt files will be removed in the
following commits.
Change-Id: Ie281e6e988481831f33483053455e8aff8f3f75f
Signed-off-by: Vadim Bendebury <vbendeb@chromium.org>
diff --git a/CpriMisc.c b/CpriMisc.c
new file mode 100644
index 0000000..e809dce
--- /dev/null
+++ b/CpriMisc.c
@@ -0,0 +1,80 @@
+// This file was extracted from the TCG Published
+// Trusted Platform Module Library
+// Part 4: Supporting Routines
+// Family "2.0"
+// Level 00 Revision 01.16
+// October 30, 2014
+
+#include "OsslCryptoEngine.h"
+//
+//
+// Functions
+//
+// BnTo2B()
+//
+// This function is used to convert a BigNum() to a byte array of the specified size. If the number is too large
+// to fit, then 0 is returned. Otherwise, the number is converted into the low-order bytes of the provided array
+// and the upper bytes are set to zero.
+//
+// Return Value Meaning
+//
+// 0 failure (probably fatal)
+// 1 conversion successful
+//
+BOOL
+BnTo2B(
+ TPM2B *outVal, // OUT: place for the result
+ BIGNUM *inVal, // IN: number to convert
+ UINT16 size // IN: size of the output.
+ )
+{
+ BYTE *pb = outVal->buffer;
+ outVal->size = size;
+ size = size - (((UINT16) BN_num_bits(inVal) + 7) / 8);
+ if(size < 0)
+ return FALSE;
+ for(;size > 0; size--)
+ *pb++ = 0;
+ BN_bn2bin(inVal, pb);
+ return TRUE;
+}
+//
+//
+// Copy2B()
+//
+// This function copies a TPM2B structure. The compiler can't generate a copy of a TPM2B generic
+// structure because the actual size is not known. This function performs the copy on any TPM2B pair. The
+// size of the destination should have been checked before this call to make sure that it will hold the TPM2B
+// being copied.
+// This replicates the functionality in the MemoryLib.c.
+//
+void
+Copy2B(
+ TPM2B *out, // OUT: The TPM2B to receive the copy
+ TPM2B *in // IN: the TPM2B to copy
+ )
+{
+ BYTE *pIn = in->buffer;
+ BYTE *pOut = out->buffer;
+ int count;
+ out->size = in->size;
+ for(count = in->size; count > 0; count--)
+ *pOut++ = *pIn++;
+ return;
+}
+//
+//
+// BnFrom2B()
+//
+// This function creates a BIGNUM from a TPM2B and fails if the conversion fails.
+//
+BIGNUM *
+BnFrom2B(
+ BIGNUM *out, // OUT: The BIGNUM
+ const TPM2B *in // IN: the TPM2B to copy
+ )
+{
+ if(BN_bin2bn(in->buffer, in->size, out) == NULL)
+ FAIL(FATAL_ERROR_INTERNAL);
+ return out;
+}