#!/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