Slight improvements to generate_public_key. Unfortunately the function is still broken
git-svn-id: https://vsmartcard.svn.sourceforge.net/svnroot/vsmartcard@510 96b47cad-a561-4643-ad3b-153ac7d7599c
This commit is contained in:
@@ -641,9 +641,18 @@ class Security_Environment(object):
|
|||||||
return SW["NORMAL"], plain
|
return SW["NORMAL"], plain
|
||||||
|
|
||||||
def generate_public_key_pair(self, p1, p2, data):
|
def generate_public_key_pair(self, p1, p2, data):
|
||||||
|
"""The GENERATE PUBLIC-KEY PAIR command either initiates the generation
|
||||||
|
and storing of a key pair, i.e., a public key and a private key, in the
|
||||||
|
card, or accesses a key pair previously generated in the card.
|
||||||
|
|
||||||
|
@param p1:
|
||||||
|
@param p2:'00' (no information provided) or reference of the key to be
|
||||||
|
generated
|
||||||
|
@param data: One or more CRTs associated to the key generation if P1-P2
|
||||||
|
different from '0000'
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Generate a new public-private key pair.
|
|
||||||
"""
|
|
||||||
from Crypto.PublicKey import RSA, DSA
|
from Crypto.PublicKey import RSA, DSA
|
||||||
from Crypto.Util.randpool import RandomPool
|
from Crypto.Util.randpool import RandomPool
|
||||||
rnd = RandomPool()
|
rnd = RandomPool()
|
||||||
@@ -667,7 +676,6 @@ class Security_Environment(object):
|
|||||||
e = str(PublicKey.__getstate__()['e'])
|
e = str(PublicKey.__getstate__()['e'])
|
||||||
pk = ((0x81, len(n), n), (0x82, len(e), e))
|
pk = ((0x81, len(n), n), (0x82, len(e), e))
|
||||||
result = bertlv_pack(pk)
|
result = bertlv_pack(pk)
|
||||||
#result = bertlv_pack((0x7F49, len(pk), pk))
|
|
||||||
#Private key
|
#Private key
|
||||||
d = PublicKey.__getstate__()['d']
|
d = PublicKey.__getstate__()['d']
|
||||||
elif cipher == "DSA":
|
elif cipher == "DSA":
|
||||||
@@ -677,14 +685,20 @@ class Security_Environment(object):
|
|||||||
g = str(PublicKey.__getstate__()['g'])
|
g = str(PublicKey.__getstate__()['g'])
|
||||||
#Public key
|
#Public key
|
||||||
y = str(PublicKey.__getstate__()['y'])
|
y = str(PublicKey.__getstate__()['y'])
|
||||||
#TODO: Actual encoding
|
pk = ((0x81, len(p), p), (0x82, len(q), q), (0x83, len(g), g),
|
||||||
|
(0x84, len(y), y))
|
||||||
#Private key
|
#Private key
|
||||||
x = str(PublicKey.__getstate__()['x'])
|
x = str(PublicKey.__getstate__()['x'])
|
||||||
#Add more algorithms here
|
#Add more algorithms here
|
||||||
|
#elif cipher = "ECDSA":
|
||||||
|
else:
|
||||||
|
raise SwError(SW["ERR_CONDITIONNOTSATISFIED"])
|
||||||
|
|
||||||
|
result = bertlv_pack((0x7F49, len(pk), pk))
|
||||||
|
#TODO: Internally store key pair
|
||||||
|
|
||||||
if p1 & 0x02 == 0x02:
|
if p1 & 0x02 == 0x02:
|
||||||
return SW["NORMAL"], result
|
#We do not support extended header lists yet
|
||||||
|
raise SwError["ERR_NOTSUPPORTED"]
|
||||||
else:
|
else:
|
||||||
#FIXME: Where to put the keys?
|
return SW["NORMAL"], result
|
||||||
return SW["NORMAL"], ""
|
|
||||||
Reference in New Issue
Block a user