/* Dictionary Attack Logic. */
/* Written by Ken Goldman */
/* IBM Thomas J. Watson Research Center */
-/* $Id: DA.c 1047 2017-07-20 18:27:34Z kgoldman $ */
+/* $Id: DA.c 1259 2018-07-10 19:11:09Z kgoldman $ */
/* */
/* Licenses and Notices */
/* */
/* arising in any way out of use or reliance upon this specification or any */
/* information herein. */
/* */
-/* (c) Copyright IBM Corp. and others, 2016, 2017 */
+/* (c) Copyright IBM Corp. and others, 2016 - 2018 */
/* */
/********************************************************************************/
)
{
NOT_REFERENCED(type);
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
_plat__TimerWasReset();
s_selfHealTimer = 0;
s_lockoutTimer = 0;
TPM2B_DIGEST s_cpHashForCommandAudit;
#endif
/* 9.5.4.2 DA.c */
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
UINT64 s_selfHealTimer;
UINT64 s_lockoutTimer;
#endif // !ACCUMULATE_SELF_HEAL_TIMER
DRBG_STATE drbgState;
// These values allow the accumulation of self-healing time across orderly shutdown
// of the TPM.
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
UINT64 selfHealTimer; // current value of s_selfHealTimer
UINT64 lockoutTimer; // current value of s_lockoutTimer
UINT64 time; // current value of g_time at shutdown
#endif // ACCUMULATE_SELF_HEAL_TIMER
} ORDERLY_DATA;
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
#define s_selfHealTimer go.selfHealTimer
#define s_lockoutTimer go.lockoutTimer
#endif // ACCUMULATE_SELF_HEAL_TIMER
/* From DA.c */
/* This variable holds the accumulated time since the last time that failedTries was
decremented. This value is in millisecond. */
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
extern UINT64 s_selfHealTimer;
/* This variable holds the accumulated time that the lockoutAuth has been blocked. */
extern UINT64 s_lockoutTimer;
written += DRBG_STATE_Marshal(&data->drbgState, buffer, size);
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
has_block = TRUE;
#else
has_block = FALSE;
#endif
written += BLOCK_SKIP_WRITE_PUSH(has_block, buffer, size);
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
written += UINT64_Marshal(&data->selfHealTimer, buffer, size);
written += UINT64_Marshal(&data->lockoutTimer, buffer, size);
written += UINT64_Marshal(&data->time, buffer, size);
rc = DRBG_STATE_Unmarshal(&data->drbgState, buffer, size);
}
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
needs_block = TRUE;
#else
needs_block = FALSE;
BLOCK_SKIP_READ(skip_self_heal_timer, needs_block, buffer, size,
"ORDERLY DATA", "selfHealTimer");
}
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
if (rc == TPM_RC_SUCCESS) {
rc = UINT64_Unmarshal(&data->selfHealTimer, buffer, size);
}
#if defined DA_C || defined GLOBAL_C || defined MANUFACTURE_C
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
has_block = TRUE;
#else
has_block = FALSE;
#endif
written += BLOCK_SKIP_WRITE_PUSH(has_block, buffer, size);
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
written += UINT64_Marshal(&s_selfHealTimer, buffer, size); /* line 975 */
written += UINT64_Marshal(&s_lockoutTimer, buffer, size); /* line 977 */
#endif // ACCUMULATE_SELF_HEAL_TIMER
}
#if defined DA_C || defined GLOBAL_C || defined MANUFACTURE_C
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
needs_block = TRUE;
#else
needs_block = FALSE;
BLOCK_SKIP_READ(skip_accumulate_self_heal_timer_2, needs_block, buffer, size,
"Volatile state", "s_selfHealTimer.2");
}
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
+#if !ACCUMULATE_SELF_HEAL_TIMER
if (rc == TPM_RC_SUCCESS) {
rc = UINT64_Unmarshal(&s_selfHealTimer, buffer, size); /* line 975 */
}
PCRStateSave(in->shutdownType);
// Save RAM backed NV index data
NvUpdateIndexOrderlyData();
-#ifdef ACCUMULATE_SELF_HEAL_TIMER
+#if ACCUMULATE_SELF_HEAL_TIMER
// Save the current time value
go.time = g_time;
#endif
//# define NO_FAIL_TRACE
#endif
#endif // NDEBUG
-/* If the implementation is going to give lockout time credit for time up to the last orderly
- shutdown, then uncomment this variable */
-#ifndef ACCUMULATE_SELF_HEAL_TIMER
-#define ACCUMULATE_SELF_HEAL_TIMER
-#endif // ACCUMULATE_SELF_HEAL_TIMER
+
+/* Indicate if the implementation is going to give lockout time credit for time up to the last
+ orderly shutdown. */
+#if !(defined ACCUMULATE_SELF_HEAL_TIMER) \
+ || ((ACCUMULATE_SELF_HEAL_TIMER != NO) && (ACCUMULATE_SELF_HEAL_TIMER != YES))
+# undef ACCUMULATE_SELF_HEAL_TIMER
+# define ACCUMULATE_SELF_HEAL_TIMER YES // Default: Either YES or NO
+#endif
+
/* If the implementation is to compute the sizes of the proof and primary seed size values based on
the implemented algorithms, then use this define. */
#if !(defined USE_SPEC_COMPLIANT_PROOFS) \