@@ -43,11 +43,12 @@ type TPM struct {
4343 publicKey crypto.PublicKey
4444 tpmPublic tpm2.TPMTPublic
4545
46- NamedHandle * tpm2.NamedHandle // the name handle to the key to use
46+ //NamedHandle *tpm2.NamedHandle // the name handle to the key to use
47+ Handle tpm2.TPMHandle // the name handle to the key to use
48+ name tpm2.TPM2BName
4749 AuthSession Session // If the key needs a session, supply `Session` from this repo
4850 TpmDevice io.ReadWriteCloser // TPM read closer
4951 EncryptionHandle tpm2.TPMHandle // (optional) handle to use for transit encryption
50- EncryptionPub * tpm2.TPMTPublic // (optional) public key to use for transit encryption
5152}
5253
5354// Configure a new TPM crypto.Signer
@@ -60,18 +61,17 @@ func NewTPMCrypto(conf *TPM) (TPM, error) {
6061 if conf .TpmDevice == nil {
6162 return TPM {}, fmt .Errorf ("salrashid123/signer: TpmDevice must be specified" )
6263 }
63- if conf .NamedHandle == nil {
64- return TPM {}, fmt .Errorf ("salrashid123/signer: NameHandke must be specified" )
65- }
64+
6665 rwr := transport .FromReadWriter (conf .TpmDevice )
6766
6867 // todo: we should supply the encrypted session here, if set
6968 pub , err := tpm2.ReadPublic {
70- ObjectHandle : conf .NamedHandle . Handle ,
69+ ObjectHandle : tpm2 . TPMIDHObject ( conf .Handle . HandleValue ()) ,
7170 }.Execute (rwr )
7271 if err != nil {
7372 return TPM {}, fmt .Errorf ("salrashid123/signer: Unable to Read Public data from TPM: %v" , err )
7473 }
74+ conf .name = pub .Name
7575
7676 pc , err := pub .OutPublic .Contents ()
7777 if err != nil {
@@ -131,8 +131,18 @@ func (t TPM) Sign(rr io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte,
131131
132132 var sess tpm2.Session
133133
134- if t .EncryptionHandle != 0 && t .EncryptionPub != nil {
135- sess = tpm2 .HMAC (tpm2 .TPMAlgSHA256 , 16 , tpm2 .AESEncryption (128 , tpm2 .EncryptIn ), tpm2 .Salted (t .EncryptionHandle , * t .EncryptionPub ))
134+ if t .EncryptionHandle != 0 {
135+ encryptionPub , err := tpm2.ReadPublic {
136+ ObjectHandle : t .EncryptionHandle ,
137+ }.Execute (rwr )
138+ if err != nil {
139+ return nil , err
140+ }
141+ ePubName , err := encryptionPub .OutPublic .Contents ()
142+ if err != nil {
143+ return nil , err
144+ }
145+ sess = tpm2 .HMAC (tpm2 .TPMAlgSHA256 , 16 , tpm2 .AESEncryption (128 , tpm2 .EncryptIn ), tpm2 .Salted (t .EncryptionHandle , * ePubName ))
136146 } else {
137147 sess = tpm2 .HMAC (tpm2 .TPMAlgSHA256 , 16 , tpm2 .AESEncryption (128 , tpm2 .EncryptIn ))
138148 }
@@ -175,8 +185,8 @@ func (t TPM) Sign(rr io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte,
175185 }
176186 rspSign , err := tpm2.Sign {
177187 KeyHandle : tpm2.AuthHandle {
178- Handle : t .NamedHandle . Handle ,
179- Name : t .NamedHandle . Name ,
188+ Handle : t .Handle ,
189+ Name : t .name ,
180190 Auth : se ,
181191 },
182192
@@ -220,8 +230,8 @@ func (t TPM) Sign(rr io.Reader, digest []byte, opts crypto.SignerOpts) ([]byte,
220230 }
221231 rspSign , err := tpm2.Sign {
222232 KeyHandle : tpm2.AuthHandle {
223- Handle : t .NamedHandle . Handle ,
224- Name : t .NamedHandle . Name ,
233+ Handle : t .Handle ,
234+ Name : t .name ,
225235 Auth : se ,
226236 },
227237
0 commit comments