tests: Support keygen by OpenPGP card.
This commit is contained in:
@@ -56,7 +56,7 @@ class Test_Card_Keygen(object):
|
|||||||
def test_signature_sigkey(self, card):
|
def test_signature_sigkey(self, card):
|
||||||
msg = b"Sign me please"
|
msg = b"Sign me please"
|
||||||
pk = card.cmd_get_public_key(1)
|
pk = card.cmd_get_public_key(1)
|
||||||
pk_info = (pk[9:9+256], pk[9+256+2:9+256+2+3])
|
pk_info = (pk[9:9+256], pk[9+256+2:])
|
||||||
digest = rsa_keys.compute_digestinfo(msg)
|
digest = rsa_keys.compute_digestinfo(msg)
|
||||||
sig = int(hexlify(card.cmd_pso(0x9e, 0x9a, digest)),16)
|
sig = int(hexlify(card.cmd_pso(0x9e, 0x9a, digest)),16)
|
||||||
r = rsa_keys.verify_signature(pk_info, digest, sig)
|
r = rsa_keys.verify_signature(pk_info, digest, sig)
|
||||||
@@ -69,7 +69,7 @@ class Test_Card_Keygen(object):
|
|||||||
def test_decryption(self, card):
|
def test_decryption(self, card):
|
||||||
msg = b"encrypt me please"
|
msg = b"encrypt me please"
|
||||||
pk = card.cmd_get_public_key(2)
|
pk = card.cmd_get_public_key(2)
|
||||||
pk_info = (pk[9:9+256], pk[9+256+2:9+256+2+3])
|
pk_info = (pk[9:9+256], pk[9+256+2:])
|
||||||
ciphertext = rsa_keys.encrypt_with_pubkey(pk_info, msg)
|
ciphertext = rsa_keys.encrypt_with_pubkey(pk_info, msg)
|
||||||
r = card.cmd_pso(0x80, 0x86, ciphertext)
|
r = card.cmd_pso(0x80, 0x86, ciphertext)
|
||||||
assert r == msg
|
assert r == msg
|
||||||
@@ -77,7 +77,7 @@ class Test_Card_Keygen(object):
|
|||||||
def test_signature_authkey(self, card):
|
def test_signature_authkey(self, card):
|
||||||
msg = b"Sign me please to authenticate"
|
msg = b"Sign me please to authenticate"
|
||||||
pk = card.cmd_get_public_key(3)
|
pk = card.cmd_get_public_key(3)
|
||||||
pk_info = (pk[9:9+256], pk[9+256+2:9+256+2+3])
|
pk_info = (pk[9:9+256], pk[9+256+2:])
|
||||||
digest = rsa_keys.compute_digestinfo(msg)
|
digest = rsa_keys.compute_digestinfo(msg)
|
||||||
sig = int(hexlify(card.cmd_internal_authenticate(digest)),16)
|
sig = int(hexlify(card.cmd_internal_authenticate(digest)),16)
|
||||||
r = rsa_keys.verify_signature(pk_info, digest, sig)
|
r = rsa_keys.verify_signature(pk_info, digest, sig)
|
||||||
|
|||||||
@@ -339,16 +339,20 @@ class OpenPGP_Card(object):
|
|||||||
data = b'\xb8\x00'
|
data = b'\xb8\x00'
|
||||||
else:
|
else:
|
||||||
data = b'\xa4\x00'
|
data = b'\xa4\x00'
|
||||||
cmd_data = iso7816_compose(0x47, 0x80, 0, data)
|
if self.__reader.is_tpdu_reader():
|
||||||
|
cmd_data = iso7816_compose(0x47, 0x80, 0, data, le=512)
|
||||||
|
else:
|
||||||
|
cmd_data = iso7816_compose(0x47, 0x80, 0, data)
|
||||||
sw = self.__reader.send_cmd(cmd_data)
|
sw = self.__reader.send_cmd(cmd_data)
|
||||||
if len(sw) != 2:
|
if len(sw) < 2:
|
||||||
raise ValueError(sw)
|
raise ValueError(sw)
|
||||||
if sw[0] == 0x90 and sw[1] == 0x00:
|
if sw[-2] == 0x61:
|
||||||
return b""
|
pk = self.cmd_get_response(sw[1])
|
||||||
elif sw[0] != 0x61:
|
elif sw[-2] == 0x90 and sw[-1] == 0x00:
|
||||||
|
pk = sw
|
||||||
|
else:
|
||||||
raise ValueError("%02x%02x" % (sw[0], sw[1]))
|
raise ValueError("%02x%02x" % (sw[0], sw[1]))
|
||||||
pk = self.cmd_get_response(sw[1])
|
return (pk[9:9+256], pk[9+256+2:-2])
|
||||||
return (pk[9:9+256], pk[9+256+2:9+256+2+3])
|
|
||||||
|
|
||||||
def cmd_get_public_key(self, keyno):
|
def cmd_get_public_key(self, keyno):
|
||||||
if keyno == 1:
|
if keyno == 1:
|
||||||
@@ -359,10 +363,9 @@ class OpenPGP_Card(object):
|
|||||||
data = b'\xa4\x00'
|
data = b'\xa4\x00'
|
||||||
if self.__reader.is_tpdu_reader():
|
if self.__reader.is_tpdu_reader():
|
||||||
cmd_data = iso7816_compose(0x47, 0x81, 0, data, le=512)
|
cmd_data = iso7816_compose(0x47, 0x81, 0, data, le=512)
|
||||||
r = self.__reader.send_cmd(cmd_data)
|
|
||||||
else:
|
else:
|
||||||
cmd_data = iso7816_compose(0x47, 0x81, 0, data)
|
cmd_data = iso7816_compose(0x47, 0x81, 0, data)
|
||||||
r = self.__reader.send_cmd(cmd_data)
|
r = self.__reader.send_cmd(cmd_data)
|
||||||
if len(r) < 2:
|
if len(r) < 2:
|
||||||
raise ValueError(r)
|
raise ValueError(r)
|
||||||
sw = r[-2:]
|
sw = r[-2:]
|
||||||
|
|||||||
Reference in New Issue
Block a user