aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Woodhouse <dwmw2@infradead.org>2018-10-12 01:01:16 +0100
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2018-10-31 22:14:38 -0700
commit3ca572e399f8fafe4213fd19d3aa95adb7e50809 (patch)
tree11f122cf0950c24e2a656af452a7ae82f914db65
parentf0f2c060b404889cf06ff16207e28c5ea46b1e31 (diff)
downloadopenssl_tpm2_engine-3ca572e399f8fafe4213fd19d3aa95adb7e50809.tar.gz
Allow changing objectAttributes for primary key generation
We have agreed that these should have the FIXEDPARENT and FIXEDTPM flags. Firstly, add a flag which indicates that the new flags should be used. Signed-off-by: David Woodhouse <dwmw2@infradead.org> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r--create_tpm2_key.c2
-rw-r--r--e_tpm2.c2
-rw-r--r--e_tpm2.h1
-rw-r--r--tpm2-common.c7
-rw-r--r--tpm2-common.h2
5 files changed, 10 insertions, 4 deletions
diff --git a/create_tpm2_key.c b/create_tpm2_key.c
index 0be8e43..6328d08 100644
--- a/create_tpm2_key.c
+++ b/create_tpm2_key.c
@@ -751,7 +751,7 @@ int main(int argc, char **argv)
}
if ((parent & 0xff000000) == 0x40000000) {
- rc = tpm2_load_srk(tssContext, &phandle, parent_auth, NULL, parent);
+ rc = tpm2_load_srk(tssContext, &phandle, parent_auth, NULL, parent, 0);
if (rc) {
reason = "tpm2_load_srk";
goto out_delete;
diff --git a/e_tpm2.c b/e_tpm2.c
index ed2bbc2..6002159 100644
--- a/e_tpm2.c
+++ b/e_tpm2.c
@@ -541,7 +541,7 @@ TPM_HANDLE tpm2_load_key(TSS_CONTEXT **tsscp, struct app_data *app_data)
if ((app_data->parent & 0xff000000) == 0x81000000) {
in.parentHandle = app_data->parent;
} else {
- rc = tpm2_load_srk(tssContext, &in.parentHandle, srk_auth, NULL, app_data->parent);
+ rc = tpm2_load_srk(tssContext, &in.parentHandle, srk_auth, NULL, app_data->parent, app_data->version);
if (rc)
goto out;
}
diff --git a/e_tpm2.h b/e_tpm2.h
index ef9fd38..253231f 100644
--- a/e_tpm2.h
+++ b/e_tpm2.h
@@ -8,6 +8,7 @@
/* structure pointed to by the RSA object's app_data pointer */
struct app_data {
+ int version;
TPM_HANDLE parent;
/* if key is in NV memory */
TPM_HANDLE key;
diff --git a/tpm2-common.c b/tpm2-common.c
index a39c90b..6aef4e3 100644
--- a/tpm2-common.c
+++ b/tpm2-common.c
@@ -230,7 +230,7 @@ void tpm2_error(TPM_RC rc, const char *reason)
}
-TPM_RC tpm2_load_srk(TSS_CONTEXT *tssContext, TPM_HANDLE *h, const char *auth,TPM2B_PUBLIC *pub, TPM_HANDLE hierarchy)
+TPM_RC tpm2_load_srk(TSS_CONTEXT *tssContext, TPM_HANDLE *h, const char *auth,TPM2B_PUBLIC *pub, TPM_HANDLE hierarchy, int version)
{
TPM_RC rc;
CreatePrimary_In in;
@@ -262,6 +262,11 @@ TPM_RC tpm2_load_srk(TSS_CONTEXT *tssContext, TPM_HANDLE *h, const char *auth,TP
TPMA_OBJECT_USERWITHAUTH |
TPMA_OBJECT_DECRYPT |
TPMA_OBJECT_RESTRICTED;
+ if (version)
+ in.inPublic.publicArea.objectAttributes.val |=
+ TPMA_OBJECT_FIXEDPARENT |
+ TPMA_OBJECT_FIXEDTPM;
+
in.inPublic.publicArea.parameters.eccDetail.symmetric.algorithm = TPM_ALG_AES;
in.inPublic.publicArea.parameters.eccDetail.symmetric.keyBits.aes = 128;
in.inPublic.publicArea.parameters.eccDetail.symmetric.mode.aes = TPM_ALG_CFB;
diff --git a/tpm2-common.h b/tpm2-common.h
index 1eed54b..f442c94 100644
--- a/tpm2-common.h
+++ b/tpm2-common.h
@@ -11,7 +11,7 @@ struct policy_command {
};
void tpm2_error(TPM_RC rc, const char *reason);
-TPM_RC tpm2_load_srk(TSS_CONTEXT *tssContext, TPM_HANDLE *h, const char *auth, TPM2B_PUBLIC *pub, TPM_HANDLE handle);
+TPM_RC tpm2_load_srk(TSS_CONTEXT *tssContext, TPM_HANDLE *h, const char *auth, TPM2B_PUBLIC *pub, TPM_HANDLE handle, int version);
void tpm2_flush_handle(TSS_CONTEXT *tssContext, TPM_HANDLE h);
EVP_PKEY *tpm2_to_openssl_public(TPMT_PUBLIC *pub);
void tpm2_flush_srk(TSS_CONTEXT *tssContext, TPM_HANDLE hSRK);