Skip to content

xaionaro-go/tpm2-tss

Folders and files

NameName
Last commit message
Last commit date
Apr 17, 2021
Apr 18, 2021
Apr 18, 2021
Apr 17, 2021
Apr 17, 2021
Apr 16, 2021
Apr 17, 2021
Apr 18, 2021
Apr 18, 2021
Apr 18, 2021

Repository files navigation

CC0
To the extent possible under law, Dmitrii Okunev has waived all copyright and related or neighboring rights to "CGo bindings for tpm2-tss. This work is published from: Ireland".

GoDoc

About

This is very stupid CGo bindings for tpm2-tss.

Prepare

Currently, the package expects libtss2 of version 2.3.2 be installed.

apt-get install -y libtss2-dev
go get -d github.com/xaionaro-go/tpm2-tss/...
cd $(go env GOPATH)/src/github.com/xaionaro-go/tpm2-tss
git submodule update --init --recursive

Example

package main

import (
	"fmt"

	"github.com/google/go-tpm/tpm2"
	"github.com/xaionaro-go/tpm2-tss/cgo_tpm2_tss"
)

func main() {
	var ectx *cgo_tpm2_tss.EsysContext

	pcrIndex := cgo_tpm2_tss.EsysTr(cgo_tpm2_tss.EsysTrPcr0)
	digests := []cgo_tpm2_tss.TpmlDigestValues{{
		Count: 1,
		Digests: [16]cgo_tpm2_tss.TpmtHa{
			{
				Hashalg: cgo_tpm2_tss.TpmiAlgHash(tpm2.AlgSHA1),
				Digest:  cgo_tpm2_tss.TpmuHa{1, 2, 3, 4},
			},
		},
	}}

	var rc cgo_tpm2_tss.Tss2Rc
	var tcti *cgo_tpm2_tss.Tss2TctiContext

	rc = cgo_tpm2_tss.Tss2TctildrInitialize("", &tcti)
	if rc != cgo_tpm2_tss.Tss2RcSuccess {
		panic(fmt.Sprintf("0x%08X", rc))
	}

	rc = cgo_tpm2_tss.EsysInitialize(&ectx, tcti, &cgo_tpm2_tss.Tss2AbiVersion{
		Tsscreator: 1,
		Tssfamily:  2,
		Tsslevel:   1,
		Tssversion: 108,
	})
	if rc != cgo_tpm2_tss.Tss2RcSuccess {
		panic(fmt.Sprintf("0x%08X", rc))
	}

	rc = cgo_tpm2_tss.EsysPcrExtend(ectx, pcrIndex, cgo_tpm2_tss.EsysTrPassword, cgo_tpm2_tss.EsysTrNone, cgo_tpm2_tss.EsysTrNone, digests)
	if rc != cgo_tpm2_tss.Tss2RcSuccess {
		panic(fmt.Sprintf("0x%08X", rc))
	}

	fmt.Println("SUCCESS")
}

Result:

xaionaro@void:~/go/src/github.com/xaionaro-go/tpm2-tss$ sudo tpm2_pcrread 2>/dev/null | head -2
sha1:
  0 : 0x225D4733A7F538514995ADFA5CFE07590E3A6EB2
xaionaro@void:~/go/src/github.com/xaionaro-go/tpm2-tss$ go build -o /tmp/bin ./example/ && sudo /tmp/bin 2>/dev/null
SUCCESS
xaionaro@void:~/go/src/github.com/xaionaro-go/tpm2-tss$ sudo tpm2_pcrread 2>/dev/null | head -2
sha1:
  0 : 0xFD3E2E5BC01251885EB591FF0D73E55A9645D493

Work in progress

These functions are not binded yet:

  • Esys_GetCapability
  • Esys_GetCapability_Finish
  • Esys_ReadClock
  • Esys_ReadClock_Finish
  • Esys_ContextSave
  • Esys_ContextSave_Finish
  • Esys_IncrementalSelfTest
  • Esys_IncrementalSelfTest_Finish
  • Esys_ECC_Parameters
  • Esys_ECC_Parameters_Finish
  • Esys_TR_GetName
  • Esys_TRSess_GetNonceTPM
  • Esys_GetTestResult
  • Esys_GetTestResult_Finish
  • Esys_Create
  • Esys_Create_Finish
  • Esys_ReadPublic
  • Esys_ReadPublic_Finish
  • Esys_ActivateCredential
  • Esys_ActivateCredential_Finish
  • Esys_MakeCredential
  • Esys_MakeCredential_Finish
  • Esys_Unseal
  • Esys_Unseal_Finish
  • Esys_ObjectChangeAuth
  • Esys_ObjectChangeAuth_Finish
  • Esys_CreateLoaded
  • Esys_CreateLoaded_Finish
  • Esys_Duplicate
  • Esys_Duplicate_Finish
  • Esys_Rewrap
  • Esys_Rewrap_Finish
  • Esys_Import
  • Esys_Import_Finish
  • Esys_RSA_Encrypt
  • Esys_RSA_Encrypt_Finish
  • Esys_RSA_Decrypt
  • Esys_RSA_Decrypt_Finish
  • Esys_ECDH_KeyGen
  • Esys_ECDH_KeyGen_Finish
  • Esys_ECDH_ZGen
  • Esys_ECDH_ZGen_Finish
  • Esys_ZGen_2Phase
  • Esys_ZGen_2Phase_Finish
  • Esys_EncryptDecrypt
  • Esys_EncryptDecrypt_Finish
  • Esys_EncryptDecrypt2
  • Esys_EncryptDecrypt2_Finish
  • Esys_Hash
  • Esys_Hash_Finish
  • Esys_HMAC
  • Esys_HMAC_Finish
  • Esys_GetRandom
  • Esys_GetRandom_Finish
  • Esys_SequenceComplete
  • Esys_SequenceComplete_Finish
  • Esys_Certify
  • Esys_Certify_Finish
  • Esys_CertifyCreation
  • Esys_CertifyCreation_Finish
  • Esys_Quote
  • Esys_Quote_Finish
  • Esys_GetSessionAuditDigest
  • Esys_GetSessionAuditDigest_Finish
  • Esys_GetCommandAuditDigest
  • Esys_GetCommandAuditDigest_Finish
  • Esys_GetTime
  • Esys_GetTime_Finish
  • Esys_Commit
  • Esys_Commit_Finish
  • Esys_EC_Ephemeral
  • Esys_EC_Ephemeral_Finish
  • Esys_VerifySignature
  • Esys_Sign
  • Esys_PolicySigned
  • Esys_PolicySigned_Finish
  • Esys_PolicySecret
  • Esys_PolicySecret_Finish
  • Esys_PolicyGetDigest
  • Esys_PolicyGetDigest_Finish
  • Esys_CreatePrimary
  • Esys_CreatePrimary_Finish
  • Esys_FieldUpgradeData
  • Esys_FirmwareRead
  • Esys_FirmwareRead_Finish
  • Esys_NV_ReadPublic
  • Esys_NV_ReadPublic_Finish
  • Esys_NV_Read
  • Esys_NV_Read_Finish
  • Esys_NV_Certify
  • Esys_NV_Certify_Finish
  • Esys_Vendor_TCG_Test
  • Esys_Vendor_TCG_Test_Finish
  • Esys_EventSequenceComplete
  • Esys_PCR_Event*
  • Esys_PCR_Read
  • Tss2_Tcti_Tbs_Init
  • Tss2_MU_TPMU_ENCRYPTED_SECRET_Marshal
  • Tss2_MU_TPMU_ENCRYPTED_SECRET_Unmarshal

If you need any of these functions then create an issue. I'll take a look if it is possible to easily add the function :)