#!/bin/bash -e
#
# Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Attempt to trigger the TPM Dictionary Attack Defense Lock and measure its
# behavior.

if [ -f /sys/class/misc/tpm0/device/owned ]; then
  owned=$(cat /sys/class/misc/tpm0/device/owned)
else
  owned=$(cat /sys/class/tpm/tpm0/device/owned)
fi
if [ "$owned" = "" ]; then
  echo "TPM is not functional"
  exit 1
fi
if [ "$owned" = "0" ]; then
  echo "please use random, non-empty passwords"
  tpm_takeownership || exit 1
fi

attempts=0
max=1
e=/tmp/x$$

while true; do
  attempts=$(( $attempts + 1 ))
  before=$(date +%s)
  defending=1
  while [ $defending -eq 1 ]; do
    if tpm_getpubek -z 2> $e; then
      echo "unexpected success of tpm_getpubek"
      exit 1
    fi
    if grep -q communication $e; then
      echo "communication failure"
      exit 1
    fi
    if ! grep -q dictionary $e; then
      defending=0
    fi
  done
  after=$(date +%s)
  elapsed=$(( $after - $before ))
  if [ $elapsed -gt $max ]; then
    echo delay of $elapsed seconds after $attempts attempts
    max=$elapsed
  fi
done
