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".
This is very stupid CGo bindings for tpm2-tss.
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
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
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 :)