tpm2: Comments and whitespace changes only

Signed-off-by: Stefan Berger <stefanb@linux.ibm.com>
This commit is contained in:
Stefan Berger 2019-11-26 13:16:46 -05:00 committed by Stefan Berger
parent 25a9338eb4
commit 2296a4dd2a
27 changed files with 149 additions and 117 deletions

View File

@ -1,9 +1,9 @@
/********************************************************************************/
/* */
/* */
/* Basic Typedefs */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: BaseTypes.h 1521 2019-11-15 21:00:47Z kgoldman $ */
/* $Id: BaseTypes.h 1531 2019-11-21 23:54:38Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -55,7 +55,7 @@
/* arising in any way out of use or reliance upon this specification or any */
/* information herein. */
/* */
/* (c) Copyright IBM Corp. and others, 2016 */
/* (c) Copyright IBM Corp. and others, 2016 - 2019 */
/* */
/********************************************************************************/

View File

@ -3,7 +3,7 @@
/* Functions for testing various command properties */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: CommandCodeAttributes.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: CommandCodeAttributes.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -55,7 +55,7 @@
/* arising in any way out of use or reliance upon this specification or any */
/* information herein. */
/* */
/* (c) Copyright IBM Corp. and others, 2016 - 2018 */
/* (c) Copyright IBM Corp. and others, 2016 - 2019 */
/* */
/********************************************************************************/
@ -73,7 +73,7 @@ typedef UINT16 ATTRIBUTE_TYPE;
/* The following file is produced from the command tables in part 3 of the specification. It defines
the attributes for each of the commands. */
/* NOTE: This file is currently produced by an automated process. Files produced from Part 2 or Part
3 tables through automated processes are not included in the specification so that their is no
3 tables through automated processes are not included in the specification so that there is no
ambiguity about the table containing the information being the normative definition. */
#define _COMMAND_CODE_ATTRIBUTES_
#include "CommandAttributeData.h"
@ -556,3 +556,4 @@ IsVendorCommand(
return (IS_ATTRIBUTE(s_ccAttr[commandIndex], TPMA_CC, V));
}
#endif /* libtpms added */

View File

@ -3,7 +3,7 @@
/* Self-Test of Cryptographic Functions */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: CryptSelfTest.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: CryptSelfTest.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -171,8 +171,7 @@ CryptIncrementalSelfTest(
return TPM_RC_SUCCESS;
}
/* 10.2.7.2.4 CryptInitializeToTest() */
/* This function will initialize the data structures for testing all the algorithms. This should not
be called unless CryptAlgsSetImplemented() has been called */
/* This function will initialize the data structures for testing all the algorithms. */
void
CryptInitializeToTest(
void

View File

@ -3,7 +3,7 @@
/* Min Max Macros */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: MinMax.h 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: MinMax.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -59,7 +59,8 @@
/* */
/********************************************************************************/
// 10.1.17 MinMax.h
// 5.13 MinMax.h
#ifndef _MIN_MAX_H_
#define _MIN_MAX_H_
#ifndef MAX

View File

@ -3,7 +3,7 @@
/* NV read and write access methods */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: NVMem.c 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: NVMem.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */

View File

@ -188,6 +188,7 @@ NvWrite(
}
return FALSE;
}
#if 0 // libtpms added being (for Coverity)
/* 8.5.3.8 NvUpdatePersistent() */
/* This function is used to update a value in the PERSISTENT_DATA structure and commits the value to

View File

@ -3,7 +3,7 @@
/* OID values */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: OIDs.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: OIDs.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -59,7 +59,7 @@
/* */
/********************************************************************************/
// 10.1.14 OIDS.h
// 10.1.16 OIDs.h
#include "Tpm.h"

View File

@ -3,7 +3,7 @@
/* Manage the object store of the TPM. */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: Object.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: Object.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -241,8 +241,8 @@ ObjectGetHierarchy(
}
/* 8.6.3.11 GetHeriarchy() */
/* This function returns the handle of the hierarchy to which a handle belongs. This function is
similar to ObjectGetHierarchy() but this routine takes a handle but ObjectGetHierarchy() takes an
pointer to an object. */
similar to ObjectGetHierarchy() but this routine takes a handle while ObjectGetHierarchy() takes
an pointer to an object. */
/* This function requires that handle references a loaded object. */
TPMI_RH_HIERARCHY
GetHeriarchy(

View File

@ -3,7 +3,7 @@
/* Object Commands */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: ObjectCommands.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: ObjectCommands.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */

View File

@ -3,7 +3,7 @@
/* PCR access and manipulation */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: PCR.c 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: PCR.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -91,8 +91,8 @@ static const PCR_Attributes s_initAttributes[] =
{0, 0x0F, 0x1F}, // PCR 23, Application specific
{0, 0x0F, 0x1F} // PCR 24, testing policy
};
/* 8.7.3 Functions */
/* 8.7.3.1 PCRBelongsAuthGroup() */
/* 8.7.2 Functions */
/* 8.7.2.1 PCRBelongsAuthGroup() */
/* This function indicates if a PCR belongs to a group that requires an authValue in order to modify
the PCR. If it does, groupIndex is set to value of the group index. This feature of PCR is
decided by the platform specification. */
@ -123,13 +123,13 @@ PCRBelongsAuthGroup(
#endif
return FALSE;
}
/* 8.7.3.2 PCRBelongsPolicyGroup() */
/* 8.7.2.2 PCRBelongsPolicyGroup() */
/* This function indicates if a PCR belongs to a group that requires a policy authorization in order
to modify the PCR. If it does, groupIndex is set to value of the group index. This feature of
PCR is decided by the platform specification. */
/* Return Values Meaning */
/* TRUE: PCR belongs a policy group */
/* FALSE: PCR does not belong a policy group */
/* TRUE: PCR belongs to a policy group */
/* FALSE: PCR does not belong to a policy group */
BOOL
PCRBelongsPolicyGroup(
TPMI_DH_PCR handle, // IN: handle of PCR
@ -152,11 +152,11 @@ PCRBelongsPolicyGroup(
#endif
return FALSE;
}
/* 8.7.3.3 PCRBelongsTCBGroup() */
/* 8.7.2.3 PCRBelongsTCBGroup() */
/* This function indicates if a PCR belongs to the TCB group. */
/* Return Values Meaning */
/* TRUE: PCR belongs to TCB group */
/* FALSE: PCR does not belong to TCB group */
/* TRUE: PCR belongs to a TCB group */
/* FALSE: PCR does not belong to a TCB group */
static BOOL
PCRBelongsTCBGroup(
TPMI_DH_PCR handle // IN: handle of PCR
@ -172,10 +172,10 @@ PCRBelongsTCBGroup(
#endif
return FALSE;
}
/* 8.7.3.4 PCRPolicyIsAvailable() */
/* 8.7.2.4 PCRPolicyIsAvailable() */
/* This function indicates if a policy is available for a PCR. */
/* Return Values Meaning */
/* TRUE the PCR should be authorized by policy */
/* TRUE the PCR may be authorized by policy */
/* FALSE the PCR does not allow policy */
BOOL
PCRPolicyIsAvailable(
@ -185,7 +185,7 @@ PCRPolicyIsAvailable(
UINT32 groupIndex;
return PCRBelongsPolicyGroup(handle, &groupIndex);
}
/* 8.7.3.5 PCRGetAuthValue() */
/* 8.7.2.5 PCRGetAuthValue() */
/* This function is used to access the authValue of a PCR. If PCR does not belong to an authValue
group, an EmptyAuth() will be returned. */
TPM2B_AUTH *
@ -203,7 +203,7 @@ PCRGetAuthValue(
return NULL;
}
}
/* 8.7.3.6 PCRGetAuthPolicy() */
/* 8.7.2.6 PCRGetAuthPolicy() */
/* This function is used to access the authorization policy of a PCR. It sets policy to the
authorization policy and returns the hash algorithm for policy If the PCR does not allow a
policy, TPM_ALG_NULL is returned. */
@ -225,7 +225,7 @@ PCRGetAuthPolicy(
return TPM_ALG_NULL;
}
}
/* 8.7.3.7 PCRSimStart() */
/* 8.7.2.7 PCRSimStart() */
/* This function is used to initialize the policies when a TPM is manufactured. This function would
only be called in a manufacturing environment or in a TPM simulator. */
void
@ -266,7 +266,7 @@ PCRSimStart(
NV_SYNC_PERSISTENT(pcrAllocated);
return;
}
/* 8.7.3.8 GetSavedPcrPointer() */
/* 8.7.2.8 GetSavedPcrPointer() */
/* This function returns the address of an array of state saved PCR based on the hash algorithm. */
/* Return Values Meaning */
/* NULL no such algorithm */
@ -310,7 +310,7 @@ GetSavedPcrPointer(
}
return retVal;
}
/* 8.7.3.9 PcrIsAllocated() */
/* 8.7.2.9 PcrIsAllocated() */
/* This function indicates if a PCR number for the particular hash algorithm is allocated. */
/* Return Values Meaning */
/* FALSE PCR is not allocated */
@ -340,7 +340,7 @@ PcrIsAllocated(
}
return allocated;
}
/* 8.7.3.10 GetPcrPointer() */
/* 8.7.2.10 GetPcrPointer() */
/* This function returns the address of an array of PCR based on the hash algorithm. */
/* Return Values Meaning */
/* NULL no such algorithm */
@ -387,7 +387,7 @@ GetPcrPointer(
}
return pcr;
}
/* 8.7.3.11 IsPcrSelected() */
/* 8.7.2.11 IsPcrSelected() */
/* This function indicates if an indicated PCR number is selected by the bit map in selection. */
/* Return Values Meaning */
/* FALSE PCR is not selected */
@ -403,7 +403,7 @@ IsPcrSelected(
&& ((selection->pcrSelect[pcr / 8]) & (1 << (pcr % 8))) != 0);
return selected;
}
/* 8.7.3.12 FilterPcr() */
/* 8.7.2.12 FilterPcr() */
/* This function modifies a PCR selection array based on the implemented PCR. */
static void
FilterPcr(
@ -436,7 +436,7 @@ FilterPcr(
}
return;
}
/* 8.7.3.13 PcrDrtm() */
/* 8.7.2.13 PcrDrtm() */
/* This function does the DRTM and H-CRTM processing it is called from _TPM_Hash_End(). */
void
PcrDrtm(
@ -460,7 +460,7 @@ PcrDrtm(
PCRExtend(pcrHandle, hash, digest->t.size, (BYTE *)digest->t.buffer);
}
}
/* 8.7.3.14 PCR_ClearAuth() */
/* 8.7.2.14 PCR_ClearAuth() */
/* This function is used to reset the PCR authorization values. It is called on TPM2_Startup(CLEAR)
and TPM2_Clear(). */
void
@ -476,7 +476,7 @@ PCR_ClearAuth(
}
#endif
}
/* 8.7.3.15 PCRStartup() */
/* 8.7.2.15 PCRStartup() */
/* This function initializes the PCR subsystem at TPM2_Startup(). */
BOOL
PCRStartup(
@ -557,7 +557,7 @@ PCRStartup(
PCR_ClearAuth();
return TRUE;
}
/* 8.7.3.16 PCRStateSave() */
/* 8.7.2.16 PCRStateSave() */
/* This function is used to save the PCR values that will be restored on TPM Resume. */
void
PCRStateSave(
@ -598,7 +598,7 @@ PCRStateSave(
}
return;
}
/* 8.7.3.17 PCRIsStateSaved() */
/* 8.7.2.17 PCRIsStateSaved() */
/* This function indicates if the selected PCR is a PCR that is state saved on
TPM2_Shutdown(STATE). The return value is based on PCR attributes. */
/* Return Values Meaning */
@ -615,7 +615,7 @@ PCRIsStateSaved(
else
return FALSE;
}
/* 8.7.3.18 PCRIsResetAllowed() */
/* 8.7.2.18 PCRIsResetAllowed() */
/* This function indicates if a PCR may be reset by the current command locality. The return value
is based on PCR attributes, and not the PCR allocation. */
/* Return Values Meaning */
@ -642,7 +642,7 @@ PCRIsResetAllowed(
else
return TRUE;
}
/* 8.7.3.19 PCRChanged() */
/* 8.7.2.19 PCRChanged() */
/* This function checks a PCR handle to see if the attributes for the PCR are set so that any change
to the PCR causes an increment of the pcrCounter. If it does, then the function increments the
counter. Will also bump the counter if the handle is zero which means that PCR 0 can not be in
@ -661,7 +661,7 @@ PCRChanged(
FAIL(FATAL_ERROR_COUNTER_OVERFLOW);
}
}
/* 8.7.3.20 PCRIsExtendAllowed() */
/* 8.7.2.20 PCRIsExtendAllowed() */
/* This function indicates a PCR may be extended at the current command locality. The return value
is based on PCR attributes, and not the PCR allocation. */
/* Return Values Meaning */
@ -683,7 +683,7 @@ PCRIsExtendAllowed(
else
return TRUE;
}
/* 8.7.3.21 PCRExtend() */
/* 8.7.2.21 PCRExtend() */
/* This function is used to extend a PCR in a specific bank. */
void
PCRExtend(
@ -710,7 +710,7 @@ PCRExtend(
}
return;
}
/* 8.7.3.22 PCRComputeCurrentDigest() */
/* 8.7.2.22 PCRComputeCurrentDigest() */
/* This function computes the digest of the selected PCR. */
/* As a side-effect, selection is modified so that only the implemented PCR will have their bits
still set. */
@ -755,7 +755,7 @@ PCRComputeCurrentDigest(
CryptHashEnd2B(&hashState, &digest->b);
return;
}
/* 8.7.3.23 PCRRead() */
/* 8.7.2.23 PCRRead() */
/* This function is used to read a list of selected PCR. If the requested PCR number exceeds the
maximum number that can be output, the selection is adjusted to reflect the actual output PCR. */
void
@ -828,7 +828,7 @@ PCRRead(
*pcrCounter = gr.pcrCounter;
return;
}
/* 8.7.3.25 PCRAllocate() */
/* 8.7.2.25 PCRAllocate() */
/* This function is used to change the PCR allocation. */
/* Error Returns Meaning */
/* TPM_RC_NO_RESULT allocate failed */
@ -923,7 +923,7 @@ PCRAllocate(
NV_WRITE_PERSISTENT(pcrAllocated, newAllocate);
return TPM_RC_SUCCESS;
}
/* 8.7.3.26 PCRSetValue() */
/* 8.7.2.26 PCRSetValue() */
/* This function is used to set the designated PCR in all banks to an initial value. The initial
value is signed and will be sign extended into the entire PCR. */
void
@ -961,7 +961,7 @@ PCRSetValue(
}
}
}
/* 8.7.3.27 PCRResetDynamics */
/* 8.7.2.27 PCRResetDynamics */
/* This function is used to reset a dynamic PCR to 0. This function is used in DRTM sequence. */
void
PCRResetDynamics(
@ -991,7 +991,7 @@ PCRResetDynamics(
}
return;
}
/* 8.7.3.28 PCRCapGetAllocation() */
/* 8.7.2.28 PCRCapGetAllocation() */
/* This function is used to get the current allocation of PCR banks. */
/* Return Values Meaning */
/* YES: if the return count is 0 */
@ -1013,7 +1013,7 @@ PCRCapGetAllocation(
return NO;
}
}
/* 8.7.3.29 PCRSetSelectBit() */
/* 8.7.2.29 PCRSetSelectBit() */
/* This function sets a bit in a bitmap array. */
static void
PCRSetSelectBit(
@ -1024,7 +1024,7 @@ PCRSetSelectBit(
bitmap[pcr / 8] |= (1 << (pcr % 8));
return;
}
/* 8.7.3.30 PCRGetProperty() */
/* 8.7.2.30 PCRGetProperty() */
/* This function returns the selected PCR property. */
/* Return Values Meaning */
/* TRUE the property type is implemented */
@ -1123,7 +1123,7 @@ PCRGetProperty(
}
return TRUE;
}
/* 8.7.3.31 PCRCapGetProperties() */
/* 8.7.2.31 PCRCapGetProperties() */
/* This function returns a list of PCR properties starting at property. */
/* Return Values Meaning */
/* YES: if no more property is available */
@ -1165,7 +1165,7 @@ PCRCapGetProperties(
}
return more;
}
/* 8.7.3.32 PCRCapGetHandles() */
/* 8.7.2.32 PCRCapGetHandles() */
/* This function is used to get a list of handles of PCR, started from handle. If handle exceeds the
maximum PCR handle range, an empty list will be returned and the return value will be NO. */
/* Return Values Meaning */

View File

@ -1,9 +1,9 @@
/********************************************************************************/
/* */
/* PRNG Test Vectors */
/* PRNG Test Vectors */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: PRNG_TestVectors.h 1311 2018-08-23 21:39:29Z kgoldman $ */
/* $Id: PRNG_TestVectors.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -55,17 +55,20 @@
/* arising in any way out of use or reliance upon this specification or any */
/* information herein. */
/* */
/* (c) Copyright IBM Corp. and others, 2016 - 2018 */
/* (c) Copyright IBM Corp. and others, 2016 - 2019 */
/* */
/********************************************************************************/
#ifndef PRNG_TESTVECTORS_H
#define PRNG_TESTVECTORS_H
/* 10.1.17 PRNG_TestVectors.h */
#ifndef _MSBN_DRBG_TEST_VECTORS_H
#define _MSBN_DRBG_TEST_VECTORS_H
//#if DRBG_ALGORITHM == TPM_ALG_AES && DRBG_KEY_BITS == 256
#if DRBG_KEY_SIZE_BITS == 256
/* Entropy is the size of the state. The state is the size of the key plus the IV. The IV is a
block. If Key = 256 and Block = 128 then State = 384 */
#define DRBG_TEST_INITIATE_ENTROPY \
0x0d, 0x15, 0xaa, 0x80, 0xb1, 0x6c, 0x3a, 0x10, \
0x90, 0x6c, 0xfe, 0xdb, 0x79, 0x5d, 0xae, 0x0b, \
@ -86,7 +89,6 @@
#define DRBG_TEST_GENERATED \
0x94, 0x6f, 0x51, 0x82, 0xd5, 0x45, 0x10, 0xb9, \
0x46, 0x12, 0x48, 0xf5, 0x71, 0xca, 0x06, 0xc9
//#elif DRBG_ALGORITHM == TPM_ALG_AES && DRBG_KEY_BITS == 128
#elif DRBG_KEY_SIZE_BITS == 128
#define DRBG_TEST_INITIATE_ENTROPY \
0x8f, 0xc1, 0x1b, 0xdb, 0x5a, 0xab, 0xb7, 0xe0, \
@ -106,6 +108,3 @@
0x44, 0x76, 0x9a, 0x8e, 0x6e, 0x8c, 0x1a, 0xd4
#endif
#endif // _MSBN_DRBG_TEST_VECTORS_H
#endif

View File

@ -79,7 +79,7 @@ EXTERN int s_isCanceled;
typedef uint64_t clock64_t;
// This is the value returned the last time that the system clock was read. This is only relevant
// for a simulator or virtual TPM.
EXTERN clock64_t s_realTimePrevious;
EXTERN clock64_t s_realTimePrevious;
// These values are used to try to synthesize a long lived version of clock().
EXTERN clock64_t s_lastSystemTime;
EXTERN clock64_t s_lastReportedTime;
@ -98,9 +98,9 @@ EXTERN BOOL s_timerReset;
EXTERN BOOL s_timerStopped;
/* This variable records the time when _plat__TimerReset() is called. This mechanism allow us to
subtract the time when TPM is power off from the total time reported by clock() function */
EXTERN uint64_t s_initClock;
EXTERN uint64_t s_initClock;
/* This variable records the timer adjustment factor. */
EXTERN unsigned int s_adjustRate;
EXTERN unsigned int s_adjustRate;
/* From LocalityPlat.c Locality of current command */
EXTERN unsigned char s_locality;
/* From NVMem.c Choose if the NV memory should be backed by RAM or by file. If this macro is
@ -124,7 +124,7 @@ EXTERN unsigned char s_locality;
#error Do not define SIMULATION for libtpms!
#endif // SIMULATION
EXTERN unsigned char s_NV[NV_MEMORY_SIZE];
EXTERN unsigned char s_NV[NV_MEMORY_SIZE];
EXTERN BOOL s_NvIsAvailable;
EXTERN BOOL s_NV_unrecoverable;
EXTERN BOOL s_NV_recoverable;

View File

@ -3,7 +3,7 @@
/* Structure definitions for the self-test */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: SelfTest.h 1476 2019-06-10 19:32:03Z kgoldman $ */
/* $Id: SelfTest.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -62,11 +62,12 @@
#ifndef SELFTEST_H
#define SELFTEST_H
/* 5.16.1 Introduction */
/* 10.1.10 SelfTest.h */
/* 10.1.10.1 Introduction */
/* This file contains the structure definitions for the self-test. It also contains macros for use
when the self-test is implemented. */
/* 5.16.2 Defines */
/* Was typing this a lot */
#define SELF_TEST_FAILURE FAIL(FATAL_ERROR_SELF_TEST)
// Use the definition of key sizes to set algorithm values for key size.
@ -80,9 +81,11 @@ typedef UINT32 SYM_INDEX;
/* These two defines deal with the fact that the TPM_ALG_ID table does not delimit the symmetric
mode values with a TPM_SYM_MODE_FIRST and TPM_SYM_MODE_LAST */
#define TPM_SYM_MODE_FIRST ALG_CTR_VALUE
#define TPM_SYM_MODE_LAST ALG_ECB_VALUE
#define NUM_SYM_MODES (TPM_SYM_MODE_LAST - TPM_SYM_MODE_FIRST + 1)
/* Define a type to hold a bit vector for the modes. */
#if NUM_SYM_MODES <= 0
#error "No symmetric modes implemented"

View File

@ -3,7 +3,7 @@
/* Manage the session context counter */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: Session.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: Session.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -122,10 +122,10 @@
/* Assume we have a small contextArray with 8, 4-bit values with values 1 and 2 used to indicate the
loaded context slot number. Also assume that the array contains hex values of (0 0 1 0 3 0 9 F)
and that the contextCounter is an 8-bit counter with a value of 0x37. Since the low nibble is 7,
that means that values above 7 are older than values below it and, in this example, 9 is the
oldest value. */
that means that values closest to but above 7 are older than values below it and, in this
example, 9 is the oldest value. */
/* Note if we subtract the counter value, from each slot that contains a saved contextID we get (- -
- - B - 2 - 8) and the oldest entry is now easy to find. */
- - B - 2 - 8) and the oldest entry is now easy to find because it has the lowest value. */
static void
ContextIdSetOldest(
@ -134,7 +134,7 @@ ContextIdSetOldest(
{
CONTEXT_SLOT lowBits;
CONTEXT_SLOT entry;
CONTEXT_SLOT smallest = ((CONTEXT_SLOT)~0);
CONTEXT_SLOT smallest = ((CONTEXT_SLOT)~0); /* Set to the maximum possible */
UINT32 i;
// Set oldestSaveContext to a value indicating none assigned
s_oldestSavedSession = MAX_ACTIVE_SESSIONS + 1;
@ -231,7 +231,7 @@ SessionIsLoaded(
/* 8.9.5.2 SessionIsSaved() */
/* This function test a session handle references a saved session. The handle must have previously
been checked to make sure that it is a valid handle for an authorization session. */
/* NOTE: An password authorization does not have a session. */
/* NOTE: A password authorization does not have a session. */
/* This function requires that the handle be a valid session handle. */
/* Return Values Meaning */
/* TRUE if session is saved */

View File

@ -1566,7 +1566,7 @@ CheckAuthNoSession(
}
/* 6.4.5 Response Session Processing */
/* 6.4.5.1 Introduction */
/* The following functions build the session area in a response, and handle the audit sessions (if
/* The following functions build the session area in a response and handle the audit sessions (if
present). */
/* 6.4.5.2 ComputeRpHash() */
/* Function to compute rpHash (Response Parameter Hash). The rpHash is only computed if there is an

View File

@ -3,7 +3,7 @@
/* Signing and Signature Verification */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: SigningCommands.c 1490 2019-07-26 21:13:22Z kgoldman $ */
/* $Id: SigningCommands.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -86,7 +86,7 @@ TPM2_VerifySignature(
|| signObject->publicArea.nameAlg == TPM_ALG_NULL)
{
// produce empty ticket if hierarchy is TPM_RH_NULL or nameAlg is
// TPM_ALG_NULL
// ALG_NULL
out->validation.tag = TPM_ST_VERIFIED;
out->validation.hierarchy = TPM_RH_NULL;
out->validation.digest.t.size = 0;

View File

@ -3,7 +3,7 @@
/* For Selected Math Library */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: SupportLibraryFunctionPrototypes_fp.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: SupportLibraryFunctionPrototypes_fp.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -59,71 +59,96 @@
/* */
/********************************************************************************/
/* 5.16 SupportLibraryFunctionPrototypes_fp.h */
#ifndef SUPPORT_LIBRARY_FUNCTION_PROTOTYPES_H
#define SUPPORT_LIBRARY_FUNCTION_PROTOTYPES_H
/* 10.1.11 SupportLibraryFunctionPrototypes_fp.h */
/* 10.1.11.1 Introduction */
/* This file contains the function prototypes for the functions that need to be present in the
selected math library. For each function listed, there should be a small stub function. That
stub provides the interface between the TPM code and the support library. In most cases, the stub
function will only need to do a format conversion between the TPM big number and the support
library big number. The TPM big number format was chosen to make this relatively simple and
fast. */
/* 10.1.11.2 SupportLibInit() */
/* This function is called by CryptInit() so that necessary initializations can be performed on the
cryptographic library. */
LIB_EXPORT
int SupportLibInit(void);
/* MathLibraryCompatibililtyCheck() This function is only used during development to make sure that
the library that is being referenced is using the same size of data structures as the TPM. */
/* 10.1.11.3 MathLibraryCompatibililtyCheck() */
/* This function is only used during development to make sure that the library that is being
referenced is using the same size of data structures as the TPM. */
BOOL
MathLibraryCompatibilityCheck(
void
);
/* 5.19.2 BnModMult() */
/* 10.1.1114 BnModMult() */
/* Does multiply op1 * op2 and divide by modulus returning the remainder of the divide. */
LIB_EXPORT BOOL
BnModMult(bigNum result, bigConst op1, bigConst op2, bigConst modulus);
/* 5.19.3 BnMult() */
/* 10.1.11.5 BnMult() */
/* Multiplies two numbers and returns the result */
LIB_EXPORT BOOL BnMult(bigNum result, bigConst multiplicand, bigConst multiplier);
/* 5.19.4 BnDiv() */
/* 10.1.11.6 BnDiv() */
/* This function divides two bigNum values. The function returns FALSE if there is an error in the
operation. */
LIB_EXPORT BOOL BnDiv(bigNum quotient, bigNum remainder,
bigConst dividend, bigConst divisor);
/* 5.19.5 BnMod() */
/* 10.1.11.7 BnMod() */
#define BnMod(a, b) BnDiv(NULL, (a), (a), (b))
/* 5.19.6 BnGcd() */
/* 10.1.11.8 BnGcd() */
/* Get the greatest common divisor of two numbers. This function is only needed when the TPM
implements RSA. */
LIB_EXPORT BOOL BnGcd(bigNum gcd, bigConst number1, bigConst number2);
/* 5.19.7 BnModExp() */
/* 10.1.11.9 BnModExp() */
/* Do modular exponentiation using bigNum values. This function is only needed when the TPM
implements RSA. */
LIB_EXPORT BOOL BnModExp(bigNum result, bigConst number,
bigConst exponent, bigConst modulus);
/* 5.19.8 BnModInverse() */
/* 10.1.11.10 BnModInverse() */
/* Modular multiplicative inverse. This function is only needed when the TPM implements RSA. */
LIB_EXPORT BOOL BnModInverse(bigNum result, bigConst number,
bigConst modulus);
/* 5.19.9 BnEccModMult() */
/* 10.1.11.11 BnEccModMult() */
/* This function does a point multiply of the form R = [d]S. A return of FALSE indicates that the
result was the point at infinity. This function is only needed if the TPM supports ECC. */
LIB_EXPORT BOOL BnEccModMult(bigPoint R, pointConst S, bigConst d, bigCurve E);
/* 5.19.10 BnEccModMult2() */
/* 10.1.11.13 BnEccModMult2() */
/* This function does a point multiply of the form R = [d]S + [u]Q. A return of FALSE indicates that
the result was the point at infinity. This function is only needed if the TPM supports ECC */
LIB_EXPORT BOOL BnEccModMult2(bigPoint R, pointConst S, bigConst d,
pointConst Q, bigConst u, bigCurve E);
/* 5.19.11 BnEccAdd() */
/* 10.1.11.14 BnEccAdd() */
/* This function does a point add R = S + Q. A return of FALSE indicates that the result was the
point at infinity. This function is only needed if the TPM supports ECC. */
LIB_EXPORT BOOL BnEccAdd(bigPoint R, pointConst S, pointConst Q, bigCurve E);
/* 5.19.12 BnCurveInitialize() */
/* 10.1.11.15 BnCurveInitialize() */
/* This function is used to initialize the pointers of a bnCurve_t structure. The structure is a set
of pointers to bigNum values. The curve-dependent values are set by a different function. This
function is only needed if the TPM supports ECC.*/
LIB_EXPORT bigCurve BnCurveInitialize(bigCurve E, TPM_ECC_CURVE curveId);
/* 5.16.14.1 BnCurveFree() */
/* 10.1.11.16 BnCurveFree() */
/* This function will free the allocated components of the curve and end the frame in which the
curve data exists */
LIB_EXPORT void BnCurveFree(bigCurve E);

View File

@ -3,7 +3,7 @@
/* Structures and data definitions for the symmetric tests */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: SymmetricTest.h 1476 2019-06-10 19:32:03Z kgoldman $ */
/* $Id: SymmetricTest.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */

View File

@ -189,7 +189,6 @@ static BOOL Unmarshal16(
/* 9.17.4Public Functions */
#if 0 /* libtpms added */
/* 9.17.4Public Functions */
/* 9.17.4.1 SetForceFailureMode() */
/* This function is called by the simulator to enable failure mode testing. */
LIB_EXPORT void

View File

@ -3,7 +3,7 @@
/* X509 Support */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: X509_spt.c 1511 2019-10-07 20:40:15Z kgoldman $ */
/* $Id: X509_spt.c 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -78,7 +78,7 @@
//# include "X509_SM2_fp.h"
#endif // ALG_RSA
/* 10.2.26.2 Unmarshaling Functions */
/* 10.2.26.2.1 X509FindExtensionOID() */
/* 10.2.26.2.1 X509FindExtensionByOID() */
/* This will search a list of X509 extensions to find an extension with the requested OID. If the
extension is found, the output context (ctx) is set up to point to the OID in the extension. */
/* Return Value Meaning */

View File

@ -3,7 +3,7 @@
/* Structure definitions used for ECC */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: CryptEcc.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: CryptEcc.h 1532 2019-11-26 14:28:36Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
@ -65,7 +65,7 @@
internally. The ECC-related structures that cross the TPM interface are defined in TpmTypes.h */
#ifndef _CRYPT_ECC_H
#define _CRYPT_ECC_H
/* 10.1.2.1.1 ECC-related Structures */
/* 10.1.2.2 Structures */
/* This is used to define the macro that may or may not be in the data set for the curve
(CryptEccData.c). If there is a mismatch, the compiler will warn that there is to much/not enough
initialization data in the curve. The macro is used because not all versions of the

View File

@ -325,7 +325,7 @@ RsaAdjustPrimeCandidate_PreRev155(
the left of the most significant bit. This approach helps make it clear what is happening with
the MSb of the values. The two RSA primes have to be large enough so that their product will be a
number with the necessary number of significant bits. For example, we want to be able to multiply
two 1024-bit numbers to produce a number with 2028 significant bits. If we accept any 1024-bit
two 1024-bit numbers to produce a number with 2048 significant bits. If we accept any 1024-bit
prime that has its MSb set, then it is possible to produce a product that does not have the MSb
SET. For example, if we use tiny keys of 16 bits and have two 8-bit primes of 0x80, then the
public key would be 0x4000 which is only 15-bits. So, what we need to do is made sure that each
@ -366,6 +366,8 @@ RsaAdjustPrimeCandidate_New(
// make sure the number is odd
prime->d[0] |= 1;
}
LIB_EXPORT void
RsaAdjustPrimeCandidate(
bigNum prime,

View File

@ -3,7 +3,7 @@
/* DRBG with a behavior according to SP800-90A */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: CryptRand.c 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: CryptRand.c 1532 2019-11-26 14:28:36Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */

View File

@ -511,6 +511,7 @@ CryptRsaPssSaltSize(
saltSize = 0;
return saltSize;
}
#if !USE_OPENSSL_FUNCTIONS_RSA // libtpms added
/* 10.2.17.4.9 PssEncode() */
/* This function creates an encoded block of data that is the size of modulus. The function uses the
@ -814,6 +815,7 @@ RSASSA_Decode(
return retVal;
}
#endif // libtpms added
/* 10.2.17.4.13 CryptRsaSelectScheme() */
/* This function is used by TPM2_RSA_Decrypt() and TPM2_RSA_Encrypt(). It sets up the rules to
select a scheme between input and object default. This function assume the RSA object is

View File

@ -3,7 +3,7 @@
/* select the library code that gets included in the TPM build */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: LibSupport.h 1476 2019-06-10 19:32:03Z kgoldman $ */
/* $Id: LibSupport.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */

View File

@ -649,8 +649,8 @@ BnEccModMult(
else
EC_POINT_mul(E->G, pR, NULL, pS, bnD, E->CTX);
PointFromOssl(R, pR, E);
EC_POINT_clear_free(pR);
EC_POINT_clear_free(pS);
EC_POINT_clear_free(pR); // libtpms changed
EC_POINT_clear_free(pS); // libtpms changed
BN_clear_free(bnD); // libtpms added
return !BnEqualZero(R->z);
}
@ -688,9 +688,9 @@ BnEccModMult2(
EC_POINTs_mul(E->G, pR, NULL, 2, points, scalars, E->CTX);
}
PointFromOssl(R, pR, E);
EC_POINT_clear_free(pR);
EC_POINT_clear_free(pS);
EC_POINT_clear_free(pQ);
EC_POINT_clear_free(pR); // libtpms changed
EC_POINT_clear_free(pS); // libtpms changed
EC_POINT_clear_free(pQ); // libtpms changed
BN_clear_free(bnD); // libtpms added
BN_clear_free(bnU); // libtpms added
@ -715,9 +715,9 @@ BnEccAdd(
//
EC_POINT_add(E->G, pR, pS, pQ, E->CTX);
PointFromOssl(R, pR, E);
EC_POINT_clear_free(pR);
EC_POINT_clear_free(pS);
EC_POINT_clear_free(pQ);
EC_POINT_clear_free(pR); // libtpms changed
EC_POINT_clear_free(pS); // libtpms changed
EC_POINT_clear_free(pQ); // libtpms changed
return !BnEqualZero(R->z);
}

View File

@ -3,7 +3,7 @@
/* Splice the OpenSSL() library into the TPM code. */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
/* $Id: TpmToOsslSym.h 1519 2019-11-15 20:43:51Z kgoldman $ */
/* $Id: TpmToOsslSym.h 1529 2019-11-21 23:29:01Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */