Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package openssl_tpm2_engine for
openSUSE:Factory checked in at 2022-02-18 22:54:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openssl_tpm2_engine (Old)
and /work/SRC/openSUSE:Factory/.openssl_tpm2_engine.new.1958 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "openssl_tpm2_engine"
Fri Feb 18 22:54:29 2022 rev:5 rq: version:3.0.1
Changes:
--------
--- /work/SRC/openSUSE:Factory/openssl_tpm2_engine/openssl_tpm2_engine.changes
2022-02-17 23:42:13.267700073 +0100
+++
/work/SRC/openSUSE:Factory/.openssl_tpm2_engine.new.1958/openssl_tpm2_engine.changes
2022-02-18 22:54:35.385455729 +0100
@@ -2,8 +1,0 @@
-Thu Feb 17 14:09:11 UTC 2022 - [email protected]
-
-- Update to version 3.1.0
- * Bandaid openssl-3 support
- * direct pcr policy creation options
- * TPM key RFC
-
--------------------------------------------------------------------
Old:
----
openssl_tpm2_engine-3.1.0.tar.gz
New:
----
openssl_tpm2_engine-3.0.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ openssl_tpm2_engine.spec ++++++
--- /var/tmp/diff_new_pack.Mo4Xp1/_old 2022-02-18 22:54:36.017455672 +0100
+++ /var/tmp/diff_new_pack.Mo4Xp1/_new 2022-02-18 22:54:36.021455672 +0100
@@ -1,7 +1,7 @@
#
# spec file for package openssl_tpm2_engine
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2021 SUSE LLC
# Copyright (c) 2017 [email protected]
#
# All modifications and additions to the file contributed by third parties
@@ -18,7 +18,7 @@
Name: openssl_tpm2_engine
-Version: 3.1.0
+Version: 3.0.1
Release: 0
Summary: OpenSSL TPM 2.0 interface engine plugin
License: LGPL-2.1-only
++++++ openssl_tpm2_engine-3.1.0.tar.gz -> openssl_tpm2_engine-3.0.1.tar.gz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/Makefile.am
new/openssl_tpm2_engine-3.0.1/Makefile.am
--- old/openssl_tpm2_engine-3.1.0/Makefile.am 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/Makefile.am 2021-04-04 22:47:14.000000000
+0200
@@ -9,10 +9,6 @@
CLEANFILES = $(man1_MANS)
endif
-if HAVE_OPENSSL3
-CFLAGS+= -DOPENSSL_API_COMPAT=0x10100000L
-endif
-
openssl_engine_LTLIBRARIES=libtpm2.la
bin_PROGRAMS=create_tpm2_key load_tpm2_key seal_tpm2_data unseal_tpm2_data
openssl_enginedir=@enginesdir@
@@ -45,4 +41,4 @@
install-data-hook:
cd $(DESTDIR)$(openssl_enginedir) && $(LN_S) -f libtpm2@SHREXT@
tpm2@SHREXT@
-SUBDIRS = tests doc
+SUBDIRS = tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/configure.ac
new/openssl_tpm2_engine-3.0.1/configure.ac
--- old/openssl_tpm2_engine-3.1.0/configure.ac 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/configure.ac 2021-04-04 22:47:14.000000000
+0200
@@ -2,7 +2,7 @@
# configure.in for the OpenSSL TPM engine project
#
-AC_INIT(openssl-tpm2-engine, 3.1.0, <[email protected]>)
+AC_INIT(openssl-tpm2-engine, 3.0.1, <[email protected]>)
AM_INIT_AUTOMAKE([foreign 1.6.3])
AC_CANONICAL_HOST
AM_CONDITIONAL(NATIVE_BUILD, test "x$cross_compiling" = "xno")
@@ -50,11 +50,6 @@
AC_SUBST(OPENSSL_INCLUDE_DIR)])
AC_LANG(C)
-
-PKG_CHECK_MODULES([DEPS], [libcrypto >= 3.0.0],
- [ac_have_openssl3=1],
- [PKG_CHECK_MODULES([DEPS], [libcrypto])])
-
AC_ARG_WITH(
[enginesdir],
[AC_HELP_STRING([--with-enginesdir], [OpenSSL engines directory])],
@@ -100,8 +95,6 @@
])
AM_CONDITIONAL(HAVE_IBM_TSS, test "$tsslibs" = "IBM")
-AM_CONDITIONAL(HAVE_OPENSSL3, test "$ac_have_openssl3" = "1")
-
AC_DISABLE_STATIC
AC_PROG_CC_STDC
AM_PROG_CC_C_O
@@ -135,8 +128,6 @@
AC_PATH_PROG(TPMSERVER,
tpm_server,,/bin:/usr/bin:/usr/lib/ibmtss:/usr/libexec/ibmtss)
AC_PATH_PROG(SWTPM, swtpm,,/bin:/usr/bin:/usr/lib/ibmtss:/usr/libexec/ibmtss)
AC_PATH_PROG(SWTPM_IOCTL,
swtpm_ioctl,,/bin:/usr/bin:/usr/lib/ibmtss:/usr/libexec/ibmtss)
-AC_CHECK_PROG(XML2RFC, xml2rfc, xml2rfc)
-AM_CONDITIONAL(HAVE_XML2RFC, test -n "${XML2RFC}")
CFLAGS="$CFLAGS -Wall"
SHREXT=$shrext_cmds
AC_SUBST(CFLAGS)
@@ -156,7 +147,7 @@
AC_SUBST(testtpm)
-AC_OUTPUT([Makefile tests/Makefile doc/Makefile])
+AC_OUTPUT([Makefile tests/Makefile])
cat <<EOF
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/create_tpm2_key.1.in
new/openssl_tpm2_engine-3.0.1/create_tpm2_key.1.in
--- old/openssl_tpm2_engine-3.1.0/create_tpm2_key.1.in 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/create_tpm2_key.1.in 2021-04-04
22:47:14.000000000 +0200
@@ -31,20 +31,6 @@
$ echo 0000016b >> policy.txt
-[PCR Values]
-
-The PCR values are specified as
-
- <bank>:<list>
-
-Where <bank> is any supported PCR hash bank and list specifies the
-PCRs to lock the key to as both comma separated individual values as
-well as comma separated ranges. So
-
- sha256:1,3 means PCRs 1 and 3 in the sha256 bank
-
- sha512:1,3-5 means PCRs 1,3,4 and 5 in the sha512 bank
-
[examples]
Create a self-signed cert using the TPM engine:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/create_tpm2_key.c
new/openssl_tpm2_engine-3.0.1/create_tpm2_key.c
--- old/openssl_tpm2_engine-3.1.0/create_tpm2_key.c 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/create_tpm2_key.c 2021-04-04
22:47:14.000000000 +0200
@@ -36,7 +36,6 @@
{"key-size", 1, 0, 's'},
{"name-scheme", 1, 0, 'n'},
{"parent-handle", 1, 0, 'p'},
- {"pcr-lock", 1, 0, 'x'},
{"wrap", 1, 0, 'w'},
{"version", 0, 0, 'v'},
{"password", 1, 0, 'k'},
@@ -95,9 +94,6 @@
" may not be used for general
signing or\n"
" decryption but may be the
parent of other\n"
" keys (i.e. it is a storage
key)\n"
- "\t-x, --pcr-lock <pcrs> Lock the created key to the
specified PCRs\n"
- " By current value. See PCR
VALUES for\n"
- " details about formatting\n"
"\n"
"Report bugs to " PACKAGE_BUGREPORT "\n",
argv0);
@@ -821,10 +817,6 @@
ENCRYPTED_SECRET_2B secret, *enc_secret = NULL;
int restricted = 0;
char *parent_str = NULL;
- TPML_PCR_SELECTION pcr_lock;
- int has_policy = 0;
-
- pcr_lock.count = 0;
OpenSSL_add_all_digests();
/* may be needed to decrypt the key */
@@ -832,7 +824,7 @@
while (1) {
option_index = 0;
- c = getopt_long(argc, argv, "n:s:ab:p:hw:vk:re:ldc:i:x:",
+ c = getopt_long(argc, argv, "n:s:ab:p:hw:vk:re:ldc:i:",
long_options, &option_index);
if (c == -1)
break;
@@ -907,9 +899,6 @@
case 'i':
import = optarg;
break;
- case 'x':
- tpm2_get_pcr_lock(&pcr_lock, optarg);
- break;
case OPT_DEPRECATED:
version = 0;
break;
@@ -955,24 +944,11 @@
exit(1);
}
- if (pcr_lock.count !=0 && policyFilename) {
- fprintf(stderr, "cannot specify both policy file and pcr
lock\n");
- exit(1);
- }
-
- if (pcr_lock.count != 0 && import) {
- fprintf(stderr, "cannot specify pcr lock and import because
pcrs may not be correct\n");
- exit(1);
- }
-
- if (pcr_lock.count != 0 || policyFilename)
- has_policy = 1;
-
digest.hashAlg = name_alg;
sizeInBytes = TSS_GetDigestSize(digest.hashAlg);
memset((uint8_t *)&digest.digest, 0, sizeInBytes);
- if (has_policy) {
+ if (policyFilename) {
sk = sk_TSSOPTPOLICY_new_null();
if (!sk) {
rc = NOT_TPM_ERROR;
@@ -980,11 +956,10 @@
goto out_err;
}
- if (policyFilename) {
- rc = tpm2_parse_policy_file(policyFilename, sk, auth,
&digest);
+ rc = tpm2_parse_policy_file(policyFilename, sk, auth, &digest);
+ if (rc) {
reason = "parse_policy_file";
- if (rc)
- goto out_free_policy;
+ goto out_free_policy;
}
}
@@ -1000,8 +975,6 @@
goto out_free_auth;
}
}
- if (has_policy && !policyFilename)
- tpm2_add_auth_policy(sk, &digest);
}
if (import) {
@@ -1009,8 +982,6 @@
EVP_PKEY *pkey = openssl_read_key(wrap);
TPMT_SENSITIVE s;
- rc = NOT_TPM_ERROR;
-
if (parent_str) {
parent = tpm2_get_parent_ext(parent_str);
if (parent == 0) {
@@ -1025,6 +996,8 @@
pub = &objectPublic;
priv = &outPrivate;
+ rc = NOT_TPM_ERROR;
+
if (!p_pkey || !pkey) {
reason = "read openssl key";
goto out_err;
@@ -1041,7 +1014,7 @@
reason = "openssl_to_tpm_public";
goto out_err;
}
- if (has_policy) {
+ if (policyFilename) {
VAL(pub->publicArea.objectAttributes) &=
~TPMA_OBJECT_USERWITHAUTH;
rc = TSS_TPM2B_Create(
@@ -1086,15 +1059,6 @@
goto out_free_auth;
}
- if (pcr_lock.count != 0) {
- rc = tpm2_pcr_lock_policy(tssContext, &pcr_lock,
- sk, &digest);
- if (rc) {
- reason = "create pcr policy";
- goto out_free_auth;
- }
- }
-
if (parent_str) {
parent = tpm2_get_parent(tssContext, parent_str);
if (parent == 0) {
@@ -1147,7 +1111,7 @@
goto out_flush;
}
- if (has_policy) {
+ if (policyFilename) {
VAL(objectPublic.publicArea.objectAttributes) &=
~TPMA_OBJECT_USERWITHAUTH;
rc = TSS_TPM2B_Create(
@@ -1207,7 +1171,7 @@
tpm2_public_template_ecc(&objectPublic.publicArea, ecc);
}
- if (has_policy) {
+ if (policyFilename) {
VAL(objectPublic.publicArea.objectAttributes) &=
~TPMA_OBJECT_USERWITHAUTH;
rc = TSS_TPM2B_Create(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/doc/Makefile.am
new/openssl_tpm2_engine-3.0.1/doc/Makefile.am
--- old/openssl_tpm2_engine-3.1.0/doc/Makefile.am 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/doc/Makefile.am 1970-01-01
01:00:00.000000000 +0100
@@ -1,15 +0,0 @@
-XML2RFC_TARGETS = draft-bottomley-tpm2-keys.txt \
- draft-bottomley-tpm2-keys.html
-
-if HAVE_XML2RFC
-all: $(XML2RFC_TARGETS)
-
-clean-local:
- rm -fr $(XML2RFC_TARGETS)
-endif
-
-$(builddir)/%.txt: $(srcdir)/%.xml
- $(XML2RFC) --text -o $@ $<
-
-$(builddir)/%.html: $(srcdir)/%.xml
- $(XML2RFC) --html -o $@ $<
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openssl_tpm2_engine-3.1.0/doc/draft-bottomley-tpm2-keys.xml
new/openssl_tpm2_engine-3.0.1/doc/draft-bottomley-tpm2-keys.xml
--- old/openssl_tpm2_engine-3.1.0/doc/draft-bottomley-tpm2-keys.xml
2022-02-17 00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/doc/draft-bottomley-tpm2-keys.xml
1970-01-01 01:00:00.000000000 +0100
@@ -1,465 +0,0 @@
-<?xml version="1.0"?>
-<!DOCTYPE rfc SYSTEM "rfc2629.dtd" [
-<!-- One method to get references from the online citation libraries.
-There has to be one entity for each item to be referenced.
-An alternate method (rfc include) is described in the references.
--->
-<!ENTITY RFC2119 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.2119.xml">
-<!ENTITY RFC8017 SYSTEM
"http://xml.resource.org/public/rfc/bibxml/reference.RFC.8017.xml">
-]>
-<?rfc toc="yes" ?>
-<rfc ipr="trust200902" category="info" docName="draft-bottomley-tpm-keys-00">
- <front>
- <title abbrev="TPM 2 Key Format">ASN.1 Specification for TPM 2.0 Key
Files</title>
- <author initials="J." surname="Bottomley" fullname="James E.J. Bottomley">
- <organization>Linux Kernel</organization>
- <address>
- <postal>
- <street/>
- <city/>
- <region/>
- <country>USA</country>
- </postal>
- <email>[email protected]</email>
- </address>
- </author>
- <date month="May" year="2021"/>
- <area>Security</area>
- <keyword>I-D</keyword>
- <keyword>Internet-Draft</keyword>
- <keyword>X.509</keyword>
- <abstract>
- <t>
- This specification is designed to be an extension to the ASN.1
- (defined in <xref target="X.680"/>) specification of PKCS #1
- <xref target="RFC8017"/> to define the file format of private
- keys that need to be loaded into a TPM 2 device to operate.
- </t>
- </abstract>
- </front>
- <middle>
- <section anchor="intro" title="Introduction">
- <t>
- The Security of private keys has long been a concern and the
- ability of ubiquitous devices like TPMs has made it useful to
- use them for secure private key storage. With the advent of
- TPM 2.0, private key storage inside the TPM (acting as a token
- which could be referred to by PKCS #11) has been discouraged,
- and instead key files which are loaded and evicted as
- necessary is the encouraged format. This standard defines an
- interoperable ASN.1 representation for such key files, so that
- a key created by one tool should be loadable by a different
- one.
- </t>
- </section>
- <section anchor="terms" title="Terminology">
- <t>
- The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL
- NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and
- "OPTIONAL" in this document are to be interpreted as described in
- <xref target="RFC2119"/>.
- </t>
- <section title="Notation">
- <dl>
- <dt>ASN.1</dt>
- <dd>Abstract Syntax Notation defined in
- <xref target="X.680"/></dd>
- <dt>DER</dt>
- <dd>Distinguished Encoding Rules. Basically a defined binary
- representation for ASN.1</dd>
- <dt>MSO</dt>
- <dd>Most Significant Octet (the highest order
- byte of an integer)</dd>
- <dt>PEM</dt>
- <dd>Privacy enhanced Electronic Mail. An ASCII compatible
- representation of DER</dd>
- <dt>TCG</dt>
- <dd>Trusted Computing Group</dd>
- <dt>TPM</dt>
- <dd>Trusted Platform Module</dd>
- </dl>
- </section>
- </section>
- <section anchor="keyrep" title="Key Representation">
- <t>
- All TPM 2.0 keys consist of two binary pieces, a public part,
- which can be parsed according to the TPM specification for
- TPM2B_PUBLIC <xref target="TPM2.0"/> and a private part, which
- is cryptographically sealed in such a way as to be only
- readable on the TPM that created it. The purpose of this
- specification is to specify a format by which the public and
- private pieces of a TPM key can be loaded.
- </t>
- <t>
- The design of the TPMkey ASN.1 format is that it should have a
- distinguishing OID at the beginning so the DER form of the
- key can be easily recognized. In PEM form, the key MUST have
- "-----BEGIN TSS2 PRIVATE KEY-----" and "-----END TSS2 PRIVATE
- KEY-----" as the PEM guards. All additional information that
- may be needed to load the key is specified as optional
- explicit elements, which can be extended by later
- specifications, which is why the TPMkey is not versioned.
- </t>
- <section anchor="tpmkey" title="TPMkey Syntax">
- <figure><artwork>
- TPMKey ::= SEQUENCE {
- type OBJECT IDENTIFIER
- emptyAuth [0] EXPLICIT BOOLEAN OPTIONAL
- policy [1] EXPLICIT SEQUENCE OF TPMPolicy OPTIONAL
- secret [2] EXPLICIT OCTET STRING OPTIONAL
- parent INTEGER
- pubkey OCTET STRING
- privkey OCTET STRING
- }
- </artwork></figure>
- <t>
- The fields of type TPMKey have the following meanings:
- </t>
- <section title="type">
- <t>
- A unique OID specifying the key type. This standard
- currently defines three types of keys: a loadable key,
- specified by id-loadablekey, (to be loaded with
- TPM2_Load), an importable key, specified by
- id-importablekey, (to be loaded with TPM2_Import) and a
- sealed data key, specified by id-sealedkey, (to be
- extracted with TPM2_Unseal). The TCG has reserved the
- following OID prefix for this:
- </t>
- <figure><artwork>
- id-tpmkey OBJECT IDENTIFIER ::=
- {joint-iso-itu-t(2) international-organizations(23) 133 10}
- </artwork></figure>
- <t>
- And the three key types are:
- </t>
- <figure><artwork>
- id-loadablekey OBJECT IDENTIFIER ::=
- {id-tpmkey 3}
- </artwork></figure>
- <figure><artwork>
- id-importablekey OBJECT IDENTIFIER ::=
- {id-tpmkey 4}
- </artwork></figure>
- <figure><artwork>
- id-sealedkey OBJECT IDENTIFIER ::=
- {id-tpmkey 5}
- </artwork></figure>
- </section>
- <section title="emptyAuth">
- <t>
- An implementation needs to know as it formulates the
- TPM2_Load/Import/Unseal command whether it must also send
- down an authorization, so this parameter gives that
- indication. emptyAuth MUST be true if authorization is
- NOT required and MUST BE either false or absent if
- authorization is required. Since this element has
- three states (one representing true and two representing
- false) it is RECOMMENDED that implementations emitting
- TPMkey representations use absence of the tag to represent
- false. However, implementations reading TPMKey MUST
- be able to process all three possible states.
- </t>
- </section>
- <section title="policy">
- <t>
- This MUST be present if the TPM key has a policy hash
- because it describes to the implementation how to
- construct the policy. The forms of the policy statement
- are described in section <xref target="policy"/>.
- </t>
- </section>
- <section title="secret">
- <t>
- This section describes the additional cryptographic
- secret used to specify the outer wrapping of an
- importable key. It MUST be present for key type
- id-importablekey and MUST NOT be present for any other
- key type.
- </t>
- <t>
- Importable keys (designed to be processed by TPM2_Import)
- MUST have an unencrypted inner wrapper (symmetricAlg MUST
- be TPM_ALG_NULL and encryptionKey MUST be empty) and an
- outer wrapper encrypted to the parent key using
- inSymSeed. The secret parameter is the fully marshalled
- TPM2B_ENCRYPTED_SECRET form of inSymSeed.
- </t>
- </section>
- <section title="parent">
- <t>
- This MUST be present for all keys and specifies the handle
- of the parent key. The parent key SHOULD be either a
- persistent handle (MSO 0x81) or a permanent handle (MSO
- 0x40). Since volatile handle numbering can change
- unexpectedly depending on key load order, the parent
- SHOULD NOT be a volatile handle (MSO 0x80). The parent MUST
- NOT have any other MSO.
- </t>
- <t>
- If a permanent handle (MSO 0x40) is specified then the
- implementation MUST run TPM2_CreatePrimary on the handle
- using the TCG specified Elliptic Curve template for the
- NIST P-256 curve and use the primary key so generated as
- the parent.
- </t>
- </section>
- <section title="pubkey">
- <t>
- This MUST be present and MUST correspond to the fully
- marshalled TPM2B_PUBLIC structure of the TPM Key.
- </t>
- </section>
- <section title="privkey">
- <t>
- This MUST be present and MUST correspond to the fully
- marshalled TPM2B_PRIVATE structure of the TPM Key. For
- importable keys, this must be the duplicate parameter that
- would be input to TPM2_Import.
- </t>
- </section>
- </section>
- </section>
- <section anchor="policy" title="Key Policy Specification">
- <t>
- Policy is constructed on a TPM by executing a sequence of
- policy statements. This specification currently only defines
- a limited subset of the allowed policy statements. The policy
- is specified by a hash, which the execution of the policy
- statements must reach in order for the policy to be validated
- (See <xref target="TPM2.0"/> Part 1 for a detailed description.
- </t>
- <t>
- The TPMPolicy ASN.1 MUST be a sequence of policy statements
- which correspond exactly to TPM policy instructions in the
- order they should be executed and additionally from which the
- ultimate policy hash can be constructed.
- </t>
- <t>
- The current policy specification is strictly for AND based
- policy only and may be extended at a later date with OR
- policy. However, the ASN.1 for policy is formulated as CONS
- elements, leaving the possibility of adding additional but
- optional elements for policy statements which are not
- supported by this standard (such as TPM2_PolicyAuthorize).
- </t>
- <section title="TPMPolicy Syntax">
- <figure><artwork>
- TPMPolicy ::= SEQUENCE {
- CommandCode [0] EXPLICIT INTEGER
- CommandPolicy [1] EXPLICIT OCTET STRING
- }
- </artwork></figure>
- <t>
- The Fields of type TPMPolicy have the following meanings:
- </t>
- <section title="CommandCode">
- <t>
- This is the integer representation of the TPM command code
- for the policy statement.
- </t>
- </section>
- <section title="CommandPolicy">
- <t>
- This is a binary string representing a fully marshalled,
- TPM ordered, command body for the TPM policy command.
- Therefore to send the command, the implementation simply
- marshalls the command code and appends this octet string
- as the body.
- </t>
- <t>
- Commands which have no body, such as TPM2_AuthVal, MUST be
- specified as a zero length OCTET STRING
- </t>
- </section>
- </section>
- <section title="Policy Implementation Considerations">
- <t>
- The policy hash for AND based policies is constructed by extension of
the prior policy hash
- </t>
- <figure><artwork>
- newHash = HASH ( oldHash || policyHash )
- </artwork></figure>
- <t>
- where policyHash is usually simply the hash of the fully
- marshalled policy command (including the CommandCode).
- However, this isn't true for TPM2_PolicyCounterTimer() so
- always consult the <xref target="TPM2.0"/> specifications
- for how to construct the policyHash.
- </t>
- <t>
- The implementation should fail fast for policy problems, so
- if an individual policy command returns a failure (which
- usually indicates a particular policy requirement cannot be
- met), that failure should be reported in as much detail as
- possible and processing of the key should fail at that
- point.
- </t>
- <section title="Authorization Policy">
- <t>
- When Authorization (Passing in a password) is required,
- the emptyAuth parameter MUST be absent or set to false
- and additionally the TPM_CC_PolicyAuthValue MUST be
- specified as the command code for one entry in the
- TPMPolicy sequence. However, the implementation MAY
- choose to execute either TPM2_PolicyPassword for TPM_RS_PW
- or TPM2_PolicyAuthValue for HMAC based authorization
- depending on whether the command being authorized is using
- sessions or not. If the policy does not require an
- authorization then the emptyAuth parameter MUST be set to
- true.
- </t>
- </section>
- </section>
- </section>
- <section anchor="implementation" title="Implementation Considerations">
- <t>
- Implementations SHOULD support all TCG mandated algorithms,
- but MAY omit those deemed insecure, such as the SHA1 hash.
- </t>
- <t>
- TPM2_Import transforms the privKey into a TPM2B_PRIVATE which
- can then be used as a source to TPM2_Load, making the loading
- of importable keys is necessarily a two stage process, which
- can be time consuming on some TPMs. Since the TPM2B_PRIVATE
- structure emitted by TPM2_Import is fully secure,
- Implementations SHOULD minimize the number of TPM2_Import
- operations by caching the emitted TPM2B_PRIVATE.
- </t>
- </section>
- <section anchor="security" title="Security Considerations">
- <t>
- The TPM 2.0 supports a variety of algorithms, the most common
- being SHA1 and SHA256 for hashing and RSA2048 and NIST P-256
- for asymmetric keys. Implementors SHOULD NOT use deprecated
- algorithms, such as SHA1, for any TPM operation. In
- particular, the algorithm used for the policy hash SHOULD NOT
- be SHA1 and this means that SHA1 SHOULD NOT be used as the
- name algorithm hash for any TPM key.
- </t>
- <t>
- TPM 2.0 supports a session mode (TPM_RS_PW) where
- authorizations are passed to the TPM in clear text over the
- TPM connection. Implementations SHOULD consider the
- possibility of snooping on the wire between the implementation
- and the TPM, such as <xref target="TPM GENIE"/>, and SHOULD
- use HMAC session authorizations as best practice for all TPM
- keys.
- </t>
- <t>
- In addition to snooping authorizations, snooping may also
- occur when key material is being exchanged between the TPM and
- the implementation, such as wrapping of private keys and the
- sealing and unsealing operations for sealed keys.
- Implementations SHOULD always use HMAC sessions with
- TPMA_SESSION_DECRYPT when sensitive information is passed in
- to the TPM and HMAC sessions with TPMA_SESSION_ENCRYPT when
- sensitive information is received from the TPM.
- </t>
- <t>
- The easiest way to get the TPM to wrap an external private key
- is to use TPM2_Import. However, since TPMA_SESSION_DECRYPT
- only protects the first parameter (which is encryptionKey),
- the duplicate should use inner symmetric encryption with a
- randomly generated ephemeral key, which is then presented to
- the TPM via the protected encryptionKey parameter.
- </t>
- <t>
- The TPM has a mode where it can generate private key material
- internally (using TPM2_Create) such that the private part of
- the key can never leave the TPM. Implementations SHOULD
- support this mode but should be aware that while keys created
- like this may be more secure than wrapped keys, they can also
- be used only while access to the TPM that created them is
- available, so implementations SHOULD also support wrapping for
- keys that are expected to outlive the TPM that's using them.
- Clients can then develop best practices around TPM wrapped
- identity keys, possibly with TPM created sub keys, which can
- only be used on the device they were wrapped for.
- </t>
- <t>
- Since TPM keys can only be used by the specific TPM that
- created them, which is usually embedded in a piece of
- hardware, they are secure against exfiltration attacks.
- However, consideration should be given to an attacker gaining
- access to the system containing the TPM. TPM keys are most
- secure when used as part of an operating system that has
- guaranteed trust properties, such as secure and measured boot.
- Implementations SHOULD assist users in constructing key
- policies that ensure the key can be used only when the
- operating system is within its trusted parameters to minimize
- threats from co-located attackers.
- </t>
- </section>
- <section anchor="IANA" title="IANA Considerations">
- <t>
- None.
- </t>
- </section>
- <section anchor="comments" title="Comments on and Enhancements to this
Document">
- <t>
- Comments on this document should be addressed to the author
- ([email protected]) but should also CC the
- email lists of the two projects implementing this
- specification:
- </t>
- <t>
- The OpenSSL engine: [email protected]
- </t>
- <t>
- The Linux Kernel: [email protected]
- </t>
- <t>
- The OpenSSL TPM2 engine <xref target="OPENSSL TPM2 ENGINE"/>
- is currently the only implementation of this full
- specification, so enhancements should be proposed after
- patches implementing the enhancement have been accepted by
- openssl_tpm2_engine or another full specification
- implementation.
- </t>
- </section>
-
- </middle>
- <back>
- <references title="Normative References">
- &RFC2119;
- &RFC8017;
- <reference anchor="TPM2.0"
target="https://trustedcomputinggroup.org/resource/tpm-library-specification/">
- <front>
- <title>TPM 2.0 Library Specification</title>
- <author>
- <organization>Trusted Computing Group</organization>
- </author>
- <date year="2013" month="March" day="15"/>
- </front>
- </reference>
- <reference anchor="X.680"
target="https://itu.int/rec/T-REC-X.680-201508-I/en">
- <front>
- <title>ITU-T Recommendation X.680,
- Information technology - Abstract Syntax Notation One
- (ASN.1): Specification of basic notation.</title>
- <author><organization>International Telecommunication
Union</organization></author>
- <date year="2015" month="August"/>
- </front>
- </reference>
- </references>
- <references title="Informative References">
- <reference anchor="TPM GENIE"
target="https://www.nccgroup.com/globalassets/about-us/us/documents/tpm-genie.pdf">
- <front>
- <title>TPM Genie: Interposer Attacks Against the Trusted
- Platform Module Serial Bus</title>
- <author initials="J." surname="Boone" fullname="J. Boone">
- <organization>NCC Group</organization>
- </author>
- <date year="2018" month="March" day="9"/>
- </front>
- </reference>
- <reference anchor="OPENSSL TPM2 ENGINE"
target="https://git.kernel.org/pub/scm/linux/kernel/git/jejb/openssl_tpm2_engine.git/">
- <front>
- <title>OpenSSL TPM2 Engine</title>
- <author><organization>Open Source Project</organization></author>
- </front>
- </reference>
- </references>
- </back>
-</rfc>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/e_tpm2-ecc.c
new/openssl_tpm2_engine-3.0.1/e_tpm2-ecc.c
--- old/openssl_tpm2_engine-3.1.0/e_tpm2-ecc.c 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/e_tpm2-ecc.c 2021-04-04 22:47:14.000000000
+0200
@@ -103,11 +103,7 @@
#endif
}
-#if OPENSSL_VERSION_NUMBER >= 0x30000000
- EVP_PKEY_set1_EC_KEY(pkey, eck);
-#else
EC_KEY_free(eck);
-#endif
}
static void tpm2_ecc_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/e_tpm2-rsa.c
new/openssl_tpm2_engine-3.0.1/e_tpm2-rsa.c
--- old/openssl_tpm2_engine-3.1.0/e_tpm2-rsa.c 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/e_tpm2-rsa.c 2021-04-04 22:47:14.000000000
+0200
@@ -130,12 +130,8 @@
RSA_set_ex_data(rsa, ex_app_data, data);
-#if OPENSSL_VERSION_NUMBER >= 0x30000000
- EVP_PKEY_set1_RSA(pkey, rsa);
-#else
/* release the reference EVP_PKEY_get1_RSA obtained */
RSA_free(rsa);
-#endif
}
static void tpm2_rsa_free(void *parent, void *ptr, CRYPTO_EX_DATA *ad,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/ibm-tss.h
new/openssl_tpm2_engine-3.0.1/ibm-tss.h
--- old/openssl_tpm2_engine-3.1.0/ibm-tss.h 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/ibm-tss.h 2021-04-04 22:47:14.000000000
+0200
@@ -487,32 +487,6 @@
return rc;
}
-static inline TPM_RC
-tpm2_PCR_Read(TSS_CONTEXT *tssContext, TPML_PCR_SELECTION *pcrSelectionIn,
- TPML_PCR_SELECTION *pcrSelectionOut, TPML_DIGEST *pcrValues)
-{
- PCR_Read_In in;
- PCR_Read_Out out;
- TPM_RC rc;
-
- in.pcrSelectionIn = *pcrSelectionIn;
-
- rc = TSS_Execute(tssContext,
- (RESPONSE_PARAMETERS *)&out,
- (COMMAND_PARAMETERS *)&in,
- NULL,
- TPM_CC_PCR_Read,
- TPM_RH_NULL, NULL, 0);
-
- if (rc)
- return rc;
-
- *pcrSelectionOut = out.pcrSelectionOut;
- *pcrValues = out.pcrValues;
-
- return rc;
-}
-
static inline TPM_HANDLE
tpm2_handle_int(TSS_CONTEXT *tssContext, TPM_HANDLE h)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/intel-tss.h
new/openssl_tpm2_engine-3.0.1/intel-tss.h
--- old/openssl_tpm2_engine-3.1.0/intel-tss.h 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/intel-tss.h 2021-04-04 22:47:14.000000000
+0200
@@ -151,7 +151,7 @@
\
*buffer += offset; \
*size -= offset; \
- *written += offset; \
+ *written = offset; \
\
return rc; \
}
@@ -179,9 +179,6 @@
TSS_CONVERT_MARSHAL(TPM2B_DIGEST, )
TSS_CONVERT_MARSHAL(TPM2B_PUBLIC, )
TSS_CONVERT_MARSHAL(TPM2B_PRIVATE, )
-TSS_CONVERT_MARSHAL(TPML_PCR_SELECTION, )
-TSS_CONVERT_MARSHAL(UINT32, *)
-#define TSS_TPM_CC_Marshal TSS_UINT32_Marshal
TSS_CONVERT_UNMARSHAL(TPML_PCR_SELECTION, )
TSS_CONVERT_UNMARSHAL(TPM2B_PRIVATE, )
@@ -938,25 +935,6 @@
operandB, offset, operation);
}
-static inline TPM_RC
-tpm2_PCR_Read(TSS_CONTEXT *tssContext, TPML_PCR_SELECTION *pcrSelectionIn,
- TPML_PCR_SELECTION *pcrSelectionOut, TPML_DIGEST *pcrValues)
-{
- TPML_PCR_SELECTION *out;
- TPML_DIGEST *val;
- TPM_RC rc;
-
- rc = Esys_PCR_Read(tssContext, ESYS_TR_NONE, ESYS_TR_NONE, ESYS_TR_NONE,
- pcrSelectionIn, NULL, &out, &val);
- if (rc)
- return rc;
-
- *pcrSelectionOut = *out;
- *pcrValues = *val;
-
- return rc;
-}
-
static inline TPM_HANDLE
tpm2_handle_ext(TSS_CONTEXT *tssContext, TPM_HANDLE esysh)
{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/seal_tpm2_data.1.in
new/openssl_tpm2_engine-3.0.1/seal_tpm2_data.1.in
--- old/openssl_tpm2_engine-3.1.0/seal_tpm2_data.1.in 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/seal_tpm2_data.1.in 2021-04-04
22:47:14.000000000 +0200
@@ -7,20 +7,6 @@
TPM. Possible uses for this blob of data include as a symmetric key,
which is the use in the linux kernel trusted key infrastructure.
-[PCR Values]
-
-The PCR values are specified as
-
- <bank>:<list>
-
-Where <bank> is any supported PCR hash bank and list specifies the
-PCRs to lock the key to as both comma separated individual values as
-well as comma separated ranges. So
-
- sha256:1,3 means PCRs 1 and 3 in the sha256 bank
-
- sha512:1,3-5 means PCRs 1,3,4 and 5 in the sha512 bank
-
[examples]
Create a sealed data blob to the storage parent (owner hierarchy)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/seal_tpm2_data.c
new/openssl_tpm2_engine-3.0.1/seal_tpm2_data.c
--- old/openssl_tpm2_engine-3.1.0/seal_tpm2_data.c 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/seal_tpm2_data.c 2021-04-04
22:47:14.000000000 +0200
@@ -27,7 +27,6 @@
{"auth-parent", 1, 0, 'b'},
{"help", 0, 0, 'h'},
{"parent-handle", 1, 0, 'p'},
- {"pcr-lock", 1, 0, 'x'},
{"version", 0, 0, 'v'},
{"password", 1, 0, 'k'},
{"da", 0, 0, 'd'},
@@ -72,10 +71,6 @@
"\t-m,--nomigrate Create a sealed data bundle
that can be\n"
" migrated to other systems.\n"
"\t-n, --name-scheme <scheme> name algorithm to use sha1
[sha256] sha384 sha512\n"
- "\t-x, --pcr-lock <pcrs> Lock the created key to the
specified PCRs\n"
- " By current value. See PCR
VALUES for\n"
- " details about formatting\n"
- "\n"
"\n"
"Report bugs to " PACKAGE_BUGREPORT "\n",
argv0);
@@ -111,10 +106,6 @@
int32_t size;
uint16_t pubkey_len, privkey_len;
char *parent_str = NULL;
- TPML_PCR_SELECTION pcr_lock;
- int has_policy = 0;
-
- pcr_lock.count = 0;
while (1) {
option_index = 0;
@@ -174,9 +165,6 @@
case 'm':
nomigrate = 1;
break;
- case 'x':
- tpm2_get_pcr_lock(&pcr_lock, optarg);
- break;
default:
printf("Unknown option '%c'\n", c);
usage(argv[0]);
@@ -195,32 +183,22 @@
usage(argv[0]);
}
- if (pcr_lock.count !=0 && policyFilename) {
- fprintf(stderr, "cannot specify both policy file and pcr
lock\n");
- exit(1);
- }
-
- if (pcr_lock.count != 0 || policyFilename)
- has_policy = 1;
-
digest.hashAlg = name_alg;
sizeInBytes = TSS_GetDigestSize(digest.hashAlg);
memset((uint8_t *)&digest.digest, 0, sizeInBytes);
- if (has_policy) {
+ if (policyFilename) {
sk = sk_TSSOPTPOLICY_new_null();
if (!sk) {
fprintf(stderr, "Failed to allocate policy stack\n");
exit(1);
}
- if (policyFilename) {
- rc = tpm2_parse_policy_file(policyFilename, sk,
- data_auth, &digest);
- if (rc) {
- reason = "parse_policy_file";
- goto out_free_policy;
- }
+ rc = tpm2_parse_policy_file(policyFilename, sk,
+ data_auth, &digest);
+ if (rc) {
+ reason = "parse_policy_file";
+ goto out_free_policy;
}
}
@@ -237,8 +215,6 @@
goto out_free_auth;
}
}
- if (has_policy && !policyFilename)
- tpm2_add_auth_policy(sk, &digest);
}
dir = tpm2_set_unique_tssdir();
@@ -248,15 +224,6 @@
goto out_rmdir;
}
- if (pcr_lock.count != 0) {
- rc = tpm2_pcr_lock_policy(tssContext, &pcr_lock,
- sk, &digest);
- if (rc) {
- reason = "create pcr policy";
- goto out_free_auth;
- }
- }
-
if (parent_str) {
parent = tpm2_get_parent(tssContext, parent_str);
if (parent == 0) {
@@ -278,7 +245,7 @@
tpm2_public_template_seal(p);
- if (has_policy) {
+ if (policyFilename) {
VAL(p->objectAttributes) &=
~TPMA_OBJECT_USERWITHAUTH;
rc = TSS_TPM2B_Create(
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openssl_tpm2_engine-3.1.0/tests/check_counter_timer.sh
new/openssl_tpm2_engine-3.0.1/tests/check_counter_timer.sh
--- old/openssl_tpm2_engine-3.1.0/tests/check_counter_timer.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/check_counter_timer.sh 2021-04-04
22:47:14.000000000 +0200
@@ -27,11 +27,10 @@
# 3. encode a message using the TPM key
# 4. verify the message through the public key
##
-echo "policy counter timer" > plain.txt
${bindir}/create_tpm2_key key.tpm -a -k paSSW0RD -c policy.txt && \
openssl rsa -engine tpm2 -inform engine -pubin -in key.tpm -pubout -out
key.pub && \
-openssl pkeyutl -sign -in plain.txt -passin pass:paSSW0RD -engine tpm2 -engine
tpm2 -keyform engine -inkey key.tpm -out tmp.msg && \
-openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key.pub -pubin
|| exit 1
+echo "policy counter timer" | openssl rsautl -sign -passin pass:paSSW0RD
-engine tpm2 -engine tpm2 -keyform engine -inkey key.tpm -out tmp.msg && \
+openssl rsautl -verify -in tmp.msg -inkey key.pub -pubin || exit 1
##
# advance the TPM clock by ten minutes and a second which should make
@@ -45,7 +44,7 @@
# now the signing operation should fail
##
echo "Check key failure due to counter timer policy"
-openssl pkeyutl -sign -in plain.txt -passin pass:paSSW0RD -engine tpm2 -engine
tpm2 -keyform engine -inkey key.tpm -out tmp.msg 2> tmp.txt && exit 1
+echo "policy fail counter timer" | openssl rsautl -sign -passin pass:paSSW0RD
-engine tpm2 -engine tpm2 -keyform engine -inkey key.tpm -out tmp.msg 2>
tmp.txt && exit 1
# check we got the right failure message
grep "Policy Failure: Counter Timer at offset 8 is not <=" tmp.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openssl_tpm2_engine-3.1.0/tests/check_enhanced_auth.sh
new/openssl_tpm2_engine-3.0.1/tests/check_enhanced_auth.sh
--- old/openssl_tpm2_engine-3.1.0/tests/check_enhanced_auth.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/check_enhanced_auth.sh 2021-04-04
22:47:14.000000000 +0200
@@ -19,22 +19,7 @@
${bindir}/create_tpm2_key key.tpm -c policies/policy_bogus.txt
a=0; while [ $a -lt 5 ]; do
a=$[$a+1]
- echo "This is a message" | openssl pkeyutl -sign -engine tpm2 -engine tpm2
-keyform engine -inkey key.tpm -out tmp.msg && exit 1
-done
-
-##
-# Randomize the PCR banks
-##
-for h in "sha1" "sha256" "sha384"; do
- pcr=0;
- while [ $pcr -lt 24 ]; do
- tsspcrextend -ha $pcr -halg $h -ic $RANDOM
- pcr=$[$pcr + 1]
- done
- ##
- # reset PCR 16 for the fixed policy tests
- ##
- ${tss_pcrreset_cmd} -ha 16
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine tpm2
-keyform engine -inkey key.tpm -out tmp.msg && exit 1
done
for h in "sha1" "" "sha384"; do
@@ -50,11 +35,10 @@
# 2. get the corresponding public key from the engine
# 3. encode a message using the TPM key
# 4. verify the message through the public key
- echo "This is a Message" > plain.txt
${bindir}/create_tpm2_key ${n} -a -k passw0rd key2.tpm -c
policies/policy_authvalue.txt && \
openssl rsa -engine tpm2 -inform engine -passin pass:passw0rd -in key2.tpm
-pubout -out key2.pub && \
- openssl pkeyutl -sign -engine tpm2 -engine tpm2 -keyform engine -inkey
key2.tpm -passin pass:passw0rd -in plain.txt -out tmp.msg && \
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key2.pub
-pubin || exit 1
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine tpm2
-keyform engine -inkey key2.tpm -passin pass:passw0rd -out tmp.msg && \
+ openssl rsautl -verify -in tmp.msg -inkey key2.pub -pubin || exit 1
##
# test is
@@ -68,8 +52,8 @@
${tss_pcrextend_cmd} -ha 16 -ic aaa
${bindir}/create_tpm2_key ${n} key2.tpm -c policies/policy_pcr${h}.txt && \
openssl rsa -engine tpm2 -inform engine -in key2.tpm -pubout -out
key2.pub && \
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key2.tpm -out tmp.msg && \
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key2.pub
-pubin || exit 1
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine
tpm2 -keyform engine -inkey key2.tpm -out tmp.msg && \
+ openssl rsautl -verify -in tmp.msg -inkey key2.pub -pubin || exit 1
##
# test is
@@ -81,8 +65,8 @@
${tss_pcrreset_cmd} -ha 16
${bindir}/create_tpm2_key ${n} key2.tpm -c policies/policy_pcr${h}.txt
openssl rsa -engine tpm2 -inform engine -in key2.tpm -pubout -out key2.pub
&& \
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key2.tpm -out tmp.msg && \
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key2.pub
-pubin
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine
tpm2 -keyform engine -inkey key2.tpm -out tmp.msg && \
+ openssl rsautl -verify -in tmp.msg -inkey key2.pub -pubin
if [ $? -ne 1 ]; then
echo "TPM key should not be accessible"
exit 1
@@ -101,8 +85,8 @@
${tss_pcrextend_cmd} -ha 16 -ic aaa
${bindir}/create_tpm2_key ${n} -a -k passw0rd key2.tpm -c
policy_authvalue_pcr.txt && \
openssl rsa -engine tpm2 -inform engine -passin pass:passw0rd -in
key2.tpm -pubout -out key2.pub && \
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key2.tpm -passin pass:passw0rd -out tmp.msg && \
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key2.pub
-pubin || exit 1
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine
tpm2 -keyform engine -inkey key2.tpm -passin pass:passw0rd -out tmp.msg && \
+ openssl rsautl -verify -in tmp.msg -inkey key2.pub -pubin || exit 1
##
# test is
@@ -117,36 +101,6 @@
${tss_pcrextend_cmd} -ha 16 -ic aaa
${bindir}/create_tpm2_key ${n} -a -k passw0rd key2.tpm -c
policy_pcr_authvalue.txt && \
openssl rsa -engine tpm2 -inform engine -passin pass:passw0rd -in
key2.tpm -pubout -out key2.pub && \
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key2.tpm -passin pass:passw0rd -out tmp.msg && \
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key2.pub
-pubin || exit 1
-
- ##
- # test is
- # 1. Create a key on a huge range of PCRs (testing multiple reads)
- # 2. verify key works with undisturbed PCRs
- # 3. extend non-mentioned pcr and verify key works
- # 4. extend mentioned PCR and verify key fails
- ##
- ${bindir}/create_tpm2_key ${n} -a -k passw0rd key.tpm --pcr-lock
1,2,3-15,17-23 --pcr-lock sha1:1-4 --pcr-lock sha384:10-20 || exit 1
- openssl rsa -engine tpm2 -inform engine -passin pass:passw0rd -in key.tpm
-pubout -out key.pub || exit 1
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key.tpm -passin pass:passw0rd -out tmp.msg || exit 1
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key.pub
-pubin || exit 1
- ${tss_pcrextend_cmd} -ha 16 -ic $RANDOM
- ${tss_pcrextend_cmd} -ha 5 -halg sha1 -ic $RANDOM
- ${tss_pcrextend_cmd} -ha 9 -halg sha384 -ic $RANDOM
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key.tpm -passin pass:passw0rd -out tmp.msg || exit 1
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key.pub
-pubin || exit 1
- ${tss_pcrextend_cmd} -ha 1 -halg sha1 -ic $RANDOM
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key.tpm -passin pass:passw0rd -out tmp.msg && exit 1
- ##
- # Check a smaller PCR lock with no auth
- ##
- ${bindir}/create_tpm2_key ${n} --pcr-lock 2,4,7,10 --pcr-lock sha1:1,3
key.tpm || exit 1
- openssl rsa -engine tpm2 -inform engine -in key.tpm -pubout -out key.pub
|| exit 1
- openssl pkeyutl -sign -in plain.txt -engine tpm2 -engine tpm2 -keyform
engine -inkey key.tpm -out tmp.msg || exit 1
- openssl pkeyutl -verify -in plain.txt -sigfile tmp.msg -inkey key.pub
-pubin || exit 1
- ${tss_pcrextend_cmd} -ha 4 -halg sha256 -ic $RANDOM
- echo "This is a message" | openssl pkeyutl -sign -engine tpm2 -engine tpm2
-keyform engine -inkey key.tpm -out tmp.msg && exit 1
+ echo "This is a message" | openssl rsautl -sign -engine tpm2 -engine
tpm2 -keyform engine -inkey key2.tpm -passin pass:passw0rd -out tmp.msg && \
+ openssl rsautl -verify -in tmp.msg -inkey key2.pub -pubin || exit 1
done
-
-exit 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/create_ecc.sh
new/openssl_tpm2_engine-3.0.1/tests/create_ecc.sh
--- old/openssl_tpm2_engine-3.1.0/tests/create_ecc.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/create_ecc.sh 2021-04-04
22:47:14.000000000 +0200
@@ -8,7 +8,7 @@
# 2. Create a self signed x509 certificate
# 3. verify the certificate
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep '(invalid|unknown) curve';
then
+ if openssl ecparam -name ${curve} 2>&1 | grep 'unknown curve'; then
continue
fi
echo "Checking curve ${curve}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/openssl_tpm2_engine-3.1.0/tests/create_nonopenssl_ecc.sh
new/openssl_tpm2_engine-3.0.1/tests/create_nonopenssl_ecc.sh
--- old/openssl_tpm2_engine-3.1.0/tests/create_nonopenssl_ecc.sh
2022-02-17 00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/create_nonopenssl_ecc.sh
2021-04-04 22:47:14.000000000 +0200
@@ -14,7 +14,7 @@
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep -v '(invalid|unknown)
curve'; then
+ if openssl ecparam -name ${curve} 2>&1 | grep -v 'unknown curve'; then
continue
fi
echo "Checking curve ${curve}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/da_check.sh
new/openssl_tpm2_engine-3.0.1/tests/da_check.sh
--- old/openssl_tpm2_engine-3.1.0/tests/da_check.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/da_check.sh 2021-04-04
22:47:14.000000000 +0200
@@ -13,7 +13,7 @@
count=1;
while true; do
echo "This is a message" |
- openssl pkeyutl -sign -engine tpm2 -keyform engine -inkey key.tpm -passin
pass:passwrd -out tmp.msg 2>tmp.txt
+ openssl rsautl -sign -engine tpm2 -keyform engine -inkey key.tpm -passin
pass:passwrd -out tmp.msg 2>tmp.txt
val=$?
cat tmp.txt
if [ $val -ne 1 ]; then
@@ -39,7 +39,7 @@
echo "Locked out after $count tries"
# try with correct password, should still be locked out
echo "This is a message" |
-openssl pkeyutl -sign -engine tpm2 -keyform engine -inkey key.tpm -passin
pass:passw0rd -out tmp.msg 2>tmp.txt
+openssl rsautl -sign -engine tpm2 -keyform engine -inkey key.tpm -passin
pass:passw0rd -out tmp.msg 2>tmp.txt
val=$?
cat tmp.txt
if [ $val -ne 1 ]; then
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/derive_ecc.sh
new/openssl_tpm2_engine-3.0.1/tests/derive_ecc.sh
--- old/openssl_tpm2_engine-3.1.0/tests/derive_ecc.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/derive_ecc.sh 2021-04-04
22:47:14.000000000 +0200
@@ -24,7 +24,7 @@
##
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep '(invalid|unknown) curve';
then
+ if openssl ecparam -name ${curve} 2>&1 | grep 'unknown curve'; then
continue
fi
echo "Checking curve ${curve} explicitly named"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/fail_connect.sh
new/openssl_tpm2_engine-3.0.1/tests/fail_connect.sh
--- old/openssl_tpm2_engine-3.1.0/tests/fail_connect.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/fail_connect.sh 2021-04-04
22:47:14.000000000 +0200
@@ -41,7 +41,7 @@
# conversion to public key doesn't actually contact the TPM
# so this should succeed
##
-openssl pkey -engine tpm2 -inform engine -in tmp.tpm -pubout -out tmp.pub 2>
tmp.txt
+openssl rsa -engine tpm2 -inform engine -in tmp.tpm -pubout -out tmp.pub 2>
tmp.txt
if [ $? -ne 0 ]; then
echo "TPM key import failed with $?"
cat tmp.txt
@@ -51,7 +51,7 @@
# key operation does contact the TPM and should fail
##
echo "This is a message" |\
-openssl pkeyutl -sign -engine tpm2 -keyform engine -inkey tmp.tpm -out tmp.msg
2> tmp.txt
+openssl rsautl -sign -engine tpm2 -keyform engine -inkey tmp.tpm -out tmp.msg
2> tmp.txt
if [ $? -ne 1 ]; then
echo "TPM key signing failed with $?"
cat tmp.txt
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/seal_unseal.sh
new/openssl_tpm2_engine-3.0.1/tests/seal_unseal.sh
--- old/openssl_tpm2_engine-3.1.0/tests/seal_unseal.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/seal_unseal.sh 2021-04-04
22:47:14.000000000 +0200
@@ -16,22 +16,4 @@
echo $DATA | ${bindir}/seal_tpm2_data -a -k ${AUTH} seal.tpm || exit 1;
${bindir}/unseal_tpm2_data -k ${AUTH} seal.tpm | grep -q "${DATA}" || exit 1;
-##
-# Check with policy
-# test is
-# 1. seal with a pcr lock and no auth
-# 2. verify unseal
-# 3. move PCR on and verify no unseal
-# 4. 1-3 with auth and pcr lock
-##
-echo $DATA | ${bindir}/seal_tpm2_data --pcr-lock 2,16 seal.tpm || exit 1;
-${bindir}/unseal_tpm2_data seal.tpm | grep -q "${DATA}" || exit 1;
-tsspcrextend -ha 16 -ic $RANDOM
-${bindir}/unseal_tpm2_data seal.tpm && exit 1
-echo $DATA | ${bindir}/seal_tpm2_data -a -k ${AUTH} --pcr-lock 2,16 seal.tpm
|| exit 1;
-${bindir}/unseal_tpm2_data -k ${AUTH} seal.tpm | grep -q "${DATA}" || exit 1;
-tsspcrextend -ha 16 -ic $RANDOM
-${bindir}/unseal_tpm2_data -k ${AUTH} seal.tpm && exit 1
-
-
exit 0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/wrap_ecc.sh
new/openssl_tpm2_engine-3.0.1/tests/wrap_ecc.sh
--- old/openssl_tpm2_engine-3.1.0/tests/wrap_ecc.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/wrap_ecc.sh 2021-04-04
22:47:14.000000000 +0200
@@ -9,7 +9,7 @@
# 3. Create a self signed x509 certificate
# 4. verify the certificate
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep '(unknown|invalid) curve';
then
+ if openssl ecparam -name ${curve} 2>&1 | grep 'unknown curve'; then
continue
fi
echo "Checking curve ${curve}"
@@ -21,7 +21,7 @@
exit 1
done
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep '(invalid|unknown) curve';
then
+ if openssl ecparam -name ${curve} 2>&1 | grep 'unknown curve'; then
continue
fi
echo "Checking curve ${curve}"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tests/wrap_generic_ecc.sh
new/openssl_tpm2_engine-3.0.1/tests/wrap_generic_ecc.sh
--- old/openssl_tpm2_engine-3.1.0/tests/wrap_generic_ecc.sh 2022-02-17
00:15:34.000000000 +0100
+++ new/openssl_tpm2_engine-3.0.1/tests/wrap_generic_ecc.sh 2021-04-04
22:47:14.000000000 +0200
@@ -9,7 +9,7 @@
# 3. Create a self signed x509 certificate
# 4. verify the certificate
for curve in $(${bindir}/create_tpm2_key --list-curves); do
- if openssl ecparam -name ${curve} 2>&1 | egrep '(invalid|unknown) curve';
then
+ if openssl ecparam -name ${curve} 2>&1 | grep 'unknown curve'; then
continue
fi
openssl genpkey -algorithm EC -pkeyopt ec_paramgen_curve:${curve} -out
key.priv && \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tpm2-common.c
new/openssl_tpm2_engine-3.0.1/tpm2-common.c
--- old/openssl_tpm2_engine-3.1.0/tpm2-common.c 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/tpm2-common.c 2021-04-04 22:47:14.000000000
+0200
@@ -29,25 +29,6 @@
#include "tpm2-asn.h"
#include "tpm2-common.h"
-static struct {
- const char *hash;
- TPM_ALG_ID alg;
-} tpm2_hashes[] = {
- { "sha1", TPM_ALG_SHA1 },
- { "sha256", TPM_ALG_SHA256 },
- { "sha384", TPM_ALG_SHA384 },
-#ifdef TPM_ALG_SHA512
- { "sha512", TPM_ALG_SHA512 },
-#endif
-#ifdef TPM_ALG_SM3_256
- { "sm3", TPM_ALG_SM3_256 },
-#endif
- { NULL, 0 }
-};
-
-#define MAX_TPM_PCRS 24
-const int MAX_TPM_PCRS_ARRAY = (MAX_TPM_PCRS + 7)/8;
-
struct myTPM2B {
UINT16 s;
BYTE *const b;
@@ -1489,7 +1470,7 @@
rc = tpm2_create(&tssContext, ad->dir);
if (rc) {
reason="tpm2_create";
- goto import_no_flush_err;
+ goto import_err;
}
parentHandle = tpm2_handle_int(tssContext, ad->parent);
@@ -1531,7 +1512,6 @@
import_err:
tpm2_flush_srk(tssContext, parentHandle);
- import_no_flush_err:
TSS_Delete(tssContext);
if (rc) {
tpm2_error(rc, reason);
@@ -1911,240 +1891,6 @@
sk_TSSOPTPOLICY_free(sk);
}
-static const char *get_hash_by_alg(TPM_ALG_ID alg)
-{
- int i;
-
- for (i = 0; tpm2_hashes[i].hash; i++)
- if (tpm2_hashes[i].alg == alg)
- break;
-
- return tpm2_hashes[i].hash;
-}
-
-static int add_pcrs_hash(TPML_PCR_SELECTION *pcrs, char *bank)
-{
- int i;
- TPM_ALG_ID alg;
-
- for (i = 0; tpm2_hashes[i].hash; i++)
- if (strcmp(tpm2_hashes[i].hash, bank) == 0)
- break;
-
- if (!tpm2_hashes[i].hash) {
- fprintf(stderr, "unknown bank in pcrs list %s\n", bank);
- exit(1);
- }
- alg = tpm2_hashes[i].alg;
-
- for (i = 0; i < pcrs->count; i++)
- if (pcrs->pcrSelections[i].hash == alg) {
- fprintf(stderr, "hash bank %s was already specified\n",
bank);
- exit(1);
- }
-
- pcrs->pcrSelections[i].hash = alg;
- pcrs->pcrSelections[i].sizeofSelect = MAX_TPM_PCRS_ARRAY;
- pcrs->count++;
-
- return i;
-}
-
-static void update_pcrs(TPML_PCR_SELECTION *pcrs, int bank, char *str)
-{
- char *sep = strchr(str, '-');
- char *endptr;
- long from, to;
- int i;
-
- if (sep)
- *sep = '\0';
- from = to = strtol(str, &endptr, 10);
- if (*endptr != '\0' || from < 0 || from >= MAX_TPM_PCRS)
- goto err;
-
- if (sep) {
- str = sep + 1;
- to = strtol(str, &endptr, 10);
-
- if (*endptr != '\0' || to < 0 || to >= MAX_TPM_PCRS)
- goto err;
- }
- if (to < from) {
- fprintf(stderr, "Incorrect PCR range specified %ld-%ld\n",
- from, to);
- exit(1);
- }
-
- for (i = from; i <= to; i++)
- pcrs->pcrSelections[bank].pcrSelect[i/8] |= (1 << (i%8));
-
- return;
- err:
- fprintf(stderr, "incorrect PCR specification %s\n", str);
- exit(1);
-}
-
-void tpm2_get_pcr_lock(TPML_PCR_SELECTION *pcrs, char *arg)
-{
- char *sep = strchr(arg, ':');
- char *bankstr = arg;
- int bank;
-
- if (sep) {
- *sep = '\0';
- arg = sep + 1;
- } else {
- bankstr = "sha256";
- }
- bank = add_pcrs_hash(pcrs, bankstr);
- for (sep = strchr(arg, ','); sep; arg = sep + 1, sep = strchr(arg,
',')) {
- *sep = '\0';
- update_pcrs(pcrs, bank, arg);
- }
- update_pcrs(pcrs, bank, arg);
-}
-
-static int hash_print(const char *hash, int start, BYTE val, int k,
- TPML_DIGEST *dl, EVP_MD_CTX *ctx)
-{
- int i, j;
-
- for (i = 0; i < 8; i++) {
- TPM2B_DIGEST *d;
- BYTE *db;
-
- if ((val & (1 << i)) == 0)
- continue;
-
- d = &dl->digests[k++];
- db = VAL_2B_P(d, buffer);
- EVP_DigestUpdate(ctx, VAL_2B_P(d, buffer), VAL_2B_P(d, size));
- printf("%s: %02d: ", hash, start + i);
- for (j = 0; j < VAL_2B_P(d, size); j++) {
- printf("%02x", db[j]);
- }
- printf("\n");
- }
- return k;
-}
-
-static void pcr_digests_process(TPML_PCR_SELECTION *in, TPML_PCR_SELECTION
*out,
- TPML_DIGEST *d, EVP_MD_CTX *ctx)
-{
- int i, j, k = 0;
-
- for (i = 0; i < in->count; i++) {
- const char *hash = get_hash_by_alg(out->pcrSelections[i].hash);
-
- for (j = 0; j < MAX_TPM_PCRS_ARRAY; j++) {
- in->pcrSelections[i].pcrSelect[j] &=
- ~out->pcrSelections[i].pcrSelect[j];
-
- k = hash_print(hash, j * 8,
- out->pcrSelections[i].pcrSelect[j],
- k, d, ctx);
- }
- }
-}
-
-TPM_RC tpm2_pcr_lock_policy(TSS_CONTEXT *tssContext,
- TPML_PCR_SELECTION *pcrs,
- STACK_OF(TSSOPTPOLICY) *sk,
- TPMT_HA *digest)
-{
- TSSOPTPOLICY *policy = TSSOPTPOLICY_new();
- TPM_RC rc;
- BYTE buf[1024];
- UINT16 written = 0;
- INT32 size = sizeof(buf);
- const TPM_CC cc = TPM_CC_PolicyPCR;
- DIGEST_2B pcrDigest;
- BYTE *buffer = buf;
- TPML_PCR_SELECTION pcrread, pcrreturn;
- TPML_DIGEST pcr_digests;
- EVP_MD_CTX *ctx = EVP_MD_CTX_create();
-
- switch (digest->hashAlg) {
- case TPM_ALG_SHA1:
- EVP_DigestInit_ex(ctx, EVP_sha1(), NULL);
- break;
- case TPM_ALG_SHA256:
- EVP_DigestInit_ex(ctx, EVP_sha256(), NULL);
- break;
- case TPM_ALG_SHA384:
- EVP_DigestInit_ex(ctx, EVP_sha384(), NULL);
- break;
-#ifdef TPM_ALG_SHA512
- case TPM_ALG_SHA512:
- EVP_DigestInit_ex(ctx, EVP_sha512(), NULL);
- break;
-#endif
-#ifdef TPM_ALG_SM3_256
- case TPM_ALG_SM3_256:
- EVP_DigestInit_ex(ctx, EVP_sm3(), NULL);
- break;
-#endif
- default:
- fprintf(stderr, "Unknown TPM hash algorithm 0x%x\n",
- digest->hashAlg);
- exit(1);
- }
-
- pcrread = *pcrs;
-
- for (;;) {
- rc = tpm2_PCR_Read(tssContext, &pcrread, &pcrreturn,
&pcr_digests);
- if (pcr_digests.count == 0 || rc != TPM_RC_SUCCESS)
- break;
-
- pcr_digests_process(&pcrread, &pcrreturn, &pcr_digests, ctx);
- }
-
- EVP_DigestFinal_ex(ctx, pcrDigest.buffer, NULL);
- pcrDigest.size = TSS_GetDigestSize(digest->hashAlg);
- EVP_MD_CTX_destroy(ctx);
-
- if (rc)
- return rc;
-
- ASN1_INTEGER_set(policy->CommandCode, cc);
- TSS_TPM_CC_Marshal(&cc, &written, &buffer, &size);
- TSS_TPML_PCR_SELECTION_Marshal(pcrs, &written, &buffer, &size);
- memcpy(buffer, pcrDigest.buffer, pcrDigest.size);
- written += pcrDigest.size;
- ASN1_STRING_set(policy->CommandPolicy, buf + 4, written - 4);
- sk_TSSOPTPOLICY_push(sk, policy);
-
- TSS_Hash_Generate(digest,
- TSS_GetDigestSize(digest->hashAlg),
- (uint8_t *)&digest->digest,
- written, buf, 0, NULL);
-
- return TPM_RC_SUCCESS;
-}
-
-void tpm2_add_auth_policy(STACK_OF(TSSOPTPOLICY) *sk, TPMT_HA *digest)
-{
- TSSOPTPOLICY *policy = TSSOPTPOLICY_new();
- BYTE buf[4];
- BYTE *buffer = buf;
- UINT16 written = 0;
- INT32 size = sizeof(buf);
- const TPM_CC cc = TPM_CC_PolicyAuthValue;
-
- TSS_TPM_CC_Marshal(&cc, &written, &buffer, &size);
-
- ASN1_INTEGER_set(policy->CommandCode, cc);
- ASN1_STRING_set(policy->CommandPolicy, "", 0);
- sk_TSSOPTPOLICY_push(sk, policy);
-
- TSS_Hash_Generate(digest,
- TSS_GetDigestSize(digest->hashAlg),
- (uint8_t *)&digest->digest,
- written, buf, 0, NULL);
-}
-
IMPLEMENT_ASN1_FUNCTIONS(TSSOPTPOLICY)
IMPLEMENT_ASN1_FUNCTIONS(TSSLOADABLE)
IMPLEMENT_ASN1_FUNCTIONS(TSSPRIVKEY)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/openssl_tpm2_engine-3.1.0/tpm2-common.h
new/openssl_tpm2_engine-3.0.1/tpm2-common.h
--- old/openssl_tpm2_engine-3.1.0/tpm2-common.h 2022-02-17 00:15:34.000000000
+0100
+++ new/openssl_tpm2_engine-3.0.1/tpm2-common.h 2021-04-04 22:47:14.000000000
+0200
@@ -88,10 +88,4 @@
STACK_OF(TSSOPTPOLICY) *sk,
char *auth, TPMT_HA *digest);
void tpm2_free_policy(STACK_OF(TSSOPTPOLICY) *sk);
-void tpm2_get_pcr_lock(TPML_PCR_SELECTION *pcrs, char *arg);
-TPM_RC tpm2_pcr_lock_policy(TSS_CONTEXT *tssContext,
- TPML_PCR_SELECTION *pcrs,
- STACK_OF(TSSOPTPOLICY) *sk,
- TPMT_HA *digest);
-void tpm2_add_auth_policy(STACK_OF(TSSOPTPOLICY) *sk, TPMT_HA *digest);
#endif