tpm-quote-tools-1.0.4/0000755000175000017510000000000013112026402011576 500000000000000tpm-quote-tools-1.0.4/configure0000755000175000017510000054426413112026355013453 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for TPM Quote Tools 1.0.4. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1 test -x / || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : export CONFIG_SHELL # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='TPM Quote Tools' PACKAGE_TARNAME='tpm-quote-tools' PACKAGE_VERSION='1.0.4' PACKAGE_STRING='TPM Quote Tools 1.0.4' PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_unique_file="tpm_mkaik.c" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS RANLIB EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking with_tss12 ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *=) ac_optarg= ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error $? "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error $? "unrecognized option: \`$ac_option' Try \`$0 --help' for more information" ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error $? "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error $? "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error $? "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures TPM Quote Tools 1.0.4 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/tpm-quote-tools] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of TPM Quote Tools 1.0.4:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --without-tss12 disable support for TSS 1.2 Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF TPM Quote Tools configure 1.0.4 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } > conftest.i && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.i conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_mongrel # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno } # ac_fn_c_check_header_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || test -x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_try_link cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by TPM Quote Tools $as_me 1.0.4, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu am__api_version='1.15' ac_aux_dir= for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi done if test -z "$ac_aux_dir"; then as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if ${ac_cv_path_install+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_STRIP+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if ${ac_cv_path_mkdir+:} false; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_AWK+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering ...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='tpm-quote-tools' VERSION='1.0.4' cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers config.h" # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if ${ac_cv_build+:} false; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if ${ac_cv_host+:} false; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac # Older versions of autoconf don't know about C99, # so you may have to commented this out and use: # AC_PROG_CC DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_CC+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "no acceptable C compiler found in \$PATH See \`config.log' for more details" "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error 77 "C compiler cannot create executables See \`config.log' for more details" "$LINENO" 5; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details" "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if ${ac_cv_objext+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "cannot compute suffix of object files: cannot compile See \`config.log' for more details" "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if ${ac_cv_c_compiler_gnu+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if ${ac_cv_prog_cc_g+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if ${ac_cv_prog_cc_c89+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include struct stat; /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if ${am_cv_CC_dependencies_compiler_type+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C99" >&5 $as_echo_n "checking for $CC option to accept ISO C99... " >&6; } if ${ac_cv_prog_cc_c99+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c99=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #include // Check varargs macros. These examples are taken from C99 6.10.3.5. #define debug(...) fprintf (stderr, __VA_ARGS__) #define showlist(...) puts (#__VA_ARGS__) #define report(test,...) ((test) ? puts (#test) : printf (__VA_ARGS__)) static void test_varargs_macros (void) { int x = 1234; int y = 5678; debug ("Flag"); debug ("X = %d\n", x); showlist (The first, second, and third items.); report (x>y, "x is %d but y is %d", x, y); } // Check long long types. #define BIG64 18446744073709551615ull #define BIG32 4294967295ul #define BIG_OK (BIG64 / BIG32 == 4294967297ull && BIG64 % BIG32 == 0) #if !BIG_OK your preprocessor is broken; #endif #if BIG_OK #else your preprocessor is broken; #endif static long long int bignum = -9223372036854775807LL; static unsigned long long int ubignum = BIG64; struct incomplete_array { int datasize; double data[]; }; struct named_init { int number; const wchar_t *name; double average; }; typedef const char *ccp; static inline int test_restrict (ccp restrict text) { // See if C++-style comments work. // Iterate through items via the restricted pointer. // Also check for declarations in for loops. for (unsigned int i = 0; *(text+i) != '\0'; ++i) continue; return 0; } // Check varargs and va_copy. static void test_varargs (const char *format, ...) { va_list args; va_start (args, format); va_list args_copy; va_copy (args_copy, args); const char *str; int number; float fnumber; while (*format) { switch (*format++) { case 's': // string str = va_arg (args_copy, const char *); break; case 'd': // int number = va_arg (args_copy, int); break; case 'f': // float fnumber = va_arg (args_copy, double); break; default: break; } } va_end (args_copy); va_end (args); } int main () { // Check bool. _Bool success = false; // Check restrict. if (test_restrict ("String literal") == 0) success = true; char *restrict newvar = "Another string"; // Check varargs. test_varargs ("s, d' f .", "string", 65, 34.234); test_varargs_macros (); // Check flexible array members. struct incomplete_array *ia = malloc (sizeof (struct incomplete_array) + (sizeof (double) * 10)); ia->datasize = 10; for (int i = 0; i < ia->datasize; ++i) ia->data[i] = i * 1.234; // Check named initializers. struct named_init ni = { .number = 34, .name = L"Test wide string", .average = 543.34343, }; ni.number = 58; int dynamic_array[ni.number]; dynamic_array[ni.number - 1] = 543; // work around unused variable warnings return (!success || bignum == 0LL || ubignum == 0uLL || newvar[0] == 'x' || dynamic_array[ni.number - 1] != 543); ; return 0; } _ACEOF for ac_arg in '' -std=gnu99 -std=c99 -c99 -AC99 -D_STDC_C99= -qlanglvl=extc99 do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c99=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c99" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c99" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c99" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c99" >&5 $as_echo "$ac_cv_prog_cc_c99" >&6; } ;; esac if test "x$ac_cv_prog_cc_c99" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if ${ac_cv_prog_CPP+:} false; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.i conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details" "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if ${ac_cv_path_GREP+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_GREP" || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if ${ac_cv_path_EGREP+:} false; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_EGREP" || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi # Check whether --with-tss12 was given. if test "${with_tss12+set}" = set; then : withval=$with_tss12; else with_tss12=yes fi case "$host_os" in *mingw32 | *cygwin) $as_echo "#define WIN32 1" >>confdefs.h CPPFLAGS="$CPPFLAGS -Iinclude" LDFLAGS="$LDFLAGS -mconsole" ;; esac # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " if eval test \"x\$"$as_ac_Header"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_header in tss/tspi.h do : ac_fn_c_check_header_mongrel "$LINENO" "tss/tspi.h" "ac_cv_header_tss_tspi_h" "$ac_includes_default" if test "x$ac_cv_header_tss_tspi_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TSS_TSPI_H 1 _ACEOF else as_fn_error $? "TSS header files not found" "$LINENO" 5 fi done # On Windows, the name of the TSS library may differ from libtspi. # You should specify the name with # LIBS=-l # on the command line used to invoke ./configure { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing Tspi_Context_Create" >&5 $as_echo_n "checking for library containing Tspi_Context_Create... " >&6; } if ${ac_cv_search_Tspi_Context_Create+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char Tspi_Context_Create (); int main () { return Tspi_Context_Create (); ; return 0; } _ACEOF for ac_lib in '' tspi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_Tspi_Context_Create=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_Tspi_Context_Create+:} false; then : break fi done if ${ac_cv_search_Tspi_Context_Create+:} false; then : else ac_cv_search_Tspi_Context_Create=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_Tspi_Context_Create" >&5 $as_echo "$ac_cv_search_Tspi_Context_Create" >&6; } ac_res=$ac_cv_search_Tspi_Context_Create if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" else as_fn_error $? "TSS 1.1 lib not found" "$LINENO" 5 fi if test "X$with_tss12" = Xyes ; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing Tspi_TPM_SetOperatorAuth" >&5 $as_echo_n "checking for library containing Tspi_TPM_SetOperatorAuth... " >&6; } if ${ac_cv_search_Tspi_TPM_SetOperatorAuth+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char Tspi_TPM_SetOperatorAuth (); int main () { return Tspi_TPM_SetOperatorAuth (); ; return 0; } _ACEOF for ac_lib in '' tspi; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_Tspi_TPM_SetOperatorAuth=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_Tspi_TPM_SetOperatorAuth+:} false; then : break fi done if ${ac_cv_search_Tspi_TPM_SetOperatorAuth+:} false; then : else ac_cv_search_Tspi_TPM_SetOperatorAuth=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_Tspi_TPM_SetOperatorAuth" >&5 $as_echo "$ac_cv_search_Tspi_TPM_SetOperatorAuth" >&6; } ac_res=$ac_cv_search_Tspi_TPM_SetOperatorAuth if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi else ac_cv_search_Tspi_TPM_SetOperatorAuth=no fi if test "X$ac_cv_search_Tspi_TPM_SetOperatorAuth" = Xno ; then { $as_echo "$as_me:${as_lineno-$LINENO}: Configuring for TSS 1.1" >&5 $as_echo "$as_me: Configuring for TSS 1.1" >&6;} else $as_echo "#define HAVE_TSS_12_LIB 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: Configuring for TSS 1.2" >&5 $as_echo "$as_me: Configuring for TSS 1.2" >&6;} fi # See if TrouSerS extensions are available for ac_header in trousers/tss.h do : ac_fn_c_check_header_mongrel "$LINENO" "trousers/tss.h" "ac_cv_header_trousers_tss_h" "$ac_includes_default" if test "x$ac_cv_header_trousers_tss_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TROUSERS_TSS_H 1 _ACEOF fi done for ac_header in trousers/trousers.h do : ac_fn_c_check_header_compile "$LINENO" "trousers/trousers.h" "ac_cv_header_trousers_trousers_h" "#ifdef HAVE_TROUSERS_TSS_H #include #endif " if test "x$ac_cv_header_trousers_trousers_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_TROUSERS_TROUSERS_H 1 _ACEOF fi done # See if POSIX character conversion routines are available for ac_header in iconv.h do : ac_fn_c_check_header_mongrel "$LINENO" "iconv.h" "ac_cv_header_iconv_h" "$ac_includes_default" if test "x$ac_cv_header_iconv_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_ICONV_H 1 _ACEOF fi done # See if the OpenSSL UI is available for ac_header in openssl/ui.h do : ac_fn_c_check_header_mongrel "$LINENO" "openssl/ui.h" "ac_cv_header_openssl_ui_h" "$ac_includes_default" if test "x$ac_cv_header_openssl_ui_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_OPENSSL_UI_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing UI_new" >&5 $as_echo_n "checking for library containing UI_new... " >&6; } if ${ac_cv_search_UI_new+:} false; then : $as_echo_n "(cached) " >&6 else ac_func_search_save_LIBS=$LIBS cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char UI_new (); int main () { return UI_new (); ; return 0; } _ACEOF for ac_lib in '' crypto; do if test -z "$ac_lib"; then ac_res="none required" else ac_res=-l$ac_lib LIBS="-l$ac_lib $ac_func_search_save_LIBS" fi if ac_fn_c_try_link "$LINENO"; then : ac_cv_search_UI_new=$ac_res fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext if ${ac_cv_search_UI_new+:} false; then : break fi done if ${ac_cv_search_UI_new+:} false; then : else ac_cv_search_UI_new=no fi rm conftest.$ac_ext LIBS=$ac_func_search_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_UI_new" >&5 $as_echo "$ac_cv_search_UI_new" >&6; } ac_res=$ac_cv_search_UI_new if test "$ac_res" != no; then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" fi if test "X$ac_cv_search_ssl_UI_new" != Xno ; then { $as_echo "$as_me:${as_lineno-$LINENO}: OpenSSL UI available" >&5 $as_echo "$as_me: OpenSSL UI available" >&6;} $as_echo "#define HAVE_OPENSSL_UI_LIB 1" >>confdefs.h fi # Add warning when using GCC if test "X$GCC" = Xyes ; then CFLAGS="$CFLAGS -Wall" fi ac_config_files="$ac_config_files Makefile tpm-quote-tools.spec" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. as_myself= case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error STATUS ERROR [LINENO LOG_FD] # ---------------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with STATUS, using 1 if that was 0. as_fn_error () { as_status=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by TPM Quote Tools $as_me 1.0.4, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ TPM Quote Tools config.status 1.0.4 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; '') as_fn_error $? "missing file argument" ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error $? "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "tpm-quote-tools.spec") CONFIG_FILES="$CONFIG_FILES tpm-quote-tools.spec" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$ac_tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove sole $(srcdir), # ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$ac_tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$ac_tmp/stdin" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined" >&2;} rm -f "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; esac \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi tpm-quote-tools-1.0.4/compile0000755000175000017510000001624513112026356013114 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tpm-quote-tools-1.0.4/tpm_mkaik.80000644000175000017510000000164313037720561013604 00000000000000.TH "MAKE TPM AIK" 8 "Oct 2010" "" "" .SH NAME tpm_mkaik \- make a TPM Attestation Identity Key .SH SYNOPSIS .B tpm_mkaik .RB [ \-zuhv ] .RI BLOB-FILE .RI PUBKEY-FILE .br .SH DESCRIPTION .PP The program generates a TPM Attestation Identity Key and stores it in the file .RI BLOB-FILE. The public key is stored in the file .RI PUBKEY-FILE. The public key is DER encoded. .TP .RB \-z Use the well known secret used as the owner secret. .TP .RB \-u Use TSS UNICODE encoding for passwords. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH BUGS .PP Sometimes, when .B tpm_mkaik is invoked without the .RB \-z option, no password prompt appears. As a work around, use .B tpm_changeownerauth to set the secret to the well known one, generate the key, and then use .B tpm_changeownerauth to set the secret to its original value. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_changeownerauth "(8)" tpm-quote-tools-1.0.4/tidy.c0000644000175000017510000000116413037720561012652 00000000000000/* * Free memory associated with a context and close it * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include "tpm_quote.h" /* Returns the code after freeing resources associated with a context */ int tidy(TSS_HCONTEXT hContext, int code) { if (Tspi_Context_FreeMemory(hContext, NULL) != TSS_E_INVALID_HANDLE) Tspi_Context_Close(hContext); return code; } tpm-quote-tools-1.0.4/missing0000755000175000017510000001533013112026356013127 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2014 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tpm-quote-tools-1.0.4/README_win32.txt0000644000175000017510000000115013037720561014250 00000000000000INSTALLATION on Windows Download and install MinGW and MSYS. Install MinGW first. To avoid problems with spaces in file names, create a soft link to the DLL that provides the TCG Software Stack. (Hint, use completion to link this file.) $ ln -s /c/Program\ Files/NTRU\ Cryptosystems/NTRU\ TCG\ Software\ \ Stack/bin/Tsp1.dll" .. Configure with: $ ./configure LDFLAGS=-L.. LIBS=-lTsp1 $ make $ make install **************** There is a bug in some versions of the autoconf tools. If your config.h does define WIN32, try running $ autoreconf -if to build a new version of the configuration scripts. tpm-quote-tools-1.0.4/tpm_mkaik.c0000644000175000017510000001771013112026275013654 00000000000000/* * Create an identity key. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ /* * This program generates a TPM identity key and puts the key blob in * the file aik.blob, and its DER-encoded public key in aik.der. * * Inspired by Hal Finney's code on http://privacyca.com. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #define BLOBLEN (1 << 10) #include #include #include #include #include #include "tpm_quote.h" #if defined HAVE_OPENSSL_UI_H && defined HAVE_OPENSSL_UI_LIB #define USE_OPENSSL_UI #endif #if defined USE_OPENSSL_UI #include #define UI_MAX_SECRET_STRING_LENGTH 256 /* Prompt for a password using OpenSSL's UI library */ static int getpasswd(const char *prompt, char *buf, int len) { UI *ui = UI_new(); /* Create UI with default method */ if (!ui) return -1; /* Add input buffer leaving room for a null byte */ if (!UI_add_input_string(ui, prompt, 0, buf, 1, len - 1)) { UI_free(ui); return -1; } int rc = UI_process(ui); /* Print prompt and read password */ UI_free(ui); return rc ? -1 : 0; } #endif static int setSecret(const char *label, TSS_HCONTEXT hContext, TSS_HPOLICY hPolicy, int well_known, int utf16le) { if( well_known ) { BYTE wks[] = TSS_WELL_KNOWN_SECRET; return Tspi_Policy_SetSecret( hPolicy, TSS_SECRET_MODE_SHA1, sizeof wks, wks ); } #if defined USE_OPENSSL_UI int bufSize = UI_MAX_SECRET_STRING_LENGTH; char buf[bufSize]; if (getpasswd(label, buf, bufSize) < 0) return tidy(hContext, tss_err(TSS_E_FAIL, "getting owner password")); # if defined HAVE_ICONV_H if (utf16le) { char *passwd = toutf16le(buf); if (!passwd) return tidy( hContext, tss_err(TSS_E_FAIL, "converting password to UTF16LE") ); size_t passwdLen = utf16lelen(passwd); return Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_PLAIN, passwdLen, (BYTE *)passwd); free(passwd); } else return Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_PLAIN, strlen(buf), (BYTE *)buf); # else // ICONV return Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_PLAIN, strlen(buf), (BYTE *)buf); # endif // ICONV memset(buf, 0, bufSize); #else // USE_OPENSSL_UI return Tspi_Policy_SetSecret(hPolicy, TSS_SECRET_MODE_POPUP, 0, NULL); #endif } static int usage(const char *prog) { const char text[] = "Usage: %s [options] blob pubkey\n" "Options:\n" "\t-z Use well known secret used as owner secret\n" "\t-u Use TSS UNICODE encoding for passwords\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, creates an attestation identity key in blob\n" "and a DER-encoded public key in pubkey.\n"; fprintf(stderr, text, prog); return 1; } int main (int argc, char **argv) { int well_known = 0; int utf16le = 0; int opt; while ((opt = getopt(argc, argv, "zuhv")) != -1) { switch (opt) { case 'z': well_known = 1; break; case 'u': utf16le = 1; break; case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc != optind + 2) return usage(argv[0]); #if !defined HAVE_ICONV_H if (utf16le) { fprintf(stderr, "TSS UNICODE passwords not supported on this platform.\n"); return 1; } #endif const char *blobname = argv[optind]; const char *pubkeyname = argv[optind + 1]; /* Create context */ TSS_HCONTEXT hContext; int rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, NULL); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); /* Get SRK */ TSS_UUID SRK_UUID = TSS_UUID_SRK; TSS_HKEY hSRK; rc = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "loading SRK")); TSS_HPOLICY hSrkPolicy; rc = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSrkPolicy); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting SRK policy")); rc = setSecret("Enter SRK password: ", hContext, hSrkPolicy, well_known, utf16le); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "setting SRK secret")); /* Get TPM handle */ TSS_HTPM hTPM; rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting TPM object")); TSS_HPOLICY hTPMPolicy; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_POLICY, TSS_POLICY_USAGE, &hTPMPolicy); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting TPM policy")); rc = Tspi_Policy_AssignToObject(hTPMPolicy, hTPM); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "assigning TPM policy")); rc = setSecret("Enter owner password: ", hContext, hTPMPolicy, well_known, utf16le); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "setting TPM policy secret")); /* Create dummy PCA key */ TSS_HKEY hPCA; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, TSS_KEY_TYPE_LEGACY|TSS_KEY_SIZE_2048, &hPCA); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "creating PCA object")); /* Create the PCA key in the TPM, it is not user supplied */ rc = Tspi_Key_CreateKey(hPCA, hSRK, 0); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "creating PCA key in TPM")); /* Create AIK object */ int initFlags = TSS_KEY_TYPE_IDENTITY | TSS_KEY_SIZE_2048; TSS_HKEY hAIK; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, initFlags, &hAIK); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "creating AIK object")); /* Generate new AIK */ BYTE lab[] = {}; BYTE *blob; UINT32 blobLen; rc = Tspi_TPM_CollateIdentityRequest(hTPM, hSRK, hPCA, 0, lab, hAIK, TSS_ALG_AES, &blobLen, &blob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "generating new key")); Tspi_Context_FreeMemory(hContext, blob); /* Get key blob */ rc = Tspi_GetAttribData(hAIK, TSS_TSPATTRIB_KEY_BLOB, TSS_TSPATTRIB_KEYBLOB_BLOB, &blobLen, &blob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting key blob")); /* Write key blob */ FILE *out = fopen(blobname, "wb"); if (out == NULL) { fprintf(stderr, "Cannot open %s\n", blobname); return tidy(hContext, 1); } fwrite(blob, 1, blobLen, out); fclose(out); Tspi_Context_FreeMemory(hContext, blob); /* Get public key blob */ rc = Tspi_GetAttribData(hAIK, TSS_TSPATTRIB_KEY_BLOB, TSS_TSPATTRIB_KEYBLOB_PUBLIC_KEY, &blobLen, &blob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting public key blob")); BYTE derBlob[BLOBLEN]; #if defined WIN32 // Handle NTRU tsp1.dll bug. One must compute the size first. UINT32 derBlobLen = 0; rc = Tspi_EncodeDER_TssBlob(blobLen, blob, TSS_BLOB_TYPE_PUBKEY, &derBlobLen, derBlob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting DER encoding public key size")); if (derBlobLen > sizeof derBlob) { fprintf(stderr, "Size of key %u is greater than %u\n", derBlobLen, sizeof derBlob); return tidy(hContext, 1); } #else UINT32 derBlobLen = sizeof derBlob; #endif rc = Tspi_EncodeDER_TssBlob(blobLen, blob, TSS_BLOB_TYPE_PUBKEY, &derBlobLen, derBlob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "DER encoding public key blob")); Tspi_Context_FreeMemory(hContext, blob); /* Write DER-encoded public key */ out = fopen(pubkeyname, "wb"); if (out == NULL) { fprintf(stderr, "Cannot open %s\n", pubkeyname); return tidy(hContext, 1); } fwrite(derBlob, 1, derBlobLen, out); fclose(out); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/tpm_getquote.80000644000175000017510000000170213037720561014341 00000000000000.TH "GET TPM QUOTE" 8 "Oct 2010" "" "" .SH NAME tpm_getquote \- return the signature produced by a TPM quote .SH SYNOPSIS .B tpm_getquote .RB [ \-r\ HOST ] .RB [ \-p\ PCR-VALUES-FILE ] .RB [ \-hv ] .RI UUID-FILE .RI NONCE-FILE .RI QUOTE-FILE .RI PCRS .br .SH DESCRIPTION .PP The program returns the signature produced by a TPM quote in the file .RI QUOTE-FILE. .RI PCRS is a sequence of integers that specify the Platform Configuration Registers used to produce the signature. The key used for the operation is the one registered under the UUID in .RI UUID-FILE. The nonce used is taken from the file .RI NONCE-FILE. .TP .RB \-r\ HOST Perform operation on remote .RB HOST. .TP .RB \-p\ PCR-VALUE-FILE Store the current list of PCR values in .RI PCR-VALUE-FILE. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_loadkey "(8)," .BR tpm_getpcrhash "(8)," .BR tpm_verifyquote "(8)" tpm-quote-tools-1.0.4/ChangeLog0000644000175000017510000001530313112026275013302 000000000000002017-05-26 Matthias Gerstner * tpm_mkaik.c (setSecret): Fixed tpm_mkaik when SRK password is in effect. The code before only set a TPM secret, the SRK secret was always set to the well known one. This then failed with error code 0x1 "authentication failed". * configure.ac: Tagged as 1.0.4. 2017-01-18 John D. Ramsdell * *.8: For each manual page, added a description of the documented program in the NAME section. This change allows lexgrog to extract what is needed for whatis and apropos, and follows tradition. * configure.ac: Tagged as 1.0.3. 2013-03-23 John D. Ramsdell * config.guess, config.sub: Distribution rebuilt to support the ARM 64 bit CPU architecture (aarch64). * configure.ac: Tagged as tpm-quote-tools-1.0.2 with tag v1.0.2. 2011-07-26 John D. Ramsdell * configure.ac: Tagged as 1.0.1. * tpm-quote-tools.spec.in (Source0): Link to sf site. 2011-07-14 John D. Ramsdell * tpm-quote-tools.spec.in (URL): Link to SourceForge development site. * tpm-quote-tools.spec.in (Source0): Link to NEU site. * tpm-quote-tools.spec.in (changelog): Quoted % in references to macros. * README: Noted that tpm-tools is only used to take ownership of a tpm. 2011-07-08 John D. Ramsdell * tpm-quote-tools.spec.in: Fixed %changelog format * tpm-quote-tools.spec.in: Removed use of %makeinstall 2011-06-02 John D. Ramsdell * tpm-quote-tools.spec.in: Added %changelog 2011-03-09 John D. Ramsdell * tpm-quote-tools.spec.in: Fix spec to meet Fedora standards. 2011-01-19 John D. Ramsdell * configure.ac: Tagged as 1.0. 2010-12-03 John D. Ramsdell * tidy.c: Added support for ensuring resources associated with a context are freed, and incorporated this support into the files that contain the main function of a program. 2010-11-17 John D. Ramsdell * configure.ac: Tagged as 0.9. * *.c: Included stddef.h. This fixes a compile time error for the case in which trousers or iconv is not available. 2010-11-15 John D. Ramsdell * tpm_updatepcrhash.c (main): Allowed updates to a hash when the PCR selection changes too. * control: Added support for Debian packaging. * tpm-quote-tools.spec.in: Added support for RPMs. 2010-11-11 John D. Ramsdell * tpm_updatepcrhash.c (main): Cleaned up the code that reads PCR values from a file, and eliminated the use of GNU extensions. The code should now be accepted by any C99 compiler and be easier to read. The code reading the PCR file now checks to ensure it does not contain two lines that specify the same PCR. Such a file would create a flawed hash value. The code now uses TrouSerS hash updates that are specifically designed for TPM_PCR_SELECTIONs and the like. As a result, the code no longer computes the blob associated with a PCR composite hash, and then hashes that value, making the code more obvious. 2010-11-09 John D. Ramsdell * tpm_updatepcrhash.c (main): Corrected a flaw in the update hash code that caused the newly computed composite hash to over write the existing nonce instead of the old hash. 2010-11-08 John D. Ramsdell * configure.ac: Added the --without-tss12 option to force the use of the 1.1b version of TPM quote. * tpm_getquote.c (main): Added the -p option that stores the PCR values in a file. 2010-11-05 John D. Ramsdell * tpm_verifyquote.c (main): Removed connection request as there is no need to connect to the TCG daemon while verifying a quote. * configure.ac: Added test for the presence of TrouSerS. * tpm_updatepcrhash.c: Added program for updating a hash. * tpm_getpcrhash.c: This program now saves the PCR values is a separate file. Editing this file can be used to during the process of updating a hash. 2010-11-01 John D. Ramsdell * COPYING: Changed license to BSD. * configure.ac: Tagged as 0.8. * tpm_quote_tools.8: Expanded the description of the collection of tools. * tpm_mkaik.c (main): Added support for TSS UNICODE encoding for passwords. * tpm_*.c: Added -h and -v options. Changed the option used to specify a remote host to -r so as to allow -h be the usual option for help. 2010-10-29 John D. Ramsdell * configure.ac: Tagged as 0.7. 2010-10-28 John D. Ramsdell * tpm_mkaik.c (getpasswd): Added an OpenSSL UI based password reader when OpenSSL is available to get around a TrouSerS bug. * tpm_mkaik.c (main): Fixed a bug in command line handling. The sense of the -z was reversed in the previous release, so that by default, tpm_mkaik used the well known secret, and -z told it request an owner secret. 2010-10-27 John D. Ramsdell * configure.ac: Tagged as 0.6. * Makefile.am (dist_man_MANS): Added manual pages. * tpm_mkaik.c (main): Added the ability to query for the owner secret. 2010-10-26 John D. Ramsdell * tpm_unloadkey.c: Added a program that unregisters a key. * loadkey.c (loadkey): Removed spurious creation of a TPM handle. 2010-09-13 John D. Ramsdell * configure.ac: Tagged as 0.5. * quote.c (quote): Use Tspi_TPM_Quote2 when HAVE_TSS_12_LIB is defined. 2010-07-20 John D. Ramsdell * takeownership.c (main): Routine gets the EK and supplies it to the takeownership call rather than using the null handle so as to get around a bug in NTRU's tsp1.dll. 2010-07-01 John D. Ramsdell * configure.ac: Tagged as 0.3. 2010-05-22 John D. Ramsdell * configure.ac: Added support for MinGW and Cygwin platforms. * tpm_getpcrhash.c (main): Added an option so that one can supply the name of a host as a UTF-16LE string for Tspi_Context_Connect. 2010-03-17 John D. Ramsdell * tpm_loadkey.c (main): Added a program that just loads a key. * tpm_verifyquote.c (main): Program accepts the quote from standard input as well as from a file. 2010-03-16 John D. Ramsdell * tpm_getquote.c (main): Added an option so that one can supply the name of a host as a UTF-16LE string for Tspi_Context_Connect. * get_num_pcrs.c: Removed this file, which contained a TPM_GetCapability request for the number of PCRs. Why pay the price for an extra transaction when a later quote request will fail when given a bad PCR mask? * quote.c (quote): Removed the call to get_num_pcrs and the call to check_pcr_mask. * pcr_mask.c: Removed function check_pcr_mask. tpm-quote-tools-1.0.4/tpm_loadkey.c0000644000175000017510000000503613037720561014213 00000000000000/* * Load a key. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include "tpm_quote.h" #define BLOBSIZE (1 << 10) #define NONCESIZE (1 << 10) static int usage(const char *prog) { const char text[] = "Usage: %s [-r host] [-hv] blob uuid\n" "Options:\n" "\t-r host\n" "\t Perform operation on remote host\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, load and registers key in blob as uuid.\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { TSS_UNICODE *host = NULL; int opt; while ((opt = getopt(argc, argv, "r:hv")) != -1) { switch (opt) { case 'r': #if defined HAVE_ICONV_H host = (TSS_UNICODE *)toutf16le(optarg); if (!host) { fprintf(stderr, "Cannot convert %s to UTF-16LE\n", optarg); return 1; } break; #else fprintf(stderr, "Remote requests not supported on this platform.\n"); return 1; #endif case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc != optind + 2) return usage(argv[0]); const char *blobname = argv[optind]; const char *uuidname = argv[optind + 1]; FILE *in = fopen(blobname, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", blobname); return 1; } BYTE blob[BLOBSIZE]; UINT32 blobLen; blobLen = fread(blob, 1, BLOBSIZE, in); fclose(in); in = fopen(uuidname, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", uuidname); return 1; } TSS_UUID uuid; if (sizeof uuid != fread((void *)&uuid, 1, sizeof uuid, in)) { fprintf(stderr, "Expecting a uuid of %zd bytes in %s\n", sizeof uuid, uuidname); return 1; } fclose(in); /* Create context */ TSS_HCONTEXT hContext; /* Context handle */ TSS_RESULT rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, host); free(host); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); if (loadkey(hContext, blob, blobLen, uuid)) return tidy(hContext, 1); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/tpm_updatepcrhash.c0000644000175000017510000001751513037720561015423 00000000000000/* * Update a PCR hash to reflect new PCR values * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #if defined HAVE_TROUSERS_TROUSERS_H #include #include #include #include #include #include #include #include "tpm_quote.h" #define PCRSELSIZE 3 #define NPCRVALS (8 * PCRSELSIZE) #define PCRVALSIZE 20 #define BUFSIZE (1 << 10) static int trousers_err(TSS_RESULT rc, const char *msg) { const char *result = Trspi_Error_String(rc); if (result) fprintf(stderr, "Error while %s. Error code: %s\n", msg, result); else fprintf(stderr, "Error while %s. Error code: 0x%x\n", msg, rc); return 1; } static int read_data(BYTE *buf, const char *name, UINT32 *len) { FILE *in = fopen(name, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", name); return 1; } *len = fread(buf, 1, BUFSIZE, in); if (ferror(in)) return 1; fclose(in); return 0; } static int usage(const char *prog) { const char text[] = "Usage: %s [-hv] oldhash newpcrvals newhash\n" "\toldhash: file containing old PCR hash\n" "\tnewpcrvals: file containing list of PCR index=value pairs\n" "\t to use in creating new hash\n" "\tnewhash: output file\n" "On success, writes the new PCR hash to newhash\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "hv")) != -1) { switch (opt) { case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc != optind + 3) return usage(argv[0]); const char *oldhashname = argv[optind]; const char *newpcrvalsname = argv[optind + 1]; const char *newhashname = argv[optind + 2]; FILE *in = fopen(newpcrvalsname, "r"); if (!in) { fprintf(stderr, "Cannot open %s\n", newpcrvalsname); return 1; } BYTE pcrSelect[PCRSELSIZE]; BYTE pcrValue[NPCRVALS][PCRVALSIZE]; memset(pcrSelect, 0, sizeof pcrSelect); memset(pcrValue, 0, sizeof pcrValue); UINT32 npcrs = 0; /* Number of bits set in pcrSelect */ unsigned int pcrind; /* Type matches "%u" format specifier */ UINT32 i, j; while (1) { char line[BUFSIZE]; /* Read a line of input */ if (!fgets(line, BUFSIZE, in)) { if (ferror(in)) { fprintf(stderr, "Error on file read\n"); exit(1); } else break; /* EOF found, exit loop */ } npcrs++; /* Found a line of input */ char *endp; /* Parse PCR index */ pcrind = (unsigned int)strtoul(line, &endp, 10); if (endp == line) { fprintf(stderr, "(%s: cannot read PCR index\n", newpcrvalsname); exit(1); } if (pcrind >= NPCRVALS) { fprintf(stderr, "%s: out of range PCR %u\n", newpcrvalsname, pcrind); exit(1); } /* Ensure there are no duplicate PCR specifications, as it would cause npcrs to be too large, and corrupt the hash computation. */ if (pcrSelect[pcrind / 8] & 1 << (pcrind % 8)) { fprintf(stderr, "%s: PCR %u already specified\n", newpcrvalsname, pcrind); exit(1); } /* Set bit associated with pcrind */ pcrSelect[pcrind / 8] |= 1 << (pcrind % 8); char *val = strchr(endp, '='); /* Find equal sign */ if (!val) { fprintf(stderr, "%s: ill-formed entry for PCR %u\n", newpcrvalsname, pcrind); exit(1); } for (val++; isspace(*val); val++); /* Skip leading white space */ for (endp = val; isxdigit(*endp); endp++); /* Find end of value */ if (endp - val != 2 * PCRVALSIZE) { fprintf(stderr, "%s: ill-formed entry for PCR %u\n", newpcrvalsname, pcrind); exit(1); } for(j = 0; val < endp; val += 2, j++) { /* Parse PCR value */ unsigned int byte; if (sscanf(val, "%2x", &byte) != 1) { fprintf(stderr, "%s: error reading PCR value byte for PCR %u\n", newpcrvalsname, pcrind); exit(1); } pcrValue[pcrind][j] = (BYTE)byte; } } /* Read the old hash */ BYTE hash[BUFSIZE]; UINT32 hashLen; if (read_data(hash, oldhashname, &hashLen)) return 1; if (hashLen < sizeof(TPM_QUOTE_INFO)) { fprintf(stderr, "Hash too small\n"); return 1; } TPM_QUOTE_INFO2 *qi2 = (TPM_QUOTE_INFO2 *)hash; TPM_QUOTE_INFO *qi = (TPM_QUOTE_INFO *)hash; TPM_PCR_INFO_SHORT info; /* This is set only for quote 2 */ UINT16 selectSize; TSS_RESULT rc; if (qi2->fixed[0] == 'Q' && qi2->fixed[1] == 'U' && qi2->fixed[2] == 'T' && qi2->fixed[3] == '2') { qi = NULL; /* Get select size and info */ UINT64 offset = (UINT64)offsetof(TPM_QUOTE_INFO2, externalData); Trspi_UnloadBlob_NONCE(&offset, hash, 0); rc = Trspi_UnloadBlob_PCR_INFO_SHORT(&offset, hash, &info); if (rc != TSS_SUCCESS) return trousers_err(rc, "extracting PCR info from hash"); selectSize = info.pcrSelection.sizeOfSelect; } else if (qi->fixed[0] == 'Q' && qi->fixed[1] == 'U' && qi->fixed[2] == 'O' && qi->fixed[3] == 'T') { qi2 = NULL; /* Set only select size */ selectSize = 2; } else { fprintf(stderr, "%s is not a valid quote!\n", oldhashname); return 1; } if (selectSize > PCRSELSIZE) { fprintf(stderr, "Cannot handle the selection size of %u in %s\n", selectSize, oldhashname); return 1; } for (i = selectSize; i < PCRSELSIZE; i++) if (pcrSelect[i]) { fprintf(stderr, "Specified PCRs exceed supported PCRs in hash\n"); return 1; } /* Construct a hash of a PCR composite */ /* The TSS data structure that holds a PCR composite hash is TPM_PCR_COMPOSITE. It contains a TPM_PCR_SELECTION, and a list of PCR values. There is no direct support for updating a hash with a TPM_PCR_COMPOSITE. To compute a hash, one must hash the selection, and then hash the values in pieces. */ Trspi_HashCtx hctx; rc = Trspi_HashInit(&hctx, TSS_HASH_SHA1); if (rc != TSS_SUCCESS) return trousers_err(rc, "initing hash"); /* Selection */ /* free(info.pcrSelection.pcrSelect); for pedantics */ info.pcrSelection.pcrSelect = pcrSelect; rc = Trspi_Hash_PCR_SELECTION(&hctx, &info.pcrSelection); if (rc != TSS_SUCCESS) return trousers_err(rc, "updating hash with PCR selection"); /* Size of values */ rc = Trspi_Hash_UINT32(&hctx, npcrs * PCRVALSIZE); if (rc != TSS_SUCCESS) return trousers_err(rc, "updating hash with value size"); /* Values */ for (i = 0, pcrind = 0; i < selectSize; i++) { for (j = 1; j != (1 << 8); j <<= 1, pcrind++) { if (pcrSelect[i] & j) { rc = Trspi_HashUpdate(&hctx, PCRVALSIZE, pcrValue[pcrind]); if (rc != TSS_SUCCESS) return trousers_err(rc, "updating hash with a value"); } } } /* Put composite hash into info even when using old quotes */ BYTE *digest = (BYTE *)&info.digestAtRelease; rc = Trspi_HashFinal(&hctx, digest); if (rc != TSS_SUCCESS) return trousers_err(rc, "finalizing hash"); /* Update the hash */ if (qi2) { UINT64 offset = (UINT64)offsetof(TPM_QUOTE_INFO2, externalData); Trspi_UnloadBlob_NONCE(&offset, hash, 0); Trspi_LoadBlob_PCR_INFO_SHORT(&offset, hash, &info); } else { size_t digestLen = sizeof info.digestAtRelease; memcpy(hash+hashLen-digestLen-sizeof(TPM_NONCE), digest, digestLen); } /* Write the new hash */ FILE *out = fopen(newhashname, "wb"); if (!out) { fprintf(stderr, "Cannot open %s\n", newhashname); return 1; } fwrite(hash, 1, hashLen, out); fclose(out); return 0; } #else int main(void) { fprintf(stderr, "Update PCR hash not available on this platform.\n"); return 1; } #endif tpm-quote-tools-1.0.4/configure.ac0000644000175000017510000000414713112026275014022 00000000000000AC_INIT(TPM Quote Tools, 1.0.4,, tpm-quote-tools) AC_CONFIG_SRCDIR(tpm_mkaik.c) AM_INIT_AUTOMAKE AM_CONFIG_HEADER(config.h) AC_CANONICAL_HOST # Older versions of autoconf don't know about C99, # so you may have to commented this out and use: # AC_PROG_CC AC_PROG_CC_C99 AC_STDC_HEADERS AC_PROG_RANLIB AC_PROG_INSTALL AC_ARG_WITH([tss12], [AS_HELP_STRING([--without-tss12], [disable support for TSS 1.2])], [], [with_tss12=yes]) case "$host_os" in *mingw32 | *cygwin) AC_DEFINE([WIN32], 1, [Define to 1 for the Windows operating system.]) CPPFLAGS="$CPPFLAGS -Iinclude" LDFLAGS="$LDFLAGS -mconsole" ;; esac AC_CHECK_HEADERS([tss/tspi.h], [], [AC_MSG_ERROR([TSS header files not found])]) # On Windows, the name of the TSS library may differ from libtspi. # You should specify the name with # LIBS=-l # on the command line used to invoke ./configure AC_SEARCH_LIBS([Tspi_Context_Create], [tspi], [], [AC_MSG_ERROR([TSS 1.1 lib not found])]) if test "X$with_tss12" = Xyes ; then AC_SEARCH_LIBS([Tspi_TPM_SetOperatorAuth], [tspi]) else ac_cv_search_Tspi_TPM_SetOperatorAuth=no fi if test "X$ac_cv_search_Tspi_TPM_SetOperatorAuth" = Xno ; then AC_MSG_NOTICE([Configuring for TSS 1.1]) else AC_DEFINE([HAVE_TSS_12_LIB], 1, [Define to 1 if you have a TSS 1.2 library.]) AC_MSG_NOTICE([Configuring for TSS 1.2]) fi # See if TrouSerS extensions are available AC_CHECK_HEADERS([trousers/tss.h]) AC_CHECK_HEADERS([trousers/trousers.h], [], [], [#ifdef HAVE_TROUSERS_TSS_H #include #endif]) # See if POSIX character conversion routines are available AC_CHECK_HEADERS([iconv.h]) # See if the OpenSSL UI is available AC_CHECK_HEADERS([openssl/ui.h]) AC_SEARCH_LIBS([UI_new], [crypto]) if test "X$ac_cv_search_ssl_UI_new" != Xno ; then AC_MSG_NOTICE([OpenSSL UI available]) AC_DEFINE([HAVE_OPENSSL_UI_LIB], 1, [Define to 1 if you have the OpenSSL UI library.]) fi # Add warning when using GCC if test "X$GCC" = Xyes ; then CFLAGS="$CFLAGS -Wall" fi AC_CONFIG_FILES([Makefile tpm-quote-tools.spec]) AC_OUTPUT tpm-quote-tools-1.0.4/depcomp0000755000175000017510000005601613112026356013113 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2014 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tpm-quote-tools-1.0.4/win32.txt0000644000175000017510000000162113037720561013236 00000000000000Notes when trying to use these with Windows XP: 0. Make sure TPM is turned on, and (possibly) "activate security" is also turned on (both in the BIOS; in different menus for mine). 1. To allow remote quotes with NTRU's TSS, in the registry set HKEY_LOCAL_MACHINE\Software\NTRU Cryptosystems\TSS\allowRemoteRPC to 1 HKEY_LOCAL_MACHINE\Software\NTRU Cryptosystems\TSS\allowRemoteSOAP to 1 HKEY_LOCAL_MACHINE\Software\NTRU Cryptosystems\TSS\allowSOAPTCS to 1 1.1 Currently with NTRU's TSS, doing things remotely (whether sending or receiving the request) does not work. It will set up the TCP connection, do nothing for 10 seconds, then close the connection. This has been reported to NTRU. 2. To get the iconv.h file, download libiconv from GNU, compile and install it. 2.1 Make sure the folder with iconv.h is on the include path. 2.2 Add -llibcharset and -liconv to LIBS parameter in configure script tpm-quote-tools-1.0.4/config.sub0000755000175000017510000010624613112026356013522 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to . # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv | ft32 \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | mcore | mep | metag \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | visium \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; leon|leon[3-9]) basic_machine=sparc-$basic_machine ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64octeon-* | mips64octeonel-* \ | mips64orion-* | mips64orionel-* \ | mips64r5900-* | mips64r5900el-* \ | mips64vr-* | mips64vrel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | visium-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-* | z80-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aros) basic_machine=i386-pc os=-aros ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c90) basic_machine=c90-cray os=-unicos ;; cegcc) basic_machine=arm-unknown os=-cegcc ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16 | cr16-*) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; dicos) basic_machine=i686-pc os=-dicos ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; leon-*|leon[3-9]-*) basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'` ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-* | ppc64p7-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tile*) basic_machine=$basic_machine-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; z80-*-coff) basic_machine=z80-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -auroraux) os=-auroraux ;; -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* | -cegcc* \ | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -cnk*|-aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tpm-quote-tools-1.0.4/aclocal.m40000644000175000017510000012421613112026354013372 00000000000000# generated automatically by aclocal 1.15 -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.15' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.15], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.15])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named 'Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running 'make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "$am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each '.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from 'make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # -*- Autoconf -*- # Obsolete and "removed" macros, that must however still report explicit # error messages when used, to smooth transition. # # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([AM_CONFIG_HEADER], [AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should use the 'AC][_CONFIG_HEADERS' macro instead.])dnl AC_CONFIG_HEADERS($@)]) AC_DEFUN([AM_PROG_CC_STDC], [AC_PROG_CC am_cv_prog_cc_stdc=$ac_cv_prog_cc_stdc AC_DIAGNOSE([obsolete], ['$0': this macro is obsolete. You should simply use the 'AC][_PROG_CC' macro instead. Also, your code should no longer depend upon 'am_cv_prog_cc_stdc', but upon 'ac_cv_prog_cc_stdc'.])]) AC_DEFUN([AM_C_PROTOTYPES], [AC_FATAL([automatic de-ANSI-fication support has been removed])]) AU_DEFUN([fp_C_PROTOTYPES], [AM_C_PROTOTYPES]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2014 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR tpm-quote-tools-1.0.4/COPYING0000644000175000017510000000342513037720561012572 00000000000000 TPM QUOTE TOOLS LICENSE NOTICE This software was produced for the U. S. Government under Contract No. W15P7T-04-C-D199, and is subject to the Rights in Noncommercial Computer Software and Noncommercial Computer Software Documentation Clause 252.227-7014 (JUN 1995). Copyright (C) 2010 The MITRE Corporation. All Rights Reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of The MITRE Corporation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. tpm-quote-tools-1.0.4/tpm_verifyquote.80000644000175000017510000000174313037720561015073 00000000000000.TH "VERIFY TPM QUOTE" 8 "Oct 2010" "" "" .SH NAME tpm_verifyquote \- verify the signature produced by a TPM quote .SH SYNOPSIS .B tpm_verifyquote .RB [ \-hv ] .RI PUBKEY-FILE .RI HASH-FILE .RI NONCE-FILE .RI [QUOTE-FILE] .br .SH DESCRIPTION .PP The program verifies the signature produced by a TPM quote in the file .RI QUOTE-FILE, or when absent, the quote read from standard input. The file .RI PUBKEY-FILE contains the public key used to validate the signature. The file .RI HASH-FILE contains the signed data generated using the same key and Platform Configuration Registers used to generate the quote. Critically, the signed data includes the PCR composite hash used to validate that the PCRs contain their expected values. The file .RI NONCE-FILE contains the nonce used to generate the quote. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_mkaik "(8)," .BR tpm_getpcrhash "(8)," .BR tpm_getquote "(8)" tpm-quote-tools-1.0.4/include/0000755000175000017510000000000013112026401013220 500000000000000tpm-quote-tools-1.0.4/include/tss/0000755000175000017510000000000013112026402014032 500000000000000tpm-quote-tools-1.0.4/include/tss/tddl_error.h0000644000175000017510000000247313037720561016306 00000000000000/*++ TPM Device Driver Library error return codes --*/ #ifndef __TDDL_ERROR_H__ #define __TDDL_ERROR_H__ #include #include #ifndef TSS_E_BASE #define TSS_E_BASE 0x00000000L #endif // TSS_E_BASE // // specific error codes returned by the TPM device driver library // offset TSS_TDDL_OFFSET // #define TDDL_E_FAIL TSS_E_FAIL #define TDDL_E_TIMEOUT TSS_E_TIMEOUT // The connection was already established. #define TDDL_E_ALREADY_OPENED (UINT32)(TSS_E_BASE + 0x081L) // The device was not connected. #define TDDL_E_ALREADY_CLOSED (UINT32)(TSS_E_BASE + 0x082L) // The receive buffer is too small. #define TDDL_E_INSUFFICIENT_BUFFER (UINT32)(TSS_E_BASE + 0x083L) // The command has already completed. #define TDDL_E_COMMAND_COMPLETED (UINT32)(TSS_E_BASE + 0x084L) // TPM aborted processing of command. #define TDDL_E_COMMAND_ABORTED (UINT32)(TSS_E_BASE + 0x085L) // The request could not be performed because of an I/O device error. #define TDDL_E_IOERROR (UINT32)(TSS_E_BASE + 0x087L) // Unsupported TAG is requested #define TDDL_E_BADTAG (UINT32)(TSS_E_BASE + 0x088L) // the requested TPM component was not found #define TDDL_E_COMPONENT_NOT_FOUND (UINT32)(TSS_E_BASE + 0x089L) #endif // __TDDL_ERROR_H__ tpm-quote-tools-1.0.4/include/tss/tss_error.h0000644000175000017510000003621113037720561016165 00000000000000/*++ TSS error return codes --*/ #ifndef __TSS_ERROR_H__ #define __TSS_ERROR_H__ #include // // error coding scheme for a Microsoft Windows platform - // refer to the TSS Specification Parts // // Values are 32 bit values layed out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // +---+-+-+-----------------------+-------+-----------------------+ // |Lev|C|R| Facility | Layer | Code | // +---+-+-+-----------------------+-------+-----------------------+ // | Platform specific coding | TSS error coding system | // +---+-+-+-----------------------+-------+-----------------------+ // // Lev - is the Level code // // 00 - Success // 01 - Informational // 10 - Warning // 11 - Error // // C - is the Customer code flag (must actually be set) // // R - is a reserved bit (unused) // // Facility - is the facility code: TCPA: proposal 0x028 // // Code - is the facility's status code // // // definitions for the code level information // #define TSS_LEVEL_SUCCESS 0x00 // code level success #define TSS_LEVEL_INFO 0x40000000L // code level information #define TSS_LEVEL_WARNING 0x80000000L // code level warning #define TSS_LEVEL_ERROR 0xC0000000L // code level error // // some defines for the platform specific information // #define FACILITY_TSS 0x28L // facility number for TCPA return codes #define FACILITY_TSS_CODEPOS (FACILITY_TSS << 16) // shift the facility info to the code // position #define TSS_CUSTOM_CODEFLAG 0x20000000L // bit position for the custom flag in // return code // // // TSS error return codes // // #ifndef TSS_E_BASE #define TSS_E_BASE 0x00000000L #endif // TSS_E_BASE #ifndef TSS_W_BASE #define TSS_W_BASE 0x00000000L #endif // TSS_W_BASE #ifndef TSS_I_BASE #define TSS_I_BASE 0x00000000L #endif // TSS_I_BASE // // basic error return codes common to all TSS Service Provider Interface methods // and returned by all TSS SW stack components // // // MessageId: TSS_SUCCESS // // MessageText: // // Successful completion of the operation. // #define TSS_SUCCESS (UINT32)(0x00000000L) // // MessageId: TSS_E_FAIL // // MessageText: // // An internal error has been detected, but the source is unknown. // #define TSS_E_FAIL (UINT32)(TSS_E_BASE + 0x002L) // // MessageId: TSS_E_BAD_PARAMETER // // MessageText: // // One or more parameter is bad. // #define TSS_E_BAD_PARAMETER (UINT32)(TSS_E_BASE + 0x003L) // // MessageId: TSS_E_INTERNAL_ERROR // // MessageText: // // An internal SW error has been detected. // #define TSS_E_INTERNAL_ERROR (UINT32)(TSS_E_BASE + 0x004L) // // MessageId: TSS_E_OUTOFMEMORY // // MessageText: // // Ran out of memory. // #define TSS_E_OUTOFMEMORY (UINT32)(TSS_E_BASE + 0x005L) // // MessageId: TSS_E_NOTIMPL // // MessageText: // // Not implemented. // #define TSS_E_NOTIMPL (UINT32)(TSS_E_BASE + 0x006L) // // MessageId: TSS_E_KEY_ALREADY_REGISTERED // // MessageText: // // Key is already registered // #define TSS_E_KEY_ALREADY_REGISTERED (UINT32)(TSS_E_BASE + 0x008L) // // MessageId: TSS_E_TPM_UNEXPECTED // // MessageText: // // An unexpected TPM error has occurred. // #define TSS_E_TPM_UNEXPECTED (UINT32)(TSS_E_BASE + 0x010L) // // MessageId: TSS_E_COMM_FAILURE // // MessageText: // // A communications error with the TPM has been detected. // #define TSS_E_COMM_FAILURE (UINT32)(TSS_E_BASE + 0x011L) // // MessageId: TSS_E_TIMEOUT // // MessageText: // // The operation has timed out. // #define TSS_E_TIMEOUT (UINT32)(TSS_E_BASE + 0x012L) // // MessageId: TSS_E_TPM_UNSUPPORTED_FEATURE // // MessageText: // // The TPM does not support the requested feature. // #define TSS_E_TPM_UNSUPPORTED_FEATURE (UINT32)(TSS_E_BASE + 0x014L) // // MessageId: TSS_E_CANCELED // // MessageText: // // The action was canceled by request. // #define TSS_E_CANCELED (UINT32)(TSS_E_BASE + 0x016L) // // MessageId: TSS_E_PS_KEY_NOTFOUND // // MessageText: // // The key cannot be found in the persistent storage database. // #define TSS_E_PS_KEY_NOTFOUND (UINT32)(TSS_E_BASE + 0x020L) // // MessageId: TSS_E_PS_KEY_EXISTS // // MessageText: // // The key already exists in the persistent storage database. // #define TSS_E_PS_KEY_EXISTS (UINT32)(TSS_E_BASE + 0x021L) // // MessageId: TSS_E_PS_BAD_KEY_STATE // // MessageText: // // The key data set not valid in the persistent storage database. // #define TSS_E_PS_BAD_KEY_STATE (UINT32)(TSS_E_BASE + 0x022L) // // error codes returned by specific TSS Service Provider Interface methods // offset TSS_TSPI_OFFSET // // // MessageId: TSS_E_INVALID_OBJECT_TYPE // // MessageText: // // Object type not valid for this operation. // #define TSS_E_INVALID_OBJECT_TYPE (UINT32)(TSS_E_BASE + 0x101L) // // MessageId: TSS_E_NO_CONNECTION // // MessageText: // // Core Service connection doesn't exist. // #define TSS_E_NO_CONNECTION (UINT32)(TSS_E_BASE + 0x102L) // // MessageId: TSS_E_CONNECTION_FAILED // // MessageText: // // Core Service connection failed. // #define TSS_E_CONNECTION_FAILED (UINT32)(TSS_E_BASE + 0x103L) // // MessageId: TSS_E_CONNECTION_BROKEN // // MessageText: // // Communication with Core Service failed. // #define TSS_E_CONNECTION_BROKEN (UINT32)(TSS_E_BASE + 0x104L) // // MessageId: TSS_E_HASH_INVALID_ALG // // MessageText: // // Invalid hash algorithm. // #define TSS_E_HASH_INVALID_ALG (UINT32)(TSS_E_BASE + 0x105L) // // MessageId: TSS_E_HASH_INVALID_LENGTH // // MessageText: // // Hash length is inconsistent with hash algorithm. // #define TSS_E_HASH_INVALID_LENGTH (UINT32)(TSS_E_BASE + 0x106L) // // MessageId: TSS_E_HASH_NO_DATA // // MessageText: // // Hash object has no internal hash value. // #define TSS_E_HASH_NO_DATA (UINT32)(TSS_E_BASE + 0x107L) // // MessageId: TSS_E_INVALID_ATTRIB_FLAG // // MessageText: // // Flag value for attrib-functions inconsistent. // #define TSS_E_INVALID_ATTRIB_FLAG (UINT32)(TSS_E_BASE + 0x109L) // // MessageId: TSS_E_INVALID_ATTRIB_SUBFLAG // // MessageText: // // Subflag value for attrib-functions inconsistent. // #define TSS_E_INVALID_ATTRIB_SUBFLAG (UINT32)(TSS_E_BASE + 0x10AL) // // MessageId: TSS_E_INVALID_ATTRIB_DATA // // MessageText: // // Data for attrib-functions invalid. // #define TSS_E_INVALID_ATTRIB_DATA (UINT32)(TSS_E_BASE + 0x10BL) // // MessageId: TSS_E_INVALID_OBJECT_INITFLAG // // MessageText: // // Wrong flag information for object creation. // // The alternate spelling is supported to be compatible with a typo // in the 1.1b header files. // #define TSS_E_INVALID_OBJECT_INIT_FLAG (UINT32)(TSS_E_BASE + 0x10CL) #define TSS_E_INVALID_OBJECT_INITFLAG TSS_E_INVALID_OBJECT_INIT_FLAG // // MessageId: TSS_E_NO_PCRS_SET // // MessageText: // // No PCR register are selected or set. // #define TSS_E_NO_PCRS_SET (UINT32)(TSS_E_BASE + 0x10DL) // // MessageId: TSS_E_KEY_NOT_LOADED // // MessageText: // // The addressed key is currently not loaded. // #define TSS_E_KEY_NOT_LOADED (UINT32)(TSS_E_BASE + 0x10EL) // // MessageId: TSS_E_KEY_NOT_SET // // MessageText: // // No key information is currently available. // #define TSS_E_KEY_NOT_SET (UINT32)(TSS_E_BASE + 0x10FL) // // MessageId: TSS_E_VALIDATION_FAILED // // MessageText: // // Internal validation of data failed. // #define TSS_E_VALIDATION_FAILED (UINT32)(TSS_E_BASE + 0x110L) // // MessageId: TSS_E_TSP_AUTHREQUIRED // // MessageText: // // Authorization is required. // #define TSS_E_TSP_AUTHREQUIRED (UINT32)(TSS_E_BASE + 0x111L) // // MessageId: TSS_E_TSP_AUTH2REQUIRED // // MessageText: // // Multiple authorization is required. // #define TSS_E_TSP_AUTH2REQUIRED (UINT32)(TSS_E_BASE + 0x112L) // // MessageId: TSS_E_TSP_AUTHFAIL // // MessageText: // // Authorization failed. // #define TSS_E_TSP_AUTHFAIL (UINT32)(TSS_E_BASE + 0x113L) // // MessageId: TSS_E_TSP_AUTH2FAIL // // MessageText: // // Multiple authorization failed. // #define TSS_E_TSP_AUTH2FAIL (UINT32)(TSS_E_BASE + 0x114L) // // MessageId: TSS_E_KEY_NO_MIGRATION_POLICY // // MessageText: // // There's no migration policy object set for the addressed key. // #define TSS_E_KEY_NO_MIGRATION_POLICY (UINT32)(TSS_E_BASE + 0x115L) // // MessageId: TSS_E_POLICY_NO_SECRET // // MessageText: // // No secret information is currently available for the addressed policy object. // #define TSS_E_POLICY_NO_SECRET (UINT32)(TSS_E_BASE + 0x116L) // // MessageId: TSS_E_INVALID_OBJ_ACCESS // // MessageText: // // The operation failed due to an invalid object status. // #define TSS_E_INVALID_OBJ_ACCESS (UINT32)(TSS_E_BASE + 0x117L) // // MessageId: TSS_E_INVALID_ENCSCHEME // // MessageText: // // // #define TSS_E_INVALID_ENCSCHEME (UINT32)(TSS_E_BASE + 0x118L) // // MessageId: TSS_E_INVALID_SIGSCHEME // // MessageText: // // // #define TSS_E_INVALID_SIGSCHEME (UINT32)(TSS_E_BASE + 0x119L) // // MessageId: TSS_E_ENC_INVALID_LENGTH // // MessageText: // // // #define TSS_E_ENC_INVALID_LENGTH (UINT32)(TSS_E_BASE + 0x120L) // // MessageId: TSS_E_ENC_NO_DATA // // MessageText: // // // #define TSS_E_ENC_NO_DATA (UINT32)(TSS_E_BASE + 0x121L) // // MessageId: TSS_E_ENC_INVALID_TYPE // // MessageText: // // // #define TSS_E_ENC_INVALID_TYPE (UINT32)(TSS_E_BASE + 0x122L) // // MessageId: TSS_E_INVALID_KEYUSAGE // // MessageText: // // // #define TSS_E_INVALID_KEYUSAGE (UINT32)(TSS_E_BASE + 0x123L) // // MessageId: TSS_E_VERIFICATION_FAILED // // MessageText: // // // #define TSS_E_VERIFICATION_FAILED (UINT32)(TSS_E_BASE + 0x124L) // // MessageId: TSS_E_HASH_NO_IDENTIFIER // // MessageText: // // Hash algorithm identifier not set. // #define TSS_E_HASH_NO_IDENTIFIER (UINT32)(TSS_E_BASE + 0x125L) // // MessageId: TSS_E_INVALID_HANDLE // // MessageText: // // An invalid handle // #define TSS_E_INVALID_HANDLE (UINT32)(TSS_E_BASE + 0x126L) // // MessageId: TSS_E_SILENT_CONTEXT // // MessageText: // // A silent context requires user input // #define TSS_E_SILENT_CONTEXT (UINT32)(TSS_E_BASE + 0x127L) // // MessageId: TSS_E_EK_CHECKSUM // // MessageText: // // TSP is instructed to verify the EK checksum and it does not verify. // #define TSS_E_EK_CHECKSUM (UINT32)(TSS_E_BASE + 0x128L) // // MessageId: TSS_E_DELGATION_NOTSET // // MessageText: // // The Policy object does not have a delegation blob set. // #define TSS_E_DELEGATION_NOTSET (UINT32)(TSS_E_BASE + 0x129L) // // MessageId: TSS_E_DELFAMILY_NOTFOUND // // MessageText: // // The specified delegation family was not found // #define TSS_E_DELFAMILY_NOTFOUND (UINT32)(TSS_E_BASE + 0x130L) // // MessageId: TSS_E_DELFAMILY_ROWEXISTS // // MessageText: // // The specified delegation family table row is already in use and // the command flags does not allow the TSS to overwrite the existing // entry. // #define TSS_E_DELFAMILY_ROWEXISTS (UINT32)(TSS_E_BASE + 0x131L) // // MessageId: TSS_E_VERSION_MISMATCH // // MessageText: // // The specified delegation family table row is already in use and // the command flags does not allow the TSS to overwrite the existing // entry. // #define TSS_E_VERSION_MISMATCH (UINT32)(TSS_E_BASE + 0x132L) // // MessageId: TSS_E_DAA_AR_DECRYPTION_ERROR // // Decryption of the encrypted pseudonym has failed, due to // either a wrong secret key or a wrong decryption condition. // #define TSS_E_DAA_AR_DECRYPTION_ERROR (UINT32)(TSS_E_BASE + 0x133L) // // MessageId: TSS_E_DAA_AUTHENTICATION_ERROR // // The TPM could not be authenticated by the DAA Issuer. // #define TSS_E_DAA_AUTHENTICATION_ERROR (UINT32)(TSS_E_BASE + 0x134L) // // MessageId: TSS_E_DAA_CHALLENGE_RESPONSE_ERROR // // DAA Challenge response error. // #define TSS_E_DAA_CHALLENGE_RESPONSE_ERROR (UINT32)(TSS_E_BASE + 0x135L) // // MessageId: TSS_E_DAA_CREDENTIAL_PROOF_ERROR // // Verification of the credential TSS_DAA_CRED_ISSUER issued by // the DAA Issuer has failed. // #define TSS_E_DAA_CREDENTIAL_PROOF_ERROR (UINT32)(TSS_E_BASE + 0x136L) // // MessageId: TSS_E_DAA_CREDENTIAL_REQUEST_PROOF_ERROR // // Verification of the platform's credential request // TSS_DAA_CREDENTIAL_REQUEST has failed. // #define TSS_E_DAA_CREDENTIAL_REQUEST_PROOF_ERROR (UINT32)(TSS_E_BASE + 0x137L) // // MessageId: TSS_E_DAA_ISSUER_KEY_ERROR // // DAA Issuer's authentication key chain could not be verified or // is not correct. // #define TSS_E_DAA_ISSUER_KEY_ERROR (UINT32)(TSS_E_BASE + 0x138L) // // MessageId: TSS_E_DAA_PSEUDONYM_ERROR // // While verifying the pseudonym of the TPM, the private key of the // TPM was found on the rogue list. // #define TSS_E_DAA_PSEUDONYM_ERROR (UINT32)(TSS_E_BASE + 0x139L) // // MessageId: TSS_E_INVALID_RESOURCE // // Pointer to memory wrong. // #define TSS_E_INVALID_RESOURCE (UINT32)(TSS_E_BASE + 0x13AL) // // MessageId: TSS_E_NV_AREA_EXIST // // The NV area referenced already exists // #define TSS_E_NV_AREA_EXIST (UINT32)(TSS_E_BASE + 0x13BL) // // MessageId: TSS_E_NV_AREA_NOT_EXIST // // The NV area referenced doesn't exist // #define TSS_E_NV_AREA_NOT_EXIST (UINT32)(TSS_E_BASE + 0x13CL) // // MessageId: TSS_E_TSP_TRANS_AUTHFAIL // // The transport session authorization failed // #define TSS_E_TSP_TRANS_AUTHFAIL (UINT32)(TSS_E_BASE + 0x13DL) // // MessageId: TSS_E_TSP_TRANS_AUTHREQUIRED // // Authorization for transport is required // #define TSS_E_TSP_TRANS_AUTHREQUIRED (UINT32)(TSS_E_BASE + 0x13EL) // // MessageId: TSS_E_TSP_TRANS_NOT_EXCLUSIVE // // A command was executed outside of an exclusive transport session. // #define TSS_E_TSP_TRANS_NOTEXCLUSIVE (UINT32)(TSS_E_BASE + 0x13FL) // // MessageId: TSS_E_TSP_TRANS_FAIL // // Generic transport protection error. // #define TSS_E_TSP_TRANS_FAIL (UINT32)(TSS_E_BASE + 0x140L) // // MessageId: TSS_E_TSP_TRANS_NO_PUBKEY // // A command could not be executed through a logged transport session // because the command used a key and the key's public key is not // known to the TSP. // #define TSS_E_TSP_TRANS_NO_PUBKEY (UINT32)(TSS_E_BASE + 0x141L) // // MessageId: TSS_E_NO_ACTIVE_COUNTER // // The TPM active counter has not been set yet. // #define TSS_E_NO_ACTIVE_COUNTER (UINT32)(TSS_E_BASE + 0x142L) #endif // __TSS_ERROR_H__ tpm-quote-tools-1.0.4/include/tss/tddli.h0000644000175000017510000000461013037720561015241 00000000000000/*++ TPM Device Driver Library interface --*/ #ifndef __TDDLI_H__ #define __TDDLI_H__ #include #include #if !defined(TDDLI) #ifdef WIN32 // --- This should be used on Windows platforms #ifdef TDDLI_EXPORTS #define TDDLI __declspec(dllexport) #else #define TDDLI __declspec(dllimport) #endif #else #define TDDLI #endif #endif /* !defined(TDDLI) */ #define TDDL_CAP_VERSION 0x0100 #define TDDL_CAP_VER_DRV 0x0101 #define TDDL_CAP_VER_FW 0x0102 #define TDDL_CAP_VER_FW_DATE 0x0103 #define TDDL_CAP_PROPERTY 0x0200 #define TDDL_CAP_PROP_MANUFACTURER 0x0201 #define TDDL_CAP_PROP_MODULE_TYPE 0x0202 #define TDDL_CAP_PROP_GLOBAL_STATE 0x0203 //-------------------------------------------------------------------- // TDDL specific helper redefinitions #ifdef __cplusplus extern "C" { #endif //establish a connection to the TPM device driver TDDLI TSS_RESULT Tddli_Open(void); //close a open connection to the TPM device driver TDDLI TSS_RESULT Tddli_Close(void); //cancels the last outstanding TPM command TDDLI TSS_RESULT Tddli_Cancel(void); // read the attributes returned by the TPM HW/FW TDDLI TSS_RESULT Tddli_GetCapability( UINT32 CapArea, UINT32 SubCap, BYTE *pCapBuf, UINT32 *puntCapBufLen); // set parameters to the TPM HW/FW TDDLI TSS_RESULT Tddli_SetCapability( UINT32 CapArea, UINT32 SubCap, BYTE *pCapBuf, UINT32 puntCapBufLen); // get status of the TPM driver and device TDDLI TSS_RESULT Tddli_GetStatus( UINT32 ReqStatusType, UINT32 *puntStatus); // send any data to the TPM module TDDLI TSS_RESULT Tddli_TransmitData( BYTE *pTransmitBuf, UINT32 TransmitBufLen, BYTE *pReceiveBuf, UINT32 *puntReceiveBufLen); TDDLI TSS_RESULT Tddli_SetPowerManagement( TSS_BOOL SendSaveStateCommand, // in UINT32 *QuerySetNewTPMPowerState); // in, out TDDLI TSS_RESULT Tddli_PowerManagementControl( TSS_BOOL SendPowerManager, // in UINT32 *DriverManagesPowerStates); // out #ifdef __cplusplus } #endif #endif // __TDDLI_H__ tpm-quote-tools-1.0.4/include/tss/tddlapi_error.h0000644000175000017510000000301213037720561016766 00000000000000/*++ TDDL error return codes for the TPM Device Driver Library Interface (TDDLI) --*/ #ifndef __TDDLAPI_ERROR_H__ #define __TDDLAPI_ERROR_H__ // // error coding scheme for a Microsoft Windows platform - // refer to the TSS Specification Parts // // Values are 32 bit values layed out as follows: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // +---+-+-+-----------------------+-------+-----------------------+ // |Lev|C|R| Facility | Layer | Code | // +---+-+-+-----------------------+-------+-----------------------+ // | Platform specific coding | TSS error coding system | // +---+-+-+-----------------------+-------+-----------------------+ // // Lev - is the Level code // // 00 - Success // 01 - Informational // 10 - Warning // 11 - Error // // C - is the Customer code flag (must actually be set) // // R - is a reserved bit (unused) // // Facility - is the facility code: TCPA: proposal 0x028 // // Code - is the facility's status code // // no macros are used below intentionally // for a better error code recognition by the reader // note that the values of TPM_E_BASE and TSS_E_BASE, TSS_W_BASE and TSS_I_BASE // have to be adjusted for a platform other than Windows // // TPM specific error codes (layer nibble set to TPM layer TSS_LAYER_TPM) // #endif // __TDDLAPI_ERROR_H__ tpm-quote-tools-1.0.4/include/tss/tss_typedef.h0000644000175000017510000000347513037720561016502 00000000000000/*++ Global typedefs for TSS */ #ifndef __TSS_TYPEDEF_H__ #define __TSS_TYPEDEF_H__ #include //-------------------------------------------------------------------- // definitions for TSS Service Provider (TSP) // typedef UINT32 TSS_HANDLE; typedef UINT32 TSS_FLAG; // object attributes typedef UINT32 TSS_RESULT; // the return code from a TSS function typedef UINT32 TSS_HOBJECT; // basic object handle typedef TSS_HOBJECT TSS_HCONTEXT; // context object handle typedef TSS_HOBJECT TSS_HPOLICY; // policy object handle typedef TSS_HOBJECT TSS_HTPM; // TPM object handle typedef TSS_HOBJECT TSS_HKEY; // key object handle typedef TSS_HOBJECT TSS_HENCDATA; // encrypted data object handle typedef TSS_HOBJECT TSS_HPCRS; // PCR composite object handle typedef TSS_HOBJECT TSS_HHASH; // hash object handle typedef TSS_HOBJECT TSS_HNVSTORE; // NV storage object handle typedef TSS_HOBJECT TSS_HMIGDATA; // migration data utility obj handle typedef TSS_HOBJECT TSS_HDELFAMILY; // delegation family object handle typedef TSS_HOBJECT TSS_HDAA_CREDENTIAL; // daa credential typedef TSS_HOBJECT TSS_HDAA_ISSUER_KEY; // daa credential issuer keypair typedef TSS_HOBJECT TSS_HDAA_ARA_KEY; // daa anonymity revocation // authority keypair typedef UINT32 TSS_EVENTTYPE; typedef UINT16 TSS_MIGRATE_SCHEME; typedef UINT32 TSS_ALGORITHM_ID; typedef UINT32 TSS_KEY_USAGE_ID; typedef UINT16 TSS_KEY_ENC_SCHEME; typedef UINT16 TSS_KEY_SIG_SCHEME; typedef BYTE TSS_KEY_AUTH_DATA_USAGE; typedef UINT32 TSS_CMK_DELEGATE; typedef UINT32 TSS_NV_INDEX; typedef UINT32 TSS_COUNTER_ID; #endif // __TSS_TYPEDEF_H__ tpm-quote-tools-1.0.4/include/tss/tcpa_typedef.h0000644000175000017510000000020013037720561016577 00000000000000 #ifndef __TCPA_TYPEDEF_H__ #define __TCPA_TYPEDEF_H__ #warning including deprecated header file tcpa_typedef.h #endif tpm-quote-tools-1.0.4/include/tss/tcs.h0000644000175000017510000014746413037720561014751 00000000000000#ifndef TCS_H #define TCS_H #include #include #include #include #include #include #include #if defined __cplusplus extern "C" { #endif extern TSS_RESULT Tcsi_OpenContext ( TCS_CONTEXT_HANDLE* hContext // out ); extern TSS_RESULT Tcsi_CloseContext ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsi_FreeMemory ( TCS_CONTEXT_HANDLE hContext, // in BYTE* pMemory // in ); extern TSS_RESULT Tcsi_GetCapability ( TCS_CONTEXT_HANDLE hContext, // in TPM_CAPABILITY_AREA capArea, // in UINT32 subCapSize, // in BYTE* subCap, // in UINT32* respSize, // out BYTE** resp // out ); extern TSS_RESULT Tcsi_RegisterKey ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID WrappingKeyUUID, // in TSS_UUID KeyUUID, // in UINT32 cKeySize, // in BYTE* rgbKey, // in UINT32 cVendorDataSize, // in BYTE* gbVendorData // in ); extern TSS_RESULT Tcsip_UnregisterKey ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID KeyUUID // in ); extern TSS_RESULT Tcsip_KeyControlOwner ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey, // in UINT32 ulPubKeyLength, // in BYTE* prgbPubKey, // in UINT32 attribName, // in TSS_BOOL attribValue, // in TPM_AUTH* pOwnerAuth, // in, out TSS_UUID* pUuidData // out ); extern TSS_RESULT Tcsi_EnumRegisteredKeys ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID* pKeyUUID, // in UINT32* pcKeyHierarchySize, // out TSS_KM_KEYINFO** ppKeyHierarchy // out ); extern TSS_RESULT Tcsi_GetRegisteredKey ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID KeyUUID, // in TSS_KM_KEYINFO** ppKeyInfo // out ); extern TSS_RESULT Tcsi_GetRegisteredKeyBlob ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID KeyUUID, // in UINT32* pcKeySize, // out BYTE** prgbKey // out ); extern TSS_RESULT Tcsip_GetRegisteredKeyByPublicInfo ( TCS_CONTEXT_HANDLE hContext, // in TSS_ALGORITHM_ID algID, // in UINT32 ulPublicInfoLength, // in BYTE* rgbPublicInfo, // in UINT32* keySize, // out BYTE** keyBlob // out ); extern TSS_RESULT Tcsip_LoadKeyByBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hUnwrappingKey, // in UINT32 cWrappedKeyBlobSize, // in BYTE* rgbWrappedKeyBlob, // in TPM_AUTH* pAuth, // in, out TCS_KEY_HANDLE* phKeyTCSI, // out TCS_KEY_HANDLE* phKeyHMAC // out ); extern TSS_RESULT Tcsip_LoadKeyByUUID ( TCS_CONTEXT_HANDLE hContext, // in TSS_UUID KeyUUID, // in TCS_LOADKEY_INFO* pLoadKeyInfo, // in, out TCS_KEY_HANDLE* phKeyTCSI // out ); extern TSS_RESULT Tcsip_EvictKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey // in ); extern TSS_RESULT Tcsip_CreateWrapKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hWrappingKey, // in TPM_ENCAUTH KeyUsageAuth, // in TPM_ENCAUTH KeyMigrationAuth, // in UINT32 keyInfoSize, // in BYTE* keyInfo, // in TPM_AUTH* pAuth, // in, out UINT32* keyDataSize, // out BYTE** keyData // out ); extern TSS_RESULT Tcsip_GetPubKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey, // in TPM_AUTH* pAuth, // in, out UINT32* pcPubKeySize, // out BYTE** prgbPubKey // out ); extern TSS_RESULT Tcsip_MakeIdentity ( TCS_CONTEXT_HANDLE hContext, // in TPM_ENCAUTH identityAuth, // in TPM_CHOSENID_HASH IDLabel_PrivCAHash, // in UINT32 idIdentityKeyInfoSize, // in BYTE* idIdentityKeyInfo, // in TPM_AUTH* pSrkAuth, // in, out TPM_AUTH* pOwnerAuth, // in, out UINT32* idIdentityKeySize, // out BYTE** idIdentityKey, // out UINT32* pcIdentityBindingSize, // out BYTE** prgbIdentityBinding, // out UINT32* pcEndorsementCredentialSize, // out BYTE** prgbEndorsementCredential, // out UINT32* pcPlatformCredentialSize, // out BYTE** prgbPlatformCredential, // out UINT32* pcConformanceCredentialSize, // out BYTE** prgbConformanceCredential // out ); extern TSS_RESULT Tcsip_MakeIdentity2 ( TCS_CONTEXT_HANDLE hContext, // in TPM_ENCAUTH identityAuth, // in TPM_CHOSENID_HASH IDLabel_PrivCAHash, // in UINT32 idIdentityKeyInfoSize, // in BYTE* idIdentityKeyInfo, // in TPM_AUTH* pSrkAuth, // in, out TPM_AUTH* pOwnerAuth, // in, out UINT32* idIdentityKeySize, // out BYTE** idIdentityKey, // out UINT32* pcIdentityBindingSize, // out BYTE** prgbIdentityBinding // out ); extern TSS_RESULT Tcsi_LogPcrEvent ( TCS_CONTEXT_HANDLE hContext, // in TSS_PCR_EVENT Event, // in UINT32* pNumber // out ); extern TSS_RESULT Tcsi_GetPcrEvent ( TCS_CONTEXT_HANDLE hContext, // in UINT32 PcrIndex, // in UINT32* pNumber, // in, out TSS_PCR_EVENT** ppEvent // out ); extern TSS_RESULT Tcsi_GetPcrEventsByPcr ( TCS_CONTEXT_HANDLE hContext, // in UINT32 PcrIndex, // in UINT32 FirstEvent, // in UINT32* pEventCount, // in, out TSS_PCR_EVENT** ppEvents // out ); extern TSS_RESULT Tcsi_GetPcrEventLog ( TCS_CONTEXT_HANDLE hContext, // in UINT32* pEventCount, // out TSS_PCR_EVENT** ppEvents // out ); extern TSS_RESULT Tcsip_SetOwnerInstall ( TCS_CONTEXT_HANDLE hContext, // in TSS_BOOL state // in ); extern TSS_RESULT Tcsip_TakeOwnership ( TCS_CONTEXT_HANDLE hContext, // in UINT16 protocolID, // in UINT32 encOwnerAuthSize, // in BYTE* encOwnerAuth, // in UINT32 encSrkAuthSize, // in BYTE* encSrkAuth, // in UINT32 srkKeyInfoSize, // in BYTE* srkKeyInfo, // in TPM_AUTH* ownerAuth, // in, out UINT32* srkKeyDataSize, // out BYTE** srkKeyData // out ); extern TSS_RESULT Tcsip_SetOperatorAuth ( TCS_CONTEXT_HANDLE hContext, // in TPM_SECRET operatorAuth // in ); extern TSS_RESULT Tcsip_OIAP ( TCS_CONTEXT_HANDLE hContext, // in TCS_AUTHHANDLE* authHandle, // out TPM_NONCE* nonce0 // out ); extern TSS_RESULT Tcsip_OSAP ( TCS_CONTEXT_HANDLE hContext, // in TPM_ENTITY_TYPE entityType, // in UINT32 entityValue, // in TPM_NONCE nonceOddOSAP, // in TCS_AUTHHANDLE* authHandle, // out TPM_NONCE* nonceEven, // out TPM_NONCE* nonceEvenOSAP // out ); extern TSS_RESULT Tcsip_ChangeAuth ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in TPM_PROTOCOL_ID protocolID, // in TPM_ENCAUTH newAuth, // in TPM_ENTITY_TYPE entityType, // in UINT32 encDataSize, // in BYTE* encData, // in TPM_AUTH* ownerAuth, // in, out TPM_AUTH* entityAuth, // in, out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_ChangeAuthOwner ( TCS_CONTEXT_HANDLE hContext, // in TPM_PROTOCOL_ID protocolID, // in TPM_ENCAUTH newAuth, // in TPM_ENTITY_TYPE entityType, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_ChangeAuthAsymStart ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE idHandle, // in TPM_NONCE antiReplay, // in UINT32 TempKeyInfoSize, // in BYTE* TempKeyInfoData, // in TPM_AUTH* pAuth, // in, out UINT32* TempKeySize, // out BYTE** TempKeyData, // out UINT32* CertifyInfoSize, // out BYTE** CertifyInfo, // out UINT32* sigSize, // out BYTE** sig, // out TCS_KEY_HANDLE* ephHandle // out ); extern TSS_RESULT Tcsip_ChangeAuthAsymFinish ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in TCS_KEY_HANDLE ephHandle, // in TPM_ENTITY_TYPE entityType, // in TPM_HMAC newAuthLink, // in UINT32 newAuthSize, // in BYTE* encNewAuth, // in UINT32 encDataSizeIn, // in BYTE* encDataIn, // in TPM_AUTH* ownerAuth, // in, out UINT32* encDataSizeOut, // out BYTE** encDataOut, // out TPM_NONCE* saltNonce, // out TPM_DIGEST* changeProof // out ); extern TSS_RESULT Tcsip_TerminateHandle ( TCS_CONTEXT_HANDLE hContext, // in TCS_AUTHHANDLE handle // in ); extern TSS_RESULT Tcsip_ActivateTPMIdentity ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE idKey, // in UINT32 blobSize, // in BYTE* blob, // in TPM_AUTH* idKeyAuth, // in, out TPM_AUTH* ownerAuth, // in, out UINT32* SymmetricKeySize, // out BYTE** SymmetricKey // out ); extern TSS_RESULT Tcsip_EstablishTransport ( TCS_CONTEXT_HANDLE hContext, // in UINT32 ulTransControlFlags, // in TCS_KEY_HANDLE hEncKey, // in UINT32 ulTransSessionInfoSize, // in BYTE* rgbTransSessionInfo, // in UINT32 ulSecretSize, // in BYTE* rgbSecret, // in TPM_AUTH* pEncKeyAuth, // in, out TPM_MODIFIER_INDICATOR* pbLocality, // out TCS_HANDLE* hTransSession, // out UINT32* ulCurrentTicksSize, // out BYTE** prgbCurrentTicks, // out TPM_NONCE* pTransNonce // out ); extern TSS_RESULT Tcsip_ExecuteTransport ( TCS_CONTEXT_HANDLE hContext, // in TPM_COMMAND_CODE unWrappedCommandOrdinal, // in UINT32 ulWrappedCmdParamInSize, // in BYTE* rgbWrappedCmdParamIn, // in UINT32* pulHandleListSize, // in, out TCS_HANDLE** rghHandles, // in, out TPM_AUTH* pWrappedCmdAuth1, // in, out TPM_AUTH* pWrappedCmdAuth2, // in, out TPM_AUTH* pTransAuth, // in, out UINT64* punCurrentTicks, // out TPM_MODIFIER_INDICATOR* pbLocality, // out TPM_RESULT* pulWrappedCmdReturnCode, // out UINT32* ulWrappedCmdParamOutSize, // out BYTE** rgbWrappedCmdParamOut // out ); extern TSS_RESULT Tcsip_ReleaseTransportSigned ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hSignatureKey, // in TPM_NONCE AntiReplayNonce, // in TPM_AUTH* pKeyAuth, // in, out TPM_AUTH* pTransAuth, // in, out TPM_MODIFIER_INDICATOR* pbLocality, // out UINT32* pulCurrentTicksSize, // out BYTE** prgbCurrentTicks, // out UINT32* pulSignatureSize, // out BYTE** prgbSignature // out ); extern TSS_RESULT Tcsip_Extend ( TCS_CONTEXT_HANDLE hContext, // in TPM_PCRINDEX pcrNum, // in TPM_DIGEST inDigest, // in TPM_PCRVALUE* outDigest // out ); extern TSS_RESULT Tcsip_PcrRead ( TCS_CONTEXT_HANDLE hContext, // in TPM_PCRINDEX pcrNum, // in TPM_PCRVALUE* outDigest // out ); extern TSS_RESULT Tcsip_Quote ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE antiReplay, // in UINT32 pcrTargetSize, // in BYTE* pcrTarget, // in TPM_AUTH* privAuth, // in, out UINT32* pcrDataSize, // out BYTE** pcrData, // out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_Quote2 ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE antiReplay, // in UINT32 pcrTargetSize, // in BYTE* pcrTarget, // in TSS_BOOL addVersion, // in TPM_AUTH* privAuth, // in, out UINT32* pcrDataSize, // out BYTE** pcrData, // out UINT32* versionInfoSize, // out BYTE** versionInfo, // out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_DirWriteAuth ( TCS_CONTEXT_HANDLE hContext, // in TPM_DIRINDEX dirIndex, // in TPM_DIRVALUE newContents, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_DirRead ( TCS_CONTEXT_HANDLE hContext, // in TPM_DIRINDEX dirIndex, // in TPM_DIRVALUE* dirValue // out ); extern TSS_RESULT Tcsip_Seal ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_ENCAUTH encAuth, // in UINT32 pcrInfoSize, // in BYTE* PcrInfo, // in UINT32 inDataSize, // in BYTE* inData, // in TPM_AUTH* pubAuth, // in, out UINT32* SealedDataSize, // out BYTE** SealedData // out ); extern TSS_RESULT Tcsip_Unseal ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in UINT32 SealedDataSize, // in BYTE* SealedData, // in TPM_AUTH* keyAuth, // in, out TPM_AUTH* dataAuth, // in, out UINT32* DataSize, // out BYTE** Data // out ); extern TSS_RESULT Tcsip_UnBind ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in UINT32 inDataSize, // in BYTE* inData, // in TPM_AUTH* privAuth, // in, out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_Sealx ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_ENCAUTH encAuth, // in UINT32 pcrInfoSize, // in BYTE* PcrInfo, // in UINT32 inDataSize, // in BYTE* inData, // in TPM_AUTH* pubAuth, // in, out UINT32* SealedDataSize, // out BYTE** SealedData // out ); extern TSS_RESULT Tcsip_LoadKey2ByBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hUnwrappingKey, // in UINT32 cWrappedKeyBlobSize, // in BYTE* rgbWrappedKeyBlob, // in TPM_AUTH* pAuth, // in, out TCS_KEY_HANDLE* phKeyTCSI // out ); extern TSS_RESULT Tcsip_CreateMigrationBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in TSS_MIGRATE_SCHEME migrationType, // in UINT32 MigrationKeyAuthSize, // in BYTE* MigrationKeyAuth, // in UINT32 encDataSize, // in BYTE* encData, // in TPM_AUTH* parentAuth, // in, out TPM_AUTH* entityAuth, // in, out UINT32* randomSize, // out BYTE** random, // out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_ConvertMigrationBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in UINT32 inDataSize, // in BYTE* inData, // in UINT32 randomSize, // in BYTE* random, // in TPM_AUTH* parentAuth, // in, out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_AuthorizeMigrationKey ( TCS_CONTEXT_HANDLE hContext, // in TSS_MIGRATE_SCHEME migrateScheme, // in UINT32 MigrationKeySize, // in BYTE* MigrationKey, // in TPM_AUTH* ownerAuth, // in, out UINT32* MigrationKeyAuthSize, // out BYTE** MigrationKeyAuth // out ); extern TSS_RESULT Tcsip_CertifyKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE certHandle, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE antiReplay, // in TPM_AUTH* certAuth, // in, out TPM_AUTH* keyAuth, // in, out UINT32* CertifyInfoSize, // out BYTE** CertifyInfo, // out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_CertifyKey2 ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE certHandle, // in TCS_KEY_HANDLE keyHandle, // in TPM_DIGEST MSAdigest, // in TPM_NONCE antiReplay, // in TPM_AUTH* certAuth, // in, out TPM_AUTH* keyAuth, // in, out UINT32* CertifyInfoSize, // out BYTE** CertifyInfo, // out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_Sign ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in UINT32 areaToSignSize, // in BYTE* areaToSign, // in TPM_AUTH* privAuth, // in, out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_GetRandom ( TCS_CONTEXT_HANDLE hContext, // in UINT32* bytesRequested, // in, out BYTE** randomBytes // out ); extern TSS_RESULT Tcsip_StirRandom ( TCS_CONTEXT_HANDLE hContext, // in UINT32 inDataSize, // in BYTE* inData // in ); extern TSS_RESULT Tcsip_GetCapability ( TCS_CONTEXT_HANDLE hContext, // in TPM_CAPABILITY_AREA capArea, // in UINT32 subCapSize, // in BYTE* subCap, // in UINT32* respSize, // out BYTE** resp // out ); extern TSS_RESULT Tcsip_GetCapabilitySigned ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE antiReplay, // in TPM_CAPABILITY_AREA capArea, // in UINT32 subCapSize, // in BYTE* subCap, // in TPM_AUTH* privAuth, // in, out TPM_VERSION* Version, // out UINT32* respSize, // out BYTE** resp, // out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_GetCapabilityOwner ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* pOwnerAuth, // in, out TPM_VERSION* pVersion, // out UINT32* pNonVolatileFlags, // out UINT32* pVolatileFlags // out ); extern TSS_RESULT Tcsip_CreateEndorsementKeyPair ( TCS_CONTEXT_HANDLE hContext, // in TPM_NONCE antiReplay, // in UINT32 endorsementKeyInfoSize, // in BYTE* endorsementKeyInfo, // in UINT32* endorsementKeySize, // out BYTE** endorsementKey, // out TPM_DIGEST* checksum // out ); extern TSS_RESULT Tcsip_ReadPubek ( TCS_CONTEXT_HANDLE hContext, // in TPM_NONCE antiReplay, // in UINT32* pubEndorsementKeySize, // out BYTE** pubEndorsementKey, // out TPM_DIGEST* checksum // out ); extern TSS_RESULT Tcsip_DisablePubekRead ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_OwnerReadPubek ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth, // in, out UINT32* pubEndorsementKeySize, // out BYTE** pubEndorsementKey // out ); extern TSS_RESULT Tcsip_SelfTestFull ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_CertifySelfTest ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE antiReplay, // in TPM_AUTH* privAuth, // in, out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_ContinueSelfTest ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_GetTestResult ( TCS_CONTEXT_HANDLE hContext, // in UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_OwnerSetDisable ( TCS_CONTEXT_HANDLE hContext, // in TSS_BOOL disableState, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_OwnerClear ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_DisableOwnerClear ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_ForceClear ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_DisableForceClear ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_PhysicalDisable ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_PhysicalEnable ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_PhysicalSetDeactivated ( TCS_CONTEXT_HANDLE hContext, // in TSS_BOOL state // in ); extern TSS_RESULT Tcsip_SetTempDeactivated ( TCS_CONTEXT_HANDLE hContext // in ); extern TSS_RESULT Tcsip_SetTempDeactivated2 ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* pOperatorAuth // in, out ); extern TSS_RESULT Tcsip_OwnerReadInternalPub ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey, // in TPM_AUTH* pOwnerAuth, // in, out UINT32* punPubKeySize, // out BYTE** ppbPubKeyData // out ); extern TSS_RESULT Tcsip_PhysicalPresence ( TCS_CONTEXT_HANDLE hContext, // in TPM_PHYSICAL_PRESENCE fPhysicalPresence // in ); extern TSS_RESULT Tcsip_FieldUpgrade ( TCS_CONTEXT_HANDLE hContext, // in UINT32 dataInSize, // in BYTE* dataIn, // in TPM_AUTH* ownerAuth, // in, out UINT32* dataOutSize, // out BYTE** dataOut // out ); extern TSS_RESULT Tcsip_ResetLockValue ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_FlushSpecific ( TCS_CONTEXT_HANDLE hContext, // in TCS_HANDLE hResHandle, // in TPM_RESOURCE_TYPE resourceType // in ); extern TSS_RESULT Tcsip_SetRedirection ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in UINT32 c1, // in UINT32 c2, // in TPM_AUTH* privAuth // in, out ); extern TSS_RESULT Tcsip_DSAP ( TCS_CONTEXT_HANDLE hContext, // in TPM_ENTITY_TYPE entityType, // in TCS_KEY_HANDLE keyHandle, // in TPM_NONCE nonceOddDSAP, // in UINT32 entityValueSize, // in BYTE* entityValue, // in TCS_AUTHHANDLE* authHandle, // out TPM_NONCE* nonceEven, // out TPM_NONCE* nonceEvenDSAP // out ); extern TSS_RESULT Tcsip_Delegate_Manage ( TCS_CONTEXT_HANDLE hContext, // in TPM_FAMILY_ID familyID, // in TPM_FAMILY_OPERATION opFlag, // in UINT32 opDataSize, // in BYTE* opData, // in TPM_AUTH* ownerAuth, // in, out UINT32* retDataSize, // out BYTE** retData // out ); extern TSS_RESULT Tcsip_Delegate_CreateKeyDelegation ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey, // in UINT32 publicInfoSize, // in BYTE* publicInfo, // in TPM_ENCAUTH encDelAuth, // in TPM_AUTH* keyAuth, // in, out UINT32* blobSize, // out BYTE** blob // out ); extern TSS_RESULT Tcsip_Delegate_CreateOwnerDelegation ( TCS_CONTEXT_HANDLE hContext, // in TSS_BOOL increment, // in UINT32 publicInfoSize, // in BYTE* publicInfo, // in TPM_ENCAUTH encDelAuth, // in TPM_AUTH* ownerAuth, // in, out UINT32* blobSize, // out BYTE** blob // out ); extern TSS_RESULT Tcsip_Delegate_LoadOwnerDelegation ( TCS_CONTEXT_HANDLE hContext, // in TPM_DELEGATE_INDEX index, // in UINT32 blobSize, // in BYTE* blob, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_Delegate_UpdateVerificationCount ( TCS_CONTEXT_HANDLE hContext, // in UINT32 inputSize, // in BYTE* input, // in TPM_AUTH* ownerAuth, // in, out UINT32* outputSize, // out BYTE** output // out ); extern TSS_RESULT Tcsip_Delegate_VerifyDelegation ( TCS_CONTEXT_HANDLE hContext, // in UINT32 delegateSize, // in BYTE* delegate // in ); extern TSS_RESULT Tcsip_Delegate_ReadTable ( TCS_CONTEXT_HANDLE hContext, // in UINT32* pulFamilyTableSize, // out BYTE** ppFamilyTable, // out UINT32* pulDelegateTableSize, // out BYTE** ppDelegateTable // out ); extern TSS_RESULT Tcsip_NV_DefineOrReleaseSpace ( TCS_CONTEXT_HANDLE hContext, // in UINT32 cPubInfoSize, // in BYTE* pPubInfo, // in TPM_ENCAUTH encAuth, // in TPM_AUTH* pAuth // in, out ); extern TSS_RESULT Tcsip_NV_WriteValue ( TCS_CONTEXT_HANDLE hContext, // in TSS_NV_INDEX hNVStore, // in UINT32 offset, // in UINT32 ulDataLength, // in BYTE* rgbDataToWrite, // in TPM_AUTH* privAuth // in, out ); extern TSS_RESULT Tcsip_NV_WriteValueAuth ( TCS_CONTEXT_HANDLE hContext, // in TSS_NV_INDEX hNVStore, // in UINT32 offset, // in UINT32 ulDataLength, // in BYTE* rgbDataToWrite, // in TPM_AUTH* NVAuth // in, out ); extern TSS_RESULT Tcsip_NV_ReadValue ( TCS_CONTEXT_HANDLE hContext, // in TSS_NV_INDEX hNVStore, // in UINT32 offset, // in UINT32* pulDataLength, // in, out TPM_AUTH* privAuth, // in, out BYTE** rgbDataRead // out ); extern TSS_RESULT Tcsip_NV_ReadValueAuth ( TCS_CONTEXT_HANDLE hContext, // in TSS_NV_INDEX hNVStore, // in UINT32 offset, // in UINT32* pulDataLength, // in, out TPM_AUTH* NVAuth, // in, out BYTE** rgbDataRead // out ); extern TSS_RESULT Tcsip_CreateMaintenanceArchive ( TCS_CONTEXT_HANDLE hContext, // in TSS_BOOL generateRandom, // in TPM_AUTH* ownerAuth, // in, out UINT32* randomSize, // out BYTE** random, // out UINT32* archiveSize, // out BYTE** archive // out ); extern TSS_RESULT Tcsip_LoadMaintenanceArchive ( TCS_CONTEXT_HANDLE hContext, // in UINT32 dataInSize, // in BYTE* dataIn, // in TPM_AUTH* ownerAuth, // in, out UINT32* dataOutSize, // out BYTE** dataOut // out ); extern TSS_RESULT Tcsip_KillMaintenanceFeature ( TCS_CONTEXT_HANDLE hContext, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_LoadManuMaintPub ( TCS_CONTEXT_HANDLE hContext, // in TPM_NONCE antiReplay, // in UINT32 PubKeySize, // in BYTE* PubKey, // in TPM_DIGEST* checksum // out ); extern TSS_RESULT Tcsip_ReadManuMaintPub ( TCS_CONTEXT_HANDLE hContext, // in TPM_NONCE antiReplay, // in TPM_DIGEST* checksum // out ); extern TSS_RESULT Tcsip_CreateRevocableEndorsementKeyPair ( TCS_CONTEXT_HANDLE hContext, // in TPM_NONCE antiReplay, // in UINT32 endorsementKeyInfoSize, // in BYTE* endorsementKeyInfo, // in TSS_BOOL GenResetAuth, // in TPM_DIGEST* EKResetAuth, // in, out UINT32* endorsementKeySize, // out BYTE** endorsementKey, // out TPM_DIGEST* checksum // out ); extern TSS_RESULT Tcsip_RevokeEndorsementKeyPair ( TCS_CONTEXT_HANDLE hContext, // in TPM_DIGEST EKResetAuth // in ); extern TSS_RESULT Tcsip_PcrReset ( TCS_CONTEXT_HANDLE hContext, // in UINT32 pcrTargetSize, // in BYTE* pcrTarget // in ); extern TSS_RESULT Tcsip_ReadCounter ( TCS_CONTEXT_HANDLE hContext, // in TSS_COUNTER_ID idCounter, // in TPM_COUNTER_VALUE* counterValue // out ); extern TSS_RESULT Tcsip_CreateCounter ( TCS_CONTEXT_HANDLE hContext, // in UINT32 LabelSize, // in (=4) BYTE* pLabel, // in TPM_ENCAUTH CounterAuth, // in TPM_AUTH* pOwnerAuth, // in, out TSS_COUNTER_ID* idCounter, // out TPM_COUNTER_VALUE* counterValue // out ); extern TSS_RESULT Tcsip_IncrementCounter ( TCS_CONTEXT_HANDLE hContext, // in TSS_COUNTER_ID idCounter, // in TPM_AUTH* pCounterAuth, // in, out TPM_COUNTER_VALUE* counterValue // out ); extern TSS_RESULT Tcsip_ReleaseCounter ( TCS_CONTEXT_HANDLE hContext, // in TSS_COUNTER_ID idCounter, // in TPM_AUTH* pCounterAuth // in, out ); extern TSS_RESULT Tcsip_ReleaseCounterOwner ( TCS_CONTEXT_HANDLE hContext, // in TSS_COUNTER_ID idCounter, // in TPM_AUTH* pOwnerAuth // in, out ); extern TSS_RESULT Tcsip_ReadCurrentTicks ( TCS_CONTEXT_HANDLE hContext, // in UINT32* pulCurrentTimeSize, // out BYTE** prgbCurrentTime // out ); extern TSS_RESULT Tcsip_TickStampBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hKey, // in TPM_NONCE antiReplay, // in TPM_DIGEST digestToStamp, // in TPM_AUTH* privAuth, // in, out UINT32* pulSignatureLength, // out BYTE** prgbSignature, // out UINT32* pulTickCountSize, // out BYTE** prgbTickCount // out ); extern TSS_RESULT Tcsip_TPM_DAA_Join ( TCS_CONTEXT_HANDLE hContext, // in TPM_HANDLE handle, // in BYTE stage, // in UINT32 inputSize0, // in BYTE* inputData0, // in UINT32 inputSize1, // in BYTE* inputData1, // in TPM_AUTH* ownerAuth, // in, out UINT32* outputSize, // out BYTE** outputData // out ); extern TSS_RESULT Tcsip_TPM_DAA_Sign ( TCS_CONTEXT_HANDLE hContext, // in TPM_HANDLE handle, // in BYTE stage, // in UINT32 inputSize0, // in BYTE* inputData0, // in UINT32 inputSize1, // in BYTE* inputData1, // in TPM_AUTH* ownerAuth, // in, out UINT32* outputSize, // out BYTE** outputData // out ); extern TSS_RESULT Tcsip_MigrateKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hMaKey, // in UINT32 PublicKeySize, // in BYTE* PublicKey, // in UINT32 inDataSize, // in BYTE* inData, // in TPM_AUTH* ownerAuth, // in, out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_CMK_SetRestrictions ( TCS_CONTEXT_HANDLE hContext, // in TSS_CMK_DELEGATE Restriction, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_CMK_ApproveMA ( TCS_CONTEXT_HANDLE hContext, // in TPM_DIGEST migAuthorityDigest, // in TPM_AUTH* ownerAuth, // in, out TPM_HMAC* HmacMigAuthDigest // out ); extern TSS_RESULT Tcsip_CMK_CreateKey ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE hWrappingKey, // in TPM_ENCAUTH KeyUsageAuth, // in TPM_HMAC MigAuthApproval, // in TPM_DIGEST MigAuthorityDigest, // in UINT32* keyDataSize, // in, out BYTE** prgbKeyData, // in, out TPM_AUTH* pAuth // in, out ); extern TSS_RESULT Tcsip_CMK_CreateTicket ( TCS_CONTEXT_HANDLE hContext, // in UINT32 PublicVerifyKeySize, // in BYTE* PublicVerifyKey, // in TPM_DIGEST SignedData, // in UINT32 SigValueSize, // in BYTE* SigValue, // in TPM_AUTH* pOwnerAuth, // in, out TPM_HMAC* SigTicket // out ); extern TSS_RESULT Tcsip_CMK_CreateBlob ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in TSS_MIGRATE_SCHEME migrationType, // in UINT32 MigrationKeyAuthSize, // in BYTE* MigrationKeyAuth, // in TPM_DIGEST PubSourceKeyDigest, // in UINT32 msaListSize, // in BYTE* msaList, // in UINT32 restrictTicketSize, // in BYTE* restrictTicket, // in UINT32 sigTicketSize, // in BYTE* sigTicket, // in UINT32 encDataSize, // in BYTE* encData, // in TPM_AUTH* parentAuth, // in, out UINT32* randomSize, // out BYTE** random, // out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_CMK_ConvertMigration ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE parentHandle, // in TPM_CMK_AUTH restrictTicket, // in TPM_HMAC sigTicket, // in UINT32 keyDataSize, // in BYTE* prgbKeyData, // in UINT32 msaListSize, // in BYTE* msaList, // in UINT32 randomSize, // in BYTE* random, // in TPM_AUTH* parentAuth, // in, out UINT32* outDataSize, // out BYTE** outData // out ); extern TSS_RESULT Tcsip_SetCapability ( TCS_CONTEXT_HANDLE hContext, // in TPM_CAPABILITY_AREA capArea, // in UINT32 subCapSize, // in BYTE* subCap, // in UINT32 valueSize, // in BYTE* value, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsip_GetAuditDigest ( TCS_CONTEXT_HANDLE hContext, // in UINT32 startOrdinal, // in TPM_DIGEST* auditDigest, // out UINT32* counterValueSize, // out BYTE** counterValue, // out TSS_BOOL* more, // out UINT32* ordSize, // out UINT32** ordList // out ); extern TSS_RESULT Tcsip_GetAuditDigestSigned ( TCS_CONTEXT_HANDLE hContext, // in TCS_KEY_HANDLE keyHandle, // in TSS_BOOL closeAudit, // in TPM_NONCE antiReplay, // in TPM_AUTH* privAuth, // in, out UINT32* counterValueSize, // out BYTE** counterValue, // out TPM_DIGEST* auditDigest, // out TPM_DIGEST* ordinalDigest, // out UINT32* sigSize, // out BYTE** sig // out ); extern TSS_RESULT Tcsip_SetOrdinalAuditStatus ( TCS_CONTEXT_HANDLE hContext, // in UINT32 ordinalToAudit, // in TSS_BOOL auditState, // in TPM_AUTH* ownerAuth // in, out ); extern TSS_RESULT Tcsi_Admin_TSS_SessionsPerLocality ( TCS_CONTEXT_HANDLE hContext, // in UINT32 ulLocality, // in UINT32 ulSessions, // in TPM_AUTH* pOwnerAuth // in, out ); extern TSS_RESULT Tcsi_GetCredential ( TCS_CONTEXT_HANDLE hContext, // in UINT32 ulCredentialType, // in UINT32 ulCredentialAccessMode, // in UINT32* pulCredentialSize, // out BYTE** prgbCredentialData // out ); #if defined __cplusplus } // extern "C" #endif #endif /* TCS_H */ tpm-quote-tools-1.0.4/include/tss/tss_error_basics.h0000644000175000017510000000317513037720561017514 00000000000000/*++ Basic defines for TSS error return codes --*/ #ifndef __TSS_ERROR_BASICS_H__ #define __TSS_ERROR_BASICS_H__ // // definitions for the various TSS-SW layers // #ifndef TSS_LAYER_TPM #define TSS_LAYER_TPM 0x0000L // definition for TPM layer #endif // TSS_LAYER_TPM #define TSS_LAYER_TDDL 0x1000L // definition for TDDL layer #define TSS_LAYER_TCS 0x2000L // definition for TCS layer #ifndef TSS_LAYER_TSP #define TSS_LAYER_TSP 0x3000L // definition for TSP layer #endif // TSS_LAYER_TSP // // definitions for the start points of layer specific error codes // #ifndef TSS_COMMON_OFFSET #define TSS_COMMON_OFFSET 0x000L #endif // TSS_COMMON_OFFSET #define TSS_TDDL_OFFSET 0x080L #define TSS_TCSI_OFFSET 0x0C0L #ifndef TSS_TSPI_OFFSET #define TSS_TSPI_OFFSET 0x100L #endif // TSS_TSPI_OFFSET #ifndef TSS_VENDOR_OFFSET #define TSS_VENDOR_OFFSET 0x800L #endif // TSS_VENDOR_OFFSET // do not exceed TSS_MAX_ERROR for vendor specific code values: #ifndef TSS_MAX_ERROR #define TSS_MAX_ERROR 0xFFFL #endif // TSS_MAX_ERROR /* Macros for the construction and interpretation of error codes */ #define TPM_ERROR(code) (code) #define TDDL_ERROR(code) ((code) ? (TSS_LAYER_TDDL | (code)) : (code)) #define TCS_ERROR(code) ((code) ? (TSS_LAYER_TCS | (code)) : (code)) #define TSP_ERROR(code) ((code) ? (TSS_LAYER_TSP | (code)) : (code)) #define ERROR_LAYER(error) ((error) & 0xf000) #define ERROR_CODE(error) ((error) & 0x0fff) #endif // __TSS_ERROR_BASICS_H__ tpm-quote-tools-1.0.4/include/tss/tpm.h0000644000175000017510000016663313037720561014757 00000000000000/*++ * * TPM structures extracted from the TPM specification 1.2, * Part 2 (Structures), rev 85. * * Errata: * * *) The individual bits of TPM_STARTUP_EFFECTS were not given names in * the TPM spec so they are not defined in tpm.h. * * *) A few typedefs not present in the TPM 1.2 specification have been * added. This was generally done when the TPM 1.2 spec defined a set of * related values (either bitmasks or enumeration values) but did not * define an associated type to hold these values. The typedefs have been * added and structure fields that were to hold those values have been * switched from generic UINT* types to the more specific types. This was * done to highlight exactly where those #defined values were to be used. * The types that have been added are: * TPM_NV_PER_ATTRIBUTES * TPM_DELEGATE_TYPE * * *) The layout of bitfields within a structure are compiler-dependent * and the use of structure bitfields has been avoided where possible. In * cases where a value is a collection of independent bits the type is * given a name (typedeffed to UINT16 or UINT32 as appropriate) and masks * are #defined to access the individual bits. This is not possible for * TPM_VERSION_BYTE because the fields are 4-bit values. A best attempt * has been made to make this compiler independent but it has only been * checked on GCC and Visual C++ on little-endian machines. * * *) The TPM_DELEGATIONS per1 and per2 fields field are a bitmask but * are defined as a UINT32 because the bitfields have different meaning * based on the type of delegation blob. * * *) The definitions of TPM_PERMANENT_DATA, TPM_STCLEAR_DATA, * TPM_STANY_DATA, and TPM_DELEGATE_TABLE_ROW are commented out. These * structures are internal to the TPM and are not directly accessible by * external software so this should not be a problem. * * *) The definitions of TPM_FAMILY_TABLE and TPM_DELEGATE_TABLE are * commented out because they are variable length arrays internal to the * TPM. As above they are not directly accessible by external software * so this should not be a problem. */ #ifndef __TPM_H__ #define __TPM_H__ #ifdef __midl #define SIZEIS(x) [size_is(x)] #else #define SIZEIS(x) #endif #include //------------------------------------------------------------------- // Part 2, section 2.1: Basic data types typedef BYTE TPM_BOOL; #ifndef FALSE #define FALSE 0x00 #define TRUE 0x01 #endif /* ifndef FALSE */ //------------------------------------------------------------------- // Part 2, section 2.3: Helper Redefinitions // Many of the helper redefinitions appear later in this file // so that they are declared next to the list of valid values // they may hold. typedef BYTE TPM_LOCALITY_MODIFIER; typedef UINT32 TPM_COMMAND_CODE; /* 1.1b */ typedef UINT32 TPM_COUNT_ID; typedef UINT32 TPM_REDIT_COMMAND; typedef UINT32 TPM_HANDLE; typedef UINT32 TPM_AUTHHANDLE; typedef UINT32 TPM_TRANSHANDLE; typedef UINT32 TPM_KEYHANDLE; typedef UINT32 TPM_DIRINDEX; typedef UINT32 TPM_PCRINDEX; typedef UINT32 TPM_RESULT; typedef UINT32 TPM_MODIFIER_INDICATOR; //------------------------------------------------------------------- // Part 2, section 2.2.4: Vendor Specific #define TPM_Vendor_Specific32 0x00000400 #define TPM_Vendor_Specific8 0x80 //------------------------------------------------------------------- // Part 2, section 3: Structure Tags typedef UINT16 TPM_STRUCTURE_TAG; #define TPM_TAG_CONTEXTBLOB ((UINT16)0x0001) #define TPM_TAG_CONTEXT_SENSITIVE ((UINT16)0x0002) #define TPM_TAG_CONTEXTPOINTER ((UINT16)0x0003) #define TPM_TAG_CONTEXTLIST ((UINT16)0x0004) #define TPM_TAG_SIGNINFO ((UINT16)0x0005) #define TPM_TAG_PCR_INFO_LONG ((UINT16)0x0006) #define TPM_TAG_PERSISTENT_FLAGS ((UINT16)0x0007) #define TPM_TAG_VOLATILE_FLAGS ((UINT16)0x0008) #define TPM_TAG_PERSISTENT_DATA ((UINT16)0x0009) #define TPM_TAG_VOLATILE_DATA ((UINT16)0x000a) #define TPM_TAG_SV_DATA ((UINT16)0x000b) #define TPM_TAG_EK_BLOB ((UINT16)0x000c) #define TPM_TAG_EK_BLOB_AUTH ((UINT16)0x000d) #define TPM_TAG_COUNTER_VALUE ((UINT16)0x000e) #define TPM_TAG_TRANSPORT_INTERNAL ((UINT16)0x000f) #define TPM_TAG_TRANSPORT_LOG_IN ((UINT16)0x0010) #define TPM_TAG_TRANSPORT_LOG_OUT ((UINT16)0x0011) #define TPM_TAG_AUDIT_EVENT_IN ((UINT16)0x0012) #define TPM_TAG_AUDIT_EVENT_OUT ((UINT16)0x0013) #define TPM_TAG_CURRENT_TICKS ((UINT16)0x0014) #define TPM_TAG_KEY ((UINT16)0x0015) #define TPM_TAG_STORED_DATA12 ((UINT16)0x0016) #define TPM_TAG_NV_ATTRIBUTES ((UINT16)0x0017) #define TPM_TAG_NV_DATA_PUBLIC ((UINT16)0x0018) #define TPM_TAG_NV_DATA_SENSITIVE ((UINT16)0x0019) #define TPM_TAG_DELEGATIONS ((UINT16)0x001a) #define TPM_TAG_DELEGATE_PUBLIC ((UINT16)0x001b) #define TPM_TAG_DELEGATE_TABLE_ROW ((UINT16)0x001c) #define TPM_TAG_TRANSPORT_AUTH ((UINT16)0x001d) #define TPM_TAG_TRANSPORT_PUBLIC ((UINT16)0x001e) #define TPM_TAG_PERMANENT_FLAGS ((UINT16)0x001f) #define TPM_TAG_STCLEAR_FLAGS ((UINT16)0x0020) #define TPM_TAG_STANY_FLAGS ((UINT16)0x0021) #define TPM_TAG_PERMANENT_DATA ((UINT16)0x0022) #define TPM_TAG_STCLEAR_DATA ((UINT16)0x0023) #define TPM_TAG_STANY_DATA ((UINT16)0x0024) #define TPM_TAG_FAMILY_TABLE_ENTRY ((UINT16)0x0025) #define TPM_TAG_DELEGATE_SENSITIVE ((UINT16)0x0026) #define TPM_TAG_DELG_KEY_BLOB ((UINT16)0x0027) #define TPM_TAG_KEY12 ((UINT16)0x0028) #define TPM_TAG_CERTIFY_INFO2 ((UINT16)0x0029) #define TPM_TAG_DELEGATE_OWNER_BLOB ((UINT16)0x002a) #define TPM_TAG_EK_BLOB_ACTIVATE ((UINT16)0x002b) #define TPM_TAG_DAA_BLOB ((UINT16)0x002c) #define TPM_TAG_DAA_CONTEXT ((UINT16)0x002d) #define TPM_TAG_DAA_ENFORCE ((UINT16)0x002e) #define TPM_TAG_DAA_ISSUER ((UINT16)0x002f) #define TPM_TAG_CAP_VERSION_INFO ((UINT16)0x0030) #define TPM_TAG_DAA_SENSITIVE ((UINT16)0x0031) #define TPM_TAG_DAA_TPM ((UINT16)0x0032) #define TPM_TAG_CMK_MIGAUTH ((UINT16)0x0033) #define TPM_TAG_CMK_SIGTICKET ((UINT16)0x0034) #define TPM_TAG_CMK_MA_APPROVAL ((UINT16)0x0035) #define TPM_TAG_QUOTE_INFO2 ((UINT16)0x0036) #define TPM_TAG_DA_INFO ((UINT16)0x0037) #define TPM_TAG_DA_INFO_LIMITED ((UINT16)0x0038) #define TPM_TAG_DA_ACTION_TYPE ((UINT16)0x0039) //------------------------------------------------------------------- // Part 2, section 4: Types typedef UINT32 TPM_RESOURCE_TYPE; #define TPM_RT_KEY ((UINT32)0x00000001) #define TPM_RT_AUTH ((UINT32)0x00000002) #define TPM_RT_HASH ((UINT32)0x00000003) #define TPM_RT_TRANS ((UINT32)0x00000004) #define TPM_RT_CONTEXT ((UINT32)0x00000005) #define TPM_RT_COUNTER ((UINT32)0x00000006) #define TPM_RT_DELEGATE ((UINT32)0x00000007) #define TPM_RT_DAA_TPM ((UINT32)0x00000008) #define TPM_RT_DAA_V0 ((UINT32)0x00000009) #define TPM_RT_DAA_V1 ((UINT32)0x0000000a) typedef BYTE TPM_PAYLOAD_TYPE; /* 1.1b */ #define TPM_PT_ASYM ((BYTE)0x01) /* 1.1b */ #define TPM_PT_BIND ((BYTE)0x02) /* 1.1b */ #define TPM_PT_MIGRATE ((BYTE)0x03) /* 1.1b */ #define TPM_PT_MAINT ((BYTE)0x04) /* 1.1b */ #define TPM_PT_SEAL ((BYTE)0x05) /* 1.1b */ #define TPM_PT_MIGRATE_RESTRICTED ((BYTE)0x06) #define TPM_PT_MIGRATE_EXTERNAL ((BYTE)0x07) #define TPM_PT_CMK_MIGRATE ((BYTE)0x08) typedef UINT16 TPM_ENTITY_TYPE; /* 1.1b */ #define TPM_ET_KEYHANDLE ((UINT16)0x0001) /* 1.1b */ #define TPM_ET_OWNER ((UINT16)0x0002) /* 1.1b */ #define TPM_ET_DATA ((UINT16)0x0003) /* 1.1b */ #define TPM_ET_SRK ((UINT16)0x0004) /* 1.1b */ #define TPM_ET_KEY ((UINT16)0x0005) /* 1.1b */ #define TPM_ET_REVOKE ((UINT16)0x0006) #define TPM_ET_DEL_OWNER_BLOB ((UINT16)0x0007) #define TPM_ET_DEL_ROW ((UINT16)0x0008) #define TPM_ET_DEL_KEY_BLOB ((UINT16)0x0009) #define TPM_ET_COUNTER ((UINT16)0x000a) #define TPM_ET_NV ((UINT16)0x000b) #define TPM_ET_OPERATOR ((UINT16)0x000c) #define TPM_ET_RESERVED_HANDLE ((UINT16)0x0040) /* The following values may be ORed into the MSB of the TPM_ENTITY_TYPE * to indicate particular encryption scheme */ #define TPM_ET_XOR ((BYTE)0x00) #define TPM_ET_AES ((BYTE)0x06) typedef UINT32 TPM_KEY_HANDLE; /* 1.1b */ #define TPM_KH_SRK ((UINT32)0x40000000) #define TPM_KH_OWNER ((UINT32)0x40000001) #define TPM_KH_REVOKE ((UINT32)0x40000002) #define TPM_KH_TRANSPORT ((UINT32)0x40000003) #define TPM_KH_OPERATOR ((UINT32)0x40000004) #define TPM_KH_ADMIN ((UINT32)0x40000005) #define TPM_KH_EK ((UINT32)0x40000006) /* 1.1b used different names, but the same values */ #define TPM_KEYHND_SRK (TPM_KH_SRK) /* 1.1b */ #define TPM_KEYHND_OWNER (TPM_KH_OWNER) /* 1.1b */ typedef UINT16 TPM_STARTUP_TYPE; /* 1.1b */ #define TPM_ST_CLEAR ((UINT16)0x0001) /* 1.1b */ #define TPM_ST_STATE ((UINT16)0x0002) /* 1.1b */ #define TPM_ST_DEACTIVATED ((UINT16)0x0003) /* 1.1b */ //typedef UINT32 TPM_STARTUP_EFFECTS; // 32-bit mask, see spec for meaning. Names not currently defined. // bits 0-8 have meaning typedef UINT16 TPM_PROTOCOL_ID; /* 1.1b */ #define TPM_PID_OIAP ((UINT16)0x0001) /* 1.1b */ #define TPM_PID_OSAP ((UINT16)0x0002) /* 1.1b */ #define TPM_PID_ADIP ((UINT16)0x0003) /* 1.1b */ #define TPM_PID_ADCP ((UINT16)0x0004) /* 1.1b */ #define TPM_PID_OWNER ((UINT16)0x0005) /* 1.1b */ #define TPM_PID_DSAP ((UINT16)0x0006) #define TPM_PID_TRANSPORT ((UINT16)0x0007) // Note in 1.2 rev 104, DES and 3DES are eliminated typedef UINT32 TPM_ALGORITHM_ID; /* 1.1b */ #define TPM_ALG_RSA ((UINT32)0x00000001) /* 1.1b */ #define TPM_ALG_DES ((UINT32)0x00000002) /* 1.1b */ #define TPM_ALG_3DES ((UINT32)0x00000003) /* 1.1b */ #define TPM_ALG_SHA ((UINT32)0x00000004) /* 1.1b */ #define TPM_ALG_HMAC ((UINT32)0x00000005) /* 1.1b */ #define TPM_ALG_AES ((UINT32)0x00000006) /* 1.1b */ #define TPM_ALG_AES128 (TPM_ALG_AES) #define TPM_ALG_MGF1 ((UINT32)0x00000007) #define TPM_ALG_AES192 ((UINT32)0x00000008) #define TPM_ALG_AES256 ((UINT32)0x00000009) #define TPM_ALG_XOR ((UINT32)0x0000000a) typedef UINT16 TPM_PHYSICAL_PRESENCE; /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_LOCK ((UINT16)0x0004) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_PRESENT ((UINT16)0x0008) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_NOTPRESENT ((UINT16)0x0010) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_CMD_ENABLE ((UINT16)0x0020) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_HW_ENABLE ((UINT16)0x0040) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK ((UINT16)0x0080) /* 1.1b */ #define TPM_PHYSICAL_PRESENCE_CMD_DISABLE ((UINT16)0x0100) #define TPM_PHYSICAL_PRESENCE_HW_DISABLE ((UINT16)0x0200) typedef UINT16 TPM_MIGRATE_SCHEME; /* 1.1b */ #define TPM_MS_MIGRATE ((UINT16)0x0001) /* 1.1b */ #define TPM_MS_REWRAP ((UINT16)0x0002) /* 1.1b */ #define TPM_MS_MAINT ((UINT16)0x0003) /* 1.1b */ #define TPM_MS_RESTRICT_MIGRATE ((UINT16)0x0004) #define TPM_MS_RESTRICT_APPROVE_DOUBLE ((UINT16)0x0005) typedef UINT16 TPM_EK_TYPE; #define TPM_EK_TYPE_ACTIVATE ((UINT16)0x0001) #define TPM_EK_TYPE_AUTH ((UINT16)0x0002) typedef UINT16 TPM_PLATFORM_SPECIFIC; #define TPM_PS_PC_11 ((UINT16)0x0001) #define TPM_PS_PC_12 ((UINT16)0x0002) #define TPM_PS_PDA_12 ((UINT16)0x0003) #define TPM_PS_Server_12 ((UINT16)0x0004) #define TPM_PS_Mobile_12 ((UINT16)0x0005) //------------------------------------------------------------------- // Part 2, section 5: Basic Structures typedef struct tdTPM_STRUCT_VER { BYTE major; BYTE minor; BYTE revMajor; BYTE revMinor; } TPM_STRUCT_VER; typedef struct tdTPM_VERSION_BYTE { // This needs to be made compiler-independent. int leastSigVer : 4; // least significant 4 bits int mostSigVer : 4; // most significant 4 bits } TPM_VERSION_BYTE; typedef struct tdTPM_VERSION { BYTE major; // Should really be a TPM_VERSION_BYTE BYTE minor; // Should really be a TPM_VERSION_BYTE BYTE revMajor; BYTE revMinor; } TPM_VERSION; // Put this in the right place: // byte size definition for 160 bit SHA1 hash value #define TPM_SHA1_160_HASH_LEN 0x14 #define TPM_SHA1BASED_NONCE_LEN TPM_SHA1_160_HASH_LEN typedef struct tdTPM_DIGEST { BYTE digest[TPM_SHA1_160_HASH_LEN]; } TPM_DIGEST; typedef TPM_DIGEST TPM_CHOSENID_HASH; typedef TPM_DIGEST TPM_COMPOSITE_HASH; typedef TPM_DIGEST TPM_DIRVALUE; typedef TPM_DIGEST TPM_HMAC; typedef TPM_DIGEST TPM_PCRVALUE; typedef TPM_DIGEST TPM_AUDITDIGEST; typedef struct tdTPM_NONCE /* 1.1b */ { BYTE nonce[TPM_SHA1BASED_NONCE_LEN]; } TPM_NONCE; typedef TPM_NONCE TPM_DAA_TPM_SEED; typedef TPM_NONCE TPM_DAA_CONTEXT_SEED; typedef struct tdTPM_AUTHDATA /* 1.1b */ { BYTE authdata[TPM_SHA1_160_HASH_LEN]; } TPM_AUTHDATA; typedef TPM_AUTHDATA TPM_SECRET; typedef TPM_AUTHDATA TPM_ENCAUTH; typedef struct tdTPM_KEY_HANDLE_LIST /* 1.1b */ { UINT16 loaded; SIZEIS(loaded) TPM_KEY_HANDLE *handle; } TPM_KEY_HANDLE_LIST; //------------------------------------------------------------------- // Part 2, section 5.8: Key usage values typedef UINT16 TPM_KEY_USAGE; /* 1.1b */ #define TPM_KEY_SIGNING ((UINT16)0x0010) /* 1.1b */ #define TPM_KEY_STORAGE ((UINT16)0x0011) /* 1.1b */ #define TPM_KEY_IDENTITY ((UINT16)0x0012) /* 1.1b */ #define TPM_KEY_AUTHCHANGE ((UINT16)0x0013) /* 1.1b */ #define TPM_KEY_BIND ((UINT16)0x0014) /* 1.1b */ #define TPM_KEY_LEGACY ((UINT16)0x0015) /* 1.1b */ #define TPM_KEY_MIGRATE ((UINT16)0x0016) typedef UINT16 TPM_SIG_SCHEME; /* 1.1b */ #define TPM_SS_NONE ((UINT16)0x0001) /* 1.1b */ #define TPM_SS_RSASSAPKCS1v15_SHA1 ((UINT16)0x0002) /* 1.1b */ #define TPM_SS_RSASSAPKCS1v15_DER ((UINT16)0x0003) /* 1.1b */ #define TPM_SS_RSASSAPKCS1v15_INFO ((UINT16)0x0004) typedef UINT16 TPM_ENC_SCHEME; /* 1.1b */ #define TPM_ES_NONE ((UINT16)0x0001) /* 1.1b */ #define TPM_ES_RSAESPKCSv15 ((UINT16)0x0002) /* 1.1b */ #define TPM_ES_RSAESOAEP_SHA1_MGF1 ((UINT16)0x0003) /* 1.1b */ #define TPM_ES_SYM_CNT ((UINT16)0x0004) #define TPM_ES_SYM_CTR TPM_ES_SYM_CNT #define TPM_ES_SYM_OFB ((UINT16)0x0005) #define TPM_ES_SYM_CBC_PKCS5PAD ((UINT16)0x00ff) //------------------------------------------------------------------- // Part 2, section 5.9: TPM_AUTH_DATA_USAGE values typedef BYTE TPM_AUTH_DATA_USAGE; /* 1.1b */ #define TPM_AUTH_NEVER ((BYTE)0x00) /* 1.1b */ #define TPM_AUTH_ALWAYS ((BYTE)0x01) /* 1.1b */ #define TPM_AUTH_PRIV_USE_ONLY ((BYTE)0x11) //------------------------------------------------------------------- // Part 2, section 5.10: TPM_KEY_FLAGS flags typedef UINT32 TPM_KEY_FLAGS; /* 1.1b */ #define TPM_REDIRECTION ((UINT32)0x00000001) /* 1.1b */ #define TPM_MIGRATABLE ((UINT32)0x00000002) /* 1.1b */ #define TPM_VOLATILE ((UINT32)0x00000004) /* 1.1b */ #define TPM_PCRIGNOREDONREAD ((UINT32)0x00000008) #define TPM_MIGRATEAUTHORITY ((UINT32)0x00000010) //------------------------------------------------------------------- // Part 2, section 5.11: TPM_CHANGEAUTH_VALIDATE typedef struct tdTPM_CHANGEAUTH_VALIDATE { TPM_SECRET newAuthSecret; TPM_NONCE n1; } TPM_CHANGEAUTH_VALIDATE; //------------------------------------------------------------------- // Part 2, section 5.12: TPM_MIGRATIONKEYAUTH // declared after section 10 to catch declaration of TPM_PUBKEY //------------------------------------------------------------------- // Part 2, section 5.13: TPM_COUNTER_VALUE; typedef UINT32 TPM_ACTUAL_COUNT; typedef struct tdTPM_COUNTER_VALUE { TPM_STRUCTURE_TAG tag; BYTE label[4]; TPM_ACTUAL_COUNT counter; } TPM_COUNTER_VALUE; //------------------------------------------------------------------- // Part 2, section 5.14: TPM_SIGN_INFO structure typedef struct tdTPM_SIGN_INFO { TPM_STRUCTURE_TAG tag; BYTE fixed[4]; TPM_NONCE replay; UINT32 dataLen; SIZEIS(dataLen) BYTE *data; } TPM_SIGN_INFO; //------------------------------------------------------------------- // Part 2, section 5.15: TPM_MSA_COMPOSITE typedef struct tdTPM_MSA_COMPOSITE { UINT32 MSAlist; SIZEIS(MSAlist) TPM_DIGEST *migAuthDigest; } TPM_MSA_COMPOSITE; //------------------------------------------------------------------- // Part 2, section 5.16: TPM_CMK_AUTH typedef struct tdTPM_CMK_AUTH { TPM_DIGEST migrationAuthorityDigest; TPM_DIGEST destinationKeyDigest; TPM_DIGEST sourceKeyDigest; } TPM_CMK_AUTH; //------------------------------------------------------------------- // Part 2, section 5.17: TPM_CMK_DELEGATE typedef UINT32 TPM_CMK_DELEGATE; #define TPM_CMK_DELEGATE_SIGNING (((UINT32)1)<<31) #define TPM_CMK_DELEGATE_STORAGE (((UINT32)1)<<30) #define TPM_CMK_DELEGATE_BIND (((UINT32)1)<<29) #define TPM_CMK_DELEGATE_LEGACY (((UINT32)1)<<28) #define TPM_CMK_DELEGATE_MIGRATE (((UINT32)1)<<27) //------------------------------------------------------------------- // Part 2, section 5.18: TPM_SELECT_SIZE typedef struct tdTPM_SELECT_SIZE { BYTE major; BYTE minor; UINT16 reqSize; } TPM_SELECT_SIZE; //------------------------------------------------------------------- // Part 2, section 5.19: TPM_CMK_MIGAUTH typedef struct tdTPM_CMK_MIGAUTH { TPM_STRUCTURE_TAG tag; TPM_DIGEST msaDigest; TPM_DIGEST pubKeyDigest; } TPM_CMK_MIGAUTH; //------------------------------------------------------------------- // Part 2, section 5.20: TPM_CMK_SIGTICKET typedef struct tdTPM_CMK_SIGTICKET { TPM_STRUCTURE_TAG tag; TPM_DIGEST verKeyDigest; TPM_DIGEST signedData; } TPM_CMK_SIGTICKET; //------------------------------------------------------------------- // Part 2, section 5.21: TPM_CMK_MA_APPROVAL typedef struct tdTPM_CMK_MA_APPROVAL { TPM_STRUCTURE_TAG tag; TPM_DIGEST migrationAuthorityDigest; } TPM_CMK_MA_APPROVAL; //------------------------------------------------------------------- // Part 2, section 6: Command Tags typedef UINT16 TPM_TAG; /* 1.1b */ #define TPM_TAG_RQU_COMMAND ((UINT16)0x00c1) #define TPM_TAG_RQU_AUTH1_COMMAND ((UINT16)0x00c2) #define TPM_TAG_RQU_AUTH2_COMMAND ((UINT16)0x00c3) #define TPM_TAG_RSP_COMMAND ((UINT16)0x00c4) #define TPM_TAG_RSP_AUTH1_COMMAND ((UINT16)0x00c5) #define TPM_TAG_RSP_AUTH2_COMMAND ((UINT16)0x00c6) //------------------------------------------------------------------- // Part 2, section 7.1: TPM_PERMANENT_FLAGS typedef struct tdTPM_PERMANENT_FLAGS { TPM_STRUCTURE_TAG tag; TSS_BOOL disable; TSS_BOOL ownership; TSS_BOOL deactivated; TSS_BOOL readPubek; TSS_BOOL disableOwnerClear; TSS_BOOL allowMaintenance; TSS_BOOL physicalPresenceLifetimeLock; TSS_BOOL physicalPresenceHWEnable; TSS_BOOL physicalPresenceCMDEnable; TSS_BOOL CEKPUsed; TSS_BOOL TPMpost; TSS_BOOL TPMpostLock; TSS_BOOL FIPS; TSS_BOOL Operator; TSS_BOOL enableRevokeEK; TSS_BOOL nvLocked; TSS_BOOL readSRKPub; TSS_BOOL tpmEstablished; TSS_BOOL maintenanceDone; TSS_BOOL disableFullDALogicInfo; } TPM_PERMANENT_FLAGS; #define TPM_PF_DISABLE ((UINT32)0x00000001) #define TPM_PF_OWNERSHIP ((UINT32)0x00000002) #define TPM_PF_DEACTIVATED ((UINT32)0x00000003) #define TPM_PF_READPUBEK ((UINT32)0x00000004) #define TPM_PF_DISABLEOWNERCLEAR ((UINT32)0x00000005) #define TPM_PF_ALLOWMAINTENANCE ((UINT32)0x00000006) #define TPM_PF_PHYSICALPRESENCELIFETIMELOCK ((UINT32)0x00000007) #define TPM_PF_PHYSICALPRESENCEHWENABLE ((UINT32)0x00000008) #define TPM_PF_PHYSICALPRESENCECMDENABLE ((UINT32)0x00000009) #define TPM_PF_CEKPUSED ((UINT32)0x0000000A) #define TPM_PF_TPMPOST ((UINT32)0x0000000B) #define TPM_PF_TPMPOSTLOCK ((UINT32)0x0000000C) #define TPM_PF_FIPS ((UINT32)0x0000000D) #define TPM_PF_OPERATOR ((UINT32)0x0000000E) #define TPM_PF_ENABLEREVOKEEK ((UINT32)0x0000000F) #define TPM_PF_NV_LOCKED ((UINT32)0x00000010) #define TPM_PF_READSRKPUB ((UINT32)0x00000011) #define TPM_PF_RESETESTABLISHMENTBIT ((UINT32)0x00000012) #define TPM_PF_MAINTENANCEDONE ((UINT32)0x00000013) #define TPM_PF_DISABLEFULLDALOGICINFO ((UINT32)0x00000014) //------------------------------------------------------------------- // Part 2, section 7.2: TPM_STCLEAR_FLAGS typedef struct tdTPM_STCLEAR_FLAGS { TPM_STRUCTURE_TAG tag; TSS_BOOL deactivated; TSS_BOOL disableForceClear; TSS_BOOL physicalPresence; TSS_BOOL physicalPresenceLock; TSS_BOOL bGlobalLock; } TPM_STCLEAR_FLAGS; #define TPM_SF_DEACTIVATED ((UINT32)0x00000001) #define TPM_SF_DISABLEFORCECLEAR ((UINT32)0x00000002) #define TPM_SF_PHYSICALPRESENCE ((UINT32)0x00000003) #define TPM_SF_PHYSICALPRESENCELOCK ((UINT32)0x00000004) #define TPM_SF_GLOBALLOCK ((UINT32)0x00000005) //------------------------------------------------------------------- // Part 2, section 7.3: TPM_STANY_FLAGS typedef struct tdTPM_STANY_FLAGS { TPM_STRUCTURE_TAG tag; TSS_BOOL postInitialise; TPM_MODIFIER_INDICATOR localityModifier; TSS_BOOL transportExclusive; TSS_BOOL TOSPresent; } TPM_STANY_FLAGS; #define TPM_AF_POSTINITIALIZE ((UINT32)0x00000001) #define TPM_AF_LOCALITYMODIFIER ((UINT32)0x00000002) #define TPM_AF_TRANSPORTEXCLUSIVE ((UINT32)0x00000003) #define TPM_AF_TOSPRESENT ((UINT32)0x00000004) //------------------------------------------------------------------- // Part 2, section 7.4: TPM_PERMANENT_DATA // available inside TPM only // //#define TPM_MIN_COUNTERS 4 //#define TPM_NUM_PCR 16 //#define TPM_MAX_NV_WRITE_NOOWNER 64 // //typedef struct tdTPM_PERMANENT_DATA //{ // TPM_STRUCTURE_TAG tag; // BYTE revMajor; // BYTE revMinor; // TPM_NONCE tpmProof; // TPM_NONCE ekReset; // TPM_SECRET ownerAuth; // TPM_SECRET operatorAuth; // TPM_DIRVALUE authDIR[1]; // TPM_PUBKEY manuMaintPub; // TPM_KEY endorsementKey; // TPM_KEY srk; // TPM_KEY contextKey; // TPM_KEY delegateKey; // TPM_COUNTER_VALUE auditMonotonicCounter; // TPM_COUNTER_VALUE monitonicCounter[TPM_MIN_COUNTERS]; // TPM_PCR_ATTRIBUTES pcrAttrib[TPM_NUM_PCR]; // BYTE ordinalAuditStatus[]; // BYTE *rngState; // TPM_FAMILY_TABLE familyTable; // TPM_DELEGATE_TABLE delegateTable; // UINT32 maxNVBufSize; // UINT32 lastFamilyID; // UINT32 noOwnerNVWrite; // TPM_CMK_DELEGATE restrictDelegate; // TPM_DAA_TPM_SEED tpmDAASeed; // TPM_NONCE daaProof; // TPM_NONCE daaBlobKey; //} TPM_PERMANENT_DATA; //------------------------------------------------------------------- // Part 2, section 7.5: TPM_STCLEAR_DATA // available inside TPM only // //typedef struct tdTPM_STCLEAR_DATA //{ // TPM_STRUCTURE_TAG tag; // TPM_NONCE contextNonceKey; // TPM_COUNT_ID countID; // UINT32 ownerReference; // TPM_BOOL disableResetLock; // TPM_PCRVALUE PCR[TPM_NUM_PCR]; // UINT32 deferredPhysicalPresence; //} TPM_STCLEAR_DATA; //------------------------------------------------------------------- // Part 2, section 7.5: TPM_STANY_DATA // available inside TPM only // //typedef struct tdTPM_STANY_DATA //{ // TPM_STRUCTURE_TAG tag; // TPM_NONCE contextNonceSession; // TPM_DIGEST auditDigest; // TPM_CURRENT_TICKS currentTicks; // UINT32 contextCount; // UINT32 contextList[TPM_MIN_SESSION_LIST]; // TPM_SESSION_DATA sessions[TPM_MIN_SESSIONS]; // // The following appear in section 22.6 but not in 7.5 // TPM_DAA_ISSUER DAA_issuerSettings; // TPM_DAA_TPM DAA_tpmSpecific; // TPM_DAA_CONTEXT DAA_session; // TPM_DAA_JOINDATA DAA_joinSession; //} TPM_STANY_DATA; //------------------------------------------------------------------- // Part 2, section 8: PCR Structures typedef BYTE TPM_LOCALITY_SELECTION; #define TPM_LOC_FOUR (((UINT32)1)<<4) #define TPM_LOC_THREE (((UINT32)1)<<3) #define TPM_LOC_TWO (((UINT32)1)<<2) #define TPM_LOC_ONE (((UINT32)1)<<1) #define TPM_LOC_ZERO (((UINT32)1)<<0) typedef struct tdTPM_PCR_SELECTION /* 1.1b */ { UINT16 sizeOfSelect; SIZEIS(sizeOfSelect) BYTE *pcrSelect; } TPM_PCR_SELECTION; typedef struct tdTPM_PCR_COMPOSITE /* 1.1b */ { TPM_PCR_SELECTION select; UINT32 valueSize; SIZEIS(valueSize) TPM_PCRVALUE *pcrValue; } TPM_PCR_COMPOSITE; typedef struct tdTPM_PCR_INFO /* 1.1b */ { TPM_PCR_SELECTION pcrSelection; TPM_COMPOSITE_HASH digestAtRelease; TPM_COMPOSITE_HASH digestAtCreation; } TPM_PCR_INFO; typedef struct tdTPM_PCR_INFO_LONG { TPM_STRUCTURE_TAG tag; TPM_LOCALITY_SELECTION localityAtCreation; TPM_LOCALITY_SELECTION localityAtRelease; TPM_PCR_SELECTION creationPCRSelection; TPM_PCR_SELECTION releasePCRSelection; TPM_COMPOSITE_HASH digestAtCreation; TPM_COMPOSITE_HASH digestAtRelease; } TPM_PCR_INFO_LONG; typedef struct tdTPM_PCR_INFO_SHORT { TPM_PCR_SELECTION pcrSelection; TPM_LOCALITY_SELECTION localityAtRelease; TPM_COMPOSITE_HASH digestAtRelease; } TPM_PCR_INFO_SHORT; typedef struct tdTPM_PCR_ATTRIBUTES { BYTE pcrReset; TPM_LOCALITY_SELECTION pcrExtendLocal; TPM_LOCALITY_SELECTION pcrResetLocal; } TPM_PCR_ATTRIBUTES; //------------------------------------------------------------------- // Part 2, section 9: typedef struct tdTPM_STORED_DATA /* 1.1b */ { TPM_STRUCT_VER ver; UINT32 sealInfoSize; SIZEIS(sealInfoSize) BYTE *sealInfo; UINT32 encDataSize; SIZEIS(encDataSize) BYTE *encData; } TPM_STORED_DATA; typedef struct tdTPM_STORED_DATA12 { TPM_STRUCTURE_TAG tag; TPM_ENTITY_TYPE et; UINT32 sealInfoSize; SIZEIS(sealInfoSize) BYTE *sealInfo; UINT32 encDataSize; SIZEIS(encDataSize) BYTE *encData; } TPM_STORED_DATA12; typedef struct tdTPM_SEALED_DATA /* 1.1b */ { TPM_PAYLOAD_TYPE payload; TPM_SECRET authData; TPM_NONCE tpmProof; TPM_DIGEST storedDigest; UINT32 dataSize; SIZEIS(dataSize) BYTE *data; } TPM_SEALED_DATA; typedef struct tdTPM_SYMMETRIC_KEY /* 1.1b */ { TPM_ALGORITHM_ID algId; TPM_ENC_SCHEME encScheme; UINT16 size; SIZEIS(size) BYTE *data; } TPM_SYMMETRIC_KEY; typedef struct tdTPM_BOUND_DATA { TPM_STRUCT_VER ver; TPM_PAYLOAD_TYPE payload; BYTE *payloadData; // length is implied } TPM_BOUND_DATA; //------------------------------------------------------------------- // Part 2, section 10: TPM_KEY complex typedef struct tdTPM_KEY_PARMS /* 1.1b */ { TPM_ALGORITHM_ID algorithmID; TPM_ENC_SCHEME encScheme; TPM_SIG_SCHEME sigScheme; UINT32 parmSize; SIZEIS(parmSize) BYTE *parms; } TPM_KEY_PARMS; typedef struct tdTPM_RSA_KEY_PARMS /* 1.1b */ { UINT32 keyLength; UINT32 numPrimes; UINT32 exponentSize; SIZEIS(exponentSize) BYTE *exponent; } TPM_RSA_KEY_PARMS; typedef struct tdTPM_SYMMETRIC_KEY_PARMS { UINT32 keyLength; UINT32 blockSize; UINT32 ivSize; SIZEIS(ivSize) BYTE *IV; } TPM_SYMMETRIC_KEY_PARMS; typedef struct tdTPM_STORE_PUBKEY /* 1.1b */ { UINT32 keyLength; SIZEIS(keyLength) BYTE *key; } TPM_STORE_PUBKEY; typedef struct tdTPM_PUBKEY /* 1.1b */ { TPM_KEY_PARMS algorithmParms; TPM_STORE_PUBKEY pubKey; } TPM_PUBKEY; typedef struct tdTPM_STORE_PRIVKEY /* 1.1b */ { UINT32 keyLength; SIZEIS(keyLength) BYTE *key; } TPM_STORE_PRIVKEY; typedef struct tdTPM_STORE_ASYMKEY /* 1.1b */ { TPM_PAYLOAD_TYPE payload; TPM_SECRET usageAuth; TPM_SECRET migrationAuth; TPM_DIGEST pubDataDigest; TPM_STORE_PRIVKEY privKey; } TPM_STORE_ASYMKEY; typedef struct tdTPM_KEY /* 1.1b */ { TPM_STRUCT_VER ver; TPM_KEY_USAGE keyUsage; TPM_KEY_FLAGS keyFlags; TPM_AUTH_DATA_USAGE authDataUsage; TPM_KEY_PARMS algorithmParms; UINT32 PCRInfoSize; SIZEIS(PCRInfoSize) BYTE *PCRInfo; TPM_STORE_PUBKEY pubKey; UINT32 encSize; SIZEIS(encSize) BYTE *encData; } TPM_KEY; typedef struct tdTPM_KEY12 { TPM_STRUCTURE_TAG tag; UINT16 fill; TPM_KEY_USAGE keyUsage; TPM_KEY_FLAGS keyFlags; TPM_AUTH_DATA_USAGE authDataUsage; TPM_KEY_PARMS algorithmParms; UINT32 PCRInfoSize; SIZEIS(PCRInfoSize) BYTE *PCRInfo; TPM_STORE_PUBKEY pubKey; UINT32 encSize; SIZEIS(encSize) BYTE *encData; } TPM_KEY12; typedef struct tdTPM_MIGRATE_ASYMKEY { TPM_PAYLOAD_TYPE payload; TPM_SECRET usageAuth; TPM_DIGEST pubDataDigest; UINT32 partPrivKeyLen; SIZEIS(partPrivKeyLen) BYTE *partPrivKey; } TPM_MIGRATE_ASYMKEY; typedef UINT32 TPM_KEY_CONTROL; #define TPM_KEY_CONTROL_OWNER_EVICT ((UINT32)0x00000001) //------------------------------------------------------------------- // Part 2, section 5.12: TPM_MIGRATIONKEYAUTH typedef struct tdTPM_MIGRATIONKEYAUTH /* 1.1b */ { TPM_PUBKEY migrationKey; TPM_MIGRATE_SCHEME migrationScheme; TPM_DIGEST digest; } TPM_MIGRATIONKEYAUTH; //------------------------------------------------------------------- // Part 2, section 11: Signed Structures typedef struct tdTPM_CERTIFY_INFO /* 1.1b */ { TPM_STRUCT_VER version; TPM_KEY_USAGE keyUsage; TPM_KEY_FLAGS keyFlags; TPM_AUTH_DATA_USAGE authDataUsage; TPM_KEY_PARMS algorithmParms; TPM_DIGEST pubkeyDigest; TPM_NONCE data; TPM_BOOL parentPCRStatus; UINT32 PCRInfoSize; SIZEIS(PCRInfoSize) BYTE *PCRInfo; } TPM_CERTIFY_INFO; typedef struct tdTPM_CERTIFY_INFO2 { TPM_STRUCTURE_TAG tag; BYTE fill; TPM_PAYLOAD_TYPE payloadType; TPM_KEY_USAGE keyUsage; TPM_KEY_FLAGS keyFlags; TPM_AUTH_DATA_USAGE authDataUsage; TPM_KEY_PARMS algorithmParms; TPM_DIGEST pubkeyDigest; TPM_NONCE data; TPM_BOOL parentPCRStatus; UINT32 PCRInfoSize; SIZEIS(PCRInfoSize) BYTE *PCRInfo; UINT32 migrationAuthoritySize; SIZEIS(migrationAuthoritySize) BYTE *migrationAuthority; } TPM_CERTIFY_INFO2; typedef struct tdTPM_QUOTE_INFO /* 1.1b */ { TPM_STRUCT_VER version; BYTE fixed[4]; TPM_COMPOSITE_HASH compositeHash; /* in 1.2 TPM spec, named digestValue */ TPM_NONCE externalData; } TPM_QUOTE_INFO; typedef struct tdTPM_QUOTE_INFO2 { TPM_STRUCTURE_TAG tag; BYTE fixed[4]; TPM_NONCE externalData; TPM_PCR_INFO_SHORT infoShort; } TPM_QUOTE_INFO2; //------------------------------------------------------------------- // Part 2, section 12: Identity Structures typedef struct tdTPM_EK_BLOB { TPM_STRUCTURE_TAG tag; TPM_EK_TYPE ekType; UINT32 blobSize; SIZEIS(blobSize) BYTE *blob; } TPM_EK_BLOB; typedef struct tdTPM_EK_BLOB_ACTIVATE { TPM_STRUCTURE_TAG tag; TPM_SYMMETRIC_KEY sessionKey; TPM_DIGEST idDigest; TPM_PCR_INFO_SHORT pcrInfo; } TPM_EK_BLOB_ACTIVATE; typedef struct tdTPM_EK_BLOB_AUTH { TPM_STRUCTURE_TAG tag; TPM_SECRET authValue; } TPM_EK_BLOB_AUTH; typedef struct tdTPM_IDENTITY_CONTENTS { TPM_STRUCT_VER ver; UINT32 ordinal; TPM_CHOSENID_HASH labelPrivCADigest; TPM_PUBKEY identityPubKey; } TPM_IDENTITY_CONTENTS; typedef struct tdTPM_IDENTITY_REQ /* 1.1b */ { UINT32 asymSize; UINT32 symSize; TPM_KEY_PARMS asymAlgorithm; TPM_KEY_PARMS symAlgorithm; SIZEIS(asymSize) BYTE *asymBlob; SIZEIS(symSize) BYTE *symBlob; } TPM_IDENTITY_REQ; typedef struct tdTPM_IDENTITY_PROOF /* 1.1b */ { TPM_STRUCT_VER ver; UINT32 labelSize; UINT32 identityBindingSize; UINT32 endorsementSize; UINT32 platformSize; UINT32 conformanceSize; TPM_PUBKEY identityKey; SIZEIS(labelSize) BYTE *labelArea; SIZEIS(identityBindingSize) BYTE *identityBinding; SIZEIS(endorsementSize) BYTE *endorsementCredential; SIZEIS(platformSize) BYTE *platformCredential; SIZEIS(conformanceSize) BYTE *conformanceCredential; } TPM_IDENTITY_PROOF; typedef struct tdTPM_ASYM_CA_CONTENTS /* 1.1b */ { TPM_SYMMETRIC_KEY sessionKey; TPM_DIGEST idDigest; } TPM_ASYM_CA_CONTENTS; typedef struct tdTPM_SYM_CA_ATTESTATION { UINT32 credSize; TPM_KEY_PARMS algorithm; SIZEIS(credSize) BYTE *credential; } TPM_SYM_CA_ATTESTATION; //------------------------------------------------------------------- // Part 2, section 15: Tick Structures // Placed here out of order because definitions are used in section 13. typedef struct tdTPM_CURRENT_TICKS { TPM_STRUCTURE_TAG tag; UINT64 currentTicks; UINT16 tickRate; TPM_NONCE tickNonce; } TPM_CURRENT_TICKS; //------------------------------------------------------------------- // Part 2, section 13: Transport structures typedef UINT32 TPM_TRANSPORT_ATTRIBUTES; #define TPM_TRANSPORT_ENCRYPT ((UINT32)0x00000001) #define TPM_TRANSPORT_LOG ((UINT32)0x00000002) #define TPM_TRANSPORT_EXCLUSIVE ((UINT32)0x00000004) typedef struct tdTPM_TRANSPORT_PUBLIC { TPM_STRUCTURE_TAG tag; TPM_TRANSPORT_ATTRIBUTES transAttributes; TPM_ALGORITHM_ID algId; TPM_ENC_SCHEME encScheme; } TPM_TRANSPORT_PUBLIC; typedef struct tdTPM_TRANSPORT_INTERNAL { TPM_STRUCTURE_TAG tag; TPM_AUTHDATA authData; TPM_TRANSPORT_PUBLIC transPublic; TPM_TRANSHANDLE transHandle; TPM_NONCE transNonceEven; TPM_DIGEST transDigest; } TPM_TRANSPORT_INTERNAL; typedef struct tdTPM_TRANSPORT_LOG_IN { TPM_STRUCTURE_TAG tag; TPM_DIGEST parameters; TPM_DIGEST pubKeyHash; } TPM_TRANSPORT_LOG_IN; typedef struct tdTPM_TRANSPORT_LOG_OUT { TPM_STRUCTURE_TAG tag; TPM_CURRENT_TICKS currentTicks; TPM_DIGEST parameters; TPM_MODIFIER_INDICATOR locality; } TPM_TRANSPORT_LOG_OUT; typedef struct tdTPM_TRANSPORT_AUTH { TPM_STRUCTURE_TAG tag; TPM_AUTHDATA authData; } TPM_TRANSPORT_AUTH; //------------------------------------------------------------------- // Part 2, section 14: Audit Structures typedef struct tdTPM_AUDIT_EVENT_IN { TPM_STRUCTURE_TAG tag; TPM_DIGEST inputParms; TPM_COUNTER_VALUE auditCount; } TPM_AUDIT_EVENT_IN; typedef struct tdTPM_AUDIT_EVENT_OUT { TPM_STRUCTURE_TAG tag; TPM_COMMAND_CODE ordinal; TPM_DIGEST outputParms; TPM_COUNTER_VALUE auditCount; TPM_RESULT returnCode; } TPM_AUDIT_EVENT_OUT; //------------------------------------------------------------------- // Part 2, section 16: Return codes #include //------------------------------------------------------------------- // Part 2, section 17: Ordinals #include //------------------------------------------------------------------- // Part 2, section 18: Context structures typedef struct tdTPM_CONTEXT_BLOB { TPM_STRUCTURE_TAG tag; TPM_RESOURCE_TYPE resourceType; TPM_HANDLE handle; BYTE label[16]; UINT32 contextCount; TPM_DIGEST integrityDigest; UINT32 additionalSize; SIZEIS(additionalSize) BYTE *additionalData; UINT32 sensitiveSize; SIZEIS(sensitiveSize) BYTE *sensitiveData; } TPM_CONTEXT_BLOB; typedef struct tdTPM_CONTEXT_SENSITIVE { TPM_STRUCTURE_TAG tag; TPM_NONCE contextNonce; UINT32 internalSize; SIZEIS(internalSize) BYTE *internalData; } TPM_CONTEXT_SENSITIVE; //------------------------------------------------------------------- // Part 2, section 19: NV Structures typedef UINT32 TPM_NV_INDEX; #define TPM_NV_INDEX_LOCK ((UINT32)0xffffffff) #define TPM_NV_INDEX0 ((UINT32)0x00000000) #define TPM_NV_INDEX_DIR ((UINT32)0x10000001) #define TPM_NV_INDEX_EKCert ((UINT32)0x0000f000) #define TPM_NV_INDEX_TPM_CC ((UINT32)0x0000f001) #define TPM_NV_INDEX_PlatformCert ((UINT32)0x0000f002) #define TPM_NV_INDEX_Platform_CC ((UINT32)0x0000f003) // The following define ranges of reserved indices. #define TPM_NV_INDEX_TSS_BASE ((UINT32)0x00011100) #define TPM_NV_INDEX_PC_BASE ((UINT32)0x00011200) #define TPM_NV_INDEX_SERVER_BASE ((UINT32)0x00011300) #define TPM_NV_INDEX_MOBILE_BASE ((UINT32)0x00011400) #define TPM_NV_INDEX_PERIPHERAL_BASE ((UINT32)0x00011500) #define TPM_NV_INDEX_GROUP_RESV_BASE ((UINT32)0x00010000) typedef UINT32 TPM_NV_PER_ATTRIBUTES; #define TPM_NV_PER_READ_STCLEAR (((UINT32)1)<<31) #define TPM_NV_PER_AUTHREAD (((UINT32)1)<<18) #define TPM_NV_PER_OWNERREAD (((UINT32)1)<<17) #define TPM_NV_PER_PPREAD (((UINT32)1)<<16) #define TPM_NV_PER_GLOBALLOCK (((UINT32)1)<<15) #define TPM_NV_PER_WRITE_STCLEAR (((UINT32)1)<<14) #define TPM_NV_PER_WRITEDEFINE (((UINT32)1)<<13) #define TPM_NV_PER_WRITEALL (((UINT32)1)<<12) #define TPM_NV_PER_AUTHWRITE (((UINT32)1)<<2) #define TPM_NV_PER_OWNERWRITE (((UINT32)1)<<1) #define TPM_NV_PER_PPWRITE (((UINT32)1)<<0) typedef struct tdTPM_NV_ATTRIBUTES { TPM_STRUCTURE_TAG tag; TPM_NV_PER_ATTRIBUTES attributes; } TPM_NV_ATTRIBUTES; typedef struct tdTPM_NV_DATA_PUBLIC { TPM_STRUCTURE_TAG tag; TPM_NV_INDEX nvIndex; TPM_PCR_INFO_SHORT pcrInfoRead; TPM_PCR_INFO_SHORT pcrInfoWrite; TPM_NV_ATTRIBUTES permission; TPM_BOOL bReadSTClear; TPM_BOOL bWriteSTClear; TPM_BOOL bWriteDefine; UINT32 dataSize; } TPM_NV_DATA_PUBLIC; #if 0 // Internal to TPM: typedef struct tdTPM_NV_DATA_SENSITIVE { TPM_STRUCTURE_TAG tag; TPM_NV_DATA_PUBLIC pubInfo; TPM_AUTHDATA authValue; SIZEIS(pubInfo.dataSize) BYTE *data; } TPM_NV_DATA_SENSITIVE; #endif //------------------------------------------------------------------- // Part 2, section 20: Delegation //------------------------------------------------------------------- // Part 2, section 20.3: Owner Permissions Settings for per1 bits #define TPM_DELEGATE_SetOrdinalAuditStatus (((UINT32)1)<<30) #define TPM_DELEGATE_DirWriteAuth (((UINT32)1)<<29) #define TPM_DELEGATE_CMK_ApproveMA (((UINT32)1)<<28) #define TPM_DELEGATE_NV_WriteValue (((UINT32)1)<<27) #define TPM_DELEGATE_CMK_CreateTicket (((UINT32)1)<<26) #define TPM_DELEGATE_NV_ReadValue (((UINT32)1)<<25) #define TPM_DELEGATE_Delegate_LoadOwnerDelegation (((UINT32)1)<<24) #define TPM_DELEGATE_DAA_Join (((UINT32)1)<<23) #define TPM_DELEGATE_AuthorizeMigrationKey (((UINT32)1)<<22) #define TPM_DELEGATE_CreateMaintenanceArchive (((UINT32)1)<<21) #define TPM_DELEGATE_LoadMaintenanceArchive (((UINT32)1)<<20) #define TPM_DELEGATE_KillMaintenanceFeature (((UINT32)1)<<19) #define TPM_DELEGATE_OwnerReadInternalPub (((UINT32)1)<<18) #define TPM_DELEGATE_ResetLockValue (((UINT32)1)<<17) #define TPM_DELEGATE_OwnerClear (((UINT32)1)<<16) #define TPM_DELEGATE_DisableOwnerClear (((UINT32)1)<<15) #define TPM_DELEGATE_NV_DefineSpace (((UINT32)1)<<14) #define TPM_DELEGATE_OwnerSetDisable (((UINT32)1)<<13) #define TPM_DELEGATE_SetCapability (((UINT32)1)<<12) #define TPM_DELEGATE_MakeIdentity (((UINT32)1)<<11) #define TPM_DELEGATE_ActivateIdentity (((UINT32)1)<<10) #define TPM_DELEGATE_OwnerReadPubek (((UINT32)1)<<9) #define TPM_DELEGATE_DisablePubekRead (((UINT32)1)<<8) #define TPM_DELEGATE_SetRedirection (((UINT32)1)<<7) #define TPM_DELEGATE_FieldUpgrade (((UINT32)1)<<6) #define TPM_DELEGATE_Delegate_UpdateVerification (((UINT32)1)<<5) #define TPM_DELEGATE_CreateCounter (((UINT32)1)<<4) #define TPM_DELEGATE_ReleaseCounterOwner (((UINT32)1)<<3) #define TPM_DELEGATE_DelegateManage (((UINT32)1)<<2) #define TPM_DELEGATE_Delegate_CreateOwnerDelegation (((UINT32)1)<<1) #define TPM_DELEGATE_DAA_Sign (((UINT32)1)<<0) //------------------------------------------------------------------- // Part 2, section 20.3: Key Permissions Settings for per1 bits #define TPM_KEY_DELEGATE_CMK_ConvertMigration (((UINT32)1)<<28) #define TPM_KEY_DELEGATE_TickStampBlob (((UINT32)1)<<27) #define TPM_KEY_DELEGATE_ChangeAuthAsymStart (((UINT32)1)<<26) #define TPM_KEY_DELEGATE_ChangeAuthAsymFinish (((UINT32)1)<<25) #define TPM_KEY_DELEGATE_CMK_CreateKey (((UINT32)1)<<24) #define TPM_KEY_DELEGATE_MigrateKey (((UINT32)1)<<23) #define TPM_KEY_DELEGATE_LoadKey2 (((UINT32)1)<<22) #define TPM_KEY_DELEGATE_EstablishTransport (((UINT32)1)<<21) #define TPM_KEY_DELEGATE_ReleaseTransportSigned (((UINT32)1)<<20) #define TPM_KEY_DELEGATE_Quote2 (((UINT32)1)<<19) #define TPM_KEY_DELEGATE_Sealx (((UINT32)1)<<18) #define TPM_KEY_DELEGATE_MakeIdentity (((UINT32)1)<<17) #define TPM_KEY_DELEGATE_ActivateIdentity (((UINT32)1)<<16) #define TPM_KEY_DELEGATE_GetAuditDigestSigned (((UINT32)1)<<15) #define TPM_KEY_DELEGATE_Sign (((UINT32)1)<<14) #define TPM_KEY_DELEGATE_CertifyKey2 (((UINT32)1)<<13) #define TPM_KEY_DELEGATE_CertifyKey (((UINT32)1)<<12) #define TPM_KEY_DELEGATE_CreateWrapKey (((UINT32)1)<<11) #define TPM_KEY_DELEGATE_CMK_CreateBlob (((UINT32)1)<<10) #define TPM_KEY_DELEGATE_CreateMigrationBlob (((UINT32)1)<<9) #define TPM_KEY_DELEGATE_ConvertMigrationBlob (((UINT32)1)<<8) #define TPM_KEY_DELEGATE_CreateKeyDelegation (((UINT32)1)<<7) #define TPM_KEY_DELEGATE_ChangeAuth (((UINT32)1)<<6) #define TPM_KEY_DELEGATE_GetPubKey (((UINT32)1)<<5) #define TPM_KEY_DELEGATE_UnBind (((UINT32)1)<<4) #define TPM_KEY_DELEGATE_Quote (((UINT32)1)<<3) #define TPM_KEY_DELEGATE_Unseal (((UINT32)1)<<2) #define TPM_KEY_DELEGATE_Seal (((UINT32)1)<<1) #define TPM_KEY_DELEGATE_LoadKey (((UINT32)1)<<0) typedef UINT32 TPM_FAMILY_VERIFICATION; typedef UINT32 TPM_FAMILY_ID; typedef UINT32 TPM_DELEGATE_INDEX; typedef UINT32 TPM_FAMILY_OPERATION; #define TPM_FAMILY_CREATE ((UINT32)0x00000001) #define TPM_FAMILY_ENABLE ((UINT32)0x00000002) #define TPM_FAMILY_ADMIN ((UINT32)0x00000003) #define TPM_FAMILY_INVALIDATE ((UINT32)0x00000004) typedef UINT32 TPM_FAMILY_FLAGS; #define TPM_FAMFLAG_DELEGATE_ADMIN_LOCK (((UINT32)1)<<1) #define TPM_FAMFLAG_ENABLE (((UINT32)1)<<0) typedef struct tdTPM_FAMILY_LABEL { BYTE label; } TPM_FAMILY_LABEL; typedef struct tdTPM_FAMILY_TABLE_ENTRY { TPM_STRUCTURE_TAG tag; TPM_FAMILY_LABEL label; TPM_FAMILY_ID familyID; TPM_FAMILY_VERIFICATION verificationCount; TPM_FAMILY_FLAGS flags; } TPM_FAMILY_TABLE_ENTRY; #define TPM_FAMILY_TABLE_ENTRY_MIN 8 //typedef struct tdTPM_FAMILY_TABLE //{ // TPM_FAMILY_TABLE_ENTRY FamTableRow[TPM_NUM_FAMILY_TABLE_ENTRY_MIN]; //} TPM_FAMILY_TABLE; typedef struct tdTPM_DELEGATE_LABEL { BYTE label; } TPM_DELEGATE_LABEL; typedef UINT32 TPM_DELEGATE_TYPE; #define TPM_DEL_OWNER_BITS ((UINT32)0x00000001) #define TPM_DEL_KEY_BITS ((UINT32)0x00000002) typedef struct tdTPM_DELEGATIONS { TPM_STRUCTURE_TAG tag; TPM_DELEGATE_TYPE delegateType; UINT32 per1; UINT32 per2; } TPM_DELEGATIONS; typedef struct tdTPM_DELEGATE_PUBLIC { TPM_STRUCTURE_TAG tag; TPM_DELEGATE_LABEL label; TPM_PCR_INFO_SHORT pcrInfo; TPM_DELEGATIONS permissions; TPM_FAMILY_ID familyID; TPM_FAMILY_VERIFICATION verificationCount; } TPM_DELEGATE_PUBLIC; typedef struct tdTPM_DELEGATE_TABLE_ROW { TPM_STRUCTURE_TAG tag; TPM_DELEGATE_PUBLIC pub; TPM_SECRET authValue; } TPM_DELEGATE_TABLE_ROW; #define TPM_NUM_DELEGATE_TABLE_ENTRY_MIN 2 //typedef struct tdTPM_DELEGATE_TABLE //{ // TPM_DELEGATE_TABLE_ROW delRow[TPM_NUM_DELEGATE_TABLE_ENTRY_MIN]; //} TPM_DELEGATE_TABLE; typedef struct tdTPM_DELEGATE_SENSITIVE { TPM_STRUCTURE_TAG tag; TPM_SECRET authValue; } TPM_DELEGATE_SENSITIVE; typedef struct tdTPM_DELEGATE_OWNER_BLOB { TPM_STRUCTURE_TAG tag; TPM_DELEGATE_PUBLIC pub; TPM_DIGEST integrityDigest; UINT32 additionalSize; SIZEIS(additionalSize) BYTE *additionalArea; UINT32 sensitiveSize; SIZEIS(sensitiveSize) BYTE *sensitiveArea; } TPM_DELEGATE_OWNER_BLOB; typedef struct tdTPM_DELEGATE_KEY_BLOB { TPM_STRUCTURE_TAG tag; TPM_DELEGATE_PUBLIC pub; TPM_DIGEST integrityDigest; TPM_DIGEST pubKeyDigest; UINT32 additionalSize; SIZEIS(additionalSize) BYTE *additionalArea; UINT32 sensitiveSize; SIZEIS(sensitiveSize) BYTE *sensitiveArea; } TPM_DELEGATE_KEY_BLOB; //------------------------------------------------------------------- // Part 2, section 21.1: TPM_CAPABILITY_AREA typedef UINT32 TPM_CAPABILITY_AREA; /* 1.1b */ #define TPM_CAP_ORD ((UINT32)0x00000001) /* 1.1b */ #define TPM_CAP_ALG ((UINT32)0x00000002) /* 1.1b */ #define TPM_CAP_PID ((UINT32)0x00000003) /* 1.1b */ #define TPM_CAP_FLAG ((UINT32)0x00000004) /* 1.1b */ #define TPM_CAP_PROPERTY ((UINT32)0x00000005) /* 1.1b */ #define TPM_CAP_VERSION ((UINT32)0x00000006) /* 1.1b */ #define TPM_CAP_KEY_HANDLE ((UINT32)0x00000007) /* 1.1b */ #define TPM_CAP_CHECK_LOADED ((UINT32)0x00000008) /* 1.1b */ #define TPM_CAP_SYM_MODE ((UINT32)0x00000009) #define TPM_CAP_KEY_STATUS ((UINT32)0x0000000C) #define TPM_CAP_NV_LIST ((UINT32)0x0000000D) #define TPM_CAP_MFR ((UINT32)0x00000010) #define TPM_CAP_NV_INDEX ((UINT32)0x00000011) #define TPM_CAP_TRANS_ALG ((UINT32)0x00000012) #define TPM_CAP_HANDLE ((UINT32)0x00000014) #define TPM_CAP_TRANS_ES ((UINT32)0x00000015) #define TPM_CAP_AUTH_ENCRYPT ((UINT32)0x00000017) #define TPM_CAP_SELECT_SIZE ((UINT32)0x00000018) #define TPM_CAP_DA_LOGIC ((UINT32)0x00000019) #define TPM_CAP_VERSION_VAL ((UINT32)0x0000001A) // Part 2, section 21.1: Subcap values for CAP_FLAG #define TPM_CAP_FLAG_PERMANENT ((UINT32)0x00000108) #define TPM_CAP_FLAG_VOLATILE ((UINT32)0x00000109) //------------------------------------------------------------------- // Part 2, section 21.2: Subcap values for CAP_PROPERTY #define TPM_CAP_PROP_PCR ((UINT32)0x00000101) /* 1.1b */ #define TPM_CAP_PROP_DIR ((UINT32)0x00000102) /* 1.1b */ #define TPM_CAP_PROP_MANUFACTURER ((UINT32)0x00000103) /* 1.1b */ #define TPM_CAP_PROP_KEYS ((UINT32)0x00000104) #define TPM_CAP_PROP_SLOTS (TPM_CAP_PROP_KEYS) #define TPM_CAP_PROP_MIN_COUNTER ((UINT32)0x00000107) #define TPM_CAP_PROP_AUTHSESS ((UINT32)0x0000010A) #define TPM_CAP_PROP_TRANSSESS ((UINT32)0x0000010B) #define TPM_CAP_PROP_COUNTERS ((UINT32)0x0000010C) #define TPM_CAP_PROP_MAX_AUTHSESS ((UINT32)0x0000010D) #define TPM_CAP_PROP_MAX_TRANSSESS ((UINT32)0x0000010E) #define TPM_CAP_PROP_MAX_COUNTERS ((UINT32)0x0000010F) #define TPM_CAP_PROP_MAX_KEYS ((UINT32)0x00000110) #define TPM_CAP_PROP_OWNER ((UINT32)0x00000111) #define TPM_CAP_PROP_CONTEXT ((UINT32)0x00000112) #define TPM_CAP_PROP_MAX_CONTEXT ((UINT32)0x00000113) #define TPM_CAP_PROP_FAMILYROWS ((UINT32)0x00000114) #define TPM_CAP_PROP_TIS_TIMEOUT ((UINT32)0x00000115) #define TPM_CAP_PROP_STARTUP_EFFECT ((UINT32)0x00000116) #define TPM_CAP_PROP_DELEGATE_ROW ((UINT32)0x00000117) #define TPM_CAP_PROP_MAX_DAASESS ((UINT32)0x00000119) #define TPM_CAP_PROP_DAA_MAX TPM_CAP_PROP_MAX_DAASESS #define TPM_CAP_PROP_DAASESS ((UINT32)0x0000011A) #define TPM_CAP_PROP_SESSION_DAA TPM_CAP_PROP_DAASESS #define TPM_CAP_PROP_CONTEXT_DIST ((UINT32)0x0000011B) #define TPM_CAP_PROP_DAA_INTERRUPT ((UINT32)0x0000011C) #define TPM_CAP_PROP_SESSIONS ((UINT32)0x0000011D) #define TPM_CAP_PROP_MAX_SESSIONS ((UINT32)0x0000011E) #define TPM_CAP_PROP_CMK_RESTRICTION ((UINT32)0x0000011F) #define TPM_CAP_PROP_DURATION ((UINT32)0x00000120) #define TPM_CAP_PROP_ACTIVE_COUNTER ((UINT32)0x00000122) #define TPM_CAP_PROP_NV_AVAILABLE ((UINT32)0x00000123) #define TPM_CAP_PROP_INPUT_BUFFER ((UINT32)0x00000124) // Part 2, section 21.4: SetCapability Values #define TPM_SET_PERM_FLAGS ((UINT32)0x00000001) #define TPM_SET_PERM_DATA ((UINT32)0x00000002) #define TPM_SET_STCLEAR_FLAGS ((UINT32)0x00000003) #define TPM_SET_STCLEAR_DATA ((UINT32)0x00000004) #define TPM_SET_STANY_FLAGS ((UINT32)0x00000005) #define TPM_SET_STANY_DATA ((UINT32)0x00000006) #define TPM_SET_VENDOR ((UINT32)0x00000007) // Part 2, section 21.6: TPM_CAP_VERSION_INFO typedef struct tdTPM_CAP_VERSION_INFO { TPM_STRUCTURE_TAG tag; TPM_VERSION version; UINT16 specLevel; BYTE errataRev; BYTE tpmVendorID[4]; UINT16 vendorSpecificSize; SIZEIS(vendorSpecificSize) BYTE *vendorSpecific; } TPM_CAP_VERSION_INFO; // Part 2, section 21.9: TPM_DA_STATE // out of order to make it available for structure definitions typedef BYTE TPM_DA_STATE; #define TPM_DA_STATE_INACTIVE (0x00) #define TPM_DA_STATE_ACTIVE (0x01) // Part 2, section 21.10: TPM_DA_ACTION_TYPE typedef struct tdTPM_DA_ACTION_TYPE { TPM_STRUCTURE_TAG tag; UINT32 actions; } TPM_DA_ACTION_TYPE; #define TPM_DA_ACTION_TIMEOUT ((UINT32)0x00000001) #define TPM_DA_ACTION_DISABLE ((UINT32)0x00000002) #define TPM_DA_ACTION_DEACTIVATE ((UINT32)0x00000004) #define TPM_DA_ACTION_FAILURE_MODE ((UINT32)0x00000008) // Part 2, section 21.7: TPM_DA_INFO typedef struct tdTPM_DA_INFO { TPM_STRUCTURE_TAG tag; TPM_DA_STATE state; UINT16 currentCount; UINT16 threshholdCount; TPM_DA_ACTION_TYPE actionAtThreshold; UINT32 actionDependValue; UINT32 vendorDataSize; SIZEIS(vendorDataSize) BYTE *vendorData; } TPM_DA_INFO; // Part 2, section 21.8: TPM_DA_INFO_LIMITED typedef struct tdTPM_DA_INFO_LIMITED { TPM_STRUCTURE_TAG tag; TPM_DA_STATE state; TPM_DA_ACTION_TYPE actionAtThreshold; UINT32 vendorDataSize; SIZEIS(vendorDataSize) BYTE *vendorData; } TPM_DA_INFO_LIMITED; //------------------------------------------------------------------- // Part 2, section 22: DAA Structures #define TPM_DAA_SIZE_r0 (43) #define TPM_DAA_SIZE_r1 (43) #define TPM_DAA_SIZE_r2 (128) #define TPM_DAA_SIZE_r3 (168) #define TPM_DAA_SIZE_r4 (219) #define TPM_DAA_SIZE_NT (20) #define TPM_DAA_SIZE_v0 (128) #define TPM_DAA_SIZE_v1 (192) #define TPM_DAA_SIZE_NE (256) #define TPM_DAA_SIZE_w (256) #define TPM_DAA_SIZE_issuerModulus (256) #define TPM_DAA_power0 (104) #define TPM_DAA_power1 (1024) typedef struct tdTPM_DAA_ISSUER { TPM_STRUCTURE_TAG tag; TPM_DIGEST DAA_digest_R0; TPM_DIGEST DAA_digest_R1; TPM_DIGEST DAA_digest_S0; TPM_DIGEST DAA_digest_S1; TPM_DIGEST DAA_digest_n; TPM_DIGEST DAA_digest_gamma; BYTE DAA_generic_q[26]; } TPM_DAA_ISSUER; typedef struct tdTPM_DAA_TPM { TPM_STRUCTURE_TAG tag; TPM_DIGEST DAA_digestIssuer; TPM_DIGEST DAA_digest_v0; TPM_DIGEST DAA_digest_v1; TPM_DIGEST DAA_rekey; UINT32 DAA_count; } TPM_DAA_TPM; typedef struct tdTPM_DAA_CONTEXT { TPM_STRUCTURE_TAG tag; TPM_DIGEST DAA_digestContext; TPM_DIGEST DAA_digest; TPM_DAA_CONTEXT_SEED DAA_contextSeed; BYTE DAA_scratch[256]; BYTE DAA_stage; } TPM_DAA_CONTEXT; typedef struct tdTPM_DAA_JOINDATA { BYTE DAA_join_u0[128]; BYTE DAA_join_u1[138]; TPM_DIGEST DAA_digest_n0; } TPM_DAA_JOINDATA; typedef struct tdTPM_DAA_BLOB { TPM_STRUCTURE_TAG tag; TPM_RESOURCE_TYPE resourceType; BYTE label[16]; TPM_DIGEST blobIntegrity; UINT32 additionalSize; SIZEIS(additionalSize) BYTE *additionalData; UINT32 sensitiveSize; SIZEIS(sensitiveSize) BYTE *sensitiveData; } TPM_DAA_BLOB; typedef struct tdTPM_DAA_SENSITIVE { TPM_STRUCTURE_TAG tag; UINT32 internalSize; SIZEIS(internalSize) BYTE *internalData; } TPM_DAA_SENSITIVE; //------------------------------------------------------------------- // Part 2, section 23: Redirection // This section of the TPM spec defines exactly one value but does not // give it a name. The definition of TPM_SetRedirection in Part3 // refers to exactly one name but does not give its value. We join // them here. #define TPM_REDIR_GPIO (0x00000001) //------------------------------------------------------------------- // Part 2, section 24.6: TPM_SYM_MODE // Deprecated by TPM 1.2 spec typedef UINT32 TPM_SYM_MODE; #define TPM_SYM_MODE_ECB (0x00000001) #define TPM_SYM_MODE_CBC (0x00000002) #define TPM_SYM_MODE_CFB (0x00000003) #endif // __TPM_H__ tpm-quote-tools-1.0.4/include/tss/tcs_structs.h0000644000175000017510000000174513037720561016527 00000000000000/*++ TSS Core Service structures */ #ifndef __TCS_STRUCT_H__ #define __TCS_STRUCT_H__ #include #include #include typedef struct tdTCS_AUTH { TCS_AUTHHANDLE AuthHandle; TPM_NONCE NonceOdd; // system TPM_NONCE NonceEven; // TPM TSS_BOOL fContinueAuthSession; TPM_AUTHDATA HMAC; } TCS_AUTH; // This is kept for legacy compatibility typedef TCS_AUTH TPM_AUTH; typedef struct tdTCS_LOADKEY_INFO { TSS_UUID keyUUID; TSS_UUID parentKeyUUID; TPM_DIGEST paramDigest; // SHA1 digest of the TPM_LoadKey // Command input parameters // As defined in TPM Main Specification TPM_AUTH authData; // Data regarding a valid auth // Session including the // HMAC digest } TCS_LOADKEY_INFO; #endif // __TCS_STRUCT_H__ tpm-quote-tools-1.0.4/include/tss/tcs_typedef.h0000644000175000017510000000141013037720561016445 00000000000000/*++ Global typedefs for TSS Core Service */ #ifndef __TCS_TYPEDEF_H__ #define __TCS_TYPEDEF_H__ #include #include typedef UINT32 TCS_AUTHHANDLE; typedef UINT32 TCS_CONTEXT_HANDLE; typedef UINT32 TCS_KEY_HANDLE; typedef UINT32 TCS_HANDLE; // Substitution definitions for TCS-IDL typedef TPM_ENCAUTH TCG_ENCAUTH; typedef TPM_NONCE TCG_NONCE; typedef TPM_ENTITY_TYPE TCG_ENTITY_TYPE; typedef TPM_PCRINDEX TCG_PCRINDEX; typedef TPM_DIGEST TCG_DIGEST; typedef TPM_PCRVALUE TCG_PCRVALUE; typedef TPM_DIRVALUE TCG_DIRVALUE; typedef TPM_DIRINDEX TCG_DIRINDEX; #endif // __TCS_TYPEDEF_H__ tpm-quote-tools-1.0.4/include/tss/tpm_ordinal.h0000644000175000017510000002353013037720561016453 00000000000000/* * TPM Ordinal definitions extracted from the TPM 1.2 specification, rev 85. */ #ifndef __TPM_ORDINAL_H__ #define __TPM_ORDINAL_H__ #define TPM_PROTECTED_COMMAND ((UINT32)(0x00000000)) #define TPM_UNPROTECTED_COMMAND ((UINT32)(0x80000000)) #define TPM_CONNECTION_COMMAND ((UINT32)(0x40000000)) #define TPM_VENDOR_COMMAND ((UINT32)(0x20000000)) #define TPM_MAIN ((UINT16)(0x0000)) #define TPM_PC ((UINT16)(0x0001)) #define TPM_PDA ((UINT16)(0x0002)) #define TPM_CELL_PHONE ((UINT16)(0x0003)) #define TPM_SERVER ((UINT16)(0x0004)) #define TPM_PROTECTED_ORDINAL (TPM_MAIN | TPM_PROTECTED_COMMAND) #define TPM_UNPROTECTED_ORDINAL (TPM_MAIN | TPM_UNPROTECTED_COMMAND) #define TPM_CONNECTION_ORDINAL (TPM_MAIN | TPM_CONNECTION_COMMAND) #define TPM_ORD_OIAP ((UINT32)0x0000000A) #define TPM_ORD_OSAP ((UINT32)0x0000000B) #define TPM_ORD_ChangeAuth ((UINT32)0x0000000C) #define TPM_ORD_TakeOwnership ((UINT32)0x0000000D) #define TPM_ORD_ChangeAuthAsymStart ((UINT32)0x0000000E) #define TPM_ORD_ChangeAuthAsymFinish ((UINT32)0x0000000F) #define TPM_ORD_ChangeAuthOwner ((UINT32)0x00000010) #define TPM_ORD_DSAP ((UINT32)0x00000011) #define TPM_ORD_CMK_CreateTicket ((UINT32)0x00000012) #define TPM_ORD_CMK_CreateKey ((UINT32)0x00000013) #define TPM_ORD_Extend ((UINT32)0x00000014) #define TPM_ORD_PcrRead ((UINT32)0x00000015) #define TPM_ORD_Quote ((UINT32)0x00000016) #define TPM_ORD_Seal ((UINT32)0x00000017) #define TPM_ORD_Unseal ((UINT32)0x00000018) #define TPM_ORD_DirWriteAuth ((UINT32)0x00000019) #define TPM_ORD_DirRead ((UINT32)0x0000001A) #define TPM_ORD_CMK_CreateBlob ((UINT32)0x0000001B) #define TPM_ORD_CMK_SetRestrictions ((UINT32)0x0000001C) #define TPM_ORD_CMK_ApproveMA ((UINT32)0x0000001D) #define TPM_ORD_UnBind ((UINT32)0x0000001E) #define TPM_ORD_CreateWrapKey ((UINT32)0x0000001F) #define TPM_ORD_LoadKey ((UINT32)0x00000020) #define TPM_ORD_GetPubKey ((UINT32)0x00000021) #define TPM_ORD_EvictKey ((UINT32)0x00000022) #define TPM_ORD_KeyControlOwner ((UINT32)0x00000023) #define TPM_ORD_CMK_ConvertMigration ((UINT32)0x00000024) #define TPM_ORD_MigrateKey ((UINT32)0x00000025) #define TPM_ORD_CreateMigrationBlob ((UINT32)0x00000028) #define TPM_ORD_DAA_Join ((UINT32)0x00000029) #define TPM_ORD_ConvertMigrationBlob ((UINT32)0x0000002A) #define TPM_ORD_AuthorizeMigrationKey ((UINT32)0x0000002B) #define TPM_ORD_CreateMaintenanceArchive ((UINT32)0x0000002C) #define TPM_ORD_LoadMaintenanceArchive ((UINT32)0x0000002D) #define TPM_ORD_KillMaintenanceFeature ((UINT32)0x0000002E) #define TPM_ORD_LoadManuMaintPub ((UINT32)0x0000002F) #define TPM_ORD_ReadManuMaintPub ((UINT32)0x00000030) #define TPM_ORD_DAA_Sign ((UINT32)0x00000031) #define TPM_ORD_CertifyKey ((UINT32)0x00000032) #define TPM_ORD_CertifyKey2 ((UINT32)0x00000033) #define TPM_ORD_Sign ((UINT32)0x0000003C) #define TPM_ORD_Sealx ((UINT32)0x0000003D) #define TPM_ORD_Quote2 ((UINT32)0x0000003E) #define TPM_ORD_SetCapability ((UINT32)0x0000003F) #define TPM_ORD_ResetLockValue ((UINT32)0x00000040) #define TPM_ORD_LoadKey2 ((UINT32)0x00000041) #define TPM_ORD_GetRandom ((UINT32)0x00000046) #define TPM_ORD_StirRandom ((UINT32)0x00000047) #define TPM_ORD_SelfTestFull ((UINT32)0x00000050) #define TPM_ORD_CertifySelfTest ((UINT32)0x00000052) #define TPM_ORD_ContinueSelfTest ((UINT32)0x00000053) #define TPM_ORD_GetTestResult ((UINT32)0x00000054) #define TPM_ORD_Reset ((UINT32)0x0000005A) #define TPM_ORD_OwnerClear ((UINT32)0x0000005B) #define TPM_ORD_DisableOwnerClear ((UINT32)0x0000005C) #define TPM_ORD_ForceClear ((UINT32)0x0000005D) #define TPM_ORD_DisableForceClear ((UINT32)0x0000005E) #define TPM_ORD_GetCapabilitySigned ((UINT32)0x00000064) #define TPM_ORD_GetCapability ((UINT32)0x00000065) #define TPM_ORD_GetCapabilityOwner ((UINT32)0x00000066) #define TPM_ORD_OwnerSetDisable ((UINT32)0x0000006E) #define TPM_ORD_PhysicalEnable ((UINT32)0x0000006F) #define TPM_ORD_PhysicalDisable ((UINT32)0x00000070) #define TPM_ORD_SetOwnerInstall ((UINT32)0x00000071) #define TPM_ORD_PhysicalSetDeactivated ((UINT32)0x00000072) #define TPM_ORD_SetTempDeactivated ((UINT32)0x00000073) #define TPM_ORD_SetOperatorAuth ((UINT32)0x00000074) #define TPM_ORD_SetOwnerPointer ((UINT32)0x00000075) #define TPM_ORD_CreateEndorsementKeyPair ((UINT32)0x00000078) #define TPM_ORD_MakeIdentity ((UINT32)0x00000079) #define TPM_ORD_ActivateIdentity ((UINT32)0x0000007A) #define TPM_ORD_ReadPubek ((UINT32)0x0000007C) #define TPM_ORD_OwnerReadPubek ((UINT32)0x0000007D) #define TPM_ORD_DisablePubekRead ((UINT32)0x0000007E) #define TPM_ORD_CreateRevocableEK ((UINT32)0x0000007F) #define TPM_ORD_RevokeTrust ((UINT32)0x00000080) #define TPM_ORD_OwnerReadInternalPub ((UINT32)0x00000081) #define TPM_ORD_GetAuditEvent ((UINT32)0x00000082) #define TPM_ORD_GetAuditEventSigned ((UINT32)0x00000083) #define TPM_ORD_GetAuditDigest ((UINT32)0x00000085) #define TPM_ORD_GetAuditDigestSigned ((UINT32)0x00000086) #define TPM_ORD_GetOrdinalAuditStatus ((UINT32)0x0000008C) #define TPM_ORD_SetOrdinalAuditStatus ((UINT32)0x0000008D) #define TPM_ORD_Terminate_Handle ((UINT32)0x00000096) #define TPM_ORD_Init ((UINT32)0x00000097) #define TPM_ORD_SaveState ((UINT32)0x00000098) #define TPM_ORD_Startup ((UINT32)0x00000099) #define TPM_ORD_SetRedirection ((UINT32)0x0000009A) #define TPM_ORD_SHA1Start ((UINT32)0x000000A0) #define TPM_ORD_SHA1Update ((UINT32)0x000000A1) #define TPM_ORD_SHA1Complete ((UINT32)0x000000A2) #define TPM_ORD_SHA1CompleteExtend ((UINT32)0x000000A3) #define TPM_ORD_FieldUpgrade ((UINT32)0x000000AA) #define TPM_ORD_SaveKeyContext ((UINT32)0x000000B4) #define TPM_ORD_LoadKeyContext ((UINT32)0x000000B5) #define TPM_ORD_SaveAuthContext ((UINT32)0x000000B6) #define TPM_ORD_LoadAuthContext ((UINT32)0x000000B7) #define TPM_ORD_SaveContext ((UINT32)0x000000B8) #define TPM_ORD_LoadContext ((UINT32)0x000000B9) #define TPM_ORD_FlushSpecific ((UINT32)0x000000BA) #define TPM_ORD_PCR_Reset ((UINT32)0x000000C8) #define TPM_ORD_NV_DefineSpace ((UINT32)0x000000CC) #define TPM_ORD_NV_WriteValue ((UINT32)0x000000CD) #define TPM_ORD_NV_WriteValueAuth ((UINT32)0x000000CE) #define TPM_ORD_NV_ReadValue ((UINT32)0x000000CF) #define TPM_ORD_NV_ReadValueAuth ((UINT32)0x000000D0) #define TPM_ORD_Delegate_UpdateVerification ((UINT32)0x000000D1) #define TPM_ORD_Delegate_Manage ((UINT32)0x000000D2) #define TPM_ORD_Delegate_CreateKeyDelegation ((UINT32)0x000000D4) #define TPM_ORD_Delegate_CreateOwnerDelegation ((UINT32)0x000000D5) #define TPM_ORD_Delegate_VerifyDelegation ((UINT32)0x000000D6) #define TPM_ORD_Delegate_LoadOwnerDelegation ((UINT32)0x000000D8) #define TPM_ORD_Delegate_ReadTable ((UINT32)0x000000DB) #define TPM_ORD_CreateCounter ((UINT32)0x000000DC) #define TPM_ORD_IncrementCounter ((UINT32)0x000000DD) #define TPM_ORD_ReadCounter ((UINT32)0x000000DE) #define TPM_ORD_ReleaseCounter ((UINT32)0x000000DF) #define TPM_ORD_ReleaseCounterOwner ((UINT32)0x000000E0) #define TPM_ORD_EstablishTransport ((UINT32)0x000000E6) #define TPM_ORD_ExecuteTransport ((UINT32)0x000000E7) #define TPM_ORD_ReleaseTransportSigned ((UINT32)0x000000E8) #define TPM_ORD_GetTicks ((UINT32)0x000000F1) #define TPM_ORD_TickStampBlob ((UINT32)0x000000F2) #define TSC_ORD_PhysicalPresence ((UINT32)0x4000000A) #define TSC_ORD_ResetEstablishmentBit ((UINT32)0x4000000B) #endif // __TPM_ORDINAL_H__ tpm-quote-tools-1.0.4/include/tss/tcs_defines.h0000644000175000017510000000166413037720561016435 00000000000000/*++ TSS Core Service structures */ #ifndef __TCS_DEFINES_H__ #define __TCS_DEFINES_H__ #define TSS_TCSATTRIB_TRANSPORT_DEFAULT ((UINT32)(0x00000000)) #define TSS_TCSATTRIB_TRANSPORT_EXCLUSIVE ((UINT32)(0x00000001)) // Values for the ulCredentialType parameter to Tcsi_GetCredential #define TSS_TCS_CREDENTIAL_EKCERT ((UINT32)0x00000001) #define TSS_TCS_CREDENTIAL_TPM_CC ((UINT32)0x00000002) #define TSS_TCS_CREDENTIAL_PLATFORMCERT ((UINT32)0x00000003) // Values for the ulCredentialAccessMode parameter to Tcsi_GetCredential // TSS_TCS_CERT_ACCESS_AUTO triggers the default behavior. // Values with TSS_TCS_CERT_VENDOR_SPECIFIC_BIT set trigger // vendor specific behavior. #define TSS_TCS_CERT_ACCESS_AUTO ((UINT32)0x00000001) #define TSS_TCS_CERT_VENDOR_SPECIFIC_BIT ((UINT32)0x80000000) #endif // __TCS_DEFINES_H__ tpm-quote-tools-1.0.4/include/tss/tpm_error.h0000644000175000017510000004716313037720561016164 00000000000000/* * The TPM error codes extracted from the TPM main specification * version 1.2 revision 85. */ #ifndef __TPM_ERROR_H__ #define __TPM_ERROR_H__ #ifndef TPM_E_BASE #define TPM_E_BASE ((UINT32)0) #endif #ifndef TPM_E_NON_FATAL #define TPM_E_NON_FATAL ((UINT32)0x00000800) #endif // Successful completion of the TPM operation. #define TPM_SUCCESS TPM_E_BASE // // MessageId: TPM_E_AUTHFAIL // // MessageText: // // Authentication failed // #define TPM_E_AUTHFAIL ((UINT32)(TPM_E_BASE + 0x00000001)) // // MessageId: TPM_E_BADINDEX // // MessageText: // // The index to a PCR, DIR or other register is incorrect // #define TPM_E_BADINDEX ((UINT32)(TPM_E_BASE + 0x00000002)) // // MessageId: TPM_E_BAD_PARAMETER // // MessageText: // // One or more parameter is bad // #define TPM_E_BAD_PARAMETER ((UINT32)(TPM_E_BASE + 0x00000003)) // // MessageId: TPM_E_AUDITFAILURE // // MessageText: // // An operation completed successfully but the auditing of that // operation failed. // #define TPM_E_AUDITFAILURE ((UINT32)(TPM_E_BASE + 0x00000004)) // // MessageId: TPM_E_CLEAR_DISABLED // // MessageText: // // The clear disable flag is set and all clear operations now require // physical access // #define TPM_E_CLEAR_DISABLED ((UINT32)(TPM_E_BASE + 0x00000005)) // // MessageId: TPM_E_DEACTIVATED // // MessageText: // // The TPM is deactivated // #define TPM_E_DEACTIVATED ((UINT32)(TPM_E_BASE + 0x00000006)) // // MessageId: TPM_E_DISABLED // // MessageText: // // The TPM is disabled // #define TPM_E_DISABLED ((UINT32)(TPM_E_BASE + 0x00000007)) // // MessageId: TPM_E_DISABLED_CMD // // MessageText: // // The target command has been disabled // #define TPM_E_DISABLED_CMD ((UINT32)(TPM_E_BASE + 0x00000008)) // // MessageId: TPM_E_FAIL // // MessageText: // // The operation failed // #define TPM_E_FAIL ((UINT32)(TPM_E_BASE + 0x00000009)) // // MessageId: TPM_E_BAD_ORDINAL // // MessageText: // // The ordinal was unknown or inconsistent // #define TPM_E_BAD_ORDINAL ((UINT32)(TPM_E_BASE + 0x0000000a)) // // MessageId: TPM_E_INSTALL_DISABLED // // MessageText: // // The ability to install an owner is disabled // #define TPM_E_INSTALL_DISABLED ((UINT32)(TPM_E_BASE + 0x0000000b)) // // MessageId: TPM_E_INVALID_KEYHANDLE // // MessageText: // // The key handle can not be interpreted // #define TPM_E_INVALID_KEYHANDLE ((UINT32)(TPM_E_BASE + 0x0000000c)) // // MessageId: TPM_E_KEYNOTFOUND // // MessageText: // // The key handle points to an invalid key // #define TPM_E_KEYNOTFOUND ((UINT32)(TPM_E_BASE + 0x0000000d)) // // MessageId: TPM_E_INAPPROPRIATE_ENC // // MessageText: // // Unacceptable encryption scheme // #define TPM_E_INAPPROPRIATE_ENC ((UINT32)(TPM_E_BASE + 0x0000000e)) // // MessageId: TPM_E_MIGRATEFAIL // // MessageText: // // Migration authorization failed // #define TPM_E_MIGRATEFAIL ((UINT32)(TPM_E_BASE + 0x0000000f)) // // MessageId: TPM_E_INVALID_PCR_INFO // // MessageText: // // PCR information could not be interpreted // #define TPM_E_INVALID_PCR_INFO ((UINT32)(TPM_E_BASE + 0x00000010)) // // MessageId: TPM_E_NOSPACE // // MessageText: // // No room to load key. // #define TPM_E_NOSPACE ((UINT32)(TPM_E_BASE + 0x00000011)) // // MessageId: TPM_E_NOSRK // // MessageText: // // There is no SRK set // #define TPM_E_NOSRK ((UINT32)(TPM_E_BASE + 0x00000012)) // // MessageId: TPM_E_NOTSEALED_BLOB // // MessageText: // // An encrypted blob is invalid or was not created by this TPM // #define TPM_E_NOTSEALED_BLOB ((UINT32)(TPM_E_BASE + 0x00000013)) // // MessageId: TPM_E_OWNER_SET // // MessageText: // // There is already an Owner // #define TPM_E_OWNER_SET ((UINT32)(TPM_E_BASE + 0x00000014)) // // MessageId: TPM_E_RESOURCES // // MessageText: // // The TPM has insufficient internal resources to perform the // requested action. // #define TPM_E_RESOURCES ((UINT32)(TPM_E_BASE + 0x00000015)) // // MessageId: TPM_E_SHORTRANDOM // // MessageText: // // A random string was too short // #define TPM_E_SHORTRANDOM ((UINT32)(TPM_E_BASE + 0x00000016)) // // MessageId: TPM_E_SIZE // // MessageText: // // The TPM does not have the space to perform the operation. // #define TPM_E_SIZE ((UINT32)(TPM_E_BASE + 0x00000017)) // // MessageId: TPM_E_WRONGPCRVAL // // MessageText: // // The named PCR value does not match the current PCR value. // #define TPM_E_WRONGPCRVAL ((UINT32)(TPM_E_BASE + 0x00000018)) // // MessageId: TPM_E_BAD_PARAM_SIZE // // MessageText: // // The paramSize argument to the command has the incorrect value // #define TPM_E_BAD_PARAM_SIZE ((UINT32)(TPM_E_BASE + 0x00000019)) // // MessageId: TPM_E_SHA_THREAD // // MessageText: // // There is no existing SHA-1 thread. // #define TPM_E_SHA_THREAD ((UINT32)(TPM_E_BASE + 0x0000001a)) // // MessageId: TPM_E_SHA_ERROR // // MessageText: // // The calculation is unable to proceed because the existing SHA-1 // thread has already encountered an error. // #define TPM_E_SHA_ERROR ((UINT32)(TPM_E_BASE + 0x0000001b)) // // MessageId: TPM_E_FAILEDSELFTEST // // MessageText: // // Self-test has failed and the TPM has shutdown. // #define TPM_E_FAILEDSELFTEST ((UINT32)(TPM_E_BASE + 0x0000001c)) // // MessageId: TPM_E_AUTH2FAIL // // MessageText: // // The authorization for the second key in a 2 key function failed // authorization // #define TPM_E_AUTH2FAIL ((UINT32)(TPM_E_BASE + 0x0000001d)) // // MessageId: TPM_E_BADTAG // // MessageText: // // The tag value sent to for a command is invalid // #define TPM_E_BADTAG ((UINT32)(TPM_E_BASE + 0x0000001e)) // // MessageId: TPM_E_IOERROR // // MessageText: // // An IO error occurred transmitting information to the TPM // #define TPM_E_IOERROR ((UINT32)(TPM_E_BASE + 0x0000001f)) // // MessageId: TPM_E_ENCRYPT_ERROR // // MessageText: // // The encryption process had a problem. // #define TPM_E_ENCRYPT_ERROR ((UINT32)(TPM_E_BASE + 0x00000020)) // // MessageId: TPM_E_DECRYPT_ERROR // // MessageText: // // The decryption process did not complete. // #define TPM_E_DECRYPT_ERROR ((UINT32)(TPM_E_BASE + 0x00000021)) // // MessageId: TPM_E_INVALID_AUTHHANDLE // // MessageText: // // An invalid handle was used. // #define TPM_E_INVALID_AUTHHANDLE ((UINT32)(TPM_E_BASE + 0x00000022)) // // MessageId: TPM_E_NO_ENDORSEMENT // // MessageText: // // The TPM does not a EK installed // #define TPM_E_NO_ENDORSEMENT ((UINT32)(TPM_E_BASE + 0x00000023)) // // MessageId: TPM_E_INVALID_KEYUSAGE // // MessageText: // // The usage of a key is not allowed // #define TPM_E_INVALID_KEYUSAGE ((UINT32)(TPM_E_BASE + 0x00000024)) // // MessageId: TPM_E_WRONG_ENTITYTYPE // // MessageText: // // The submitted entity type is not allowed // #define TPM_E_WRONG_ENTITYTYPE ((UINT32)(TPM_E_BASE + 0x00000025)) // // MessageId: TPM_E_INVALID_POSTINIT // // MessageText: // // The command was received in the wrong sequence relative to TPM_Init // and a subsequent TPM_Startup // #define TPM_E_INVALID_POSTINIT ((UINT32)(TPM_E_BASE + 0x00000026)) // // MessageId: TPM_E_INAPPROPRIATE_SIG // // MessageText: // // Signed data cannot include additional DER information // #define TPM_E_INAPPROPRIATE_SIG ((UINT32)(TPM_E_BASE + 0x00000027)) // // MessageId: TPM_E_BAD_KEY_PROPERTY // // MessageText: // // The key properties in TPM_KEY_PARMs are not supported by this TPM // #define TPM_E_BAD_KEY_PROPERTY ((UINT32)(TPM_E_BASE + 0x00000028)) // // MessageId: TPM_E_BAD_MIGRATION // // MessageText: // // The migration properties of this key are incorrect. // #define TPM_E_BAD_MIGRATION ((UINT32)(TPM_E_BASE + 0x00000029)) // // MessageId: TPM_E_BAD_SCHEME // // MessageText: // // The signature or encryption scheme for this key is incorrect or not // permitted in this situation. // #define TPM_E_BAD_SCHEME ((UINT32)(TPM_E_BASE + 0x0000002a)) // // MessageId: TPM_E_BAD_DATASIZE // // MessageText: // // The size of the data (or blob) parameter is bad or inconsistent // with the referenced key // #define TPM_E_BAD_DATASIZE ((UINT32)(TPM_E_BASE + 0x0000002b)) // // MessageId: TPM_E_BAD_MODE // // MessageText: // // A mode parameter is bad, such as capArea or subCapArea for // TPM_GetCapability, physicalPresence parameter for // TPM_PhysicalPresence, or migrationType for TPM_CreateMigrationBlob. // #define TPM_E_BAD_MODE ((UINT32)(TPM_E_BASE + 0x0000002c)) // // MessageId: TPM_E_BAD_PRESENCE // // MessageText: // // Either the physicalPresence or physicalPresenceLock bits have the // wrong value // #define TPM_E_BAD_PRESENCE ((UINT32)(TPM_E_BASE + 0x0000002d)) // // MessageId: TPM_E_BAD_VERSION // // MessageText: // // The TPM cannot perform this version of the capability // #define TPM_E_BAD_VERSION ((UINT32)(TPM_E_BASE + 0x0000002e)) // // MessageId: TPM_E_NO_WRAP_TRANSPORT // // MessageText: // // The TPM does not allow for wrapped transport sessions // #define TPM_E_NO_WRAP_TRANSPORT ((UINT32)(TPM_E_BASE + 0x0000002f)) // // MessageId: TPM_E_AUDITFAIL_UNSUCCESSFUL // // MessageText: // // TPM audit construction failed and the underlying command was // returning a failure code also // #define TPM_E_AUDITFAIL_UNSUCCESSFUL ((UINT32)(TPM_E_BASE + 0x00000030)) // // MessageId: TPM_E_AUDITFAIL_SUCCESSFUL // // MessageText: // // TPM audit construction failed and the underlying command was // returning success // #define TPM_E_AUDITFAIL_SUCCESSFUL ((UINT32)(TPM_E_BASE + 0x00000031)) // // MessageId: TPM_E_NOTRESETABLE // // MessageText: // // Attempt to reset a PCR register that does not have the resettable // attribute // #define TPM_E_NOTRESETABLE ((UINT32)(TPM_E_BASE + 0x00000032)) // // MessageId: TPM_E_NOTLOCAL // // MessageText: // // Attempt to reset a PCR register that requires locality and locality // modifier not part of command transport // #define TPM_E_NOTLOCAL ((UINT32)(TPM_E_BASE + 0x00000033)) // // MessageId: TPM_E_BAD_TYPE // // MessageText: // // Make identity blob not properly typed // #define TPM_E_BAD_TYPE ((UINT32)(TPM_E_BASE + 0x00000034)) // // MessageId: TPM_E_INVALID_RESOURCE // // MessageText: // // When saving context identified resource type does not match actual // resource // #define TPM_E_INVALID_RESOURCE ((UINT32)(TPM_E_BASE + 0x00000035)) // // MessageId: TPM_E_NOTFIPS // // MessageText: // // The TPM is attempting to execute a command only available when in // FIPS mode // #define TPM_E_NOTFIPS ((UINT32)(TPM_E_BASE + 0x00000036)) // // MessageId: TPM_E_INVALID_FAMILY // // MessageText: // // The command is attempting to use an invalid family ID // #define TPM_E_INVALID_FAMILY ((UINT32)(TPM_E_BASE + 0x00000037)) // // MessageId: TPM_E_NO_NV_PERMISSION // // MessageText: // // The permission to manipulate the NV storage is not available // #define TPM_E_NO_NV_PERMISSION ((UINT32)(TPM_E_BASE + 0x00000038)) // // MessageId: TPM_E_REQUIRES_SIGN // // MessageText: // // The operation requires a signed command // #define TPM_E_REQUIRES_SIGN ((UINT32)(TPM_E_BASE + 0x00000039)) // // MessageId: TPM_E_KEY_NOTSUPPORTED // // MessageText: // // Wrong operation to load an NV key // #define TPM_E_KEY_NOTSUPPORTED ((UINT32)(TPM_E_BASE + 0x0000003a)) // // MessageId: TPM_E_AUTH_CONFLICT // // MessageText: // // NV_LoadKey blob requires both owner and blob authorization // #define TPM_E_AUTH_CONFLICT ((UINT32)(TPM_E_BASE + 0x0000003b)) // // MessageId: TPM_E_AREA_LOCKED // // MessageText: // // The NV area is locked and not writable // #define TPM_E_AREA_LOCKED ((UINT32)(TPM_E_BASE + 0x0000003c)) // // MessageId: TPM_E_BAD_LOCALITY // // MessageText: // // The locality is incorrect for the attempted operation // #define TPM_E_BAD_LOCALITY ((UINT32)(TPM_E_BASE + 0x0000003d)) // // MessageId: TPM_E_READ_ONLY // // MessageText: // // The NV area is read only and can't be written to // #define TPM_E_READ_ONLY ((UINT32)(TPM_E_BASE + 0x0000003e)) // // MessageId: TPM_E_PER_NOWRITE // // MessageText: // // There is no protection on the write to the NV area // #define TPM_E_PER_NOWRITE ((UINT32)(TPM_E_BASE + 0x0000003f)) // // MessageId: TPM_E_FAMILYCOUNT // // MessageText: // // The family count value does not match // #define TPM_E_FAMILYCOUNT ((UINT32)(TPM_E_BASE + 0x00000040)) // // MessageId: TPM_E_WRITE_LOCKED // // MessageText: // // The NV area has already been written to // #define TPM_E_WRITE_LOCKED ((UINT32)(TPM_E_BASE + 0x00000041)) // // MessageId: TPM_E_BAD_ATTRIBUTES // // MessageText: // // The NV area attributes conflict // #define TPM_E_BAD_ATTRIBUTES ((UINT32)(TPM_E_BASE + 0x00000042)) // // MessageId: TPM_E_INVALID_STRUCTURE // // MessageText: // // The structure tag and version are invalid or inconsistent // #define TPM_E_INVALID_STRUCTURE ((UINT32)(TPM_E_BASE + 0x00000043)) // // MessageId: TPM_E_KEY_OWNER_CONTROL // // MessageText: // // The key is under control of the TPM Owner and can only be evicted // by the TPM Owner. // #define TPM_E_KEY_OWNER_CONTROL ((UINT32)(TPM_E_BASE + 0x00000044)) // // MessageId: TPM_E_BAD_COUNTER // // MessageText: // // The counter handle is incorrect // #define TPM_E_BAD_COUNTER ((UINT32)(TPM_E_BASE + 0x00000045)) // // MessageId: TPM_E_NOT_FULLWRITE // // MessageText: // // The write is not a complete write of the area // #define TPM_E_NOT_FULLWRITE ((UINT32)(TPM_E_BASE + 0x00000046)) // // MessageId: TPM_E_CONTEXT_GAP // // MessageText: // // The gap between saved context counts is too large // #define TPM_E_CONTEXT_GAP ((UINT32)(TPM_E_BASE + 0x00000047)) // // MessageId: TPM_E_MAXNVWRITES // // MessageText: // // The maximum number of NV writes without an owner has been exceeded // #define TPM_E_MAXNVWRITES ((UINT32)(TPM_E_BASE + 0x00000048)) // // MessageId: TPM_E_NOOPERATOR // // MessageText: // // No operator AuthData value is set // #define TPM_E_NOOPERATOR ((UINT32)(TPM_E_BASE + 0x00000049)) // // MessageId: TPM_E_RESOURCEMISSING // // MessageText: // // The resource pointed to by context is not loaded // #define TPM_E_RESOURCEMISSING ((UINT32)(TPM_E_BASE + 0x0000004a)) // // MessageId: TPM_E_DELEGATE_LOCK // // MessageText: // // The delegate administration is locked // #define TPM_E_DELEGATE_LOCK ((UINT32)(TPM_E_BASE + 0x0000004b)) // // MessageId: TPM_E_DELEGATE_FAMILY // // MessageText: // // Attempt to manage a family other then the delegated family // #define TPM_E_DELEGATE_FAMILY ((UINT32)(TPM_E_BASE + 0x0000004c)) // // MessageId: TPM_E_DELEGATE_ADMIN // // MessageText: // // Delegation table management not enabled // #define TPM_E_DELEGATE_ADMIN ((UINT32)(TPM_E_BASE + 0x0000004d)) // // MessageId: TPM_E_TRANSPORT_NOTEXCLUSIVE // // MessageText: // // There was a command executed outside of an exclusive transport session // #define TPM_E_TRANSPORT_NOTEXCLUSIVE ((UINT32)(TPM_E_BASE + 0x0000004e)) // // MessageId: TPM_E_OWNER_CONTROL // // MessageText: // // Attempt to context save a owner evict controlled key // #define TPM_E_OWNER_CONTROL ((UINT32)(TPM_E_BASE + 0x0000004f)) // // MessageId: TPM_E_DAA_RESOURCES // // MessageText: // // The DAA command has no resources available to execute the command // #define TPM_E_DAA_RESOURCES ((UINT32)(TPM_E_BASE + 0x00000050)) // // MessageId: TPM_E_DAA_INPUT_DATA0 // // MessageText: // // The consistency check on DAA parameter inputData0 has failed. // #define TPM_E_DAA_INPUT_DATA0 ((UINT32)(TPM_E_BASE + 0x00000051)) // // MessageId: TPM_E_DAA_INPUT_DATA1 // // MessageText: // // The consistency check on DAA parameter inputData1 has failed. // #define TPM_E_DAA_INPUT_DATA1 ((UINT32)(TPM_E_BASE + 0x00000052)) // // MessageId: TPM_E_DAA_ISSUER_SETTINGS // // MessageText: // // The consistency check on DAA_issuerSettings has failed. // #define TPM_E_DAA_ISSUER_SETTINGS ((UINT32)(TPM_E_BASE + 0x00000053)) // // MessageId: TPM_E_DAA_TPM_SETTINGS // // MessageText: // // The consistency check on DAA_tpmSpecific has failed. // #define TPM_E_DAA_TPM_SETTINGS ((UINT32)(TPM_E_BASE + 0x00000054)) // // MessageId: TPM_E_DAA_STAGE // // MessageText: // // The atomic process indicated by the submitted DAA command is not // the expected process. // #define TPM_E_DAA_STAGE ((UINT32)(TPM_E_BASE + 0x00000055)) // // MessageId: TPM_E_DAA_ISSUER_VALIDITY // // MessageText: // // The issuer's validity check has detected an inconsistency // #define TPM_E_DAA_ISSUER_VALIDITY ((UINT32)(TPM_E_BASE + 0x00000056)) // // MessageId: TPM_E_DAA_WRONG_W // // MessageText: // // The consistency check on w has failed. // #define TPM_E_DAA_WRONG_W ((UINT32)(TPM_E_BASE + 0x00000057)) // // MessageId: TPM_E_BAD_HANDLE // // MessageText: // // The handle is incorrect // #define TPM_E_BAD_HANDLE ((UINT32)(TPM_E_BASE + 0x00000058)) // // MessageId: TPM_E_BAD_DELEGATE // // MessageText: // // Delegation is not correct // #define TPM_E_BAD_DELEGATE ((UINT32)(TPM_E_BASE + 0x00000059)) // // MessageId: TPM_E_BADCONTEXT // // MessageText: // // The context blob is invalid // #define TPM_E_BADCONTEXT ((UINT32)(TPM_E_BASE + 0x0000005a)) // // MessageId: TPM_E_TOOMANYCONTEXTS // // MessageText: // // Too many contexts held by the TPM // #define TPM_E_TOOMANYCONTEXTS ((UINT32)(TPM_E_BASE + 0x0000005b)) // // MessageId: TPM_E_MA_TICKET_SIGNATURE // // MessageText: // // Migration authority signature validation failure // #define TPM_E_MA_TICKET_SIGNATURE ((UINT32)(TPM_E_BASE + 0x0000005c)) // // MessageId: TPM_E_MA_DESTINATION // // MessageText: // // Migration destination not authenticated // #define TPM_E_MA_DESTINATION ((UINT32)(TPM_E_BASE + 0x0000005d)) // // MessageId: TPM_E_MA_SOURCE // // MessageText: // // Migration source incorrect // #define TPM_E_MA_SOURCE ((UINT32)(TPM_E_BASE + 0x0000005e)) // // MessageId: TPM_E_MA_AUTHORITY // // MessageText: // // Incorrect migration authority // #define TPM_E_MA_AUTHORITY ((UINT32)(TPM_E_BASE + 0x0000005f)) // // MessageId: TPM_E_PERMANENTEK // // MessageText: // // Attempt to revoke the EK and the EK is not revocable // #define TPM_E_PERMANENTEK ((UINT32)(TPM_E_BASE + 0x00000061)) // // MessageId: TPM_E_BAD_SIGNATURE // // MessageText: // // Bad signature of CMK ticket // #define TPM_E_BAD_SIGNATURE ((UINT32)(TPM_E_BASE + 0x00000062)) // // MessageId: TPM_E_NOCONTEXTSPACE // // MessageText: // // There is no room in the context list for additional contexts // #define TPM_E_NOCONTEXTSPACE ((UINT32)(TPM_E_BASE + 0x00000063)) // // MessageId: TPM_E_RETRY // // MessageText: // // The TPM is too busy to respond to the command immediately, but the // command could be resubmitted at a later time. The TPM MAY return // TPM_Retry for any command at any time. // #define TPM_E_RETRY ((UINT32)(TPM_E_BASE + TPM_E_NON_FATAL)) // // MessageId: TPM_E_NEEDS_SELFTEST // // MessageText: // // SelfTestFull has not been run // #define TPM_E_NEEDS_SELFTEST ((UINT32)(TPM_E_BASE + TPM_E_NON_FATAL + 1)) // // MessageId: TPM_E_DOING_SELFTEST // // MessageText: // // The TPM is currently executing a full selftest // #define TPM_E_DOING_SELFTEST ((UINT32)(TPM_E_BASE + TPM_E_NON_FATAL + 2)) // // MessageId: TPM_E_DEFEND_LOCK_RUNNING // // MessageText: // // The TPM is defending against dictionary attacks and is in some // time-out period. // #define TPM_E_DEFEND_LOCK_RUNNING ((UINT32)(TPM_E_BASE + TPM_E_NON_FATAL + 3)) #endif /* __TPM_ERROR_H__ */ tpm-quote-tools-1.0.4/include/tss/platform.h0000644000175000017510000000231713037720561015767 00000000000000/*++ There are platform dependent and general defines. --*/ #ifndef TSS_PLATFORM_H #define TSS_PLATFORM_H /* The default implementation is to use stdint.h, a part of the C99 standard. * Systems that don't support this are handled on a case-by-case basis. */ #if !defined (WIN32) || defined(HAVE_STDINT_H) #include typedef uint8_t BYTE; typedef int8_t TSS_BOOL; typedef uint16_t UINT16; typedef uint32_t UINT32; typedef uint64_t UINT64; typedef uint16_t TSS_UNICODE; typedef void* PVOID; #elif defined(WIN32) #include typedef unsigned char BYTE; typedef signed char TSS_BOOL; #ifndef _BASETSD_H_ // basetsd.h provides definitions of UINT16, UINT32 and UINT64. typedef unsigned short UINT16; typedef unsigned long UINT32; typedef unsigned __int64 UINT64; #endif typedef unsigned short TSS_UNICODE; typedef void* PVOID; #endif /* Include this so that applications that use names as defined in the * 1.1 TSS specification can still compile */ #include #endif // TSS_PLATFORM_H tpm-quote-tools-1.0.4/include/tss/tss_defines.h0000644000175000017510000015075013037720561016456 00000000000000/*++ Global defines for TSS. --*/ #ifndef __TSS_DEFINES_H__ #define __TSS_DEFINES_H__ #include #include ////////////////////////////////////////////////////////////////////////// // Object types: ////////////////////////////////////////////////////////////////////////// // // definition of the object types that can be created via CreateObject // #define TSS_OBJECT_TYPE_POLICY (0x01) // Policy object #define TSS_OBJECT_TYPE_RSAKEY (0x02) // RSA-Key object #define TSS_OBJECT_TYPE_ENCDATA (0x03) // Encrypted data object #define TSS_OBJECT_TYPE_PCRS (0x04) // PCR composite object #define TSS_OBJECT_TYPE_HASH (0x05) // Hash object #define TSS_OBJECT_TYPE_DELFAMILY (0x06) // Delegation Family object #define TSS_OBJECT_TYPE_NV (0x07) // NV object #define TSS_OBJECT_TYPE_MIGDATA (0x08) // CMK Migration data object #define TSS_OBJECT_TYPE_DAA_CERTIFICATE (0x09) // DAA credential #define TSS_OBJECT_TYPE_DAA_ISSUER_KEY (0x0a) // DAA cred. issuer keypair #define TSS_OBJECT_TYPE_DAA_ARA_KEY (0x0b) // DAA anonymity revocation // authority keypair ////////////////////////////////////////////////////////////////////////// // CreateObject: Flags ////////////////////////////////////////////////////////////////////////// //************************************ // Flags for creating RSAKEY object: * //************************************ // // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // |x x|Auth // |x| Volatility // |x| Migration // |x x x x| Type // |x x x x| Size // |x x| CMK // |x x x| Version // |0 0 0 0 0 0 0 0 0| Reserved // |x x x x x x| Fixed Type // // Authorization: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Never |0 0| // Always |0 1| // Private key always |1 0| // #define TSS_KEY_NO_AUTHORIZATION (0x00000000) // no auth needed // for this key #define TSS_KEY_AUTHORIZATION (0x00000001) // key needs auth // for all ops #define TSS_KEY_AUTHORIZATION_PRIV_USE_ONLY (0x00000002) // key needs auth // for privkey ops, // noauth for pubkey // // Volatility // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Non Volatile |0| // Volatile |1| // #define TSS_KEY_NON_VOLATILE (0x00000000) // Key is non-volatile #define TSS_KEY_VOLATILE (0x00000004) // Key is volatile // // Migration // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Non Migratable |0| // Migratable |1| // #define TSS_KEY_NOT_MIGRATABLE (0x00000000) // key is not migratable #define TSS_KEY_MIGRATABLE (0x00000008) // key is migratable // // Usage // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Default (Legacy) |0 0 0 0| // Signing |0 0 0 1| // Storage |0 0 1 0| // Identity |0 0 1 1| // AuthChange |0 1 0 0| // Bind |0 1 0 1| // Legacy |0 1 1 0| // #define TSS_KEY_TYPE_DEFAULT (0x00000000) // indicate a default key // (Legacy-Key) #define TSS_KEY_TYPE_SIGNING (0x00000010) // indicate a signing key #define TSS_KEY_TYPE_STORAGE (0x00000020) // used as storage key #define TSS_KEY_TYPE_IDENTITY (0x00000030) // indicate an idendity key #define TSS_KEY_TYPE_AUTHCHANGE (0x00000040) // indicate an ephemeral key #define TSS_KEY_TYPE_BIND (0x00000050) // indicate a key for TPM_Bind #define TSS_KEY_TYPE_LEGACY (0x00000060) // indicate a key that can // perform signing and binding #define TSS_KEY_TYPE_MIGRATE (0x00000070) // indicate a key that can // act as a CMK MA #define TSS_KEY_TYPE_BITMASK (0x000000F0) // mask to extract key type // // Key size // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // DEFAULT |0 0 0 0| // 512 |0 0 0 1| // 1024 |0 0 1 0| // 2048 |0 0 1 1| // 4096 |0 1 0 0| // 8192 |0 1 0 1| // 16384 |0 1 1 0| // #define TSS_KEY_SIZE_DEFAULT (UINT32)(0x00000000) // indicate tpm-specific size #define TSS_KEY_SIZE_512 (UINT32)(0x00000100) // indicate a 512-bit key #define TSS_KEY_SIZE_1024 (UINT32)(0x00000200) // indicate a 1024-bit key #define TSS_KEY_SIZE_2048 (UINT32)(0x00000300) // indicate a 2048-bit key #define TSS_KEY_SIZE_4096 (UINT32)(0x00000400) // indicate a 4096-bit key #define TSS_KEY_SIZE_8192 (UINT32)(0x00000500) // indicate a 8192-bit key #define TSS_KEY_SIZE_16384 (UINT32)(0x00000600) // indicate a 16384-bit key #define TSS_KEY_SIZE_BITMASK (UINT32)(0x00000F00) // mask to extract key size // // Certified Migratability // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // DEFAULT |0 0| // Not Certified Migratable |0 0| // Certified Migratable |0 1| // #define TSS_KEY_NOT_CERTIFIED_MIGRATABLE (UINT32)(0x00000000) #define TSS_KEY_CERTIFIED_MIGRATABLE (UINT32)(0x00001000) // // Specification version // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Context default |0 0 0| // TPM_KEY 1.1b key |0 0 1| // TPM_KEY12 1.2 key |0 1 0| // #define TSS_KEY_STRUCT_DEFAULT (UINT32)(0x00000000) #define TSS_KEY_STRUCT_KEY (UINT32)(0x00004000) #define TSS_KEY_STRUCT_KEY12 (UINT32)(0x00008000) #define TSS_KEY_STRUCT_BITMASK (UINT32)(0x0001C000) // // fixed KeyTypes (templates) // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // |0 0 0 0 0 0| Empty Key // |0 0 0 0 0 1| Storage Root Key // #define TSS_KEY_EMPTY_KEY (0x00000000) // no TPM key template // (empty TSP key object) #define TSS_KEY_TSP_SRK (0x04000000) // use a TPM SRK template // (TSP key object for SRK) #define TSS_KEY_TEMPLATE_BITMASK (0xFC000000) // bitmask to extract key // template //************************************* // Flags for creating ENCDATA object: * //************************************* // // Type // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Seal |0 0 1| // Bind |0 1 0| // Legacy |0 1 1| // // ENCDATA Reserved: // |x x x x x x x x x x x x x x x x x x x x x x x x x x x x x| // #define TSS_ENCDATA_SEAL (0x00000001) // data for seal operation #define TSS_ENCDATA_BIND (0x00000002) // data for bind operation #define TSS_ENCDATA_LEGACY (0x00000003) // data for legacy bind operation //********************************** // Flags for creating HASH object: * //********************************** // // Algorithm // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // DEFAULT // |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0| // SHA1 // |0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1| // OTHER // |1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1| // #define TSS_HASH_DEFAULT (0x00000000) // Default hash algorithm #define TSS_HASH_SHA1 (0x00000001) // SHA-1 with 20 bytes #define TSS_HASH_OTHER (0xFFFFFFFF) // Not-specified hash algorithm //************************************ // Flags for creating POLICY object: * //************************************ // // Type // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // // Usage |0 0 1| // Migration |0 1 0| // Operator |0 1 1| // // POLICY Reserved: // |x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x| #define TSS_POLICY_USAGE (0x00000001) // usage policy object #define TSS_POLICY_MIGRATION (0x00000002) // migration policy object #define TSS_POLICY_OPERATOR (0x00000003) // migration policy object //****************************************** // Flags for creating PCRComposite object: * //****************************************** // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // |x x| Struct // |x x x x x x x x x x x x x x x x x x x x x x x x x x x x x x| Reserved // // PCRComposite Version: // // 3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 // 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 // --------------------------------------------------------------- // TPM_PCR_DEFAULT |0 0 0| // TPM_PCR_INFO |0 0 1| // TPM_PCR_INFO_LONG |0 1 0| // TPM_PCR_INFO_SHORT |0 1 1| // #define TSS_PCRS_STRUCT_DEFAULT (0x00000000) // depends on context #define TSS_PCRS_STRUCT_INFO (0x00000001) // TPM_PCR_INFO #define TSS_PCRS_STRUCT_INFO_LONG (0x00000002) // TPM_PCR_INFO_LONG #define TSS_PCRS_STRUCT_INFO_SHORT (0x00000003) // TPM_PCR_INFO_SHORT ////////////////////////////////////////////////////////////////////////// // Attribute Flags, Subflags, and Values ////////////////////////////////////////////////////////////////////////// //****************** // Context object: * //****************** // // Attributes // #define TSS_TSPATTRIB_CONTEXT_SILENT_MODE (0x00000001) // dialog display control #define TSS_TSPATTRIB_CONTEXT_MACHINE_NAME (0x00000002) // remote machine name #define TSS_TSPATTRIB_CONTEXT_VERSION_MODE (0x00000003) // context version #define TSS_TSPATTRIB_CONTEXT_TRANSPORT (0x00000004) // transport control #define TSS_TSPATTRIB_CONTEXT_CONNECTION_VERSION (0x00000005) // connection version #define TSS_TSPATTRIB_SECRET_HASH_MODE (0x00000006) // flag indicating whether // NUL is included in the // hash of the password // // SubFlags for Flag TSS_TSPATTRIB_CONTEXT_TRANSPORT // #define TSS_TSPATTRIB_CONTEXTTRANS_CONTROL (0x00000008) #define TSS_TSPATTRIB_CONTEXTTRANS_MODE (0x00000010) // // Values for the TSS_TSPATTRIB_CONTEXT_SILENT_MODE attribute // #define TSS_TSPATTRIB_CONTEXT_NOT_SILENT (0x00000000) // TSP dialogs enabled #define TSS_TSPATTRIB_CONTEXT_SILENT (0x00000001) // TSP dialogs disabled // // Values for the TSS_TSPATTRIB_CONTEXT_VERSION_MODE attribute // #define TSS_TSPATTRIB_CONTEXT_VERSION_AUTO (0x00000001) #define TSS_TSPATTRIB_CONTEXT_VERSION_V1_1 (0x00000002) #define TSS_TSPATTRIB_CONTEXT_VERSION_V1_2 (0x00000003) // // Values for the subflag TSS_TSPATTRIB_CONTEXT_TRANS_CONTROL // #define TSS_TSPATTRIB_DISABLE_TRANSPORT (0x00000000) #define TSS_TSPATTRIB_ENABLE_TRANSPORT (0x00000001) // // Values for the subflag TSS_TSPATTRIB_CONTEXT_TRANS_MODE // #define TSS_TSPATTRIB_TRANSPORT_NO_DEFAULT_ENCRYPTION (0x00000000) #define TSS_TSPATTRIB_TRANSPORT_DEFAULT_ENCRYPTION (0x00000001) #define TSS_TSPATTRIB_TRANSPORT_AUTHENTIC_CHANNEL (0x00000002) #define TSS_TSPATTRIB_TRANSPORT_EXCLUSIVE (0x00000004) #define TSS_TSPATTRIB_TRANSPORT_STATIC_AUTH (0x00000008) // // Values for the TSS_TSPATTRIB_CONTEXT_CONNECTION_VERSION attribute // #define TSS_CONNECTION_VERSION_1_1 (0x00000001) #define TSS_CONNECTION_VERSION_1_2 (0x00000002) // // Subflags of TSS_TSPATTRIB_SECRET_HASH_MODE // #define TSS_TSPATTRIB_SECRET_HASH_MODE_POPUP (0x00000001) // // Values for TSS_TSPATTRIB_SECRET_HASH_MODE_POPUP subflag // #define TSS_TSPATTRIB_HASH_MODE_NOT_NULL (0x00000000) #define TSS_TSPATTRIB_HASH_MODE_NULL (0x00000001) // ************* // TPM object: * // ************* // // Attributes: // #define TSS_TSPATTRIB_TPM_CALLBACK_COLLATEIDENTITY 0x00000001 #define TSS_TSPATTRIB_TPM_CALLBACK_ACTIVATEIDENTITY 0x00000002 #define TSS_TSPATTRIB_TPM_ORDINAL_AUDIT_STATUS 0x00000003 #define TSS_TSPATTRIB_TPM_CREDENTIAL 0x00001000 // // Subflags for TSS_TSPATTRIB_TPM_ORDINAL_AUDIT_STATUS // #define TPM_CAP_PROP_TPM_CLEAR_ORDINAL_AUDIT 0x00000000 #define TPM_CAP_PROP_TPM_SET_ORDINAL_AUDIT 0x00000001 // // Subflags for TSS_TSPATTRIB_TPM_CREDENTIAL // #define TSS_TPMATTRIB_EKCERT 0x00000001 #define TSS_TPMATTRIB_TPM_CC 0x00000002 #define TSS_TPMATTRIB_PLATFORMCERT 0x00000003 #define TSS_TPMATTRIB_PLATFORM_CC 0x00000004 //***************** // Policy object: * //***************** // // Attributes // #define TSS_TSPATTRIB_POLICY_CALLBACK_HMAC (0x00000080) // enable/disable callback function #define TSS_TSPATTRIB_POLICY_CALLBACK_XOR_ENC (0x00000100) // enable/disable callback function #define TSS_TSPATTRIB_POLICY_CALLBACK_TAKEOWNERSHIP (0x00000180) // enable/disable callback function #define TSS_TSPATTRIB_POLICY_CALLBACK_CHANGEAUTHASYM (0x00000200) // enable/disable callback function #define TSS_TSPATTRIB_POLICY_SECRET_LIFETIME (0x00000280) // set lifetime mode for policy secret #define TSS_TSPATTRIB_POLICY_POPUPSTRING (0x00000300) // set a NULL terminated UNICODE string // which is displayed in the TSP policy // popup dialog #define TSS_TSPATTRIB_POLICY_CALLBACK_SEALX_MASK (0x00000380) // enable/disable callback function #if 0 /* This attribute flag is defined earlier with the context attributes. * It is valid for both context and policy objects. It is copied * here as a reminder to avoid collisions. */ #define TSS_TSPATTRIB_SECRET_HASH_MODE (0x00000006) // flag indicating whether // NUL is included in the // hash of the password #endif #define TSS_TSPATTRIB_POLICY_DELEGATION_INFO (0x00000001) #define TSS_TSPATTRIB_POLICY_DELEGATION_PCR (0x00000002) // // SubFlags for Flag TSS_TSPATTRIB_POLICY_SECRET_LIFETIME // #define TSS_SECRET_LIFETIME_ALWAYS (0x00000001) // secret will not be // invalidated #define TSS_SECRET_LIFETIME_COUNTER (0x00000002) // secret lifetime // controlled by counter #define TSS_SECRET_LIFETIME_TIMER (0x00000003) // secret lifetime // controlled by time #define TSS_TSPATTRIB_POLSECRET_LIFETIME_ALWAYS TSS_SECRET_LIFETIME_ALWAYS #define TSS_TSPATTRIB_POLSECRET_LIFETIME_COUNTER TSS_SECRET_LIFETIME_COUNTER #define TSS_TSPATTRIB_POLSECRET_LIFETIME_TIMER TSS_SECRET_LIFETIME_TIMER // Alternate names misspelled in the 1.1 TSS spec. #define TSS_TSPATTRIB_POLICYSECRET_LIFETIME_ALWAYS TSS_SECRET_LIFETIME_ALWAYS #define TSS_TSPATTRIB_POLICYSECRET_LIFETIME_COUNTER TSS_SECRET_LIFETIME_COUNTER #define TSS_TSPATTRIB_POLICYSECRET_LIFETIME_TIMER TSS_SECRET_LIFETIME_TIMER // // Subflags of TSS_TSPATTRIB_POLICY_DELEGATION_INFO // #define TSS_TSPATTRIB_POLDEL_TYPE (0x00000001) #define TSS_TSPATTRIB_POLDEL_INDEX (0x00000002) #define TSS_TSPATTRIB_POLDEL_PER1 (0x00000003) #define TSS_TSPATTRIB_POLDEL_PER2 (0x00000004) #define TSS_TSPATTRIB_POLDEL_LABEL (0x00000005) #define TSS_TSPATTRIB_POLDEL_FAMILYID (0x00000006) #define TSS_TSPATTRIB_POLDEL_VERCOUNT (0x00000007) #define TSS_TSPATTRIB_POLDEL_OWNERBLOB (0x00000008) #define TSS_TSPATTRIB_POLDEL_KEYBLOB (0x00000009) // // Subflags of TSS_TSPATTRIB_POLICY_DELEGATION_PCR // #define TSS_TSPATTRIB_POLDELPCR_LOCALITY (0x00000001) #define TSS_TSPATTRIB_POLDELPCR_DIGESTATRELEASE (0x00000002) #define TSS_TSPATTRIB_POLDELPCR_SELECTION (0x00000003) // // Values for the Policy TSS_TSPATTRIB_POLDEL_TYPE attribute // #define TSS_DELEGATIONTYPE_NONE (0x00000001) #define TSS_DELEGATIONTYPE_OWNER (0x00000002) #define TSS_DELEGATIONTYPE_KEY (0x00000003) // // Flags used for the 'mode' parameter in Tspi_Policy_SetSecret() // #define TSS_SECRET_MODE_NONE (0x00000800) // No authorization will be // processed #define TSS_SECRET_MODE_SHA1 (0x00001000) // Secret string will not be // touched by TSP #define TSS_SECRET_MODE_PLAIN (0x00001800) // Secret string will be hashed // using SHA1 #define TSS_SECRET_MODE_POPUP (0x00002000) // TSS SP will ask for a secret #define TSS_SECRET_MODE_CALLBACK (0x00002800) // Application has to provide a // call back function //****************** // EncData object: * //****************** // // Attributes // #define TSS_TSPATTRIB_ENCDATA_BLOB (0x00000008) #define TSS_TSPATTRIB_ENCDATA_PCR (0x00000010) #define TSS_TSPATTRIB_ENCDATA_PCR_LONG (0x00000018) #define TSS_TSPATTRIB_ENCDATA_SEAL (0x00000020) // // SubFlags for Flag TSS_TSPATTRIB_ENCDATA_BLOB // #define TSS_TSPATTRIB_ENCDATABLOB_BLOB (0x00000001) // encrypted data blob // // SubFlags for Flag TSS_TSPATTRIB_ENCDATA_PCR // #define TSS_TSPATTRIB_ENCDATAPCR_DIGEST_ATCREATION (0x00000002) #define TSS_TSPATTRIB_ENCDATAPCR_DIGEST_ATRELEASE (0x00000003) #define TSS_TSPATTRIB_ENCDATAPCR_SELECTION (0x00000004) // support typo from 1.1 headers #define TSS_TSPATTRIB_ENCDATAPCR_DIGEST_RELEASE \ TSS_TSPATTRIB_ENCDATAPCR_DIGEST_ATRELEASE #define TSS_TSPATTRIB_ENCDATAPCRLONG_LOCALITY_ATCREATION (0x00000005) #define TSS_TSPATTRIB_ENCDATAPCRLONG_LOCALITY_ATRELEASE (0x00000006) #define TSS_TSPATTRIB_ENCDATAPCRLONG_CREATION_SELECTION (0x00000007) #define TSS_TSPATTRIB_ENCDATAPCRLONG_RELEASE_SELECTION (0x00000008) #define TSS_TSPATTRIB_ENCDATAPCRLONG_DIGEST_ATCREATION (0x00000009) #define TSS_TSPATTRIB_ENCDATAPCRLONG_DIGEST_ATRELEASE (0x0000000A) // // Attribute subflags TSS_TSPATTRIB_ENCDATA_SEAL // #define TSS_TSPATTRIB_ENCDATASEAL_PROTECT_MODE (0x00000001) // // Attribute values for // TSS_TSPATTRIB_ENCDATA_SEAL/TSS_TSPATTRIB_ENCDATASEAL_PROTECT_MODE // #define TSS_TSPATTRIB_ENCDATASEAL_NOPROTECT (0x00000000) #define TSS_TSPATTRIB_ENCDATASEAL_PROTECT (0x00000001) // Accounting for typos in original header files #define TSS_TSPATTRIB_ENCDATASEAL_NO_PROTECT \ TSS_TSPATTRIB_ENCDATASEAL_NOPROTECT //************* // NV object: * //************* // // Attributes // #define TSS_TSPATTRIB_NV_INDEX (0x00000001) #define TSS_TSPATTRIB_NV_PERMISSIONS (0x00000002) #define TSS_TSPATTRIB_NV_STATE (0x00000003) #define TSS_TSPATTRIB_NV_DATASIZE (0x00000004) #define TSS_TSPATTRIB_NV_PCR (0x00000005) #define TSS_TSPATTRIB_NVSTATE_READSTCLEAR (0x00100000) #define TSS_TSPATTRIB_NVSTATE_WRITESTCLEAR (0x00200000) #define TSS_TSPATTRIB_NVSTATE_WRITEDEFINE (0x00300000) #define TSS_TSPATTRIB_NVPCR_READPCRSELECTION (0x01000000) #define TSS_TSPATTRIB_NVPCR_READDIGESTATRELEASE (0x02000000) #define TSS_TSPATTRIB_NVPCR_READLOCALITYATRELEASE (0x03000000) #define TSS_TSPATTRIB_NVPCR_WRITEPCRSELECTION (0x04000000) #define TSS_TSPATTRIB_NVPCR_WRITEDIGESTATRELEASE (0x05000000) #define TSS_TSPATTRIB_NVPCR_WRITELOCALITYATRELEASE (0x06000000) /* NV index flags * * From the TPM spec, Part 2, Section 19.1. * * 3 2 1 * 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ * |T|P|U|D| resvd | Purview | Index | * +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ */ #define TSS_NV_TPM (0x80000000) // TPM mfr reserved bit #define TSS_NV_PLATFORM (0x40000000) // Platform mfr reserved bit #define TSS_NV_USER (0x20000000) // User reserved bit #define TSS_NV_DEFINED (0x10000000) // "Defined permanently" flag #define TSS_NV_MASK_TPM (0x80000000) // mask to extract 'T' #define TSS_NV_MASK_PLATFORM (0x40000000) // mask to extract 'P' #define TSS_NV_MASK_USER (0x20000000) // mask to extract 'U' #define TSS_NV_MASK_DEFINED (0x10000000) // mask to extract 'D' #define TSS_NV_MASK_RESERVED (0x0f000000) // mask to extract reserved bits #define TSS_NV_MASK_PURVIEW (0x00ff0000) // mask to extract purview byte #define TSS_NV_MASK_INDEX (0x0000ffff) // mask to extract index byte // This is the index of the NV storage area where the number of sessions // per locality is stored. #define TSS_NV_INDEX_SESSIONS (0x00011101) //****************** // MigData object: * //****************** // // Attributes // #define TSS_MIGATTRIB_MIGRATIONBLOB (0x00000010) #define TSS_MIGATTRIB_MIGRATIONTICKET (0x00000020) #define TSS_MIGATTRIB_AUTHORITY_DATA (0x00000030) #define TSS_MIGATTRIB_MIG_AUTH_DATA (0x00000040) #define TSS_MIGATTRIB_TICKET_DATA (0x00000050) #define TSS_MIGATTRIB_PAYLOAD_TYPE (0x00000060) // // Attribute subflags TSS_MIGATTRIB_MIGRATIONBLOB // #define TSS_MIGATTRIB_MIGRATION_XOR_BLOB (0x00000101) #define TSS_MIGATTRIB_MIGRATION_REWRAPPED_BLOB (0x00000102) #define TSS_MIGATTRIB_MIG_MSALIST_PUBKEY_BLOB (0x00000103) #define TSS_MIGATTRIB_MIG_AUTHORITY_PUBKEY_BLOB (0x00000104) #define TSS_MIGATTRIB_MIG_DESTINATION_PUBKEY_BLOB (0x00000105) #define TSS_MIGATTRIB_MIG_SOURCE_PUBKEY_BLOB (0x00000106) #define TSS_MIGATTRIB_MIG_REWRAPPED_BLOB TSS_MIGATTRIB_MIGRATION_REWRAPPED_BLOB #define TSS_MIGATTRIB_MIG_XOR_BLOB TSS_MIGATTRIB_MIGRATION_XOR_BLOB // // Attribute subflags TSS_MIGATTRIB_MIGRATIONTICKET // // none // // Attribute subflags TSS_MIGATTRIB_AUTHORITY_DATA // #define TSS_MIGATTRIB_AUTHORITY_DIGEST (0x00000301) #define TSS_MIGATTRIB_AUTHORITY_APPROVAL_HMAC (0x00000302) #define TSS_MIGATTRIB_AUTHORITY_MSALIST (0x00000303) // // Attribute subflags TSS_MIGATTRIB_MIG_AUTH_DATA // #define TSS_MIGATTRIB_MIG_AUTH_AUTHORITY_DIGEST (0x00000401) #define TSS_MIGATTRIB_MIG_AUTH_DESTINATION_DIGEST (0x00000402) #define TSS_MIGATTRIB_MIG_AUTH_SOURCE_DIGEST (0x00000403) // // Attribute subflags TSS_MIGATTRIB_TICKET_DATA // #define TSS_MIGATTRIB_TICKET_SIG_DIGEST (0x00000501) #define TSS_MIGATTRIB_TICKET_SIG_VALUE (0x00000502) #define TSS_MIGATTRIB_TICKET_SIG_TICKET (0x00000503) #define TSS_MIGATTRIB_TICKET_RESTRICT_TICKET (0x00000504) // // Attribute subflags TSS_MIGATTRIB_PAYLOAD_TYPE // #define TSS_MIGATTRIB_PT_MIGRATE_RESTRICTED (0x00000601) #define TSS_MIGATTRIB_PT_MIGRATE_EXTERNAL (0x00000602) //*************** // Hash object: * //*************** // // Attributes // #define TSS_TSPATTRIB_HASH_IDENTIFIER (0x00001000) // Hash algorithm identifier #define TSS_TSPATTRIB_ALG_IDENTIFIER (0x00002000) // ASN.1 alg identifier //*************** // PCRs object: * //*************** // // Attributes // #define TSS_TSPATTRIB_PCRS_INFO (0x00000001) // info // // Subflags for TSS_TSPATTRIB_PCRS_INFO flag // #define TSS_TSPATTRIB_PCRSINFO_PCRSTRUCT (0x00000001) // type of pcr struct // TSS_PCRS_STRUCT_TYPE_XX //**************************** // Delegation Family object: * //**************************** // // Attributes // #define TSS_TSPATTRIB_DELFAMILY_STATE (0x00000001) #define TSS_TSPATTRIB_DELFAMILY_INFO (0x00000002) // DELFAMILY_STATE sub-attributes #define TSS_TSPATTRIB_DELFAMILYSTATE_LOCKED (0x00000001) #define TSS_TSPATTRIB_DELFAMILYSTATE_ENABLED (0x00000002) // DELFAMILY_INFO sub-attributes #define TSS_TSPATTRIB_DELFAMILYINFO_LABEL (0x00000003) #define TSS_TSPATTRIB_DELFAMILYINFO_VERCOUNT (0x00000004) #define TSS_TSPATTRIB_DELFAMILYINFO_FAMILYID (0x00000005) // Bitmasks for the 'ulFlags' argument to Tspi_TPM_Delegate_CreateDelegation. // Only one bit used for now. #define TSS_DELEGATE_INCREMENTVERIFICATIONCOUNT ((UINT32)1) // Bitmasks for the 'ulFlags' argument to // Tspi_TPM_Delegate_CacheOwnerDelegation. Only 1 bit is used for now. #define TSS_DELEGATE_CACHEOWNERDELEGATION_OVERWRITEEXISTING ((UINT32)1) //************************* // DAA Credential Object: * //************************* // // Attribute flags // #define TSS_TSPATTRIB_DAACRED_COMMIT (0x00000001) #define TSS_TSPATTRIB_DAACRED_ATTRIB_GAMMAS (0x00000002) #define TSS_TSPATTRIB_DAACRED_CREDENTIAL_BLOB (0x00000003) #define TSS_TSPATTRIB_DAACRED_CALLBACK_SIGN (0x00000004) #define TSS_TSPATTRIB_DAACRED_CALLBACK_VERIFYSIGNATURE (0x00000005) // // Subflags for TSS_TSPATTRIB_DAACRED_COMMIT // #define TSS_TSPATTRIB_DAACOMMIT_NUMBER (0x00000001) #define TSS_TSPATTRIB_DAACOMMIT_SELECTION (0x00000002) #define TSS_TSPATTRIB_DAACOMMIT_COMMITMENTS (0x00000003) // // Subflags for TSS_TSPATTRIB_DAACRED_ATTRIB_GAMMAS // #define TSS_TSPATTRIB_DAAATTRIBGAMMAS_BLOB (0xffffffff) //************************* // DAA Issuer Key Object: * //************************* // // Attribute flags // #define TSS_TSPATTRIB_DAAISSUERKEY_BLOB (0x00000001) #define TSS_TSPATTRIB_DAAISSUERKEY_PUBKEY (0x00000002) // // Subflags for TSS_TSPATTRIB_DAAISSUERKEY_BLOB // #define TSS_TSPATTRIB_DAAISSUERKEYBLOB_PUBLIC_KEY (0x00000001) #define TSS_TSPATTRIB_DAAISSUERKEYBLOB_SECRET_KEY (0x00000002) #define TSS_TSPATTRIB_DAAISSUERKEYBLOB_KEYBLOB (0x00000003) #define TSS_TSPATTRIB_DAAISSUERKEYBLOB_PROOF (0x00000004) // // Subflags for TSS_TSPATTRIB_DAAISSUERKEY_PUBKEY // #define TSS_TSPATTRIB_DAAISSUERKEYPUBKEY_NUM_ATTRIBS (0x00000001) #define TSS_TSPATTRIB_DAAISSUERKEYPUBKEY_NUM_PLATFORM_ATTRIBS (0x00000002) #define TSS_TSPATTRIB_DAAISSUERKEYPUBKEY_NUM_ISSUER_ATTRIBS (0x00000003) //*************************************** // DAA Anonymity Revocation Key Object: * //*************************************** // // Attribute flags // #define TSS_TSPATTRIB_DAAARAKEY_BLOB (0x00000001) // // Subflags for TSS_TSPATTRIB_DAAARAKEY_BLOB // #define TSS_TSPATTRIB_DAAARAKEYBLOB_PUBLIC_KEY (0x00000001) #define TSS_TSPATTRIB_DAAARAKEYBLOB_SECRET_KEY (0x00000002) #define TSS_TSPATTRIB_DAAARAKEYBLOB_KEYBLOB (0x00000003) // // Structure payload flags for TSS_DAA_PSEUDONYM, // (TSS_DAA_PSEUDONYM.payloadFlag) // #define TSS_FLAG_DAA_PSEUDONYM_PLAIN (0x00000000) #define TSS_FLAG_DAA_PSEUDONYM_ENCRYPTED (0x00000001) //************** // Key Object: * //************** // // Attribute flags // #define TSS_TSPATTRIB_KEY_BLOB (0x00000040) // key info as blob data #define TSS_TSPATTRIB_KEY_INFO (0x00000080) // keyparam info as blob data #define TSS_TSPATTRIB_KEY_UUID (0x000000C0) // key UUID info as blob data #define TSS_TSPATTRIB_KEY_PCR (0x00000100) // composite digest value for // the key #define TSS_TSPATTRIB_RSAKEY_INFO (0x00000140) // public key info #define TSS_TSPATTRIB_KEY_REGISTER (0x00000180) // register location #define TSS_TSPATTRIB_KEY_PCR_LONG (0x000001c0) // PCR_INFO_LONG for the key #define TSS_TSPATTRIB_KEY_CONTROLBIT (0x00000200) // key control flags #define TSS_TSPATTRIB_KEY_CMKINFO (0x00000400) // CMK info // // SubFlags for Flag TSS_TSPATTRIB_KEY_BLOB // #define TSS_TSPATTRIB_KEYBLOB_BLOB (0x00000008) // key info using the // key blob #define TSS_TSPATTRIB_KEYBLOB_PUBLIC_KEY (0x00000010) // public key info // using the blob #define TSS_TSPATTRIB_KEYBLOB_PRIVATE_KEY (0x00000028) // encrypted private key // blob // // SubFlags for Flag TSS_TSPATTRIB_KEY_INFO // #define TSS_TSPATTRIB_KEYINFO_SIZE (0x00000080) // key size in bits #define TSS_TSPATTRIB_KEYINFO_USAGE (0x00000100) // key usage info #define TSS_TSPATTRIB_KEYINFO_KEYFLAGS (0x00000180) // key flags #define TSS_TSPATTRIB_KEYINFO_AUTHUSAGE (0x00000200) // key auth usage info #define TSS_TSPATTRIB_KEYINFO_ALGORITHM (0x00000280) // key algorithm ID #define TSS_TSPATTRIB_KEYINFO_SIGSCHEME (0x00000300) // key sig scheme #define TSS_TSPATTRIB_KEYINFO_ENCSCHEME (0x00000380) // key enc scheme #define TSS_TSPATTRIB_KEYINFO_MIGRATABLE (0x00000400) // if true then key is // migratable #define TSS_TSPATTRIB_KEYINFO_REDIRECTED (0x00000480) // key is redirected #define TSS_TSPATTRIB_KEYINFO_VOLATILE (0x00000500) // if true key is // volatile #define TSS_TSPATTRIB_KEYINFO_AUTHDATAUSAGE (0x00000580) // if true auth is // required #define TSS_TSPATTRIB_KEYINFO_VERSION (0x00000600) // version info as TSS // version struct #define TSS_TSPATTRIB_KEYINFO_CMK (0x00000680) // if true then key // is certified // migratable #define TSS_TSPATTRIB_KEYINFO_KEYSTRUCT (0x00000700) // type of key struct // used for this key // (TPM_KEY or // TPM_KEY12) #define TSS_TSPATTRIB_KEYCONTROL_OWNEREVICT (0x00000780) // Get current status // of owner evict flag // // SubFlags for Flag TSS_TSPATTRIB_RSAKEY_INFO // #define TSS_TSPATTRIB_KEYINFO_RSA_EXPONENT (0x00001000) #define TSS_TSPATTRIB_KEYINFO_RSA_MODULUS (0x00002000) #define TSS_TSPATTRIB_KEYINFO_RSA_KEYSIZE (0x00003000) #define TSS_TSPATTRIB_KEYINFO_RSA_PRIMES (0x00004000) // // SubFlags for Flag TSS_TSPATTRIB_KEY_PCR // #define TSS_TSPATTRIB_KEYPCR_DIGEST_ATCREATION (0x00008000) #define TSS_TSPATTRIB_KEYPCR_DIGEST_ATRELEASE (0x00010000) #define TSS_TSPATTRIB_KEYPCR_SELECTION (0x00018000) // // SubFlags for TSS_TSPATTRIB_KEY_REGISTER // #define TSS_TSPATTRIB_KEYREGISTER_USER (0x02000000) #define TSS_TSPATTRIB_KEYREGISTER_SYSTEM (0x04000000) #define TSS_TSPATTRIB_KEYREGISTER_NO (0x06000000) // // SubFlags for Flag TSS_TSPATTRIB_KEY_PCR_LONG // #define TSS_TSPATTRIB_KEYPCRLONG_LOCALITY_ATCREATION (0x00040000) /* UINT32 */ #define TSS_TSPATTRIB_KEYPCRLONG_LOCALITY_ATRELEASE (0x00080000) /* UINT32 */ #define TSS_TSPATTRIB_KEYPCRLONG_CREATION_SELECTION (0x000C0000) /* DATA */ #define TSS_TSPATTRIB_KEYPCRLONG_RELEASE_SELECTION (0x00100000) /* DATA */ #define TSS_TSPATTRIB_KEYPCRLONG_DIGEST_ATCREATION (0x00140000) /* DATA */ #define TSS_TSPATTRIB_KEYPCRLONG_DIGEST_ATRELEASE (0x00180000) /* DATA */ // // SubFlags for Flag TSS_TSPATTRIB_KEY_CMKINFO // #define TSS_TSPATTRIB_KEYINFO_CMK_MA_APPROVAL (0x00000010) #define TSS_TSPATTRIB_KEYINFO_CMK_MA_DIGEST (0x00000020) // // Attribute Values // // // key size definitions // #define TSS_KEY_SIZEVAL_512BIT (0x0200) #define TSS_KEY_SIZEVAL_1024BIT (0x0400) #define TSS_KEY_SIZEVAL_2048BIT (0x0800) #define TSS_KEY_SIZEVAL_4096BIT (0x1000) #define TSS_KEY_SIZEVAL_8192BIT (0x2000) #define TSS_KEY_SIZEVAL_16384BIT (0x4000) // // key usage definitions // Values intentionally moved away from corresponding TPM values to avoid // possible misuse // #define TSS_KEYUSAGE_BIND (0x00) #define TSS_KEYUSAGE_IDENTITY (0x01) #define TSS_KEYUSAGE_LEGACY (0x02) #define TSS_KEYUSAGE_SIGN (0x03) #define TSS_KEYUSAGE_STORAGE (0x04) #define TSS_KEYUSAGE_AUTHCHANGE (0x05) #define TSS_KEYUSAGE_MIGRATE (0x06) // // key flag definitions // #define TSS_KEYFLAG_REDIRECTION (0x00000001) #define TSS_KEYFLAG_MIGRATABLE (0x00000002) #define TSS_KEYFLAG_VOLATILEKEY (0x00000004) #define TSS_KEYFLAG_CERTIFIED_MIGRATABLE (0x00000008) // // algorithm ID definitions // // This table defines the algo id's // Values intentionally moved away from corresponding TPM values to avoid // possible misuse // #define TSS_ALG_RSA (0x20) #define TSS_ALG_DES (0x21) #define TSS_ALG_3DES (0x22) #define TSS_ALG_SHA (0x23) #define TSS_ALG_HMAC (0x24) #define TSS_ALG_AES128 (0x25) #define TSS_ALG_AES192 (0x26) #define TSS_ALG_AES256 (0x27) #define TSS_ALG_XOR (0x28) #define TSS_ALG_MGF1 (0x29) #define TSS_ALG_AES TSS_ALG_AES128 // Special values for // Tspi_Context_GetCapability(TSS_TSPCAP_ALG) // Tspi_Context_GetCapability(TSS_TCSCAP_ALG) #define TSS_ALG_DEFAULT (0xfe) #define TSS_ALG_DEFAULT_SIZE (0xff) // // key signature scheme definitions // #define TSS_SS_NONE (0x10) #define TSS_SS_RSASSAPKCS1V15_SHA1 (0x11) #define TSS_SS_RSASSAPKCS1V15_DER (0x12) // // key encryption scheme definitions // #define TSS_ES_NONE (0x10) #define TSS_ES_RSAESPKCSV15 (0x11) #define TSS_ES_RSAESOAEP_SHA1_MGF1 (0x12) #define TSS_ES_SYM_CNT (0x13) #define TSS_ES_SYM_OFB (0x14) #define TSS_ES_SYM_CBC_PKCS5PAD (0x15) // // persistent storage registration definitions // #define TSS_PS_TYPE_USER (1) // Key is registered persistantly in the user // storage database. #define TSS_PS_TYPE_SYSTEM (2) // Key is registered persistantly in the system // storage database. // // migration scheme definitions // Values intentionally moved away from corresponding TPM values to avoid // possible misuse // #define TSS_MS_MIGRATE (0x20) #define TSS_MS_REWRAP (0x21) #define TSS_MS_MAINT (0x22) #define TSS_MS_RESTRICT_MIGRATE (0x23) #define TSS_MS_RESTRICT_APPROVE_DOUBLE (0x24) #define TSS_MS_RESTRICT_MIGRATE_EXTERNAL (0x25) // // TPM key authorization // Values intentionally moved away from corresponding TPM values to avoid // possible misuse // #define TSS_KEYAUTH_AUTH_NEVER (0x10) #define TSS_KEYAUTH_AUTH_ALWAYS (0x11) #define TSS_KEYAUTH_AUTH_PRIV_USE_ONLY (0x12) // // Flags for TPM status information (GetStatus and SetStatus) // #define TSS_TPMSTATUS_DISABLEOWNERCLEAR (0x00000001) // persistent flag #define TSS_TPMSTATUS_DISABLEFORCECLEAR (0x00000002) // volatile flag #define TSS_TPMSTATUS_DISABLED (0x00000003) // persistent flag #define TSS_TPMSTATUS_DEACTIVATED (0x00000004) // volatile flag #define TSS_TPMSTATUS_OWNERSETDISABLE (0x00000005) // persistent flag // for SetStatus // (disable flag) #define TSS_TPMSTATUS_SETOWNERINSTALL (0x00000006) // persistent flag // (ownership flag) #define TSS_TPMSTATUS_DISABLEPUBEKREAD (0x00000007) // persistent flag #define TSS_TPMSTATUS_ALLOWMAINTENANCE (0x00000008) // persistent flag #define TSS_TPMSTATUS_PHYSPRES_LIFETIMELOCK (0x00000009) // persistent flag #define TSS_TPMSTATUS_PHYSPRES_HWENABLE (0x0000000A) // persistent flag #define TSS_TPMSTATUS_PHYSPRES_CMDENABLE (0x0000000B) // persistent flag #define TSS_TPMSTATUS_PHYSPRES_LOCK (0x0000000C) // volatile flag #define TSS_TPMSTATUS_PHYSPRESENCE (0x0000000D) // volatile flag #define TSS_TPMSTATUS_PHYSICALDISABLE (0x0000000E) // persistent flag // (SetStatus // disable flag) #define TSS_TPMSTATUS_CEKP_USED (0x0000000F) // persistent flag #define TSS_TPMSTATUS_PHYSICALSETDEACTIVATED (0x00000010) // persistent flag // (deactivated flag) #define TSS_TPMSTATUS_SETTEMPDEACTIVATED (0x00000011) // volatile flag // (deactivated flag) #define TSS_TPMSTATUS_POSTINITIALISE (0x00000012) // volatile flag #define TSS_TPMSTATUS_TPMPOST (0x00000013) // persistent flag #define TSS_TPMSTATUS_TPMPOSTLOCK (0x00000014) // persistent flag #define TSS_TPMSTATUS_DISABLEPUBSRKREAD (0x00000016) // persistent flag #define TSS_TPMSTATUS_MAINTENANCEUSED (0x00000017) // persistent flag #define TSS_TPMSTATUS_OPERATORINSTALLED (0x00000018) // persistent flag #define TSS_TPMSTATUS_OPERATOR_INSTALLED (TSS_TPMSTATUS_OPERATORINSTALLED) #define TSS_TPMSTATUS_FIPS (0x00000019) // persistent flag #define TSS_TPMSTATUS_ENABLEREVOKEEK (0x0000001A) // persistent flag #define TSS_TPMSTATUS_ENABLE_REVOKEEK (TSS_TPMSTATUS_ENABLEREVOKEEK) #define TSS_TPMSTATUS_NV_LOCK (0x0000001B) // persistent flag #define TSS_TPMSTATUS_TPM_ESTABLISHED (0x0000001C) // persistent flag #define TSS_TPMSTATUS_RESETLOCK (0x0000001D) // volatile flag #define TSS_TPMSTATUS_DISABLE_FULL_DA_LOGIC_INFO (0x0000001D) //persistent flag // // Capability flag definitions // // TPM capabilities // #define TSS_TPMCAP_ORD (0x10) #define TSS_TPMCAP_ALG (0x11) #define TSS_TPMCAP_FLAG (0x12) #define TSS_TPMCAP_PROPERTY (0x13) #define TSS_TPMCAP_VERSION (0x14) #define TSS_TPMCAP_VERSION_VAL (0x15) #define TSS_TPMCAP_NV_LIST (0x16) #define TSS_TPMCAP_NV_INDEX (0x17) #define TSS_TPMCAP_MFR (0x18) #define TSS_TPMCAP_SYM_MODE (0x19) #define TSS_TPMCAP_HANDLE (0x1a) #define TSS_TPMCAP_TRANS_ES (0x1b) #define TSS_TPMCAP_AUTH_ENCRYPT (0x1c) #define TSS_TPMCAP_SET_PERM_FLAGS (0x1d) // cf. TPM_SET_PERM_FLAGS #define TSS_TPMCAP_SET_VENDOR (0x1e) // cf. TPM_SET_VENDOR #define TSS_TPMCAP_DA_LOGIC (0x1f) // // Sub-Capability Flags for TSS_TPMCAP_PROPERTY // #define TSS_TPMCAP_PROP_PCR (0x10) #define TSS_TPMCAP_PROP_DIR (0x11) #define TSS_TPMCAP_PROP_MANUFACTURER (0x12) #define TSS_TPMCAP_PROP_SLOTS (0x13) #define TSS_TPMCAP_PROP_KEYS TSS_TPMCAP_PROP_SLOTS #define TSS_TPMCAP_PROP_FAMILYROWS (0x14) #define TSS_TPMCAP_PROP_DELEGATEROWS (0x15) #define TSS_TPMCAP_PROP_OWNER (0x16) #define TSS_TPMCAP_PROP_MAXKEYS (0x18) #define TSS_TPMCAP_PROP_AUTHSESSIONS (0x19) #define TSS_TPMCAP_PROP_MAXAUTHSESSIONS (0x1a) #define TSS_TPMCAP_PROP_TRANSESSIONS (0x1b) #define TSS_TPMCAP_PROP_MAXTRANSESSIONS (0x1c) #define TSS_TPMCAP_PROP_SESSIONS (0x1d) #define TSS_TPMCAP_PROP_MAXSESSIONS (0x1e) #define TSS_TPMCAP_PROP_CONTEXTS (0x1f) #define TSS_TPMCAP_PROP_MAXCONTEXTS (0x20) #define TSS_TPMCAP_PROP_DAASESSIONS (0x21) #define TSS_TPMCAP_PROP_MAXDAASESSIONS (0x22) #define TSS_TPMCAP_PROP_DAA_INTERRUPT (0x23) #define TSS_TPMCAP_PROP_COUNTERS (0x24) #define TSS_TPMCAP_PROP_MAXCOUNTERS (0x25) #define TSS_TPMCAP_PROP_ACTIVECOUNTER (0x26) #define TSS_TPMCAP_PROP_MIN_COUNTER (0x27) #define TSS_TPMCAP_PROP_TISTIMEOUTS (0x28) #define TSS_TPMCAP_PROP_STARTUPEFFECTS (0x29) #define TSS_TPMCAP_PROP_MAXCONTEXTCOUNTDIST (0x2a) #define TSS_TPMCAP_PROP_CMKRESTRICTION (0x2b) #define TSS_TPMCAP_PROP_DURATION (0x2c) #define TSS_TPMCAP_PROP_MAXNVAVAILABLE (0x2d) #define TSS_TPMCAP_PROP_INPUTBUFFERSIZE (0x2e) #define TSS_TPMCAP_PROP_REVISION (0x2f) #define TSS_TPMCAP_PROP_LOCALITIES_AVAIL (0x32) // // Resource type flags // Sub-Capability Flags for TSS_TPMCAP_HANDLE // #define TSS_RT_KEY ((UINT32)0x00000010) #define TSS_RT_AUTH ((UINT32)0x00000020) #define TSS_RT_TRANS ((UINT32)0x00000030) #define TSS_RT_COUNTER ((UINT32)0x00000040) // // TSS Core Service Capabilities // #define TSS_TCSCAP_ALG (0x00000001) #define TSS_TCSCAP_VERSION (0x00000002) #define TSS_TCSCAP_CACHING (0x00000003) #define TSS_TCSCAP_PERSSTORAGE (0x00000004) #define TSS_TCSCAP_MANUFACTURER (0x00000005) #define TSS_TCSCAP_PLATFORM_CLASS (0x00000006) #define TSS_TCSCAP_TRANSPORT (0x00000007) #define TSS_TCSCAP_PLATFORM_INFO (0x00000008) // // Sub-Capability Flags TSS-CoreService-Capabilities // #define TSS_TCSCAP_PROP_KEYCACHE (0x00000100) #define TSS_TCSCAP_PROP_AUTHCACHE (0x00000101) #define TSS_TCSCAP_PROP_MANUFACTURER_STR (0x00000102) #define TSS_TCSCAP_PROP_MANUFACTURER_ID (0x00000103) #define TSS_TCSCAP_PLATFORM_VERSION (0x00001100) #define TSS_TCSCAP_PLATFORM_TYPE (0x00001101) #define TSS_TCSCAP_TRANS_EXCLUSIVE (0x00002100) #define TSS_TCSCAP_PROP_HOST_PLATFORM (0x00003001) #define TSS_TCSCAP_PROP_ALL_PLATFORMS (0x00003002) // // TSS Service Provider Capabilities // #define TSS_TSPCAP_ALG (0x00000010) #define TSS_TSPCAP_VERSION (0x00000011) #define TSS_TSPCAP_PERSSTORAGE (0x00000012) #define TSS_TSPCAP_MANUFACTURER (0x00000013) #define TSS_TSPCAP_RETURNVALUE_INFO (0x00000015) #define TSS_TSPCAP_PLATFORM_INFO (0x00000016) // Sub-Capability Flags for TSS_TSPCAP_MANUFACTURER // #define TSS_TSPCAP_PROP_MANUFACTURER_STR (0x00000102) #define TSS_TSPCAP_PROP_MANUFACTURER_ID (0x00000103) // Sub-Capability Flags for TSS_TSPCAP_PLATFORM_INFO // #define TSS_TSPCAP_PLATFORM_TYPE (0x00000201) #define TSS_TSPCAP_PLATFORM_VERSION (0x00000202) // Sub-Capability Flags for TSS_TSPCAP_RETURNVALUE_INFO // #define TSS_TSPCAP_PROP_RETURNVALUE_INFO (0x00000201) // // Event type definitions // #define TSS_EV_CODE_CERT (0x00000001) #define TSS_EV_CODE_NOCERT (0x00000002) #define TSS_EV_XML_CONFIG (0x00000003) #define TSS_EV_NO_ACTION (0x00000004) #define TSS_EV_SEPARATOR (0x00000005) #define TSS_EV_ACTION (0x00000006) #define TSS_EV_PLATFORM_SPECIFIC (0x00000007) // // TSP random number limits // #define TSS_TSPCAP_RANDOMLIMIT (0x00001000) // Errata: Missing from spec // // UUIDs // // Errata: This are not in the spec #define TSS_UUID_SRK {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 1}} // Storage root key #define TSS_UUID_SK {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 2}} // System key #define TSS_UUID_RK {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 3}} // roaming key #define TSS_UUID_CRK {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 8}} // CMK roaming key #define TSS_UUID_USK1 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 4}} // user storage key 1 #define TSS_UUID_USK2 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 5}} // user storage key 2 #define TSS_UUID_USK3 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 6}} // user storage key 3 #define TSS_UUID_USK4 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 7}} // user storage key 4 #define TSS_UUID_USK5 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 9}} // user storage key 5 #define TSS_UUID_USK6 {0, 0, 0, 0, 0, {0, 0, 0, 0, 0, 10}}// user storage key 6 // macro to derive UUIDs for keys whose "OwnerEvict" key is set. #define TSS_UUID_OWNEREVICT(i) {0, 0, 0, 0, 0, {0, 0, 0, 0, 1, (i)}} // // TPM well-known secret // #define TSS_WELL_KNOWN_SECRET \ {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00} // Values for the "direction" parameters in the Tspi_PcrComposite_XX functions. #define TSS_PCRS_DIRECTION_CREATION ((UINT32)1) #define TSS_PCRS_DIRECTION_RELEASE ((UINT32)2) // // TSS blob version definition for ASN.1 blobs // #define TSS_BLOB_STRUCT_VERSION 0x01 // // TSS blob type definitions for ASN.1 blobs // #define TSS_BLOB_TYPE_KEY 0x01 #define TSS_BLOB_TYPE_PUBKEY 0x02 #define TSS_BLOB_TYPE_MIGKEY 0x03 #define TSS_BLOB_TYPE_SEALEDDATA 0x04 #define TSS_BLOB_TYPE_BOUNDDATA 0x05 #define TSS_BLOB_TYPE_MIGTICKET 0x06 #define TSS_BLOB_TYPE_PRIVATEKEY 0x07 #define TSS_BLOB_TYPE_PRIVATEKEY_MOD1 0x08 #define TSS_BLOB_TYPE_RANDOM_XOR 0x09 #define TSS_BLOB_TYPE_CERTIFY_INFO 0x0A #define TSS_BLOB_TYPE_KEY_1_2 0x0B #define TSS_BLOB_TYPE_CERTIFY_INFO_2 0x0C #define TSS_BLOB_TYPE_CMK_MIG_KEY 0x0D #define TSS_BLOB_TYPE_CMK_BYTE_STREAM 0x0E // // Values for TPM_CMK_DELEGATE bitmasks // For now these are exactly the same values as the corresponding // TPM_CMK_DELEGATE_* bitmasks. // #define TSS_CMK_DELEGATE_SIGNING (((UINT32)1)<<31) #define TSS_CMK_DELEGATE_STORAGE (((UINT32)1)<<30) #define TSS_CMK_DELEGATE_BIND (((UINT32)1)<<29) #define TSS_CMK_DELEGATE_LEGACY (((UINT32)1)<<28) #define TSS_CMK_DELEGATE_MIGRATE (((UINT32)1)<<27) // // Constants for DAA // #define TSS_DAA_LENGTH_N 256 // Length of the RSA Modulus (2048 bits) #define TSS_DAA_LENGTH_F 13 // Length of the f_i's (information encoded into the certificate, 104 bits) #define TSS_DAA_LENGTH_E 46 // Length of the e's (exponents, part of certificate, 386 bits) #define TSS_DAA_LENGTH_E_PRIME 15 // Length of the interval the e's are chosen from (120 bits) #define TSS_DAA_LENGTH_V 317 // Length of the v's (random value, part of certificate, 2536 bits) #define TSS_DAA_LENGTH_SAFETY 10 // Length of the security parameter controlling the statistical zero-knowledge property (80 bits) #define TSS_DAA_LENGTH_HASH TPM_SHA1_160_HASH_LEN // Length of the output of the hash function SHA-1 used for the Fiat-Shamir heuristic(160 bits) #define TSS_DAA_LENGTH_S 128 // Length of the split large exponent for easier computations on the TPM (1024 bits) #define TSS_DAA_LENGTH_GAMMA 204 // Length of the modulus 'Gamma' (1632 bits) #define TSS_DAA_LENGTH_RHO 26 // Length of the order 'rho' of the sub group of Z*_Gamma that is used for roggue tagging (208 bits) #define TSS_DAA_LENGTH_MFG1_GAMMA 214 // Length of the output of MGF1 in conjunction with the modulus Gamma (1712 bits) #define TSS_DAA_LENGTH_MGF1_AR 25 // Length of the output of MGF1 used for anonymity revocation (200 bits) #endif // __TSS_DEFINES_H__ tpm-quote-tools-1.0.4/include/tss/tcpa_struct.h0000644000175000017510000000017513037720561016476 00000000000000 #ifndef __TCPA_STRUCT_H__ #define __TCPA_STRUCT_H__ #warning including deprecated header file tcpa_struct.h #endif tpm-quote-tools-1.0.4/include/tss/tcs_error.h0000644000175000017510000000372213037720561016146 00000000000000/*++ TSS Core Service error return codes --*/ #ifndef __TCS_ERROR_H__ #define __TCS_ERROR_H__ #ifndef TSS_E_BASE #define TSS_E_BASE 0x00000000L #endif // TSS_E_BASE // The context handle supplied is invalid. #define TCS_E_INVALID_CONTEXTHANDLE (UINT32)(TSS_E_BASE + 0x0C1L) // The key handle supplied is invalid. #define TCS_E_INVALID_KEYHANDLE (UINT32)(TSS_E_BASE + 0x0C2L) // The authorization session handle supplied is invalid. #define TCS_E_INVALID_AUTHHANDLE (UINT32)(TSS_E_BASE + 0x0C3L) // the auth session has been closed by the TPM #define TCS_E_INVALID_AUTHSESSION (UINT32)(TSS_E_BASE + 0x0C4L) // the key has been unloaded #define TCS_E_INVALID_KEY (UINT32)(TSS_E_BASE + 0x0C5L) // Key addressed by the application key handle does not match the key addressed // by the given UUID. #define TCS_E_KEY_MISMATCH (UINT32)(TSS_E_BASE + 0x0C8L) // Key adressed by Key's UUID cannot be loaded because one of the required // parent keys needs authorization. #define TCS_E_KM_LOADFAILED (UINT32)(TSS_E_BASE + 0x0CAL) // The Key Cache Manager could not reload the key into the TPM. #define TCS_E_KEY_CONTEXT_RELOAD (UINT32)(TSS_E_BASE + 0x0CCL) // Bad memory index #define TCS_E_BAD_INDEX (UINT32)(TSS_E_BASE + 0x0CDL) // These TCS_E_ macros are defined by name in the TSS spec, however // they are defined to have the same values as the TSS_E_ equivalents. #define TCS_SUCCESS TSS_SUCCESS #define TCS_E_KEY_ALREADY_REGISTERED TSS_E_KEY_ALREADY_REGISTERED #define TCS_E_KEY_NOT_REGISTERED TSS_E_KEY_NOT_REGISTERED #define TCS_E_BAD_PARAMETER TSS_E_BAD_PARAMETER #define TCS_E_OUTOFMEMORY TSS_E_OUTOFMEMORY #define TCS_E_SIZE TSS_E_SIZE #define TCS_E_NOTIMPL TSS_E_NOTIMPL #define TCS_E_INTERNAL_ERROR TSS_E_INTERNAL_ERROR #endif // __TCS_ERROR_H__ tpm-quote-tools-1.0.4/include/tss/tspi.h0000644000175000017510000012762413037720561015133 00000000000000#if !defined(_TSPI_H_) #define _TSPI_H_ #include #include #include #include #include #if !defined( TSPICALL ) #if !defined(WIN32) || defined (TSP_STATIC) // Linux, or a Win32 static library #define TSPICALL extern TSS_RESULT #elif defined (TSPDLL_EXPORTS) // Win32 DLL build #define TSPICALL extern __declspec(dllexport) TSS_RESULT #else // Win32 DLL import #define TSPICALL extern __declspec(dllimport) TSS_RESULT #endif #endif /* TSPICALL */ #if defined ( __cplusplus ) extern "C" { #endif /* __cplusplus */ // Class-independent ASN.1 conversion functions TSPICALL Tspi_EncodeDER_TssBlob ( UINT32 rawBlobSize, // in BYTE* rawBlob, // in UINT32 blobType, // in UINT32* derBlobSize, // in, out BYTE* derBlob // out ); TSPICALL Tspi_DecodeBER_TssBlob ( UINT32 berBlobSize, // in BYTE* berBlob, // in UINT32* blobType, // out UINT32* rawBlobSize, // in, out BYTE* rawBlob // out ); // Common Methods TSPICALL Tspi_SetAttribUint32 ( TSS_HOBJECT hObject, // in TSS_FLAG attribFlag, // in TSS_FLAG subFlag, // in UINT32 ulAttrib // in ); TSPICALL Tspi_GetAttribUint32 ( TSS_HOBJECT hObject, // in TSS_FLAG attribFlag, // in TSS_FLAG subFlag, // in UINT32* pulAttrib // out ); TSPICALL Tspi_SetAttribData ( TSS_HOBJECT hObject, // in TSS_FLAG attribFlag, // in TSS_FLAG subFlag, // in UINT32 ulAttribDataSize, // in BYTE* rgbAttribData // in ); TSPICALL Tspi_GetAttribData ( TSS_HOBJECT hObject, // in TSS_FLAG attribFlag, // in TSS_FLAG subFlag, // in UINT32* pulAttribDataSize, // out BYTE** prgbAttribData // out ); TSPICALL Tspi_ChangeAuth ( TSS_HOBJECT hObjectToChange, // in TSS_HOBJECT hParentObject, // in TSS_HPOLICY hNewPolicy // in ); TSPICALL Tspi_ChangeAuthAsym ( TSS_HOBJECT hObjectToChange, // in TSS_HOBJECT hParentObject, // in TSS_HKEY hIdentKey, // in TSS_HPOLICY hNewPolicy // in ); TSPICALL Tspi_GetPolicyObject ( TSS_HOBJECT hObject, // in TSS_FLAG policyType, // in TSS_HPOLICY* phPolicy // out ); // Tspi_Context Class Definitions TSPICALL Tspi_Context_Create ( TSS_HCONTEXT* phContext // out ); TSPICALL Tspi_Context_Close ( TSS_HCONTEXT hContext // in ); TSPICALL Tspi_Context_Connect ( TSS_HCONTEXT hContext, // in TSS_UNICODE* wszDestination // in ); TSPICALL Tspi_Context_FreeMemory ( TSS_HCONTEXT hContext, // in BYTE* rgbMemory // in ); TSPICALL Tspi_Context_GetDefaultPolicy ( TSS_HCONTEXT hContext, // in TSS_HPOLICY* phPolicy // out ); TSPICALL Tspi_Context_CreateObject ( TSS_HCONTEXT hContext, // in TSS_FLAG objectType, // in TSS_FLAG initFlags, // in TSS_HOBJECT* phObject // out ); TSPICALL Tspi_Context_CloseObject ( TSS_HCONTEXT hContext, // in TSS_HOBJECT hObject // in ); TSPICALL Tspi_Context_GetCapability ( TSS_HCONTEXT hContext, // in TSS_FLAG capArea, // in UINT32 ulSubCapLength, // in BYTE* rgbSubCap, // in UINT32* pulRespDataLength, // out BYTE** prgbRespData // out ); TSPICALL Tspi_Context_GetTpmObject ( TSS_HCONTEXT hContext, // in TSS_HTPM* phTPM // out ); TSPICALL Tspi_Context_SetTransEncryptionKey ( TSS_HCONTEXT hContext, // in TSS_HKEY hKey // in ); TSPICALL Tspi_Context_CloseSignTransport ( TSS_HCONTEXT hContext, // in TSS_HKEY hSigningKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_Context_LoadKeyByBlob ( TSS_HCONTEXT hContext, // in TSS_HKEY hUnwrappingKey, // in UINT32 ulBlobLength, // in BYTE* rgbBlobData, // in TSS_HKEY* phKey // out ); TSPICALL Tspi_Context_LoadKeyByUUID ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_UUID uuidData, // in TSS_HKEY* phKey // out ); TSPICALL Tspi_Context_RegisterKey ( TSS_HCONTEXT hContext, // in TSS_HKEY hKey, // in TSS_FLAG persistentStorageType, // in TSS_UUID uuidKey, // in TSS_FLAG persistentStorageTypeParent, // in TSS_UUID uuidParentKey // in ); TSPICALL Tspi_Context_UnregisterKey ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_UUID uuidKey, // in TSS_HKEY* phkey // out ); TSPICALL Tspi_Context_GetKeyByUUID ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_UUID uuidData, // in TSS_HKEY* phKey // out ); TSPICALL Tspi_Context_GetKeyByPublicInfo ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_ALGORITHM_ID algID, // in UINT32 ulPublicInfoLength, // in BYTE* rgbPublicInfo, // in TSS_HKEY* phKey // out ); TSPICALL Tspi_Context_GetRegisteredKeysByUUID ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_UUID* pUuidData, // in UINT32* pulKeyHierarchySize, // out TSS_KM_KEYINFO** ppKeyHierarchy // out ); TSPICALL Tspi_Context_GetRegisteredKeysByUUID2 ( TSS_HCONTEXT hContext, // in TSS_FLAG persistentStorageType, // in TSS_UUID* pUuidData, // in UINT32* pulKeyHierarchySize, // out TSS_KM_KEYINFO2** ppKeyHierarchy // out ); // Policy class definitions TSPICALL Tspi_Policy_SetSecret ( TSS_HPOLICY hPolicy, // in TSS_FLAG secretMode, // in UINT32 ulSecretLength, // in BYTE* rgbSecret // in ); TSPICALL Tspi_Policy_FlushSecret ( TSS_HPOLICY hPolicy // in ); TSPICALL Tspi_Policy_AssignToObject ( TSS_HPOLICY hPolicy, // in TSS_HOBJECT hObject // in ); // TPM Class Definitions TSPICALL Tspi_TPM_KeyControlOwner ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in UINT32 attribName, // in TSS_BOOL attribValue, // in TSS_UUID* pUuidData // out ); TSPICALL Tspi_TPM_CreateEndorsementKey ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_TPM_CreateRevocableEndorsementKey ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in TSS_VALIDATION* pValidationData, // in, out UINT32* pulEkResetDataLength, // in, out BYTE** rgbEkResetData // in, out ); TSPICALL Tspi_TPM_RevokeEndorsementKey ( TSS_HTPM hTPM, // in UINT32 ulEkResetDataLength, // in BYTE* rgbEkResetData // in ); TSPICALL Tspi_TPM_GetPubEndorsementKey ( TSS_HTPM hTPM, // in TSS_BOOL fOwnerAuthorized, // in TSS_VALIDATION* pValidationData, // in, out TSS_HKEY* phEndorsementPubKey // out ); TSPICALL Tspi_TPM_OwnerGetSRKPubKey ( TSS_HTPM hTPM, // in UINT32* pulPubKeyLength, // out BYTE** prgbPubKey // out ); TSPICALL Tspi_TPM_TakeOwnership ( TSS_HTPM hTPM, // in TSS_HKEY hKeySRK, // in TSS_HKEY hEndorsementPubKey // in ); TSPICALL Tspi_TPM_ClearOwner ( TSS_HTPM hTPM, // in TSS_BOOL fForcedClear // in ); TSPICALL Tspi_TPM_CollateIdentityRequest ( TSS_HTPM hTPM, // in TSS_HKEY hKeySRK, // in TSS_HKEY hCAPubKey, // in UINT32 ulIdentityLabelLength, // in BYTE* rgbIdentityLabelData, // in TSS_HKEY hIdentityKey, // in TSS_ALGORITHM_ID algID, // in UINT32* pulTCPAIdentityReqLength, // out BYTE** prgbTCPAIdentityReq // out ); TSPICALL Tspi_TPM_ActivateIdentity ( TSS_HTPM hTPM, // in TSS_HKEY hIdentKey, // in UINT32 ulAsymCAContentsBlobLength, // in BYTE* rgbAsymCAContentsBlob, // in UINT32 ulSymCAAttestationBlobLength, // in BYTE* rgbSymCAAttestationBlob, // in UINT32* pulCredentialLength, // out BYTE** prgbCredential // out ); TSPICALL Tspi_TPM_CreateMaintenanceArchive ( TSS_HTPM hTPM, // in TSS_BOOL fGenerateRndNumber, // in UINT32* pulRndNumberLength, // out BYTE** prgbRndNumber, // out UINT32* pulArchiveDataLength, // out BYTE** prgbArchiveData // out ); TSPICALL Tspi_TPM_KillMaintenanceFeature ( TSS_HTPM hTPM // in ); TSPICALL Tspi_TPM_LoadMaintenancePubKey ( TSS_HTPM hTPM, // in TSS_HKEY hMaintenanceKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_TPM_CheckMaintenancePubKey ( TSS_HTPM hTPM, // in TSS_HKEY hMaintenanceKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_TPM_SetOperatorAuth ( TSS_HTPM hTPM, // in TSS_HPOLICY hOperatorPolicy // in ); TSPICALL Tspi_TPM_SetStatus ( TSS_HTPM hTPM, // in TSS_FLAG statusFlag, // in TSS_BOOL fTpmState // in ); TSPICALL Tspi_TPM_GetStatus ( TSS_HTPM hTPM, // in TSS_FLAG statusFlag, // in TSS_BOOL* pfTpmState // out ); TSPICALL Tspi_TPM_GetCapability ( TSS_HTPM hTPM, // in TSS_FLAG capArea, // in UINT32 ulSubCapLength, // in BYTE* rgbSubCap, // in UINT32* pulRespDataLength, // out BYTE** prgbRespData // out ); TSPICALL Tspi_TPM_GetCapabilitySigned ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in TSS_FLAG capArea, // in UINT32 ulSubCapLength, // in BYTE* rgbSubCap, // in TSS_VALIDATION* pValidationData, // in, out UINT32* pulRespDataLength, // out BYTE** prgbRespData // out ); TSPICALL Tspi_TPM_SelfTestFull ( TSS_HTPM hTPM // in ); TSPICALL Tspi_TPM_CertifySelfTest ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_TPM_GetTestResult ( TSS_HTPM hTPM, // in UINT32* pulTestResultLength, // out BYTE** prgbTestResult // out ); TSPICALL Tspi_TPM_GetRandom ( TSS_HTPM hTPM, // in UINT32 ulRandomDataLength, // in BYTE** prgbRandomData // out ); TSPICALL Tspi_TPM_StirRandom ( TSS_HTPM hTPM, // in UINT32 ulEntropyDataLength, // in BYTE* rgbEntropyData // in ); TSPICALL Tspi_TPM_GetEvent ( TSS_HTPM hTPM, // in UINT32 ulPcrIndex, // in UINT32 ulEventNumber, // in TSS_PCR_EVENT* pPcrEvent // out ); TSPICALL Tspi_TPM_GetEvents ( TSS_HTPM hTPM, // in UINT32 ulPcrIndex, // in UINT32 ulStartNumber, // in UINT32* pulEventNumber, // in, out TSS_PCR_EVENT** prgPcrEvents // out ); TSPICALL Tspi_TPM_GetEventLog ( TSS_HTPM hTPM, // in UINT32* pulEventNumber, // out TSS_PCR_EVENT** prgPcrEvents // out ); TSPICALL Tspi_TPM_Quote ( TSS_HTPM hTPM, // in TSS_HKEY hIdentKey, // in TSS_HPCRS hPcrComposite, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_TPM_Quote2 ( TSS_HTPM hTPM, // in TSS_HKEY hIdentKey, // in TSS_BOOL fAddVersion, // in TSS_HPCRS hPcrComposite, // in TSS_VALIDATION* pValidationData, // in, out UINT32* versionInfoSize, // out BYTE** versionInfo // out ); TSPICALL Tspi_TPM_PcrExtend ( TSS_HTPM hTPM, // in UINT32 ulPcrIndex, // in UINT32 ulPcrDataLength, // in BYTE* pbPcrData, // in TSS_PCR_EVENT* pPcrEvent, // in UINT32* pulPcrValueLength, // out BYTE** prgbPcrValue // out ); TSPICALL Tspi_TPM_PcrRead ( TSS_HTPM hTPM, // in UINT32 ulPcrIndex, // in UINT32* pulPcrValueLength, // out BYTE** prgbPcrValue // out ); TSPICALL Tspi_TPM_PcrReset ( TSS_HTPM hTPM, // in TSS_HPCRS hPcrComposite // in ); TSPICALL Tspi_TPM_AuthorizeMigrationTicket ( TSS_HTPM hTPM, // in TSS_HKEY hMigrationKey, // in TSS_MIGRATE_SCHEME migrationScheme, // in UINT32* pulMigTicketLength, // out BYTE** prgbMigTicket // out ); TSPICALL Tspi_TPM_CMKSetRestrictions ( TSS_HTPM hTPM, // in TSS_CMK_DELEGATE CmkDelegate // in ); TSPICALL Tspi_TPM_CMKApproveMA ( TSS_HTPM hTPM, // in TSS_HMIGDATA hMaAuthData // in ); TSPICALL Tspi_TPM_CMKCreateTicket ( TSS_HTPM hTPM, // in TSS_HKEY hVerifyKey, // in TSS_HMIGDATA hSigData // in ); TSPICALL Tspi_TPM_ReadCounter ( TSS_HTPM hTPM, // in UINT32* counterValue // out ); TSPICALL Tspi_TPM_ReadCurrentTicks ( TSS_HTPM hTPM, // in TPM_CURRENT_TICKS* tickCount // out ); TSPICALL Tspi_TPM_DirWrite ( TSS_HTPM hTPM, // in UINT32 ulDirIndex, // in UINT32 ulDirDataLength, // in BYTE* rgbDirData // in ); TSPICALL Tspi_TPM_DirRead ( TSS_HTPM hTPM, // in UINT32 ulDirIndex, // in UINT32* pulDirDataLength, // out BYTE** prgbDirData // out ); TSPICALL Tspi_TPM_Delegate_AddFamily ( TSS_HTPM hTPM, // in, must not be NULL BYTE bLabel, // in TSS_HDELFAMILY* phFamily // out ); TSPICALL Tspi_TPM_Delegate_GetFamily ( TSS_HTPM hTPM, // in, must not NULL UINT32 ulFamilyID, // in TSS_HDELFAMILY* phFamily // out ); TSPICALL Tspi_TPM_Delegate_InvalidateFamily ( TSS_HTPM hTPM, // in, must not be NULL TSS_HDELFAMILY hFamily // in ); TSPICALL Tspi_TPM_Delegate_CreateDelegation ( TSS_HOBJECT hObject, // in BYTE bLabel, // in UINT32 ulFlags, // in TSS_HPCRS hPcr, // in, may be NULL TSS_HDELFAMILY hFamily, // in TSS_HPOLICY hDelegation // in, out ); TSPICALL Tspi_TPM_Delegate_CacheOwnerDelegation ( TSS_HTPM hTPM, // in, must not be NULL TSS_HPOLICY hDelegation, // in, out UINT32 ulIndex, // in UINT32 ulFlags // in ); TSPICALL Tspi_TPM_Delegate_UpdateVerificationCount ( TSS_HTPM hTPM, // in TSS_HPOLICY hDelegation // in, out ); TSPICALL Tspi_TPM_Delegate_VerifyDelegation ( TSS_HPOLICY hDelegation // in, out ); TSPICALL Tspi_TPM_Delegate_ReadTables ( TSS_HCONTEXT hContext, // in UINT32* pulFamilyTableSize, // out TSS_FAMILY_TABLE_ENTRY** ppFamilyTable, // out UINT32* pulDelegateTableSize, // out TSS_DELEGATION_TABLE_ENTRY** ppDelegateTable // out ); TSPICALL Tspi_TPM_DAA_JoinInit ( TSS_HTPM hTPM, // in TSS_HDAA_ISSUER_KEY hIssuerKey, // in UINT32 daaCounter, // in UINT32 issuerAuthPKsLength, // in TSS_HKEY* issuerAuthPKs, // in UINT32 issuerAuthPKSignaturesLength, // in UINT32 issuerAuthPKSignaturesLength2, // in BYTE** issuerAuthPKSignatures, // in UINT32* capitalUprimeLength, // out BYTE** capitalUprime, // out TSS_DAA_IDENTITY_PROOF** identityProof, // out UINT32* joinSessionLength, // out BYTE** joinSession // out ); TSPICALL Tspi_TPM_DAA_JoinCreateDaaPubKey ( TSS_HTPM hTPM, // in TSS_HDAA_CREDENTIAL hDAACredential, // in UINT32 authenticationChallengeLength, // in BYTE* authenticationChallenge, // in UINT32 nonceIssuerLength, // in BYTE* nonceIssuer, // in UINT32 attributesPlatformLength, // in UINT32 attributesPlatformLength2, // in BYTE** attributesPlatform, // in UINT32 joinSessionLength, // in BYTE* joinSession, // in TSS_DAA_CREDENTIAL_REQUEST** credentialRequest // out ); TSPICALL Tspi_TPM_DAA_JoinStoreCredential ( TSS_HTPM hTPM, // in TSS_HDAA_CREDENTIAL hDAACredential, // in TSS_DAA_CRED_ISSUER* credIssuer, // in UINT32 joinSessionLength, // in BYTE* joinSession // in ); TSPICALL Tspi_TPM_DAA_Sign ( TSS_HTPM hTPM, // in TSS_HDAA_CREDENTIAL hDAACredential, // in TSS_HDAA_ARA_KEY hARAKey, // in TSS_DAA_SELECTED_ATTRIB* revealAttributes, // in UINT32 verifierNonceLength, // in BYTE* verifierNonce, // in UINT32 verifierBaseNameLength, // in BYTE* verifierBaseName, // in TSS_HOBJECT signData, // in TSS_DAA_SIGNATURE** daaSignature // out ); TSPICALL Tspi_TPM_GetAuditDigest ( TSS_HTPM hTPM, // in TSS_HKEY hKey, // in TSS_BOOL closeAudit, // in UINT32* pulAuditDigestSize, // out BYTE** prgbAuditDigest, // out TPM_COUNTER_VALUE* pCounterValue, // out TSS_VALIDATION* pValidationData, // out UINT32* ordSize, // out UINT32** ordList // out ); // PcrComposite Class Definitions TSPICALL Tspi_PcrComposite_SelectPcrIndex ( TSS_HPCRS hPcrComposite, // in UINT32 ulPcrIndex // in ); TSPICALL Tspi_PcrComposite_SelectPcrIndexEx ( TSS_HPCRS hPcrComposite, // in UINT32 ulPcrIndex, // in UINT32 direction // in ); TSPICALL Tspi_PcrComposite_SetPcrValue ( TSS_HPCRS hPcrComposite, // in UINT32 ulPcrIndex, // in UINT32 ulPcrValueLength, // in BYTE* rgbPcrValue // in ); TSPICALL Tspi_PcrComposite_GetPcrValue ( TSS_HPCRS hPcrComposite, // in UINT32 ulPcrIndex, // in UINT32* pulPcrValueLength, // out BYTE** prgbPcrValue // out ); TSPICALL Tspi_PcrComposite_SetPcrLocality ( TSS_HPCRS hPcrComposite, // in UINT32 LocalityValue // in ); TSPICALL Tspi_PcrComposite_GetPcrLocality ( TSS_HPCRS hPcrComposite, // in UINT32* pLocalityValue // out ); TSPICALL Tspi_PcrComposite_GetCompositeHash ( TSS_HPCRS hPcrComposite, // in UINT32* pLen, // in BYTE** ppbHashData // out ); // Key Class Definition TSPICALL Tspi_Key_LoadKey ( TSS_HKEY hKey, // in TSS_HKEY hUnwrappingKey // in ); TSPICALL Tspi_Key_UnloadKey ( TSS_HKEY hKey // in ); TSPICALL Tspi_Key_GetPubKey ( TSS_HKEY hKey, // in UINT32* pulPubKeyLength, // out BYTE** prgbPubKey // out ); TSPICALL Tspi_Key_CertifyKey ( TSS_HKEY hKey, // in TSS_HKEY hCertifyingKey, // in TSS_VALIDATION* pValidationData // in, out ); TSPICALL Tspi_Key_CreateKey ( TSS_HKEY hKey, // in TSS_HKEY hWrappingKey, // in TSS_HPCRS hPcrComposite // in, may be NULL ); TSPICALL Tspi_Key_WrapKey ( TSS_HKEY hKey, // in TSS_HKEY hWrappingKey, // in TSS_HPCRS hPcrComposite // in, may be NULL ); TSPICALL Tspi_Key_CreateMigrationBlob ( TSS_HKEY hKeyToMigrate, // in TSS_HKEY hParentKey, // in UINT32 ulMigTicketLength, // in BYTE* rgbMigTicket, // in UINT32* pulRandomLength, // out BYTE** prgbRandom, // out UINT32* pulMigrationBlobLength, // out BYTE** prgbMigrationBlob // out ); TSPICALL Tspi_Key_ConvertMigrationBlob ( TSS_HKEY hKeyToMigrate, // in TSS_HKEY hParentKey, // in UINT32 ulRandomLength, // in BYTE* rgbRandom, // in UINT32 ulMigrationBlobLength, // in BYTE* rgbMigrationBlob // in ); TSPICALL Tspi_Key_MigrateKey ( TSS_HKEY hMaKey, // in TSS_HKEY hPublicKey, // in TSS_HKEY hMigData // in ); TSPICALL Tspi_Key_CMKCreateBlob ( TSS_HKEY hKeyToMigrate, // in TSS_HKEY hParentKey, // in TSS_HMIGDATA hMigrationData, // in UINT32* pulRandomLength, // out BYTE** prgbRandom // out ); TSPICALL Tspi_Key_CMKConvertMigration ( TSS_HKEY hKeyToMigrate, // in TSS_HKEY hParentKey, // in TSS_HMIGDATA hMigrationData, // in UINT32 ulRandomLength, // in BYTE* rgbRandom // in ); // Hash Class Definition TSPICALL Tspi_Hash_Sign ( TSS_HHASH hHash, // in TSS_HKEY hKey, // in UINT32* pulSignatureLength, // out BYTE** prgbSignature // out ); TSPICALL Tspi_Hash_VerifySignature ( TSS_HHASH hHash, // in TSS_HKEY hKey, // in UINT32 ulSignatureLength, // in BYTE* rgbSignature // in ); TSPICALL Tspi_Hash_SetHashValue ( TSS_HHASH hHash, // in UINT32 ulHashValueLength, // in BYTE* rgbHashValue // in ); TSPICALL Tspi_Hash_GetHashValue ( TSS_HHASH hHash, // in UINT32* pulHashValueLength, // out BYTE** prgbHashValue // out ); TSPICALL Tspi_Hash_UpdateHashValue ( TSS_HHASH hHash, // in UINT32 ulDataLength, // in BYTE* rgbData // in ); TSPICALL Tspi_Hash_TickStampBlob ( TSS_HHASH hHash, // in TSS_HKEY hIdentKey, // in TSS_VALIDATION* pValidationData // in ); // EncData Class Definition TSPICALL Tspi_Data_Bind ( TSS_HENCDATA hEncData, // in TSS_HKEY hEncKey, // in UINT32 ulDataLength, // in BYTE* rgbDataToBind // in ); TSPICALL Tspi_Data_Unbind ( TSS_HENCDATA hEncData, // in TSS_HKEY hKey, // in UINT32* pulUnboundDataLength, // out BYTE** prgbUnboundData // out ); TSPICALL Tspi_Data_Seal ( TSS_HENCDATA hEncData, // in TSS_HKEY hEncKey, // in UINT32 ulDataLength, // in BYTE* rgbDataToSeal, // in TSS_HPCRS hPcrComposite // in ); TSPICALL Tspi_Data_Unseal ( TSS_HENCDATA hEncData, // in TSS_HKEY hKey, // in UINT32* pulUnsealedDataLength, // out BYTE** prgbUnsealedData // out ); // NV Class Definition TSPICALL Tspi_NV_DefineSpace ( TSS_HNVSTORE hNVStore, // in TSS_HPCRS hReadPcrComposite, // in, may be NULL TSS_HPCRS hWritePcrComposite // in, may be NULL ); TSPICALL Tspi_NV_ReleaseSpace ( TSS_HNVSTORE hNVStore // in ); TSPICALL Tspi_NV_WriteValue ( TSS_HNVSTORE hNVStore, // in UINT32 offset, // in UINT32 ulDataLength, // in BYTE* rgbDataToWrite // in ); TSPICALL Tspi_NV_ReadValue ( TSS_HNVSTORE hNVStore, // in UINT32 offset, // in UINT32* ulDataLength, // in, out BYTE** rgbDataRead // out ); // DAA Utility functions (optional, do not require a TPM or TCS) TSPICALL Tspi_DAA_IssuerKeyVerify ( TSS_HDAA_CREDENTIAL hDAACredential, // in TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_BOOL* isCorrect // out ); TSPICALL Tspi_DAA_Issuer_GenerateKey ( TSS_HDAA_ISSUER_KEY hIssuerKey, // in UINT32 issuerBaseNameLength, // in BYTE* issuerBaseName // in ); TSPICALL Tspi_DAA_Issuer_InitCredential ( TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_HKEY issuerAuthPK, // in TSS_DAA_IDENTITY_PROOF* identityProof, // in UINT32 capitalUprimeLength, // in BYTE* capitalUprime, // in UINT32 daaCounter, // in UINT32* nonceIssuerLength, // out BYTE** nonceIssuer, // out UINT32* authenticationChallengeLength, // out BYTE** authenticationChallenge, // out UINT32* joinSessionLength, // out BYTE** joinSession // out ); TSPICALL Tspi_DAA_Issuer_IssueCredential ( TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_DAA_CREDENTIAL_REQUEST* credentialRequest, // in UINT32 issuerJoinSessionLength, // in BYTE* issuerJoinSession, // in TSS_DAA_CRED_ISSUER** credIssuer // out ); TSPICALL Tspi_DAA_Verifier_Init ( TSS_HDAA_CREDENTIAL hDAACredential, // in UINT32* nonceVerifierLength, // out BYTE** nonceVerifier, // out UINT32* baseNameLength, // out BYTE** baseName // out ); TSPICALL Tspi_DAA_VerifySignature ( TSS_HDAA_CREDENTIAL hDAACredential, // in TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_HDAA_ARA_KEY hARAKey, // in TSS_HHASH hARACondition, // in UINT32 attributesLength, // in UINT32 attributesLength2, // in BYTE** attributes, // in UINT32 verifierNonceLength, // in BYTE* verifierNonce, // in UINT32 verifierBaseNameLength, // in BYTE* verifierBaseName, // in TSS_HOBJECT signData, // in TSS_DAA_SIGNATURE* daaSignature, // in TSS_BOOL* isCorrect // out ); TSPICALL Tspi_DAA_ARA_GenerateKey ( TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_HDAA_ARA_KEY hARAKey // in ); TSPICALL Tspi_DAA_ARA_RevokeAnonymity ( TSS_HDAA_ARA_KEY hARAKey, // in TSS_HHASH hARACondition, // in TSS_HDAA_ISSUER_KEY hIssuerKey, // in TSS_DAA_PSEUDONYM_ENCRYPTED* encryptedPseudonym, // in TSS_DAA_PSEUDONYM_PLAIN** pseudonym // out ); // Callback typedefs typedef TSS_RESULT (*Tspicb_CallbackHMACAuth) ( PVOID lpAppData, // in TSS_HOBJECT hAuthorizedObject, // in TSS_BOOL ReturnOrVerify, // in UINT32 ulPendingFunction, // in TSS_BOOL ContinueUse, // in UINT32 ulSizeNonces, // in BYTE* rgbNonceEven, // in BYTE* rgbNonceOdd, // in BYTE* rgbNonceEvenOSAP, // in BYTE* rgbNonceOddOSAP, // in UINT32 ulSizeDigestHmac, // in BYTE* rgbParamDigest, // in BYTE* rgbHmacData // in, out ); typedef TSS_RESULT (*Tspicb_CallbackXorEnc) ( PVOID lpAppData, // in TSS_HOBJECT hOSAPObject, // in TSS_HOBJECT hObject, // in TSS_FLAG PurposeSecret, // in UINT32 ulSizeNonces, // in BYTE* rgbNonceEven, // in BYTE* rgbNonceOdd, // in BYTE* rgbNonceEvenOSAP, // in BYTE* rgbNonceOddOSAP, // in UINT32 ulSizeEncAuth, // in BYTE* rgbEncAuthUsage, // out BYTE* rgbEncAuthMigration // out ); typedef TSS_RESULT (*Tspicb_CallbackTakeOwnership) ( PVOID lpAppData, // in TSS_HOBJECT hObject, // in TSS_HKEY hObjectPubKey, // in UINT32 ulSizeEncAuth, // in BYTE* rgbEncAuth // out ); typedef TSS_RESULT (*Tspicb_CallbackSealxMask) ( PVOID lpAppData, // in TSS_HKEY hKey, // in TSS_HENCDATA hEncData, // in TSS_ALGORITHM_ID algID, // in UINT32 ulSizeNonces, // in BYTE* rgbNonceEven, // in BYTE* rgbNonceOdd, // in BYTE* rgbNonceEvenOSAP, // in BYTE* rgbNonceOddOSAP, // in UINT32 ulDataLength, // in BYTE* rgbDataToMask, // in BYTE* rgbMaskedData // out ); typedef TSS_RESULT (*Tspicb_CallbackChangeAuthAsym) ( PVOID lpAppData, // in TSS_HOBJECT hObject, // in TSS_HKEY hObjectPubKey, // in UINT32 ulSizeEncAuth, // in UINT32 ulSizeAuthLink, // in BYTE* rgbEncAuth, // out BYTE* rgbAuthLink // out ); typedef TSS_RESULT (*Tspicb_CollateIdentity) ( PVOID lpAppData, // in UINT32 ulTCPAPlainIdentityProofLength, // in BYTE* rgbTCPAPlainIdentityProof, // in TSS_ALGORITHM_ID algID, // in UINT32 ulSessionKeyLength, // out BYTE* rgbSessionKey, // out UINT32* pulTCPAIdentityProofLength, // out BYTE* rgbTCPAIdentityProof // out ); typedef TSS_RESULT (*Tspicb_ActivateIdentity) ( PVOID lpAppData, // in UINT32 ulSessionKeyLength, // in BYTE* rgbSessionKey, // in UINT32 ulSymCAAttestationBlobLength, // in BYTE* rgbSymCAAttestationBlob, // in UINT32* pulCredentialLength, // out BYTE* rgbCredential // out ); typedef TSS_RESULT (*Tspicb_DAA_Sign) ( PVOID lpAppData, // in TSS_HDAA_ISSUER_KEY daaPublicKey, // in UINT32 gammasLength, // in BYTE** gammas, // in UINT32 attributesLength, // in BYTE** attributes, // in UINT32 randomAttributesLength, // in BYTE** randomAttributes, // in UINT32 attributeCommitmentsLength,// in TSS_DAA_ATTRIB_COMMIT* attributeCommitments, // in TSS_DAA_ATTRIB_COMMIT* attributeCommitmentsProof, // in TSS_DAA_PSEUDONYM_PLAIN* pseudonym, // in TSS_DAA_PSEUDONYM_PLAIN* pseudonymTilde, // in TSS_DAA_PSEUDONYM_ENCRYPTED* pseudonymEncrypted, // in TSS_DAA_PSEUDONYM_ENCRYPTED* pseudonymEncProof, // in TSS_DAA_SIGN_CALLBACK** additionalProof // out ); typedef TSS_RESULT (*Tspicb_DAA_VerifySignature) ( PVOID lpAppData, // in UINT32 challengeLength, // in BYTE* challenge, // in TSS_DAA_SIGN_CALLBACK* additionalProof, // in TSS_HDAA_ISSUER_KEY daaPublicKey, // in UINT32 gammasLength, // in BYTE** gammas, // in UINT32 sAttributesLength, // in BYTE** sAttributes, // in UINT32 attributeCommitmentsLength,// in TSS_DAA_ATTRIB_COMMIT* attributeCommitments, // in TSS_DAA_ATTRIB_COMMIT* attributeCommitmentsProof, // in UINT32 zetaLength, // in BYTE* zeta, // in UINT32 sFLength, // in BYTE* sF, // in TSS_DAA_PSEUDONYM* pseudonym, // in TSS_DAA_PSEUDONYM* pseudonymProof, // in TSS_BOOL* isCorrect // out ); #if defined ( __cplusplus ) } #endif /* __cplusplus */ #endif /* _TSPI_H_ */ tpm-quote-tools-1.0.4/include/tss/tss_structs.h0000644000175000017510000003650613037720561016552 00000000000000/*++ TSS structures for TSS */ #ifndef __TSS_STRUCTS_H__ #define __TSS_STRUCTS_H__ #include #include #include typedef struct tdTSS_VERSION { BYTE bMajor; BYTE bMinor; BYTE bRevMajor; BYTE bRevMinor; } TSS_VERSION; typedef struct tdTSS_PCR_EVENT { TSS_VERSION versionInfo; UINT32 ulPcrIndex; TSS_EVENTTYPE eventType; UINT32 ulPcrValueLength; #ifdef __midl [size_is(ulPcrValueLength)] #endif BYTE* rgbPcrValue; UINT32 ulEventLength; #ifdef __midl [size_is(ulEventLength)] #endif BYTE* rgbEvent; } TSS_PCR_EVENT; typedef struct tdTSS_EVENT_CERT { TSS_VERSION versionInfo; UINT32 ulCertificateHashLength; #ifdef __midl [size_is(ulCertificateHashLength)] #endif BYTE* rgbCertificateHash; UINT32 ulEntityDigestLength; #ifdef __midl [size_is(ulEntityDigestLength)] #endif BYTE* rgbentityDigest; TSS_BOOL fDigestChecked; TSS_BOOL fDigestVerified; UINT32 ulIssuerLength; #ifdef __midl [size_is(ulIssuerLength)] #endif BYTE* rgbIssuer; } TSS_EVENT_CERT; typedef struct tdTSS_UUID { UINT32 ulTimeLow; UINT16 usTimeMid; UINT16 usTimeHigh; BYTE bClockSeqHigh; BYTE bClockSeqLow; BYTE rgbNode[6]; } TSS_UUID; typedef struct tdTSS_KM_KEYINFO { TSS_VERSION versionInfo; TSS_UUID keyUUID; TSS_UUID parentKeyUUID; BYTE bAuthDataUsage; // whether auth is needed to load child keys TSS_BOOL fIsLoaded; // TRUE: actually loaded in TPM UINT32 ulVendorDataLength; // may be 0 #ifdef __midl [size_is(ulVendorDataLength)] #endif BYTE *rgbVendorData; // may be NULL } TSS_KM_KEYINFO; typedef struct tdTSS_KM_KEYINFO2 { TSS_VERSION versionInfo; TSS_UUID keyUUID; TSS_UUID parentKeyUUID; BYTE bAuthDataUsage; // whether auth is needed to load child keys TSS_FLAG persistentStorageType; TSS_FLAG persistentStorageTypeParent; TSS_BOOL fIsLoaded; // TRUE: actually loaded in TPM UINT32 ulVendorDataLength; // may be 0 #ifdef __midl [size_is(ulVendorDataLength)] #endif BYTE *rgbVendorData; // may be NULL } TSS_KM_KEYINFO2; typedef struct tdTSS_NONCE { BYTE nonce[TPM_SHA1BASED_NONCE_LEN]; } TSS_NONCE; typedef struct tdTSS_VALIDATION { TSS_VERSION versionInfo; UINT32 ulExternalDataLength; #ifdef __midl [size_is(ulExternalDataLength)] #endif BYTE* rgbExternalData; UINT32 ulDataLength; #ifdef __midl [size_is(ulDataLength)] #endif BYTE* rgbData; UINT32 ulValidationDataLength; #ifdef __midl [size_is(ulValidationDataLength)] #endif BYTE* rgbValidationData; } TSS_VALIDATION; typedef struct tdTSS_CALLBACK { PVOID callback; PVOID appData; TSS_ALGORITHM_ID alg; } TSS_CALLBACK; typedef struct tdTSS_DAA_PK { TSS_VERSION versionInfo; UINT32 modulusLength; #ifdef __midl [size_is(modulusLength)] #endif BYTE* modulus; UINT32 capitalSLength; #ifdef __midl [size_is(capitalSLength)] #endif BYTE* capitalS; UINT32 capitalZLength; #ifdef __midl [size_is(capitalZLength)] #endif BYTE* capitalZ; UINT32 capitalR0Length; #ifdef __midl [size_is(capitalR0Length)] #endif BYTE* capitalR0; UINT32 capitalR1Length; #ifdef __midl [size_is(capitalR1Length)] #endif BYTE* capitalR1; UINT32 gammaLength; #ifdef __midl [size_is(gammaLength)] #endif BYTE* gamma; UINT32 capitalGammaLength; #ifdef __midl [size_is(capitalGammaLength)] #endif BYTE* capitalGamma; UINT32 rhoLength; #ifdef __midl [size_is(rhoLength)] #endif BYTE* rho; UINT32 capitalYLength; // Length of first dimenstion UINT32 capitalYLength2; // Length of second dimension #ifdef __midl [size_is(capitalYLength,capitalYLength2)] #endif BYTE** capitalY; UINT32 capitalYPlatformLength; UINT32 issuerBaseNameLength; #ifdef __midl [size_is(issuerBaseName)] #endif BYTE* issuerBaseName; UINT32 numPlatformAttributes; UINT32 numIssuerAttributes; } TSS_DAA_PK; typedef struct tdTSS_DAA_PK_PROOF { TSS_VERSION versionInfo; UINT32 challengeLength; #ifdef __midl [size_is(challengeLength)] #endif BYTE* challenge; UINT32 responseLength; // Length of first dimension UINT32 responseLength2; // Length of second dimension #ifdef __midl [size_is(responseLength,responseLength2)] #endif BYTE** response; } TSS_DAA_PK_PROOF; typedef struct tdTSS_DAA_SK { TSS_VERSION versionInfo; UINT32 productPQprimeLength; #ifdef __midl [size_is(productPQprimeLength)] #endif BYTE* productPQprime; } TSS_DAA_SK; typedef struct tdTSS_DAA_KEY_PAIR { TSS_VERSION versionInfo; TSS_DAA_SK secretKey; TSS_DAA_PK publicKey; } TSS_DAA_KEY_PAIR; typedef struct tdTSS_DAA_AR_PK { TSS_VERSION versionInfo; UINT32 etaLength; #ifdef __midl [size_is(etaLength)] #endif BYTE* eta; UINT32 lambda1Length; #ifdef __midl [size_is(lambda1Length)] #endif BYTE* lambda1; UINT32 lambda2Length; #ifdef __midl [size_is(lambda2Length)] #endif BYTE* lambda2; UINT32 lambda3Length; #ifdef __midl [size_is(lambda3Length)] #endif BYTE* lambda3; } TSS_DAA_AR_PK; typedef struct tdTSS_DAA_AR_SK { TSS_VERSION versionInfo; UINT32 x0Length; #ifdef __midl [size_is(x0Length)] #endif BYTE* x0; UINT32 x1Length; #ifdef __midl [size_is(x1Length)] #endif BYTE* x1; UINT32 x2Length; #ifdef __midl [size_is(x2Length)] #endif BYTE* x2; UINT32 x3Length; #ifdef __midl [size_is(x3Length)] #endif BYTE* x3; UINT32 x4Length; #ifdef __midl [size_is(x4Length)] #endif BYTE* x4; UINT32 x5Length; #ifdef __midl [size_is(x5Length)] #endif BYTE* x5; } TSS_DAA_AR_SK; typedef struct tdTSS_DAA_AR_KEY_PAIR { TSS_VERSION versionInfo; TSS_DAA_AR_SK secretKey; TSS_DAA_AR_PK publicKey; } TSS_DAA_AR_KEY_PAIR; typedef struct tdTSS_DAA_CRED_ISSUER { TSS_VERSION versionInfo; UINT32 capitalALength; #ifdef __midl [size_is(capitalALength)] #endif BYTE* capitalA; UINT32 eLength; #ifdef __midl [size_is(eLength)] #endif BYTE* e; UINT32 vPrimePrimeLength; #ifdef __midl [size_is(vPrimePrimeLength)] #endif BYTE* vPrimePrime; UINT32 attributesIssuerLength; // Length of first dimension UINT32 attributesIssuerLength2; // Length of second dimension #ifdef __midl [size_is(attributesIssuerLength,attributesIssuerLength2)] #endif BYTE** attributesIssuer; UINT32 cPrimeLength; #ifdef __midl [size_is(cPrimeLength)] #endif BYTE* cPrime; UINT32 sELength; #ifdef __midl [size_is(sELength)] #endif BYTE* sE; } TSS_DAA_CRED_ISSUER; typedef struct tdTSS_DAA_CREDENTIAL { TSS_VERSION versionInfo; UINT32 capitalALength; #ifdef __midl [size_is(capitalALength)] #endif BYTE* capitalA; UINT32 exponentLength; #ifdef __midl [size_is(exponentLength)] #endif BYTE* exponent; UINT32 vBar0Length; #ifdef __midl [size_is(vBar0Length)] #endif BYTE* vBar0; UINT32 vBar1Length; #ifdef __midl [size_is(vBar1Length)] #endif BYTE* vBar1; UINT32 attributesLength; // Length of first dimension UINT32 attributesLength2; // Length of second dimension #ifdef __midl [size_is(attributesLength,attributesLength2)] #endif BYTE** attributes; TSS_DAA_PK issuerPK; UINT32 tpmSpecificEncLength; #ifdef __midl [size_is(tpmSpecificEncLength)] #endif BYTE* tpmSpecificEnc; UINT32 daaCounter; } TSS_DAA_CREDENTIAL; typedef struct tdTSS_DAA_ATTRIB_COMMIT { TSS_VERSION versionInfo; UINT32 betaLength; #ifdef __midl [size_is(betaLength)] #endif BYTE* beta; UINT32 sMuLength; #ifdef __midl [size_is(sMuLength)] #endif BYTE* sMu; } TSS_DAA_ATTRIB_COMMIT; typedef struct tdTSS_DAA_CREDENTIAL_REQUEST { TSS_VERSION versionInfo; UINT32 capitalULength; #ifdef __midl [size_is(capitalULength)] #endif BYTE* capitalU; UINT32 capitalNiLength; #ifdef __midl [size_is(capitalNiLength)] #endif BYTE* capitalNi; UINT32 authenticationProofLength; #ifdef __midl [size_is(authenticationProofLength)] #endif BYTE* authenticationProof; UINT32 challengeLength; #ifdef __midl [size_is(challengeLength)] #endif BYTE* challenge; UINT32 nonceTpmLength; #ifdef __midl [size_is(nonceTpmLength)] #endif BYTE* nonceTpm; UINT32 noncePlatformLength; #ifdef __midl [size_is(noncePlatformLength)] #endif BYTE* noncePlatform; UINT32 sF0Length; #ifdef __midl [size_is(sF0Length)] #endif BYTE* sF0; UINT32 sF1Length; #ifdef __midl [size_is(sF1Length)] #endif BYTE* sF1; UINT32 sVprimeLength; #ifdef __midl [size_is(sVprimeLength)] #endif BYTE* sVprime; UINT32 sVtildePrimeLength; #ifdef __midl [size_is(sVtildePrimeLength)] #endif BYTE* sVtildePrime; UINT32 sALength; // Length of first dimension UINT32 sALength2; // Length of second dimension #ifdef __midl [size_is(sALength,sALength2)] #endif BYTE** sA; UINT32 attributeCommitmentsLength; TSS_DAA_ATTRIB_COMMIT* attributeCommitments; } TSS_DAA_CREDENTIAL_REQUEST; typedef struct tdTSS_DAA_SELECTED_ATTRIB { TSS_VERSION versionInfo; UINT32 indicesListLength; #ifdef __midl [size_is(indicesListLength)] #endif TSS_BOOL* indicesList; } TSS_DAA_SELECTED_ATTRIB; typedef struct tdTSS_DAA_PSEUDONYM { TSS_VERSION versionInfo; TSS_FLAG payloadFlag; UINT32 payloadLength; #ifdef __midl [size_is(payloadLength)] #endif BYTE* payload; } TSS_DAA_PSEUDONYM; typedef struct tdTSS_DAA_PSEUDONYM_PLAIN { TSS_VERSION versionInfo; UINT32 capitalNvLength; #ifdef __midl [size_is(capitalNvLength)] #endif BYTE* capitalNv; } TSS_DAA_PSEUDONYM_PLAIN; typedef struct tdTSS_DAA_PSEUDONYM_ENCRYPTED { TSS_VERSION versionInfo; UINT32 delta1Length; #ifdef __midl [size_is(delta1Length)] #endif BYTE* delta1; UINT32 delta2Length; #ifdef __midl [size_is(delta2Length)] #endif BYTE* delta2; UINT32 delta3Length; #ifdef __midl [size_is(delta3Length)] #endif BYTE* delta3; UINT32 delta4Length; #ifdef __midl [size_is(delta4Length)] #endif BYTE* delta4; UINT32 sTauLength; #ifdef __midl [size_is(sTauLength)] #endif BYTE* sTau; } TSS_DAA_PSEUDONYM_ENCRYPTED; typedef struct tdTSS_DAA_SIGN_CALLBACK { TSS_VERSION versionInfo; TSS_HHASH challenge; TSS_FLAG payloadFlag; UINT32 payloadLength; #ifdef __midl [size_is(payloadLength)] #endif BYTE* payload; } TSS_DAA_SIGN_CALLBACK; typedef struct tdTSS_DAA_SIGNATURE { TSS_VERSION versionInfo; UINT32 zetaLength; #ifdef __midl [size_is(zetaLength)] #endif BYTE* zeta; UINT32 capitalTLength; #ifdef __midl [size_is(capitalTLength)] #endif BYTE* capitalT; UINT32 challengeLength; #ifdef __midl [size_is(challengeLength)] #endif BYTE* challenge; UINT32 nonceTpmLength; #ifdef __midl [size_is(nonceTpmLength)] #endif BYTE* nonceTpm; UINT32 sVLength; #ifdef __midl [size_is(sVLength)] #endif BYTE* sV; UINT32 sF0Length; #ifdef __midl [size_is(sF0Length)] #endif BYTE* sF0; UINT32 sF1Length; #ifdef __midl [size_is(sF1Length)] #endif BYTE* sF1; UINT32 sELength; #ifdef __midl [size_is(sELength)] #endif BYTE* sE; UINT32 sALength; // Length of first dimension UINT32 sALength2; // Length of second dimension #ifdef __midl [size_is(sALength,sALength2)] #endif BYTE** sA; UINT32 attributeCommitmentsLength; #ifdef __midl [size_is(attributeCommitmentsLength)] #endif TSS_DAA_ATTRIB_COMMIT* attributeCommitments; TSS_DAA_PSEUDONYM signedPseudonym; TSS_DAA_SIGN_CALLBACK callbackResult; } TSS_DAA_SIGNATURE; typedef struct tdTSS_DAA_IDENTITY_PROOF { TSS_VERSION versionInfo; UINT32 endorsementLength; #ifdef __midl [size_is(endorsementLength)] #endif BYTE* endorsementCredential; UINT32 platformLength; #ifdef __midl [size_is(platformLength)] #endif BYTE* platform; UINT32 conformanceLength; #ifdef __midl [size_is(conformanceLength)] #endif BYTE* conformance; } TSS_DAA_IDENTITY_PROOF; //////////////////////////////////////////////////////////////////// typedef UINT32 TSS_FAMILY_ID; typedef BYTE TSS_DELEGATION_LABEL; // Values are TSS_DELEGATIONTYPE_KEY or TSS_DELEGATIONTYPE_OWNER typedef UINT32 TSS_DELEGATION_TYPE; typedef struct tdTSS_PCR_INFO_SHORT { UINT32 sizeOfSelect; #ifdef __midl [size_is(sizeOfSelect)] #endif BYTE *selection; BYTE localityAtRelease; UINT32 sizeOfDigestAtRelease; #ifdef __midl [size_is(sizeOfDigestAtRelease)] #endif BYTE *digestAtRelease; } TSS_PCR_INFO_SHORT; typedef struct tdTSS_FAMILY_TABLE_ENTRY { TSS_FAMILY_ID familyID; TSS_DELEGATION_LABEL label; UINT32 verificationCount; TSS_BOOL enabled; TSS_BOOL locked; } TSS_FAMILY_TABLE_ENTRY; typedef struct tdTSS_DELEGATION_TABLE_ENTRY { UINT32 tableIndex; TSS_DELEGATION_LABEL label; TSS_PCR_INFO_SHORT pcrInfo; UINT32 per1; UINT32 per2; TSS_FAMILY_ID familyID; UINT32 verificationCount; } TSS_DELEGATION_TABLE_ENTRY; typedef struct tdTSS_PLATFORM_CLASS { UINT32 platformClassSimpleIdentifier; UINT32 platformClassURISize; BYTE* pPlatformClassURI; } TSS_PLATFORM_CLASS; #endif // __TSS_STRUCTS_H__ tpm-quote-tools-1.0.4/include/tss/tcpa_error.h0000644000175000017510000000017213037720561016300 00000000000000 #ifndef __TCPA_ERROR_H__ #define __TCPA_ERROR_H__ #warning including deprecated header file tcpa_error.h #endif tpm-quote-tools-1.0.4/include/tss/compat11b.h0000644000175000017510000002244413037720561015735 00000000000000 #ifndef __COMPAT11B_H__ #define __COMPAT11B_H__ #include #define TCPA_Vendor_Specific32 TPM_Vendor_Specific32 #define TCPA_Vendor_Specific8 TPM_Vendor_Specific8 typedef TSS_UNICODE UNICODE; typedef TPM_DIGEST TCPA_DIGEST; typedef TPM_NONCE TCPA_NONCE; typedef TPM_NONCE TCPA_SALT_NONCE; typedef TPM_PUBKEY TCPA_PUBKEY; typedef TPM_SECRET TCPA_SECRET; typedef TPM_KEY TCPA_KEY; typedef TPM_DIRVALUE TCPA_DIRVALUE; typedef TPM_COMMAND_CODE TCPA_COMMAND_CODE; typedef TPM_BOUND_DATA TCPA_BOUND_DATA; typedef TPM_STRUCT_VER TCPA_VERSION; typedef TPM_RESULT TCPA_RESULT; typedef TPM_PAYLOAD_TYPE TCPA_PAYLOAD_TYPE; typedef TPM_STORE_PRIVKEY TCPA_STORE_PRIVKEY; typedef TPM_CHOSENID_HASH TCPA_CHOSENID_HASH; typedef TPM_SYMMETRIC_KEY TCPA_SYMMETRIC_KEY; typedef TPM_PCR_INFO TCPA_PCR_INFO; typedef TPM_PCR_SELECTION TCPA_PCR_SELECTION; typedef TPM_STORED_DATA TCPA_STORED_DATA; typedef TPM_SEALED_DATA TCPA_SEALED_DATA; typedef TPM_KEY_FLAGS TCPA_KEY_FLAGS; typedef TPM_KEY_PARMS TCPA_KEY_PARMS; typedef TPM_STORE_PUBKEY TCPA_STORE_PUBKEY; typedef TPM_MIGRATIONKEYAUTH TCPA_MIGRATIONKEYAUTH; typedef TPM_RSA_KEY_PARMS TCPA_RSA_KEY_PARMS; typedef TPM_CERTIFY_INFO TCPA_CERTIFY_INFO; typedef TPM_STORE_ASYMKEY TCPA_STORE_ASYMKEY; typedef TPM_ENCAUTH TCPA_ENCAUTH; typedef TPM_PCRINDEX TCPA_PCRINDEX; typedef TPM_PCRVALUE TCPA_PCRVALUE; typedef TPM_DIRINDEX TCPA_DIRINDEX; typedef TPM_PROTOCOL_ID TCPA_PROTOCOL_ID; typedef TPM_ALGORITHM_ID TCPA_ALGORITHM_ID; typedef TPM_ENTITY_TYPE TCPA_ENTITY_TYPE; typedef TPM_CAPABILITY_AREA TCPA_CAPABILITY_AREA; typedef TPM_HMAC TCPA_HMAC; typedef TPM_MIGRATE_SCHEME TCPA_MIGRATE_SCHEME; typedef TPM_PHYSICAL_PRESENCE TCPA_PHYSICAL_PRESENCE; typedef TPM_KEY_HANDLE TCPA_KEY_HANDLE; typedef TPM_KEY_HANDLE_LIST TCPA_KEY_HANDLE_LIST; typedef TPM_PCR_COMPOSITE TCPA_PCR_COMPOSITE; typedef TPM_AUTH_DATA_USAGE TCPA_AUTH_DATA_USAGE; typedef TPM_AUTHDATA TCPA_AUTHDATA; typedef TPM_KEY_USAGE TCPA_KEY_USAGE; typedef TPM_COMPOSITE_HASH TCPA_COMPOSITE_HASH; typedef TPM_QUOTE_INFO TCPA_QUOTE_INFO; typedef TPM_TAG TCPA_TAG; typedef TPM_ENC_SCHEME TCPA_ENC_SCHEME; typedef TPM_SIG_SCHEME TCPA_SIG_SCHEME; typedef TPM_STARTUP_TYPE TCPA_STARTUP_TYPE; typedef TPM_AUTHHANDLE TCPA_AUTHHANDLE; typedef TPM_SYM_CA_ATTESTATION TCPA_SYM_CA_ATTESTATION; typedef TPM_ASYM_CA_CONTENTS TCPA_ASYM_CA_CONTENTS; typedef TPM_IDENTITY_REQ TCPA_IDENTITY_REQ; typedef TPM_IDENTITY_PROOF TCPA_IDENTITY_PROOF; // These were removed from the 1.2 TPM spec typedef UINT32 TCPA_ENCHANDLE; typedef UINT32 TCPA_EVENTTYPE; typedef struct tdTCPA_AUDIT_EVENT { TCPA_COMMAND_CODE ordinal; TCPA_RESULT returncode; } TCPA_AUDIT_EVENT; #define TCPA_SHA1_160_HASH_LEN TPM_SHA1_160_HASH_LEN #define TCPA_SHA1BASED_NONCE_LEN TPM_SHA1BASED_NONCE_LEN #define redirection TSS_KEYFLAG_REDIRECTION #define migratable TSS_KEYFLAG_MIGRATABLE #define volatileKey TSS_KEYFLAG_VOLATILEKEY #define TCPA_ET_KEYHANDLE TPM_ET_KEYHANDLE #define TCPA_ET_KEY TPM_ET_KEY #define TCPA_ET_OWNER TPM_ET_OWNER #define TCPA_ET_SRK TPM_ET_SRK #define TCPA_ET_DATA TPM_ET_DATA #define TCPA_PID_OIAP TPM_PID_OIAP #define TCPA_PID_OSAP TPM_PID_OSAP #define TCPA_PID_ADIP TPM_PID_ADIP #define TCPA_PID_ADCP TPM_PID_ADCP #define TCPA_PID_OWNER TPM_PID_OWNER #define TCPA_PT_ASYM TPM_PT_ASYM #define TCPA_PT_BIND TPM_PT_BIND #define TCPA_PT_MIGRATE TPM_PT_MIGRATE #define TCPA_PT_MAINT TPM_PT_MAINT #define TCPA_PT_SEAL TPM_PT_SEAL #define TCPA_CAP_ALG TPM_CAP_ALG #define TCPA_CAP_ORD TPM_CAP_ORD #define TCPA_CAP_PID TPM_CAP_PID #define TCPA_CAP_FLAG TPM_CAP_FLAG #define TCPA_CAP_VERSION TPM_CAP_VERSION #define TCPA_CAP_PROPERTY TPM_CAP_PROPERTY #define TCPA_CAP_KEY_HANDLE TPM_CAP_KEY_HANDLE #define TCPA_CAP_CHECK_LOADED TPM_CAP_CHECK_LOADED #define TCPA_ALG_RSA TPM_ALG_RSA #define TCPA_ALG_DES TPM_ALG_DES #define TCPA_ALG_3DES TPM_ALG_3DES #define TCPA_ALG_SHA TPM_ALG_SHA #define TCPA_ALG_HMAC TPM_ALG_HMAC #define TCPA_ALG_AES TPM_ALG_AES #define TCPA_PROTECTED_ORDINAL TPM_PROTECTED_ORDINAL #define TCPA_UNPROTECTED_ORDINAL TPM_UNPROTECTED_ORDINAL #define TCPA_CONNECTION_ORDINAL TPM_CONNECTION_ORDINAL #define TCPA_PROTECTED_COMMAND TPM_PROTECTED_COMMAND #define TCPA_UNPROTECTED_COMMAND TPM_UNPROTECTED_COMMAND #define TCPA_CONNECTION_COMMAND TPM_CONNECTION_COMMAND #define TCPA_VENDOR_COMMAND TPM_VENDOR_COMMAND #define TCPA_MAIN TPM_MAIN #define TCPA_PC TPM_PC #define TCPA_PDA TPM_PDA #define TCPA_CELL_PHONE TPM_CELL_PHONE #define TCPA_MS_MIGRATE TPM_MS_MIGRATE #define TCPA_MS_REWRAP TPM_MS_REWRAP #define TCPA_MS_MAINT TPM_MS_MAINT #define TCPA_ES_NONE TPM_ES_NONE #define TCPA_ES_RSAESPKCSv15 TPM_ES_RSAESPKCSv15 #define TCPA_ES_RSAESOAEP_SHA1_MGF1 TPM_ES_RSAESOAEP_SHA1_MGF1 #define TCPA_SS_NONE TPM_SS_NONE #define TCPA_SS_RSASSAPKCS1v15_SHA1 TPM_SS_RSASSAPKCS1v15_SHA1 #define TCPA_SS_RSASSAPKCS1v15_DER TPM_SS_RSASSAPKCS1v15_DER #define TCPA_PHYSICAL_PRESENCE_LIFETIME_LOCK TPM_PHYSICAL_PRESENCE_LIFETIME_LOCK #define TCPA_PHYSICAL_PRESENCE_HW_ENABLE TPM_PHYSICAL_PRESENCE_HW_ENABLE #define TCPA_PHYSICAL_PRESENCE_CMD_ENABLE TPM_PHYSICAL_PRESENCE_CMD_ENABLE #define TCPA_PHYSICAL_PRESENCE_LOCK TPM_PHYSICAL_PRESENCE_LOCK #define TCPA_PHYSICAL_PRESENCE_PRESENT TPM_PHYSICAL_PRESENCE_PRESENT #define TCPA_PHYSICAL_PRESENCE_NOTPRESENT TPM_PHYSICAL_PRESENCE_NOTPRESENT #define TCPA_SUCCESS TPM_SUCCESS #define TCPA_E_BASE TPM_E_BASE #define TCPA_E_NON_FATAL TPM_E_NON_FATAL #define TCPA_E_AUTHFAIL TPM_E_AUTHFAIL #define TCPA_E_BAD_PARAMETER TPM_E_BAD_PARAMETER #define TCPA_E_BADINDEX TPM_E_BADINDEX #define TCPA_E_AUDITFAILURE TPM_E_AUDITFAILURE #define TCPA_E_CLEAR_DISABLED TPM_E_CLEAR_DISABLED #define TCPA_E_DEACTIVATED TPM_E_DEACTIVATED #define TCPA_E_DISABLED TPM_E_DISABLED #define TCPA_E_DISABLED_CMD TPM_E_DISABLED_CMD #define TCPA_E_FAIL TPM_E_FAIL #define TCPA_E_INACTIVE TPM_E_BAD_ORDINAL #define TCPA_E_INSTALL_DISABLED TPM_E_INSTALL_DISABLED #define TCPA_E_INVALID_KEYHANDLE TPM_E_INVALID_KEYHANDLE #define TCPA_E_KEYNOTFOUND TPM_E_KEYNOTFOUND #define TCPA_E_NEED_SELFTEST TPM_E_INAPPROPRIATE_ENC #define TCPA_E_MIGRATEFAIL TPM_E_MIGRATEFAIL #define TCPA_E_NO_PCR_INFO TPM_E_INVALID_PCR_INFO #define TCPA_E_NOSPACE TPM_E_NOSPACE #define TCPA_E_NOSRK TPM_E_NOSRK #define TCPA_E_NOTSEALED_BLOB TPM_E_NOTSEALED_BLOB #define TCPA_E_OWNER_SET TPM_E_OWNER_SET #define TCPA_E_RESOURCES TPM_E_RESOURCES #define TCPA_E_SHORTRANDOM TPM_E_SHORTRANDOM #define TCPA_E_SIZE TPM_E_SIZE #define TCPA_E_WRONGPCRVAL TPM_E_WRONGPCRVAL #define TCPA_E_BAD_PARAM_SIZE TPM_E_BAD_PARAM_SIZE #define TCPA_E_SHA_THREAD TPM_E_SHA_THREAD #define TCPA_E_SHA_ERROR TPM_E_SHA_ERROR #define TCPA_E_FAILEDSELFTEST TPM_E_FAILEDSELFTEST #define TCPA_E_AUTH2FAIL TPM_E_AUTH2FAIL #define TCPA_E_BADTAG TPM_E_BADTAG #define TCPA_E_IOERROR TPM_E_IOERROR #define TCPA_E_ENCRYPT_ERROR TPM_E_ENCRYPT_ERROR #define TCPA_E_DECRYPT_ERROR TPM_E_DECRYPT_ERROR #define TCPA_E_INVALID_AUTHHANDLE TPM_E_INVALID_AUTHHANDLE #define TCPA_E_NO_ENDORSEMENT TPM_E_NO_ENDORSEMENT #define TCPA_E_INVALID_KEYUSAGE TPM_E_INVALID_KEYUSAGE #define TCPA_E_WRONG_ENTITYTYPE TPM_E_WRONG_ENTITYTYPE #define TCPA_E_INVALID_POSTINIT TPM_E_INVALID_POSTINIT #define TCPA_E_INAPPROPRIATE_SIG TPM_E_INAPPROPRIATE_SIG #define TCPA_E_BAD_KEY_PROPERTY TPM_E_BAD_KEY_PROPERTY #define TCPA_E_BAD_MIGRATION TPM_E_BAD_MIGRATION #define TCPA_E_BAD_SCHEME TPM_E_BAD_SCHEME #define TCPA_E_BAD_DATASIZE TPM_E_BAD_DATASIZE #define TCPA_E_BAD_MODE TPM_E_BAD_MODE #define TCPA_E_BAD_PRESENCE TPM_E_BAD_PRESENCE #define TCPA_E_BAD_VERSION TPM_E_BAD_VERSION #define TCPA_E_RETRY TPM_E_RETRY #endif tpm-quote-tools-1.0.4/include/tss/tcpa_defines.h0000644000175000017510000000020013037720561016554 00000000000000 #ifndef __TCPA_DEFINES_H__ #define __TCPA_DEFINES_H__ #warning including deprecated header file tcpa_defines.h #endif tpm-quote-tools-1.0.4/pcr_mask.c0000644000175000017510000000134213037720561013476 00000000000000/* * Extract a PCR mask from command line arguments. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" int pcr_mask(UINT32 *pcrs, UINT32 npcrs, char **mask) { UINT32 i; for (i = 0; i < npcrs; i++) { char *endptr; long pcr = strtol(mask[i], &endptr, 10); if (pcr < 0 || *mask[i] == 0 || *endptr != 0) { fprintf(stderr, "Illegal PCR value %s\n", mask[i]); return 1; } pcrs[i] = pcr; } return 0; } tpm-quote-tools-1.0.4/NEWS0000644000175000017510000000300113037720561012224 00000000000000TPM QUOTE TOOLS NEWS -- history of user-visible changes. * Changes in version 1.0.3 ** Manual pages include a description of the documented program in the NAME section following trandition. * Changes in version 1.0 This is a bug fix release with no user-visible changes. * Changes in version 0.9 ** Added tmp_updatepcrhash program which updates a PCR hash ** tpm_qetquote now optionally stores the PCR values in a file ** License changed to BSD * Changes in version 0.8 ** Command line options regularized All programs now accept the -h and -v options. The flag for remote host access has been changed to -r so that -h can be used for help. ** Unicode option for tpm_mkaik The -u option for tpm_mkaik provides support for TSS UNICODE encoding of owner passwords. ** Manual page improvements The overview manual page has been expanded. * Changes in version 0.7 ** Program tpm_mkaik gets passwords using OpenSSL When OpenSSL GUI support is available, tpm_mkaik uses it to prompt for the owner password. This fixes a bug in the previous version. * Changes in version 0.6 ** Program tpm_mkaik has the ability to query for the owner secret When TrouSerS is compiled without GUI support, no passwort prompt appears, and an error is generated. In this case, the owner secret must be the well known secret. ** There are manual pages for each program ** Program tpm_unloadkey added Added a program that unregisters a binding between a UUID and a key. Local variables: mode:outline End: tpm-quote-tools-1.0.4/AUTHORS0000644000175000017510000000012413037720561012600 00000000000000John D. Ramsdell -- The MITRE Corporation Steve Smalley -- National Security Agency tpm-quote-tools-1.0.4/createek.c0000644000175000017510000000317713037720561013472 00000000000000/* * Create a legecy endorsement key. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ /* For use on systems on which IBM's tpm-tools are not available. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" const static char usage[] = "Usage: %s\n" "On success, creates an endorsment key using\n" "Tspi_TPM_CreateEndorsementKey.\n"; int main(int argc, char **argv) { if (argc != 1) { fprintf(stderr, usage, argv[0]); return 1; } /* Create context */ TSS_HCONTEXT hContext; int rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, NULL); if (rc != TSS_SUCCESS) return tss_err(rc, "connecting"); TSS_HKEY hKEY; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, TSS_KEY_TYPE_LEGACY|TSS_KEY_SIZE_2048, &hKEY); if (rc != TSS_SUCCESS) return tss_err(rc, "creating KEY object"); /* Get TPM handle */ TSS_HTPM hTPM; rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tss_err(rc, "getting TPM object"); BYTE nonce[20]; /* Value of nonce does not matter */ TSS_VALIDATION valid; valid.ulExternalDataLength = sizeof nonce; valid.rgbExternalData = nonce; rc = Tspi_TPM_CreateEndorsementKey(hTPM, hKEY, &valid); if (rc != TSS_SUCCESS) return tss_err(rc, "creating endorsment key"); return 0; } tpm-quote-tools-1.0.4/tpm_mkuuid.c0000644000175000017510000000430313037720561014055 00000000000000/* * Create a UUID. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include "tpm_quote.h" static int usage(const char *prog) { const char text[] = "Usage: %s [options] uuid\n" "Options:\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, creates a UUID in file uuid.\n"; fprintf(stderr, text, prog); return 1; } int main (int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "hv")) != -1) { switch (opt) { case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc != optind + 1) return usage(argv[0]); const char *uuidname = argv[optind]; /* Create context */ TSS_HCONTEXT hContext; int rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, NULL); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); /* Get TPM handle */ TSS_HTPM hTPM; /* TPM handle */ rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting TPM object")); TSS_UUID *uuid; /* Generate a UUID for the key */ rc = Tspi_TPM_GetRandom(hTPM, sizeof(TSS_UUID), (BYTE **)&uuid); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "generating a key UUID")); // Put in the variant and version bits uuid->usTimeHigh &= 0x0FFF; uuid->usTimeHigh |= (4 << 12); uuid->bClockSeqHigh &= 0x3F; uuid->bClockSeqHigh |= 0x80; /* Write uuid */ FILE *out = fopen(uuidname, "wb"); if (out == NULL) { fprintf(stderr, "Cannot open %s\n", uuidname); return tidy(hContext, 1); } fwrite(uuid, 1, sizeof *uuid, out); fclose(out); Tspi_Context_FreeMemory(hContext, (BYTE *)uuid); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/control0000644000175000017510000000075013037720561013140 00000000000000Source: tpm-quote-tools Section: admin Priority: optional Maintainer: John D. Ramsdell Build-Depends: debhelper (>= 7), autotools-dev, libtspi-dev Standards-Version: 3.8.3 Package: tpm-quote-tools Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, libtspi1 Description: TPM-based attestation using the TPM quote operation (tools) TPM Quote Tools is a collection of programs that provide support for TPM based attestation using the TPM quote operation. tpm-quote-tools-1.0.4/takeownership.c0000644000175000017510000000471313037720561014567 00000000000000/* * Take ownership using the well known secrets. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ /* For use on systems on which IBM's tpm-tools are not available. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" const static char usage[] = "Usage: %s\n" "On success, takes ownership of the TPM.\n"; int main(int argc, char **argv) { if (argc != 1) { fprintf(stderr, usage, argv[0]); return 1; } /* Create context */ TSS_HCONTEXT hContext; int rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, NULL); if (rc != TSS_SUCCESS) return tss_err(rc, "connecting"); /* Get TPM handle */ TSS_HTPM hTPM; rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tss_err(rc, "getting TPM object"); TSS_HPOLICY hTPMPolicy; rc = Tspi_GetPolicyObject(hTPM, TSS_POLICY_USAGE, &hTPMPolicy); if (rc != TSS_SUCCESS) return tss_err(rc, "getting TPM policy"); BYTE srkSecret[] = TSS_WELL_KNOWN_SECRET; rc = Tspi_Policy_SetSecret(hTPMPolicy, TSS_SECRET_MODE_SHA1, sizeof srkSecret, srkSecret); if (rc != TSS_SUCCESS) return tss_err(rc, "setting TPM policy secret"); /* Make SRK */ TSS_HKEY hSRK; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, TSS_KEY_TSP_SRK|TSS_KEY_AUTHORIZATION, &hSRK); if (rc != TSS_SUCCESS) return tss_err(rc, "making SRK"); TSS_HPOLICY hSrkPolicy; rc = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSrkPolicy); if (rc != TSS_SUCCESS) return tss_err(rc, "getting SRK policy"); rc = Tspi_Policy_SetSecret(hSrkPolicy, TSS_SECRET_MODE_SHA1, sizeof srkSecret, srkSecret); if (rc != TSS_SUCCESS) return tss_err(rc, "setting SRK secret"); BYTE nonce[20]; /* Value of nonce does not matter */ TSS_VALIDATION valid; valid.ulExternalDataLength = sizeof nonce; valid.rgbExternalData = nonce; TSS_HKEY hEK; rc = Tspi_TPM_GetPubEndorsementKey(hTPM, FALSE, &valid, &hEK); if (rc != TSS_SUCCESS) return tss_err(rc, "getting endorsement key"); rc = Tspi_TPM_TakeOwnership(hTPM, hSRK, hEK); if (rc != TSS_SUCCESS) return tss_err(rc, "taking ownership"); return 0; } tpm-quote-tools-1.0.4/config.h.in0000644000175000017510000000406613112026355013556 00000000000000/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if you have the header file. */ #undef HAVE_ICONV_H /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the header file. */ #undef HAVE_OPENSSL_UI_H /* Define to 1 if you have the OpenSSL UI library. */ #undef HAVE_OPENSSL_UI_LIB /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the header file. */ #undef HAVE_TROUSERS_TROUSERS_H /* Define to 1 if you have the header file. */ #undef HAVE_TROUSERS_TSS_H /* Define to 1 if you have a TSS 1.2 library. */ #undef HAVE_TSS_12_LIB /* Define to 1 if you have the header file. */ #undef HAVE_TSS_TSPI_H /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Version number of package */ #undef VERSION /* Define to 1 for the Windows operating system. */ #undef WIN32 tpm-quote-tools-1.0.4/tpm_unloadkey.80000644000175000017510000000073513037720561014504 00000000000000.TH "UNLOAD TPM KEY" 8 "Oct 2010" "" "" .SH NAME tpm_unloadkey \- unload a key from persistent storage .SH SYNOPSIS .B tpm_loadkey .RB [ \-r\ HOST ] .RB [ \-hv ] .RI UUID-FILE .br .SH DESCRIPTION .PP The program unregisters the key associated with the UUID in .RI UUID-FILE. .TP .RB \-r\ HOST Perform operation on remote .RB HOST. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_loadkey "(8)" tpm-quote-tools-1.0.4/Makefile.in0000644000175000017510000010545113112026356013601 00000000000000# Makefile.in generated by automake 1.15 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2014 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = tpm_mkuuid$(EXEEXT) tpm_mkaik$(EXEEXT) \ tpm_getpcrhash$(EXEEXT) tpm_loadkey$(EXEEXT) \ tpm_unloadkey$(EXEEXT) tpm_getquote$(EXEEXT) \ tpm_verifyquote$(EXEEXT) tpm_updatepcrhash$(EXEEXT) noinst_PROGRAMS = createek$(EXEEXT) takeownership$(EXEEXT) subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(noinst_HEADERS) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = tpm-quote-tools.spec CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = libtpm_quote_a_AR = $(AR) $(ARFLAGS) libtpm_quote_a_LIBADD = am_libtpm_quote_a_OBJECTS = tss_err.$(OBJEXT) tidy.$(OBJEXT) \ loadkey.$(OBJEXT) pcr_mask.$(OBJEXT) quote.$(OBJEXT) \ quote_nonce.$(OBJEXT) toutf16le.$(OBJEXT) libtpm_quote_a_OBJECTS = $(am_libtpm_quote_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man8dir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_createek_OBJECTS = createek.$(OBJEXT) createek_OBJECTS = $(am_createek_OBJECTS) createek_DEPENDENCIES = libtpm_quote.a am_takeownership_OBJECTS = takeownership.$(OBJEXT) takeownership_OBJECTS = $(am_takeownership_OBJECTS) takeownership_DEPENDENCIES = libtpm_quote.a am_tpm_getpcrhash_OBJECTS = tpm_getpcrhash.$(OBJEXT) tpm_getpcrhash_OBJECTS = $(am_tpm_getpcrhash_OBJECTS) tpm_getpcrhash_DEPENDENCIES = libtpm_quote.a am_tpm_getquote_OBJECTS = tpm_getquote.$(OBJEXT) tpm_getquote_OBJECTS = $(am_tpm_getquote_OBJECTS) tpm_getquote_DEPENDENCIES = libtpm_quote.a am_tpm_loadkey_OBJECTS = tpm_loadkey.$(OBJEXT) tpm_loadkey_OBJECTS = $(am_tpm_loadkey_OBJECTS) tpm_loadkey_DEPENDENCIES = libtpm_quote.a am_tpm_mkaik_OBJECTS = tpm_mkaik.$(OBJEXT) tpm_mkaik_OBJECTS = $(am_tpm_mkaik_OBJECTS) tpm_mkaik_DEPENDENCIES = libtpm_quote.a am_tpm_mkuuid_OBJECTS = tpm_mkuuid.$(OBJEXT) tpm_mkuuid_OBJECTS = $(am_tpm_mkuuid_OBJECTS) tpm_mkuuid_DEPENDENCIES = libtpm_quote.a am_tpm_unloadkey_OBJECTS = tpm_unloadkey.$(OBJEXT) tpm_unloadkey_OBJECTS = $(am_tpm_unloadkey_OBJECTS) tpm_unloadkey_DEPENDENCIES = libtpm_quote.a am_tpm_updatepcrhash_OBJECTS = tpm_updatepcrhash.$(OBJEXT) tpm_updatepcrhash_OBJECTS = $(am_tpm_updatepcrhash_OBJECTS) tpm_updatepcrhash_DEPENDENCIES = libtpm_quote.a am_tpm_verifyquote_OBJECTS = tpm_verifyquote.$(OBJEXT) tpm_verifyquote_OBJECTS = $(am_tpm_verifyquote_OBJECTS) tpm_verifyquote_DEPENDENCIES = libtpm_quote.a AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libtpm_quote_a_SOURCES) $(createek_SOURCES) \ $(takeownership_SOURCES) $(tpm_getpcrhash_SOURCES) \ $(tpm_getquote_SOURCES) $(tpm_loadkey_SOURCES) \ $(tpm_mkaik_SOURCES) $(tpm_mkuuid_SOURCES) \ $(tpm_unloadkey_SOURCES) $(tpm_updatepcrhash_SOURCES) \ $(tpm_verifyquote_SOURCES) DIST_SOURCES = $(libtpm_quote_a_SOURCES) $(createek_SOURCES) \ $(takeownership_SOURCES) $(tpm_getpcrhash_SOURCES) \ $(tpm_getquote_SOURCES) $(tpm_loadkey_SOURCES) \ $(tpm_mkaik_SOURCES) $(tpm_mkuuid_SOURCES) \ $(tpm_unloadkey_SOURCES) $(tpm_updatepcrhash_SOURCES) \ $(tpm_verifyquote_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man8dir = $(mandir)/man8 NROFF = nroff MANS = $(dist_man_MANS) HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope AM_RECURSIVE_TARGETS = cscope am__DIST_COMMON = $(dist_man_MANS) $(srcdir)/Makefile.in \ $(srcdir)/config.h.in $(srcdir)/tpm-quote-tools.spec.in \ AUTHORS COPYING ChangeLog INSTALL NEWS README compile \ config.guess config.sub depcomp install-sh missing DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GREP = @GREP@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ LDFLAGS = @LDFLAGS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libtpm_quote.a noinst_HEADERS = include/tss/compat11b.h include/tss/platform.h \ include/tss/tcpa_defines.h include/tss/tcpa_error.h \ include/tss/tcpa_struct.h include/tss/tcpa_typedef.h \ include/tss/tcs_defines.h include/tss/tcs_error.h include/tss/tcs.h \ include/tss/tcs_structs.h include/tss/tcs_typedef.h \ include/tss/tddlapi_error.h include/tss/tddl_error.h \ include/tss/tddli.h include/tss/tpm_error.h include/tss/tpm.h \ include/tss/tpm_ordinal.h include/tss/tspi.h include/tss/tss_defines.h \ include/tss/tss_error_basics.h include/tss/tss_error.h \ include/tss/tss_structs.h include/tss/tss_typedef.h libtpm_quote_a_SOURCES = tpm_quote.h tss_err.c tidy.c loadkey.c \ pcr_mask.c quote.c quote_nonce.c toutf16le.c tpm_mkuuid_SOURCES = tpm_quote.h tpm_mkuuid.c tpm_mkuuid_LDADD = libtpm_quote.a tpm_mkaik_SOURCES = tpm_quote.h tpm_mkaik.c tpm_mkaik_LDADD = libtpm_quote.a tpm_getpcrhash_SOURCES = tpm_quote.h tpm_getpcrhash.c tpm_getpcrhash_LDADD = libtpm_quote.a tpm_loadkey_SOURCES = tpm_quote.h tpm_loadkey.c tpm_loadkey_LDADD = libtpm_quote.a tpm_unloadkey_SOURCES = tpm_quote.h tpm_unloadkey.c tpm_unloadkey_LDADD = libtpm_quote.a tpm_getquote_SOURCES = tpm_quote.h tpm_getquote.c tpm_getquote_LDADD = libtpm_quote.a tpm_verifyquote_SOURCES = tpm_quote.h tpm_verifyquote.c tpm_verifyquote_LDADD = libtpm_quote.a tpm_updatepcrhash_SOURCES = tpm_quote.h tpm_updatepcrhash.c tpm_updatepcrhash_LDADD = libtpm_quote.a createek_SOURCES = tpm_quote.h createek.c createek_LDADD = libtpm_quote.a takeownership_SOURCES = tpm_quote.h takeownership.c takeownership_LDADD = libtpm_quote.a dist_man_MANS = tpm_mkuuid.8 tpm_mkaik.8 tpm_loadkey.8 tpm_unloadkey.8 \ tpm_getpcrhash.8 tpm_getquote.8 tpm_verifyquote.8 tpm_updatepcrhash.8 \ tpm_quote_tools.8 EXTRA_DIST = README_win32.txt win32.txt control all: config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .o .obj am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 tpm-quote-tools.spec: $(top_builddir)/config.status $(srcdir)/tpm-quote-tools.spec.in cd $(top_builddir) && $(SHELL) ./config.status $@ clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libtpm_quote.a: $(libtpm_quote_a_OBJECTS) $(libtpm_quote_a_DEPENDENCIES) $(EXTRA_libtpm_quote_a_DEPENDENCIES) $(AM_V_at)-rm -f libtpm_quote.a $(AM_V_AR)$(libtpm_quote_a_AR) libtpm_quote.a $(libtpm_quote_a_OBJECTS) $(libtpm_quote_a_LIBADD) $(AM_V_at)$(RANLIB) libtpm_quote.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) createek$(EXEEXT): $(createek_OBJECTS) $(createek_DEPENDENCIES) $(EXTRA_createek_DEPENDENCIES) @rm -f createek$(EXEEXT) $(AM_V_CCLD)$(LINK) $(createek_OBJECTS) $(createek_LDADD) $(LIBS) takeownership$(EXEEXT): $(takeownership_OBJECTS) $(takeownership_DEPENDENCIES) $(EXTRA_takeownership_DEPENDENCIES) @rm -f takeownership$(EXEEXT) $(AM_V_CCLD)$(LINK) $(takeownership_OBJECTS) $(takeownership_LDADD) $(LIBS) tpm_getpcrhash$(EXEEXT): $(tpm_getpcrhash_OBJECTS) $(tpm_getpcrhash_DEPENDENCIES) $(EXTRA_tpm_getpcrhash_DEPENDENCIES) @rm -f tpm_getpcrhash$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_getpcrhash_OBJECTS) $(tpm_getpcrhash_LDADD) $(LIBS) tpm_getquote$(EXEEXT): $(tpm_getquote_OBJECTS) $(tpm_getquote_DEPENDENCIES) $(EXTRA_tpm_getquote_DEPENDENCIES) @rm -f tpm_getquote$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_getquote_OBJECTS) $(tpm_getquote_LDADD) $(LIBS) tpm_loadkey$(EXEEXT): $(tpm_loadkey_OBJECTS) $(tpm_loadkey_DEPENDENCIES) $(EXTRA_tpm_loadkey_DEPENDENCIES) @rm -f tpm_loadkey$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_loadkey_OBJECTS) $(tpm_loadkey_LDADD) $(LIBS) tpm_mkaik$(EXEEXT): $(tpm_mkaik_OBJECTS) $(tpm_mkaik_DEPENDENCIES) $(EXTRA_tpm_mkaik_DEPENDENCIES) @rm -f tpm_mkaik$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_mkaik_OBJECTS) $(tpm_mkaik_LDADD) $(LIBS) tpm_mkuuid$(EXEEXT): $(tpm_mkuuid_OBJECTS) $(tpm_mkuuid_DEPENDENCIES) $(EXTRA_tpm_mkuuid_DEPENDENCIES) @rm -f tpm_mkuuid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_mkuuid_OBJECTS) $(tpm_mkuuid_LDADD) $(LIBS) tpm_unloadkey$(EXEEXT): $(tpm_unloadkey_OBJECTS) $(tpm_unloadkey_DEPENDENCIES) $(EXTRA_tpm_unloadkey_DEPENDENCIES) @rm -f tpm_unloadkey$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_unloadkey_OBJECTS) $(tpm_unloadkey_LDADD) $(LIBS) tpm_updatepcrhash$(EXEEXT): $(tpm_updatepcrhash_OBJECTS) $(tpm_updatepcrhash_DEPENDENCIES) $(EXTRA_tpm_updatepcrhash_DEPENDENCIES) @rm -f tpm_updatepcrhash$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_updatepcrhash_OBJECTS) $(tpm_updatepcrhash_LDADD) $(LIBS) tpm_verifyquote$(EXEEXT): $(tpm_verifyquote_OBJECTS) $(tpm_verifyquote_DEPENDENCIES) $(EXTRA_tpm_verifyquote_DEPENDENCIES) @rm -f tpm_verifyquote$(EXEEXT) $(AM_V_CCLD)$(LINK) $(tpm_verifyquote_OBJECTS) $(tpm_verifyquote_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/createek.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/loadkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pcr_mask.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quote_nonce.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/takeownership.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tidy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/toutf16le.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_getpcrhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_getquote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_loadkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_mkaik.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_mkuuid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_unloadkey.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_updatepcrhash.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tpm_verifyquote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tss_err.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-man8: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man8dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man8dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man8dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.8[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man8dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man8dir)" || exit $$?; }; \ done; } uninstall-man8: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man8dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.8[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^8][0-9a-z]*$$,8,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man8dir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man8dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man8 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-man uninstall-man: uninstall-man8 .MAKE: all install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--refresh check check-am clean \ clean-binPROGRAMS clean-cscope clean-generic \ clean-noinstLIBRARIES clean-noinstPROGRAMS cscope \ cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \ dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \ distcheck distclean distclean-compile distclean-generic \ distclean-hdr distclean-tags distcleancheck distdir \ distuninstallcheck dvi dvi-am html html-am info info-am \ install install-am install-binPROGRAMS install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-man8 install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-man \ uninstall-man8 .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: tpm-quote-tools-1.0.4/tpm_quote.h0000644000175000017510000000150613037720561013723 00000000000000/* * Declares the function prototypes exported by libtpm_quote.a. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if !defined _TPM_QUOTE_H #define _TPM_QUOTE_H const char *tss_result(TSS_RESULT result); int tss_err(TSS_RESULT rc, const char *msg); int tidy(TSS_HCONTEXT hContext, int code); int pcr_mask(UINT32 *pcrs, UINT32 npcrs, char **mask); int loadkey(TSS_HCONTEXT hContext, BYTE *blob, UINT32 blobLen, TSS_UUID uuid); int quote(TSS_HCONTEXT hContext, TSS_UUID uuid, UINT32 *pcrs, UINT32 npcrs, TSS_VALIDATION *valid); TPM_NONCE *quote_nonce(BYTE *info); char *toutf16le(char *src); size_t utf16lelen(const char *src); #endif /* _TPM_QUOTE_H */ tpm-quote-tools-1.0.4/toutf16le.c0000644000175000017510000000276413037720561013541 00000000000000/* * Convert strings from the native encoding to UTF-16LE. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #if defined HAVE_ICONV_H #include #include #include #include /* Use POSIX 1003.1 functions to convert input to UTF-16LE. Returns NULL on error, otherwise, a malloc'd string using the new encoding. */ char *toutf16le(char *src) { if (!src) return NULL; iconv_t cd = iconv_open("UTF-16LE", nl_langinfo(CODESET)); if (cd == (iconv_t)-1) return NULL; size_t n = strlen(src); size_t len = 2*(n + 1); /* Max output size */ char *ans = malloc(len); if (!ans) { /* No memory. Yikes! */ iconv_close(cd); return NULL; } char *inbuf = src; size_t inbytesleft = n + 1; char *outbuf = ans; size_t outbytesleft = len; size_t rc = iconv(cd, &inbuf, &inbytesleft, &outbuf, &outbytesleft); iconv_close(cd); if (rc == (size_t)-1 || inbytesleft != 0) { free(ans); return NULL; } return ans; } #else char *toutf16le(char *src) { return NULL; /* Always fail when iconv is not available */ } #endif /* Returns the number of bytes in a UTF16le encoded string. */ size_t utf16lelen(const char *src) { size_t len = 0; for (; src[len] || src[len + 1]; len += 2); return len; } tpm-quote-tools-1.0.4/tpm_mkuuid.80000644000175000017510000000054313037720561014004 00000000000000.TH "MAKE TPM UUID" 8 "Oct 2010" "" "" .SH NAME tpm_mkuuid \- generate a TPM UUID .SH SYNOPSIS .B tpm_uuid .RB [ \-hv ] .RI UUID-FILE .br .SH DESCRIPTION .PP The program generates a TPM UUID and stores it in the file .RI UUID-FILE. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)" tpm-quote-tools-1.0.4/install-sh0000755000175000017510000003452313112026356013541 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2013-12-25.23; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: tpm-quote-tools-1.0.4/config.guess0000755000175000017510000012367213112026356014061 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2015 Free Software Foundation, Inc. timestamp='2015-01-01' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD # # Please send patches to . me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE} exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm*:riscos:*:*|arm*:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; s390x:SunOS:*:*) echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) echo i386-pc-auroraux${UNAME_RELEASE} exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) eval $set_cc_for_build SUN_ARCH="i386" # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH="x86_64" fi fi echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/lslpp ] ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; authenticamd | genuineintel | EM64T) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; 8664:Windows_NT:*) echo x86_64-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; mips:Linux:*:* | mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef ${UNAME_MACHINE} #undef ${UNAME_MACHINE}el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=${UNAME_MACHINE}el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=${UNAME_MACHINE} #else CPU= #endif #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'` test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configury will decide that # this is a cross-build. echo i586-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. echo i586-pc-haiku exit ;; x86_64:Haiku:*:*) echo x86_64-unknown-haiku exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} exit ;; NSE-*:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; i*86:AROS:*:*) echo ${UNAME_MACHINE}-pc-aros exit ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: tpm-quote-tools-1.0.4/Makefile.am0000644000175000017510000000374113037720561013574 00000000000000bin_PROGRAMS = tpm_mkuuid tpm_mkaik tpm_getpcrhash tpm_loadkey \ tpm_unloadkey tpm_getquote tpm_verifyquote tpm_updatepcrhash noinst_PROGRAMS = createek takeownership noinst_LIBRARIES = libtpm_quote.a noinst_HEADERS = include/tss/compat11b.h include/tss/platform.h \ include/tss/tcpa_defines.h include/tss/tcpa_error.h \ include/tss/tcpa_struct.h include/tss/tcpa_typedef.h \ include/tss/tcs_defines.h include/tss/tcs_error.h include/tss/tcs.h \ include/tss/tcs_structs.h include/tss/tcs_typedef.h \ include/tss/tddlapi_error.h include/tss/tddl_error.h \ include/tss/tddli.h include/tss/tpm_error.h include/tss/tpm.h \ include/tss/tpm_ordinal.h include/tss/tspi.h include/tss/tss_defines.h \ include/tss/tss_error_basics.h include/tss/tss_error.h \ include/tss/tss_structs.h include/tss/tss_typedef.h libtpm_quote_a_SOURCES = tpm_quote.h tss_err.c tidy.c loadkey.c \ pcr_mask.c quote.c quote_nonce.c toutf16le.c tpm_mkuuid_SOURCES = tpm_quote.h tpm_mkuuid.c tpm_mkuuid_LDADD = libtpm_quote.a tpm_mkaik_SOURCES = tpm_quote.h tpm_mkaik.c tpm_mkaik_LDADD = libtpm_quote.a tpm_getpcrhash_SOURCES = tpm_quote.h tpm_getpcrhash.c tpm_getpcrhash_LDADD = libtpm_quote.a tpm_loadkey_SOURCES = tpm_quote.h tpm_loadkey.c tpm_loadkey_LDADD = libtpm_quote.a tpm_unloadkey_SOURCES = tpm_quote.h tpm_unloadkey.c tpm_unloadkey_LDADD = libtpm_quote.a tpm_getquote_SOURCES = tpm_quote.h tpm_getquote.c tpm_getquote_LDADD = libtpm_quote.a tpm_verifyquote_SOURCES = tpm_quote.h tpm_verifyquote.c tpm_verifyquote_LDADD = libtpm_quote.a tpm_updatepcrhash_SOURCES = tpm_quote.h tpm_updatepcrhash.c tpm_updatepcrhash_LDADD = libtpm_quote.a createek_SOURCES = tpm_quote.h createek.c createek_LDADD = libtpm_quote.a takeownership_SOURCES = tpm_quote.h takeownership.c takeownership_LDADD = libtpm_quote.a dist_man_MANS = tpm_mkuuid.8 tpm_mkaik.8 tpm_loadkey.8 tpm_unloadkey.8 \ tpm_getpcrhash.8 tpm_getquote.8 tpm_verifyquote.8 tpm_updatepcrhash.8 \ tpm_quote_tools.8 EXTRA_DIST = README_win32.txt win32.txt control tpm-quote-tools-1.0.4/quote_nonce.c0000644000175000017510000000166713037720561014230 00000000000000/* * Extract a nonce from a quote. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" /* This function works when the quote info is in blob format due to the way compilers layout the structs. */ TPM_NONCE *quote_nonce(BYTE *info) { if (!info) return NULL; TPM_QUOTE_INFO2 *qi2 = (TPM_QUOTE_INFO2 *)info; if (qi2->fixed[0] == 'Q' && qi2->fixed[1] == 'U' && qi2->fixed[2] == 'T' && qi2->fixed[3] == '2') return &qi2->externalData; TPM_QUOTE_INFO *qi = (TPM_QUOTE_INFO *)info; if (qi->fixed[0] == 'Q' && qi->fixed[1] == 'U' && qi->fixed[2] == 'O' && qi->fixed[3] == 'T') return &qi->externalData; return NULL; } tpm-quote-tools-1.0.4/quote.c0000644000175000017510000000742013037720561013037 00000000000000/* * Create a quote. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" /* This function shows the hash offset when one is handling quotes in blob format. */ // #define SHOW_HASH_OFFSET #if defined SHOW_HASH_OFFSET && defined HAVE_TROUSERS_TROUSERS_H #include #include static void show_hash_offset(TSS_VALIDATION *valid) { if (!valid) return; TPM_QUOTE_INFO2 *qi2 = (TPM_QUOTE_INFO2 *)(valid->rgbData); fprintf(stderr, "TAG: %c%c%c%c\n", qi2->fixed[0], qi2->fixed[1],qi2->fixed[2],qi2->fixed[3]); if (qi2->fixed[0] != 'Q' || qi2->fixed[1] != 'U' || qi2->fixed[2] != 'T' || qi2->fixed[3] != '2') return; fprintf(stderr, "Data size %d\n", valid->ulDataLength); UINT64 offset = (UINT64)offsetof(TPM_QUOTE_INFO2, externalData); fprintf(stderr, "Nonce start %lu\n", offset); Trspi_UnloadBlob_NONCE(&offset, valid->rgbData, 0); fprintf(stderr, "Unload PCR_INFO_SHORT start %lu\n", offset); TPM_PCR_INFO_SHORT info; TSS_RESULT rc = Trspi_UnloadBlob_PCR_INFO_SHORT(&offset, valid->rgbData, &info); fprintf(stderr, "Unload PCR_INFO_SHORT return code %d offset %lu\n", rc, offset); fprintf(stderr, "Locality at release %d\n", info.localityAtRelease); } #endif /* Returns a TPM quote in the TSS validation struct. The nonce used by the quote is passed in via the struct. */ int quote(TSS_HCONTEXT hContext, TSS_UUID uuid, UINT32 *pcrs, UINT32 npcrs, TSS_VALIDATION *valid) { /* Get SRK */ TSS_UUID SRK_UUID = TSS_UUID_SRK; TSS_HKEY hSRK; TSS_RESULT rc; rc = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK); if (rc != TSS_SUCCESS) return tss_err(rc, "loading SRK"); TSS_HPOLICY hSrkPolicy; rc = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSrkPolicy); if (rc != TSS_SUCCESS) return tss_err(rc, "getting SRK policy"); BYTE srkSecret[] = TSS_WELL_KNOWN_SECRET; rc = Tspi_Policy_SetSecret(hSrkPolicy, TSS_SECRET_MODE_SHA1, sizeof srkSecret, srkSecret); if (rc != TSS_SUCCESS) return tss_err(rc, "setting SRK secret"); TSS_HKEY hAIK; /* AIK handle */ rc = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, uuid, &hAIK); if (rc != TSS_SUCCESS) return tss_err(rc, "loading AIK"); TSS_HPCRS hPCRs; #if !defined HAVE_TSS_12_LIB rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_PCRS, TSS_PCRS_STRUCT_INFO, &hPCRs); #else rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_PCRS, TSS_PCRS_STRUCT_INFO_SHORT, &hPCRs); #endif if (rc != TSS_SUCCESS) return tss_err(rc, "creating PCR mask object"); UINT32 i; for (i = 0; i < npcrs; i++) { #if !defined HAVE_TSS_12_LIB rc = Tspi_PcrComposite_SelectPcrIndex(hPCRs, pcrs[i]); #else rc = Tspi_PcrComposite_SelectPcrIndexEx(hPCRs, pcrs[i], TSS_PCRS_DIRECTION_RELEASE); #endif if (rc != TSS_SUCCESS) return tss_err(rc, "creating PCR mask"); } /* Get TPM handle */ TSS_HTPM hTPM; /* TPM handle */ rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tss_err(rc, "getting TPM object"); /* Perform Quote */ #if !defined HAVE_TSS_12_LIB rc = Tspi_TPM_Quote(hTPM, hAIK, hPCRs, valid); #else BYTE *versionInfo; UINT32 versionInfoLen; rc = Tspi_TPM_Quote2(hTPM, hAIK, FALSE, hPCRs, valid, &versionInfoLen, &versionInfo); #if defined SHOW_HASH_OFFSET && defined HAVE_TROUSERS_TROUSERS_H show_hash_offset(valid); #endif #endif if (rc != TSS_SUCCESS) return tss_err(rc, "performing quote"); return 0; } tpm-quote-tools-1.0.4/README0000644000175000017510000000564013037720561012420 00000000000000 TPM Quote Tools The TPM Quote Tools is a collection of programs that provide support for TPM based attestation using the TPM quote mechanism. The manual page for tpm_quote_tools provides a usage overview. TPM Quote Tools has been tested with TrouSerS on Linux and NTRU on Windows XP. It was ported to Windows using MinGW and MSYS. DEPENDENCIES This package requires the TSS TSPI libraries and the TPM tools. On Debian, the packages are: libtspi1 TCG Software Stack (library) libtspi-dev TCG Software Stack (development) trousers TCG Software Stack (daemon) tpm-tools Management tools for the TPM hardware (tools) On Red Hat Linux, the packages are: trousers TCG Software Stack (library and daemon) trousers-devel TCG Software Stack (development) tpm-tools Management tools for the TPM hardware (tools) The manangement tools are only used to take ownership of a TPM. TO CONFIGURE AND BUILD $ ./configure $ make On Windows, if the name of the TSS library is not tspi, specify the library during configuration by defining LIBS. $ ./configure LIBS=-l TO RUN: Make one UUID for all of your TPMs, and then on each machine, do the following. Ensure TPM driver is present with $ dmesg | grep tpm If nothing, sudo modprobe tpm_tis, and do check. If nothing, ensure your TPM is turned on in the BIOS setup. You can run the TPM daemon in the foreground with: $ sudo tcsd -f Start the daemon with: $ sudo /etc/init.d/trousers start To load the TPM driver at boot time, add the name of the driver on a separate line of text in the file /etc/modules. The trousers daemon will be started for you at boot time. Next, make sure you have an endorsement key by running $ tpm_getpubek If you don't have one, run $ tpm_createek Be patient, it takes a while to create the key. I took ownership with the command: $ tpm_takeownership -y -z Now generate an AIK with tpm_mkaik, load and register the key with tpm_loadkey, generate a PCR composite hash with tpm_getpcrhash, produce a quote with tpm_getquote, and validate it with tpm_verifyquote. When getting the quote, make a nonce with: $ openssl sha1 -binary tpm_verifyquote > nonce REMOTE ACCESS Some TPM Quote Tools programs can access a TPM on a remote machine. To allow remote access to a TPM, the local daemon must allow both quote and loadkey operations. For TrouSerS, add the folowing to /etc/tcsg.conf. remote_ops = loadkey,quote TPM QUOTE VERSION By default, this package will use TPM quote 2 when available. Use the configure option --without-tss12 to force the use of the original version of TPM quote. RED HAT PACKAGE BUILD Within a distribution, type: $ rpmbuild -ba tpm-quote-tools.spec DEBIAN PACKAGE BUILD Within a distribution, type: $ dh_make -s --createorig -c bsd -e "John D. Ramsdell " $ cp control debian $ dpkg-buildpackage ACKNOWLEDGMENT Early on, code was inspired by Hal Finney's code on http://privacyca.com. tpm-quote-tools-1.0.4/tpm_updatepcrhash.80000644000175000017510000000135113037720561015337 00000000000000.TH "VERIFY TPM QUOTE" 8 "Oct 2010" "" "" .SH NAME tpm_updatepcrhash \- update a PCR composite hash .SH SYNOPSIS .B tpm_updatepcrhash .RB [ \-hv ] .RI OLD-HASH-FILE .RI PCR-VALUE-FILE .RI NEW_HASH-FILE .br .SH DESCRIPTION .PP This program updates the PCR composite hash in file .RI OLD-HASH-FILE to produce the file .RI NEW-HASH-FILE. The new composite hash is computed from the data in the file .RI PCR-VALUE-FILE, which contains a list of PCR index=value pairs. The format of this file as the same as PCR value file generated by .B tpm_getpcrhash. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_mkaik "(8)," .BR tpm_getpcrhash "(8)," .BR tpm_getquote "(8)" tpm-quote-tools-1.0.4/loadkey.c0000644000175000017510000000302313037720561013325 00000000000000/* * Load a key. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" /* Load a key and register it under the given UUID. */ int loadkey(TSS_HCONTEXT hContext, BYTE *blob, UINT32 blobLen, TSS_UUID uuid) { /* Get SRK */ TSS_UUID SRK_UUID = TSS_UUID_SRK; TSS_HKEY hSRK; TSS_RESULT rc; rc = Tspi_Context_LoadKeyByUUID(hContext, TSS_PS_TYPE_SYSTEM, SRK_UUID, &hSRK); if (rc != TSS_SUCCESS) return tss_err(rc, "loading SRK"); TSS_HPOLICY hSrkPolicy; rc = Tspi_GetPolicyObject(hSRK, TSS_POLICY_USAGE, &hSrkPolicy); if (rc != TSS_SUCCESS) return tss_err(rc, "getting SRK policy"); BYTE srkSecret[] = TSS_WELL_KNOWN_SECRET; rc = Tspi_Policy_SetSecret(hSrkPolicy, TSS_SECRET_MODE_SHA1, sizeof srkSecret, srkSecret); if (rc != TSS_SUCCESS) return tss_err(rc, "setting SRK secret"); TSS_HKEY hAIK; /* AIK handle */ rc = Tspi_Context_LoadKeyByBlob(hContext, hSRK, blobLen, blob, &hAIK); if (rc != TSS_SUCCESS) return tss_err(rc, "loading key blob"); /* Register the key in persistant storage */ rc = Tspi_Context_RegisterKey(hContext, hAIK, TSS_PS_TYPE_SYSTEM, uuid, TSS_PS_TYPE_SYSTEM, SRK_UUID); if (rc != TSS_SUCCESS) return tss_err(rc, "registering a key"); return 0; } tpm-quote-tools-1.0.4/tpm_getpcrhash.80000644000175000017510000000204213037720561014632 00000000000000.TH "GET TPM PCR HASH" 8 "Oct 2010" "" "" .SH NAME tpm_getpcrhash \- return the signed data produced by a TPM quote .SH SYNOPSIS .B tpm_getpcrhash .RB [ \-r\ HOST ] .RB [ \-hv ] .RI UUID-FILE .RI HASH-FILE .RI PCR-VALUE-FILE .RI PCRS .br .SH DESCRIPTION .PP The program returns the signed data produced by a TPM quote in the file .RI HASH-FILE and the list of Platform Configuration Register values in the file .RI PCR-VALUE-FILE. .RI PCRS is a sequence of integers that specify the Platform Configuration Registers used to produce the signed data. The key used for the operation is the one registered under the UUID in .RI UUID-FILE. The nonce used while quoting is unpredictable. The nonce field in the signed data is ignored when using the signed data to verify a quote. .TP .RB \-r\ HOST Perform operation on remote .RB HOST. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_loadkey "(8)," .BR tpm_getquote "(8)," .BR tpm_verifyquote "(8)," .BR tpm_updateprchash "(8)" tpm-quote-tools-1.0.4/tpm-quote-tools.spec.in0000644000175000017510000000465313112026275016110 00000000000000Name: @PACKAGE@ Version: @VERSION@ Release: 1%{?dist} Source0: http://downloads.sourceforge.net/tpmquotetools/%{name}-%{version}.tar.gz URL: http://sf.net/projects/tpmquotetools BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root Summary: TPM-based attestation using the TPM quote operation (tools) License: BSD Group: Applications/System BuildRequires: trousers-devel %description TPM Quote Tools is a collection of programs that provide support for TPM based attestation using the TPM quote operation. %prep %setup -q %build %configure make %{?_smp_mflags} %install rm -rf %{buildroot} make DESTDIR=%{buildroot} install %clean rm -rf %{buildroot} %files %defattr (-, root, root) %doc AUTHORS ChangeLog COPYING NEWS README %{_bindir}/* %{_mandir}/man8/* %changelog * Fri May 26 2017 Matthias Gerstner - 1.0.4-1 - Fixed tpm_mkaik when SRK password is in effect. * Wed Jan 18 2017 John D. Ramsdell - 1.0.3-1 - Added program descriptions to NAME sections in manual pages * Wed Mar 27 2013 John D. Ramsdell - 1.0.2-1 - Added support for ARM 64 bit CPU architecture (aarch64) * Fri Feb 15 2013 Fedora Release Engineering - 1.0.1-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_19_Mass_Rebuild * Sat Jul 21 2012 Fedora Release Engineering - 1.0.1-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild * Sat Jan 14 2012 Fedora Release Engineering - 1.0.1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild * Tue Jul 26 2011 John D. Ramsdell - 1.0.1-1 - Tagged as 1.0.1 - Changed source to SourceForge development site. * Thu Jul 14 2011 John D. Ramsdell - 1.0-6 - Changed URL to SourceForge development site. - Changed source to NEU site. - Quoted % references in macros within changelog. - README: Note tpm-tools only needed to take ownership of a TPM. * Fri Jul 8 2011 John D. Ramsdell - 1.0-5 - Fixed changelog * Fri Jul 8 2011 John D. Ramsdell - 1.0-4 - Removed use of %%makeinstall * Thu Jun 2 2011 John D. Ramsdell - 1.0-3 - Added %%changelog * Wed Mar 9 2011 John D. Ramsdell - 1.0-2 - Fixed spec to meet Fedora standards. * Wed Mar 9 2011 John D. Ramsdell - 1.0-1 - Initial package tpm-quote-tools-1.0.4/tpm_loadkey.80000644000175000017510000000107413037720561014136 00000000000000.TH "LOAD TPM KEY" 8 "Oct 2010" "" "" .SH NAME tpm_loadkey \- load a key into persistent storage .SH SYNOPSIS .B tpm_loadkey .RB [ \-r\ HOST ] .RB [ \-hv ] .RI BLOB-FILE .RI UUID-FILE .br .SH DESCRIPTION .PP The program loads the key in .RI BLOB-FILE into persistent storage and registers it using the UUID in .RI UUID-FILE. .TP .RB \-r\ HOST Perform operation on remote .RB HOST. .TP .RB \-h Display command usage info. .TP .RB \-v Display command version info. .SH "SEE ALSO" .BR tpm_quote_tools "(8)," .BR tpm_mkuuid "(8)," .BR tpm_mkaik "(8)," .BR tpm_unloadkey "(8)" tpm-quote-tools-1.0.4/tpm_quote_tools.80000644000175000017510000000624413037720561015067 00000000000000.TH "TPM QUOTE TOOLS" 8 "Oct 2010" "" "" .SH NAME tpm_quote_tools \- an overview of TPM Quote Tools .SH PROGRAMS .B tpm_mkuuid, .B tpm_mkaik, .B tpm_loadkey, .B tpm_unloadkey, .B tpm_getpcrhash, .B tpm_updatepcrhash, .B tpm_getquote, .B tpm_verifyquote .br .SH DESCRIPTION .PP TPM Quote Tools is a collection of programs that provide support for TPM based attestation using the TPM quote operation. .PP A TPM contains a set of Platform Configuration Registers (PCRs). In a well configured machine, some of these registers are set to known values during the boot up process or at other times. For example, a PCR might contain the hash of a boot loader in memory before it is run. .PP The TPM quote operation is used to authoritatively verify the contents of a TPM's Platform Configuration Registers (PCRs). During provisioning, a composite hash of a selected set of PCRs is computed. The TPM quote operation produces a composite hash that can be compared with the one computed while provisioning. .PP To use the TPM quote operation, keys must be generated. During provisioning, an Attestation Identity Key (AIK) is generated for each TPM, and the public part of the key is made available to entities that validate quotes. .PP The TPM quote operation returns signed data and a signature. The data that is signed contains the PCRs selected for the operation, the composite hash for the selected PCRs, and a nonce provided as input, and used to prevent replay attacks. At provisioning time, the data that is signed is stored, not just the composite hash. The signature is discarded. .PP An entity that wishes to evaluate a machine generates a nonce, and sends it along with the set of PCR used to generate the composite PCR hash at provisioning time. For this use of the TPM quote operation, the signed data is ignored, and the signature returned is used to validate the state of the TPM's PCRs. Given the signature, the evaluating entity replaces the nonce in the signed data generated at provisioning time, and checks to see if the signature is valid for the data. If so, this check ensures the selected PCRs contain values that match the ones measured during provisioning. .PP A typical scenario for an enterprise using these tools follows. The tools expect AIKs to be referenced via one enterprise-wide Universally Unique Identifier (UUID). The program .B tpm_mkuuid creates one. .PP For each machine being checked, an AIK is created using .B tpm_mkaik. The key blob produced is bound to the UUID on its machine using .B tpm_loadkey. The public key associated with the AIK is sent to the entities that verify quotes. Finally, the expected PCR composite hash is obtained using .B tpm_getpcrhash. When the expected PCR values change, a new hash can be generated with .B tpm_updatepcrhash. .PP The program to obtain a quote, and thus measure the current state of the PCRs is .B tpm_getquote. The program that verifies the quote describes the same PCR composite hash as was measured initially is .B tpm_verifyquote. .SH "SEE ALSO" .BR tpm_mkuuid "(8)," .BR tpm_mkaik "(8)," .BR tpm_loadkey "(8)," .BR tpm_unloadkey "(8)," .BR tpm_getpcrhash "(8)," .BR tpm_updatepcrhash "(8)," .BR tpm_getquote "(8)," .BR tpm_verifyquote "(8)" tpm-quote-tools-1.0.4/tpm_getquote.c0000644000175000017510000001134013037720561014413 00000000000000/* * Quote a given set of PCRs. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include "tpm_quote.h" #define NONCESIZE (1 << 10) static int uint32_compar(const void *a, const void *b) { UINT32 x = *(UINT32 *) a; UINT32 y = *(UINT32 *) b; return x - y; } static int usage(const char *prog) { const char text[] = "Usage: %s [-r host] [-p pcrvals] [-hv] uuid nonce quote PCRS...\n" "\tuuid\tFile containing uuid of AIK\n" "\tnonce\tFile containing 20-byte nonce\n" "\tquote\tOutput file\n" "\tPCRS...\tList of PCR numbers to use in the quote\n" "Options:\n" "\t-r host\n" "\t Perform operation on remote host\n" "\t-p pcrvals\n" "\t Store PCR values is file pcrvals\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "\tuuid: file containing uuid of AIK to use\n" "\tnonce: file containing 20-byte nonce to use\n" "\tPCRS...: list of PCR numbers to use in the quote\n" "\n" "On success, returns the signature produced by a " "TPM quote in file quote.\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { UINT32 pcrs[argc]; TSS_UNICODE *host = NULL; /* Non-null when connecting to a remote host */ const char *pcrvals = NULL; /* Non-null when saving the PCR values */ int opt; while ((opt = getopt(argc, argv, "r:p:hv")) != -1) { switch (opt) { case 'r': #if defined HAVE_ICONV_H host = (TSS_UNICODE *)toutf16le(optarg); if (!host) { fprintf(stderr, "Cannot convert %s to UTF-16LE\n", optarg); return 1; } break; #else fprintf(stderr, "Remote requests not supported on this platform.\n"); return 1; #endif case 'p': pcrvals = optarg; break; case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc < optind + 4) return usage(argv[0]); const char *uuidname = argv[optind]; const char *noncename = argv[optind + 1]; const char *quotename = argv[optind + 2]; UINT32 npcrs = argc - optind - 3; if (pcr_mask(pcrs, npcrs, argv + optind + 3)) return 1; FILE *in = fopen(uuidname, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", uuidname); return 1; } TSS_UUID uuid; if (sizeof uuid != fread((void *)&uuid, 1, sizeof uuid, in)) { fprintf(stderr, "Expecting a uuid of %zd bytes in %s\n", sizeof uuid, uuidname); return 1; } fclose(in); in = fopen(noncename, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", noncename); return 1; } BYTE nonce[NONCESIZE]; UINT32 nonceLen; nonceLen = fread(nonce, 1, NONCESIZE, in); fclose(in); /* Create context */ TSS_HCONTEXT hContext; /* Context handle */ TSS_RESULT rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, host); free(host); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); TSS_VALIDATION valid; valid.ulExternalDataLength = nonceLen; valid.rgbExternalData = nonce; if (quote(hContext, uuid, pcrs, npcrs, &valid)) return tidy(hContext, 1); FILE *out = fopen(quotename, "wb"); if (!out) { fprintf(stderr, "Cannot open %s\n", quotename); return tidy(hContext, 1); } fwrite(valid.rgbValidationData, 1, valid.ulValidationDataLength, out); fclose(out); Tspi_Context_FreeMemory(hContext, valid.rgbData); Tspi_Context_FreeMemory(hContext, valid.rgbValidationData); if (!pcrvals) return tidy(hContext, 0); /* Save the selected PCR values in a file. */ /* Get TPM handle */ TSS_HTPM hTPM; /* TPM handle */ rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting TPM object")); out = fopen(pcrvals, "wb"); if (!out) { fprintf(stderr, "Cannot open %s\n", pcrvals); return tidy(hContext, 1); } qsort(pcrs, npcrs, sizeof pcrs[0], uint32_compar); UINT32 i; for (i = 0; i < npcrs; i++) { UINT32 len; BYTE *value; rc = Tspi_TPM_PcrRead(hTPM, pcrs[i], &len, &value); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "reading PCR")); fprintf(out, "%u=", pcrs[i]); UINT32 j; for (j = 0; j < len; j++) fprintf(out, "%02X", value[j]); fprintf(out, "\n"); } fclose(out); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/tpm_unloadkey.c0000644000175000017510000000463613037720561014563 00000000000000/* * Unregister a key. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include "tpm_quote.h" #define BLOBSIZE (1 << 10) #define NONCESIZE (1 << 10) static int usage(const char *prog) { const char text[] = "Usage: %s [-r host] [-hv] uuid\n" "Options:\n" "\t-r host\n" "\t Perform operation on remote host\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, unregisters the key associated with uuid.\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { TSS_UNICODE *host = NULL; int opt; while ((opt = getopt(argc, argv, "r:hv")) != -1) { switch (opt) { case 'r': #if defined HAVE_ICONV_H host = (TSS_UNICODE *)toutf16le(optarg); if (!host) { fprintf(stderr, "Cannot convert %s to UTF-16LE\n", optarg); return 1; } break; #else fprintf(stderr, "Remote requests not supported on this platform.\n"); return 1; #endif case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc != optind + 1) return usage(argv[0]); /* Read UUID */ const char *uuidname = argv[optind]; FILE *in = fopen(uuidname, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", uuidname); return 1; } TSS_UUID uuid; if (sizeof uuid != fread((void *)&uuid, 1, sizeof uuid, in)) { fprintf(stderr, "Expecting a uuid of %zd bytes in %s\n", sizeof uuid, uuidname); return 1; } fclose(in); /* Create context */ TSS_HCONTEXT hContext; /* Context handle */ TSS_RESULT rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, host); free(host); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); TSS_HKEY hKey; rc = Tspi_Context_UnregisterKey(hContext, TSS_PS_TYPE_SYSTEM, uuid, &hKey); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "unregistering key")); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/tpm_getpcrhash.c0000644000175000017510000001025013037720561014705 00000000000000/* * Create a composite PCR hash. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include "tpm_quote.h" static int uint32_compar(const void *a, const void *b) { UINT32 x = *(UINT32 *) a; UINT32 y = *(UINT32 *) b; return x - y; } static int usage(const char *prog) { const char text[] = "Usage: %s [-r host] [-hv] uuid hash pcrvals PCRS...\n" "\tuuid\tFile containing uuid of AIK\n" "\thash\tOutput file containing PCR hash\n" "\tpcrvals\tOutput file containing list of PCR values\n" "\tPCRS...\tList of PCR numbers to use in the quote\n" "Options:\n" "\t-r host\n" "\t Perform operation on remote host\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, returns the signed data produced by a TPM quote\n" "in file hash. The nonce used in the quote is unpredictable.\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { UINT32 pcrs[argc]; TSS_UNICODE *host = NULL; /* Non-null when connecting to a remote host */ int opt; while ((opt = getopt(argc, argv, "r:hv")) != -1) { switch (opt) { case 'r': #if defined HAVE_ICONV_H host = (TSS_UNICODE *)toutf16le(optarg); if (!host) { fprintf(stderr, "Cannot convert %s to UTF-16LE\n", optarg); return 1; } break; #else fprintf(stderr, "Remote requests not supported on this platform.\n"); return 1; #endif case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } if (argc < optind + 4) return usage(argv[0]); const char *uuidname = argv[optind]; const char *hashname = argv[optind + 1]; const char *pcrvals = argv[optind + 2]; UINT32 npcrs = argc - optind - 3; if (pcr_mask(pcrs, npcrs, argv + optind + 3)) return 1; FILE *in = fopen(uuidname, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", uuidname); return 1; } TSS_UUID uuid; if (sizeof uuid != fread((void *)&uuid, 1, sizeof uuid, in)) { fprintf(stderr, "Expecting a uuid of %zd bytes in %s\n", sizeof uuid, uuidname); return 1; } fclose(in); /* Create context */ TSS_HCONTEXT hContext; /* Context handle */ TSS_RESULT rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); rc = Tspi_Context_Connect(hContext, host); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "connecting")); BYTE nonce[20]; /* Value of nonce does not matter */ TSS_VALIDATION valid; valid.ulExternalDataLength = sizeof nonce; valid.rgbExternalData = nonce; if (quote(hContext, uuid, pcrs, npcrs, &valid)) return tidy(hContext, 1); FILE *out = fopen(hashname, "wb"); if (!out) { fprintf(stderr, "Cannot open %s\n", hashname); return tidy(hContext, 1); } fwrite(valid.rgbData, 1, valid.ulDataLength, out); fclose(out); Tspi_Context_FreeMemory(hContext, valid.rgbData); Tspi_Context_FreeMemory(hContext, valid.rgbValidationData); /* Save the selected PCR values in a file. */ /* Get TPM handle */ TSS_HTPM hTPM; /* TPM handle */ rc = Tspi_Context_GetTpmObject(hContext, &hTPM); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "getting TPM object")); out = fopen(pcrvals, "wb"); if (!out) { fprintf(stderr, "Cannot open %s\n", pcrvals); return tidy(hContext, 1); } qsort(pcrs, npcrs, sizeof pcrs[0], uint32_compar); UINT32 i; for (i = 0; i < npcrs; i++) { UINT32 len; BYTE *value; rc = Tspi_TPM_PcrRead(hTPM, pcrs[i], &len, &value); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "reading PCR")); fprintf(out, "%u=", pcrs[i]); UINT32 j; for (j = 0; j < len; j++) fprintf(out, "%02X", value[j]); fprintf(out, "\n"); } fclose(out); return tidy(hContext, 0); } tpm-quote-tools-1.0.4/INSTALL0000644000175000017510000003661013112026356012565 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command `./configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the `README' file for instructions specific to this package. Some packages provide this `INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. Running `configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type `make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the `make install' phase executed with root privileges. 5. Optionally, type `make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior `make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type `make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide `make distcheck', which can by used by developers to test that all other targets like `make install' and `make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. This is known as a "VPATH" build. With a non-GNU `make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple `-arch' options to the compiler but only a single `-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the `lipo' tool if you have problems. Installation Names ================== By default, `make install' installs the package's commands under `/usr/local/bin', include files under `/usr/local/include', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option `--exec-prefix=PREFIX' to `configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=DIR' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of `${prefix}', so that specifying just `--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to `configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the `make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, `make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of `${prefix}'. Any directories that were specified during `configure', but not in terms of `${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the `DESTDIR' variable. For example, `make install DESTDIR=/alternate/directory' will prepend `/alternate/directory' before all installation names. The approach of `DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of `${prefix}' at `configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of `make' will be. For these packages, running `./configure --enable-silent-rules' sets the default to minimal output, which can be overridden with `make V=1'; while running `./configure --disable-silent-rules' sets the default to verbose, which can be overridden with `make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' header file. The option `-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put `/usr/ucb' early in your `PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in `/usr/bin'. So, if you need `/usr/ucb' in your `PATH', put it _after_ `/usr/bin'. On Haiku, software installed for all users goes in `/boot/common', not `/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option `--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified `gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for `CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of all of the options to `configure', and exit. `--help=short' `--help=recursive' Print a summary of the options unique to this package's `configure', and exit. The `short' variant lists options used only in the top level, while the `recursive' variant lists options also present in any nested packages. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. `--no-create' `-n' Run the configure checks, but stop before creating any output files. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. tpm-quote-tools-1.0.4/tss_err.c0000644000175000017510000001250213037720561013360 00000000000000/* * Print TSS error results. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include "tpm_quote.h" const char *tss_result(TSS_RESULT result) { switch (ERROR_CODE(result)) { case TSS_SUCCESS: return "TSS_SUCCESS"; case TSS_E_FAIL: return "TSS_E_FAIL"; case TSS_E_BAD_PARAMETER: return "TSS_E_BAD_PARAMETER"; case TSS_E_INTERNAL_ERROR: return "TSS_E_INTERNAL_ERROR"; case TSS_E_OUTOFMEMORY: return "TSS_E_OUTOFMEMORY"; case TSS_E_NOTIMPL: return "TSS_E_NOTIMPL"; case TSS_E_KEY_ALREADY_REGISTERED: return "TSS_E_KEY_ALREADY_REGISTERED"; case TSS_E_TPM_UNEXPECTED: return "TSS_E_TPM_UNEXPECTED"; case TSS_E_COMM_FAILURE: return "TSS_E_COMM_FAILURE"; case TSS_E_TIMEOUT: return "TSS_E_TIMEOUT"; case TSS_E_TPM_UNSUPPORTED_FEATURE: return "TSS_E_TPM_UNSUPPORTED_FEATURE"; case TSS_E_CANCELED: return "TSS_E_CANCELED"; case TSS_E_PS_KEY_NOTFOUND: return "TSS_E_PS_KEY_NOTFOUND"; case TSS_E_PS_KEY_EXISTS: return "TSS_E_PS_KEY_EXISTS"; case TSS_E_PS_BAD_KEY_STATE: return "TSS_E_PS_BAD_KEY_STATE"; case TSS_E_INVALID_OBJECT_TYPE: return "TSS_E_INVALID_OBJECT_TYPE"; case TSS_E_NO_CONNECTION: return "TSS_E_NO_CONNECTION"; case TSS_E_CONNECTION_FAILED: return "TSS_E_CONNECTION_FAILED"; case TSS_E_CONNECTION_BROKEN: return "TSS_E_CONNECTION_BROKEN"; case TSS_E_HASH_INVALID_ALG: return "TSS_E_HASH_INVALID_ALG"; case TSS_E_HASH_INVALID_LENGTH: return "TSS_E_HASH_INVALID_LENGTH"; case TSS_E_HASH_NO_DATA: return "TSS_E_HASH_NO_DATA"; case TSS_E_INVALID_ATTRIB_FLAG: return "TSS_E_INVALID_ATTRIB_FLAG"; case TSS_E_INVALID_ATTRIB_SUBFLAG: return "TSS_E_INVALID_ATTRIB_SUBFLAG"; case TSS_E_INVALID_ATTRIB_DATA: return "TSS_E_INVALID_ATTRIB_DATA"; case TSS_E_INVALID_OBJECT_INITFLAG: return "TSS_E_INVALID_OBJECT_INITFLAG"; case TSS_E_NO_PCRS_SET: return "TSS_E_NO_PCRS_SET"; case TSS_E_KEY_NOT_LOADED: return "TSS_E_KEY_NOT_LOADED"; case TSS_E_KEY_NOT_SET: return "TSS_E_KEY_NOT_SET"; case TSS_E_VALIDATION_FAILED: return "TSS_E_VALIDATION_FAILED"; case TSS_E_TSP_AUTHREQUIRED: return "TSS_E_TSP_AUTHREQUIRED"; case TSS_E_TSP_AUTH2REQUIRED: return "TSS_E_TSP_AUTH2REQUIRED"; case TSS_E_TSP_AUTHFAIL: return "TSS_E_TSP_AUTHFAIL"; case TSS_E_TSP_AUTH2FAIL: return "TSS_E_TSP_AUTH2FAIL"; case TSS_E_KEY_NO_MIGRATION_POLICY: return "TSS_E_KEY_NO_MIGRATION_POLICY"; case TSS_E_POLICY_NO_SECRET: return "TSS_E_POLICY_NO_SECRET"; case TSS_E_INVALID_OBJ_ACCESS: return "TSS_E_INVALID_OBJ_ACCESS"; case TSS_E_INVALID_ENCSCHEME: return "TSS_E_INVALID_ENCSCHEME"; case TSS_E_INVALID_SIGSCHEME: return "TSS_E_INVALID_SIGSCHEME"; case TSS_E_ENC_INVALID_LENGTH: return "TSS_E_ENC_INVALID_LENGTH"; case TSS_E_ENC_NO_DATA: return "TSS_E_ENC_NO_DATA"; case TSS_E_ENC_INVALID_TYPE: return "TSS_E_ENC_INVALID_TYPE"; case TSS_E_INVALID_KEYUSAGE: return "TSS_E_INVALID_KEYUSAGE"; case TSS_E_VERIFICATION_FAILED: return "TSS_E_VERIFICATION_FAILED"; case TSS_E_HASH_NO_IDENTIFIER: return "TSS_E_HASH_NO_IDENTIFIER"; case TSS_E_INVALID_HANDLE: return "TSS_E_INVALID_HANDLE"; case TSS_E_SILENT_CONTEXT: return "TSS_E_SILENT_CONTEXT"; case TSS_E_EK_CHECKSUM: return "TSS_E_EK_CHECKSUM"; case TSS_E_DELEGATION_NOTSET: return "TSS_E_DELEGATION_NOTSET"; case TSS_E_DELFAMILY_NOTFOUND: return "TSS_E_DELFAMILY_NOTFOUND"; case TSS_E_DELFAMILY_ROWEXISTS: return "TSS_E_DELFAMILY_ROWEXISTS"; case TSS_E_VERSION_MISMATCH: return "TSS_E_VERSION_MISMATCH"; case TSS_E_DAA_AR_DECRYPTION_ERROR: return "TSS_E_DAA_AR_DECRYPTION_ERROR"; case TSS_E_DAA_AUTHENTICATION_ERROR: return "TSS_E_DAA_AUTHENTICATION_ERROR"; case TSS_E_DAA_CHALLENGE_RESPONSE_ERROR: return "TSS_E_DAA_CHALLENGE_RESPONSE_ERROR"; case TSS_E_DAA_CREDENTIAL_PROOF_ERROR: return "TSS_E_DAA_CREDENTIAL_PROOF_ERROR"; case TSS_E_DAA_CREDENTIAL_REQUEST_PROOF_ERROR: return "TSS_E_DAA_CREDENTIAL_REQUEST_PROOF_ERROR"; case TSS_E_DAA_ISSUER_KEY_ERROR: return "TSS_E_DAA_ISSUER_KEY_ERROR"; case TSS_E_DAA_PSEUDONYM_ERROR: return "TSS_E_DAA_PSEUDONYM_ERROR"; case TSS_E_INVALID_RESOURCE: return "TSS_E_INVALID_RESOURCE"; case TSS_E_NV_AREA_EXIST: return "TSS_E_NV_AREA_EXIST"; case TSS_E_NV_AREA_NOT_EXIST: return "TSS_E_NV_AREA_NOT_EXIST"; case TSS_E_TSP_TRANS_AUTHFAIL: return "TSS_E_TSP_TRANS_AUTHFAIL"; case TSS_E_TSP_TRANS_AUTHREQUIRED: return "TSS_E_TSP_TRANS_AUTHREQUIRED"; case TSS_E_TSP_TRANS_NOTEXCLUSIVE: return "TSS_E_TSP_TRANS_NOTEXCLUSIVE"; case TSS_E_TSP_TRANS_FAIL: return "TSS_E_TSP_TRANS_FAIL"; case TSS_E_TSP_TRANS_NO_PUBKEY: return "TSS_E_TSP_TRANS_NO_PUBKEY"; case TSS_E_NO_ACTIVE_COUNTER: return "TSS_E_NO_ACTIVE_COUNTER"; default: return NULL; } } int tss_err(TSS_RESULT rc, const char *msg) { const char *result = tss_result(rc); if (result) fprintf(stderr, "Error while %s. Error code: %s\n", msg, result); else fprintf(stderr, "Error while %s. Error code: 0x%x\n", msg, rc); return 1; } tpm-quote-tools-1.0.4/tpm_verifyquote.c0000644000175000017510000001074713037720561015152 00000000000000/* * Verify a quote. * Copyright (C) 2010 The MITRE Corporation * * This program is free software: you can redistribute it and/or * modify it under the terms of the BSD License as published by the * University of California. */ #if defined HAVE_CONFIG_H #include "config.h" #endif #include #include #include #include #include #include #include "tpm_quote.h" #define BUFSIZE (1 << 10) static int read_data(BYTE *buf, const char *name, UINT32 *len) { FILE *in = fopen(name, "rb"); if (!in) { fprintf(stderr, "Cannot open %s\n", name); return 1; } *len = fread(buf, 1, BUFSIZE, in); if (ferror(in)) return 1; fclose(in); return 0; } static int usage(const char *prog) { const char text[] = "Usage: %s [-hv] pubkey hash nonce [quote]\n" "\tpubkey\tFile containing public part of the AIK\n" "\thash\tFile containing the expected PCR composite hash\n" "\tnonce\tFile containing nonce in quote request\n" "\tquote\tFile with signature to verify\n" "Options:\n" "\t-h Display command usage info\n" "\t-v Display command version info\n" "\n" "On success, verifies quote.\n"; fprintf(stderr, text, prog); return 1; } int main(int argc, char **argv) { int opt; while ((opt = getopt(argc, argv, "hv")) != -1) { switch (opt) { case 'h': usage(argv[0]); return 0; case 'v': fprintf(stderr, "%s\n", PACKAGE_STRING); return 0; default: return usage(argv[0]); } } switch (argc - optind) { case 3: /* Take quote from standard input */ break; case 4: /* Take quote from file */ if (!freopen(argv[optind + 3], "rb", stdin)) { fprintf(stderr, "Cannot open %s\n", argv[optind + 3]); return 1; } break; default: return usage(argv[0]); } const char *pubkeyname = argv[optind]; const char *hashname = argv[optind + 1]; const char *noncename = argv[optind + 2]; BYTE pubkey[BUFSIZE]; UINT32 pubkeyLen; if (read_data(pubkey, pubkeyname, &pubkeyLen)) return 1; BYTE hash[BUFSIZE]; UINT32 hashLen; if (read_data(hash, hashname, &hashLen)) return 1; if (hashLen < sizeof(TPM_NONCE)) { fprintf(stderr, "Hash wrong size\n"); return 1; } TPM_NONCE *hashNonce = quote_nonce(hash); if (!hashNonce) { fprintf(stderr, "Hash format error\n"); return 1; } BYTE nonce[BUFSIZE]; UINT32 nonceLen; if (read_data(nonce, noncename, &nonceLen)) return 1; if (nonceLen != sizeof(TPM_NONCE)) { fprintf(stderr, "Nonce wrong size\n"); return 1; } /* Insert nonce into provisioned signed data */ memcpy(hashNonce, nonce, sizeof(TPM_NONCE)); BYTE quote[BUFSIZE]; UINT32 quoteLen; quoteLen = fread(quote, 1, BUFSIZE, stdin); fclose(stdin); /* Decode public key */ UINT32 blobType; BYTE blob[BUFSIZE]; UINT32 blobLen = BUFSIZE; TSS_RESULT rc = Tspi_DecodeBER_TssBlob(pubkeyLen, pubkey, &blobType, &blobLen, blob); if (rc != TSS_SUCCESS) return tss_err(rc, "decoding public key"); if (blobType != TSS_BLOB_TYPE_PUBKEY) { fprintf(stderr, "Error while decoding public key, got wrong blob type"); return 1; } /* Create context */ TSS_HCONTEXT hContext; /* Context handle */ rc = Tspi_Context_Create(&hContext); if (rc != TSS_SUCCESS) return tss_err(rc, "creating context"); /* Create Public AIK object */ TSS_HKEY hPubAIK; int initFlags = TSS_KEY_TYPE_IDENTITY | TSS_KEY_SIZE_2048; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_RSAKEY, initFlags, &hPubAIK); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "creating public AIK object")); /* Install public key */ rc = Tspi_SetAttribData(hPubAIK, TSS_TSPATTRIB_KEY_BLOB, TSS_TSPATTRIB_KEYBLOB_PUBLIC_KEY, blobLen, blob); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "installing public key")); /* Hash quote for signature checking */ TSS_HHASH hHash; rc = Tspi_Context_CreateObject(hContext, TSS_OBJECT_TYPE_HASH, TSS_HASH_SHA1, &hHash); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "creating hash object")); rc = Tspi_Hash_UpdateHashValue(hHash, hashLen, hash); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "setting hash to quote")); /* Verify the signature on the quote */ rc = Tspi_Hash_VerifySignature(hHash, hPubAIK, quoteLen, quote); if (rc != TSS_SUCCESS) return tidy(hContext, tss_err(rc, "verifying signature")); return tidy(hContext, 0); }