java - TPM 32-bit key handles -


i've been exploring tpm world , have tried out few different libraries (i.e. trousers, jtss, jsr321, , tpm/j). based on number of requirements tpm/j fits bill , i'm able accomplish majority of operations necessary binding/unbinding, signing/verifying, etc.

however 1 issue have come across key handle. according specs issued trusted computing group, 1.2 , 2.0, both declare key handles 32-bit values. when run tpm/j , load key tpm issues key outside of 32-bit space.

for example if run following command:

sudo java edu.mit.csail.tpmj.tools.tpmloadkey testkey.key srk "" 

i receive following output:

parsing command-line arguments ...  using srk parent. parentpwd = null, encoded (null [no authorization]) = null  read testkey.key ...  loading key tpm ... keyhandle = 0xc5e94bf9 

if calculations (and online conversion tools found) correct key handle above computes 3,320,400,889 outside 32-bits. believe 32-bit signed values limited around 2 billion.

this becomes problem because when issue following command:

sudo java -cp $classpath edu.mit.csail.tpmj.tools.tpmunbind helloworld.txt.enc 0xc5e94bf9 

i following output:

parsing command-line arguments ...  exception in thread "main" java.lang.numberformatexception: input string: "c5e94bf9"     @ java.lang.numberformatexception.forinputstring(numberformatexception.java:65)     @ java.lang.integer.parseint(integer.java:484)     @ bayanihan.util.params.params.getint(params.java:67)     @ edu.mit.csail.tpmj.tools.tpmunbind.main(tpmunbind.java:71) 

just sanity check if use tpmunbind command above , wait until load key can handled java int type (i.e. falls within 32-bit range) command runs fine.

has else encountered this? in advance.

0xc5e94bf9 32 bit number.

in hexadecimal representation 1 'digit' represents 4 bits. 8-bit number ranges 0x00 0xff. 2 hex-digits, called nibbles.

16 bit 0x0000 0xffff

and case 32 bit: 0x00000000 0xffffffff

the link found signed integers states -2,147,483,648 2,147,483,647. if interprete unsigned, 0 4,294,967,296 in decimal representation. 3,320,400,889 in range.


now error get: that's bug in tpm/j. uses

integer.parseint( s.substring( 2 ), 16 ); 

to parse input string. parseint()-method not work hexadecimal numbers larger 0x7fffffff.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -