Re: [PATCH v3] selftests: tpm: upgrade TPM2 tests from Python 2 to Python 3

2020-06-25 Thread Pengfei Xu
Hi Jarkko,
  I missed this improvement in previous mail.
  Will do.

Thanks!
BR.

On 2020-06-26 at 00:51:45 +0300, Jarkko Sakkinen wrote:
> On Fri, Jun 26, 2020 at 12:37:54AM +0800, Pengfei Xu wrote:
> > Python 2 is no longer supported by the Python upstream project, so
> > upgrade TPM2 tests to Python 3.
> > 
> > Signed-off-by: Pengfei Xu 
> > ---
> >  tools/testing/selftests/tpm2/test_smoke.sh |  4 +-
> >  tools/testing/selftests/tpm2/test_space.sh |  2 +-
> >  tools/testing/selftests/tpm2/tpm2.py   | 56 +++---
> >  tools/testing/selftests/tpm2/tpm2_tests.py | 39 +++
> >  4 files changed, 52 insertions(+), 49 deletions(-)
> > 
> > diff --git a/tools/testing/selftests/tpm2/test_smoke.sh 
> > b/tools/testing/selftests/tpm2/test_smoke.sh
> > index 663062701d5a..d05467f6d258 100755
> > --- a/tools/testing/selftests/tpm2/test_smoke.sh
> > +++ b/tools/testing/selftests/tpm2/test_smoke.sh
> > @@ -6,8 +6,8 @@ ksft_skip=4
> >  
> >  [ -f /dev/tpm0 ] || exit $ksft_skip
> >  
> > -python -m unittest -v tpm2_tests.SmokeTest
> > -python -m unittest -v tpm2_tests.AsyncTest
> > +python3 -m unittest -v tpm2_tests.SmokeTest
> > +python3 -m unittest -v tpm2_tests.AsyncTest
> >  
> >  CLEAR_CMD=$(which tpm2_clear)
> >  if [ -n $CLEAR_CMD ]; then
> > diff --git a/tools/testing/selftests/tpm2/test_space.sh 
> > b/tools/testing/selftests/tpm2/test_space.sh
> > index 36c9d030a1c6..151c64e8ee9f 100755
> > --- a/tools/testing/selftests/tpm2/test_space.sh
> > +++ b/tools/testing/selftests/tpm2/test_space.sh
> > @@ -6,4 +6,4 @@ ksft_skip=4
> >  
> >  [ -f /dev/tpmrm0 ] || exit $ksft_skip
> >  
> > -python -m unittest -v tpm2_tests.SpaceTest
> > +python3 -m unittest -v tpm2_tests.SpaceTest
> > diff --git a/tools/testing/selftests/tpm2/tpm2.py 
> > b/tools/testing/selftests/tpm2/tpm2.py
> > index d0fcb66a88a6..88a0e7776a23 100644
> > --- a/tools/testing/selftests/tpm2/tpm2.py
> > +++ b/tools/testing/selftests/tpm2/tpm2.py
> > @@ -247,14 +247,14 @@ class ProtocolError(Exception):
> >  class AuthCommand(object):
> >  """TPMS_AUTH_COMMAND"""
> >  
> > -def __init__(self, session_handle=TPM2_RS_PW, nonce='', 
> > session_attributes=0,
> > - hmac=''):
> > +def __init__(self, session_handle=TPM2_RS_PW, nonce=''.encode(),
> > + session_attributes=0, hmac=''.encode()):
> 
> Initialize these just directly as empty bytes objects (e.g.
> nonce=bytes())
> 
> >  self.session_handle = session_handle
> >  self.nonce = nonce
> >  self.session_attributes = session_attributes
> >  self.hmac = hmac
> >  
> > -def __str__(self):
> > +def __bytes__(self):
> >  fmt = '>I H%us B H%us' % (len(self.nonce), len(self.hmac))
> >  return struct.pack(fmt, self.session_handle, len(self.nonce),
> > self.nonce, self.session_attributes, 
> > len(self.hmac),
> > @@ -268,11 +268,11 @@ class AuthCommand(object):
> >  class SensitiveCreate(object):
> >  """TPMS_SENSITIVE_CREATE"""
> >  
> > -def __init__(self, user_auth='', data=''):
> > +def __init__(self, user_auth=''.encode(), data=''.encode()):
> 
> Ditto.
> 
> >  self.user_auth = user_auth
> >  self.data = data
> >  
> > -def __str__(self):
> > +def __bytes__(self):
> >  fmt = '>H%us H%us' % (len(self.user_auth), len(self.data))
> >  return struct.pack(fmt, len(self.user_auth), self.user_auth,
> > len(self.data), self.data)
> > @@ -296,8 +296,9 @@ class Public(object):
> >  return '>HHIH%us%usH%us' % \
> >  (len(self.auth_policy), len(self.parameters), len(self.unique))
> >  
> > -def __init__(self, object_type, name_alg, object_attributes, 
> > auth_policy='',
> > - parameters='', unique=''):
> > +def __init__(self, object_type, name_alg, object_attributes,
> > + auth_policy=''.encode(), parameters=''.encode(),
> > + unique=''.encode()):
> 
> Ditto.
> 
> >  self.object_type = object_type
> >  self.name_alg = name_alg
> >  self.object_attributes = object_attributes
> > @@ -305,7 +306,7 @@ class Public(object):
> >  self.parameters = parameters
> >  self.unique = unique
> >  
> > -def __str__(self):
> > +def __bytes__(self):
> >  return struct.pack(self.__fmt(),
> > self.object_type,
> > self.name_alg,
> > @@ -343,7 +344,7 @@ def get_algorithm(name):
> >  
> >  def hex_dump(d):
> >  d = [format(ord(x), '02x') for x in d]
> > -d = [d[i: i + 16] for i in xrange(0, len(d), 16)]
> > +d = [d[i: i + 16] for i in range(0, len(d), 16)]
> >  d = [' '.join(x) for x in d]
> >  d = os.linesep.join(d)
> >  
> > @@ -401,7 +402,7 @@ class Client:
> >  pcrsel_len = max((i >> 3) + 1, 3)
> >  pcrsel = [0] * pcrsel_len
> >  pcrsel[i >> 3] = 1 << (i & 7)
> > -

Re: [PATCH v3] selftests: tpm: upgrade TPM2 tests from Python 2 to Python 3

2020-06-25 Thread Jarkko Sakkinen
On Fri, Jun 26, 2020 at 12:37:54AM +0800, Pengfei Xu wrote:
> Python 2 is no longer supported by the Python upstream project, so
> upgrade TPM2 tests to Python 3.
> 
> Signed-off-by: Pengfei Xu 
> ---
>  tools/testing/selftests/tpm2/test_smoke.sh |  4 +-
>  tools/testing/selftests/tpm2/test_space.sh |  2 +-
>  tools/testing/selftests/tpm2/tpm2.py   | 56 +++---
>  tools/testing/selftests/tpm2/tpm2_tests.py | 39 +++
>  4 files changed, 52 insertions(+), 49 deletions(-)
> 
> diff --git a/tools/testing/selftests/tpm2/test_smoke.sh 
> b/tools/testing/selftests/tpm2/test_smoke.sh
> index 663062701d5a..d05467f6d258 100755
> --- a/tools/testing/selftests/tpm2/test_smoke.sh
> +++ b/tools/testing/selftests/tpm2/test_smoke.sh
> @@ -6,8 +6,8 @@ ksft_skip=4
>  
>  [ -f /dev/tpm0 ] || exit $ksft_skip
>  
> -python -m unittest -v tpm2_tests.SmokeTest
> -python -m unittest -v tpm2_tests.AsyncTest
> +python3 -m unittest -v tpm2_tests.SmokeTest
> +python3 -m unittest -v tpm2_tests.AsyncTest
>  
>  CLEAR_CMD=$(which tpm2_clear)
>  if [ -n $CLEAR_CMD ]; then
> diff --git a/tools/testing/selftests/tpm2/test_space.sh 
> b/tools/testing/selftests/tpm2/test_space.sh
> index 36c9d030a1c6..151c64e8ee9f 100755
> --- a/tools/testing/selftests/tpm2/test_space.sh
> +++ b/tools/testing/selftests/tpm2/test_space.sh
> @@ -6,4 +6,4 @@ ksft_skip=4
>  
>  [ -f /dev/tpmrm0 ] || exit $ksft_skip
>  
> -python -m unittest -v tpm2_tests.SpaceTest
> +python3 -m unittest -v tpm2_tests.SpaceTest
> diff --git a/tools/testing/selftests/tpm2/tpm2.py 
> b/tools/testing/selftests/tpm2/tpm2.py
> index d0fcb66a88a6..88a0e7776a23 100644
> --- a/tools/testing/selftests/tpm2/tpm2.py
> +++ b/tools/testing/selftests/tpm2/tpm2.py
> @@ -247,14 +247,14 @@ class ProtocolError(Exception):
>  class AuthCommand(object):
>  """TPMS_AUTH_COMMAND"""
>  
> -def __init__(self, session_handle=TPM2_RS_PW, nonce='', 
> session_attributes=0,
> - hmac=''):
> +def __init__(self, session_handle=TPM2_RS_PW, nonce=''.encode(),
> + session_attributes=0, hmac=''.encode()):

Initialize these just directly as empty bytes objects (e.g.
nonce=bytes())

>  self.session_handle = session_handle
>  self.nonce = nonce
>  self.session_attributes = session_attributes
>  self.hmac = hmac
>  
> -def __str__(self):
> +def __bytes__(self):
>  fmt = '>I H%us B H%us' % (len(self.nonce), len(self.hmac))
>  return struct.pack(fmt, self.session_handle, len(self.nonce),
> self.nonce, self.session_attributes, 
> len(self.hmac),
> @@ -268,11 +268,11 @@ class AuthCommand(object):
>  class SensitiveCreate(object):
>  """TPMS_SENSITIVE_CREATE"""
>  
> -def __init__(self, user_auth='', data=''):
> +def __init__(self, user_auth=''.encode(), data=''.encode()):

Ditto.

>  self.user_auth = user_auth
>  self.data = data
>  
> -def __str__(self):
> +def __bytes__(self):
>  fmt = '>H%us H%us' % (len(self.user_auth), len(self.data))
>  return struct.pack(fmt, len(self.user_auth), self.user_auth,
> len(self.data), self.data)
> @@ -296,8 +296,9 @@ class Public(object):
>  return '>HHIH%us%usH%us' % \
>  (len(self.auth_policy), len(self.parameters), len(self.unique))
>  
> -def __init__(self, object_type, name_alg, object_attributes, 
> auth_policy='',
> - parameters='', unique=''):
> +def __init__(self, object_type, name_alg, object_attributes,
> + auth_policy=''.encode(), parameters=''.encode(),
> + unique=''.encode()):

Ditto.

>  self.object_type = object_type
>  self.name_alg = name_alg
>  self.object_attributes = object_attributes
> @@ -305,7 +306,7 @@ class Public(object):
>  self.parameters = parameters
>  self.unique = unique
>  
> -def __str__(self):
> +def __bytes__(self):
>  return struct.pack(self.__fmt(),
> self.object_type,
> self.name_alg,
> @@ -343,7 +344,7 @@ def get_algorithm(name):
>  
>  def hex_dump(d):
>  d = [format(ord(x), '02x') for x in d]
> -d = [d[i: i + 16] for i in xrange(0, len(d), 16)]
> +d = [d[i: i + 16] for i in range(0, len(d), 16)]
>  d = [' '.join(x) for x in d]
>  d = os.linesep.join(d)
>  
> @@ -401,7 +402,7 @@ class Client:
>  pcrsel_len = max((i >> 3) + 1, 3)
>  pcrsel = [0] * pcrsel_len
>  pcrsel[i >> 3] = 1 << (i & 7)
> -pcrsel = ''.join(map(chr, pcrsel))
> +pcrsel = ''.join(map(chr, pcrsel)).encode()
>  
>  fmt = '>HII IHB%us' % (pcrsel_len)
>  cmd = struct.pack(fmt,
> @@ -443,7 +444,7 @@ class Client:
>  TPM2_CC_PCR_EXTEND,
>  i,
>  len(auth_cmd),
> -str(auth_cmd),
> +bytes(auth_cmd),
>  1, bank_alg, dig)
>  

[PATCH v3] selftests: tpm: upgrade TPM2 tests from Python 2 to Python 3

2020-06-25 Thread Pengfei Xu
Python 2 is no longer supported by the Python upstream project, so
upgrade TPM2 tests to Python 3.

Signed-off-by: Pengfei Xu 
---
 tools/testing/selftests/tpm2/test_smoke.sh |  4 +-
 tools/testing/selftests/tpm2/test_space.sh |  2 +-
 tools/testing/selftests/tpm2/tpm2.py   | 56 +++---
 tools/testing/selftests/tpm2/tpm2_tests.py | 39 +++
 4 files changed, 52 insertions(+), 49 deletions(-)

diff --git a/tools/testing/selftests/tpm2/test_smoke.sh 
b/tools/testing/selftests/tpm2/test_smoke.sh
index 663062701d5a..d05467f6d258 100755
--- a/tools/testing/selftests/tpm2/test_smoke.sh
+++ b/tools/testing/selftests/tpm2/test_smoke.sh
@@ -6,8 +6,8 @@ ksft_skip=4
 
 [ -f /dev/tpm0 ] || exit $ksft_skip
 
-python -m unittest -v tpm2_tests.SmokeTest
-python -m unittest -v tpm2_tests.AsyncTest
+python3 -m unittest -v tpm2_tests.SmokeTest
+python3 -m unittest -v tpm2_tests.AsyncTest
 
 CLEAR_CMD=$(which tpm2_clear)
 if [ -n $CLEAR_CMD ]; then
diff --git a/tools/testing/selftests/tpm2/test_space.sh 
b/tools/testing/selftests/tpm2/test_space.sh
index 36c9d030a1c6..151c64e8ee9f 100755
--- a/tools/testing/selftests/tpm2/test_space.sh
+++ b/tools/testing/selftests/tpm2/test_space.sh
@@ -6,4 +6,4 @@ ksft_skip=4
 
 [ -f /dev/tpmrm0 ] || exit $ksft_skip
 
-python -m unittest -v tpm2_tests.SpaceTest
+python3 -m unittest -v tpm2_tests.SpaceTest
diff --git a/tools/testing/selftests/tpm2/tpm2.py 
b/tools/testing/selftests/tpm2/tpm2.py
index d0fcb66a88a6..88a0e7776a23 100644
--- a/tools/testing/selftests/tpm2/tpm2.py
+++ b/tools/testing/selftests/tpm2/tpm2.py
@@ -247,14 +247,14 @@ class ProtocolError(Exception):
 class AuthCommand(object):
 """TPMS_AUTH_COMMAND"""
 
-def __init__(self, session_handle=TPM2_RS_PW, nonce='', 
session_attributes=0,
- hmac=''):
+def __init__(self, session_handle=TPM2_RS_PW, nonce=''.encode(),
+ session_attributes=0, hmac=''.encode()):
 self.session_handle = session_handle
 self.nonce = nonce
 self.session_attributes = session_attributes
 self.hmac = hmac
 
-def __str__(self):
+def __bytes__(self):
 fmt = '>I H%us B H%us' % (len(self.nonce), len(self.hmac))
 return struct.pack(fmt, self.session_handle, len(self.nonce),
self.nonce, self.session_attributes, len(self.hmac),
@@ -268,11 +268,11 @@ class AuthCommand(object):
 class SensitiveCreate(object):
 """TPMS_SENSITIVE_CREATE"""
 
-def __init__(self, user_auth='', data=''):
+def __init__(self, user_auth=''.encode(), data=''.encode()):
 self.user_auth = user_auth
 self.data = data
 
-def __str__(self):
+def __bytes__(self):
 fmt = '>H%us H%us' % (len(self.user_auth), len(self.data))
 return struct.pack(fmt, len(self.user_auth), self.user_auth,
len(self.data), self.data)
@@ -296,8 +296,9 @@ class Public(object):
 return '>HHIH%us%usH%us' % \
 (len(self.auth_policy), len(self.parameters), len(self.unique))
 
-def __init__(self, object_type, name_alg, object_attributes, 
auth_policy='',
- parameters='', unique=''):
+def __init__(self, object_type, name_alg, object_attributes,
+ auth_policy=''.encode(), parameters=''.encode(),
+ unique=''.encode()):
 self.object_type = object_type
 self.name_alg = name_alg
 self.object_attributes = object_attributes
@@ -305,7 +306,7 @@ class Public(object):
 self.parameters = parameters
 self.unique = unique
 
-def __str__(self):
+def __bytes__(self):
 return struct.pack(self.__fmt(),
self.object_type,
self.name_alg,
@@ -343,7 +344,7 @@ def get_algorithm(name):
 
 def hex_dump(d):
 d = [format(ord(x), '02x') for x in d]
-d = [d[i: i + 16] for i in xrange(0, len(d), 16)]
+d = [d[i: i + 16] for i in range(0, len(d), 16)]
 d = [' '.join(x) for x in d]
 d = os.linesep.join(d)
 
@@ -401,7 +402,7 @@ class Client:
 pcrsel_len = max((i >> 3) + 1, 3)
 pcrsel = [0] * pcrsel_len
 pcrsel[i >> 3] = 1 << (i & 7)
-pcrsel = ''.join(map(chr, pcrsel))
+pcrsel = ''.join(map(chr, pcrsel)).encode()
 
 fmt = '>HII IHB%us' % (pcrsel_len)
 cmd = struct.pack(fmt,
@@ -443,7 +444,7 @@ class Client:
 TPM2_CC_PCR_EXTEND,
 i,
 len(auth_cmd),
-str(auth_cmd),
+bytes(auth_cmd),
 1, bank_alg, dig)
 
 self.send_cmd(cmd)
@@ -457,7 +458,7 @@ class Client:
   TPM2_RH_NULL,
   TPM2_RH_NULL,
   16,
-  '\0' * 16,
+  ('\0' * 16).encode(),
   0,
   session_type,
   TPM2_ALG_NULL,
@@ -472,7 +473,7 @@ class