Extract parse_private_key.
This commit is contained in:
+19
-14
@@ -94,6 +94,7 @@ def _remove(s, t):
|
|||||||
assert i >= 0
|
assert i >= 0
|
||||||
return s[:i] + s[i+len(t):]
|
return s[:i] + s[i+len(t):]
|
||||||
|
|
||||||
|
|
||||||
def EMSA_PKCS1_v1_5_encode(digest, modlen, hashid):
|
def EMSA_PKCS1_v1_5_encode(digest, modlen, hashid):
|
||||||
dinfo = asn1_build(
|
dinfo = asn1_build(
|
||||||
(SEQUENCE, [
|
(SEQUENCE, [
|
||||||
@@ -102,7 +103,7 @@ def EMSA_PKCS1_v1_5_encode(digest, modlen, hashid):
|
|||||||
(NULL, None),
|
(NULL, None),
|
||||||
]),
|
]),
|
||||||
(OCTET_STRING, digest),
|
(OCTET_STRING, digest),
|
||||||
])
|
]),
|
||||||
)
|
)
|
||||||
if len(dinfo)+3 > modlen:
|
if len(dinfo)+3 > modlen:
|
||||||
raise ParameterError("Hash too large for modulus")
|
raise ParameterError("Hash too large for modulus")
|
||||||
@@ -143,6 +144,22 @@ def parse_public_key(data):
|
|||||||
return pk
|
return pk
|
||||||
|
|
||||||
|
|
||||||
|
def parse_private_key(data):
|
||||||
|
pka = asn1_parse(ASN1_RSAPrivateKey, data)
|
||||||
|
pk = {
|
||||||
|
'version': pka[0][0],
|
||||||
|
'modulus': pka[0][1],
|
||||||
|
'publicExponent': pka[0][2],
|
||||||
|
'privateExponent': pka[0][3],
|
||||||
|
'prime1': pka[0][4],
|
||||||
|
'prime2': pka[0][5],
|
||||||
|
'exponent1': pka[0][6],
|
||||||
|
'exponent2': pka[0][7],
|
||||||
|
'coefficient': pka[0][8],
|
||||||
|
}
|
||||||
|
return pk
|
||||||
|
|
||||||
|
|
||||||
def validate_signature_fields(sig, debuglog=None):
|
def validate_signature_fields(sig, debuglog=None):
|
||||||
mandatory_fields = ('v', 'a', 'b', 'bh', 'd', 'h', 's')
|
mandatory_fields = ('v', 'a', 'b', 'bh', 'd', 'h', 's')
|
||||||
for field in mandatory_fields:
|
for field in mandatory_fields:
|
||||||
@@ -416,19 +433,7 @@ def sign(message, selector, domain, privkey, identity=None, canonicalize=(Simple
|
|||||||
raise KeyFormatError(str(e))
|
raise KeyFormatError(str(e))
|
||||||
if debuglog is not None:
|
if debuglog is not None:
|
||||||
print >>debuglog, " ".join("%02x" % ord(x) for x in pkdata)
|
print >>debuglog, " ".join("%02x" % ord(x) for x in pkdata)
|
||||||
pka = asn1_parse(ASN1_RSAPrivateKey, pkdata)
|
pk = parse_private_key(pkdata)
|
||||||
pk = {
|
|
||||||
'version': pka[0][0],
|
|
||||||
'modulus': pka[0][1],
|
|
||||||
'publicExponent': pka[0][2],
|
|
||||||
'privateExponent': pka[0][3],
|
|
||||||
'prime1': pka[0][4],
|
|
||||||
'prime2': pka[0][5],
|
|
||||||
'exponent1': pka[0][6],
|
|
||||||
'exponent2': pka[0][7],
|
|
||||||
'coefficient': pka[0][8],
|
|
||||||
}
|
|
||||||
|
|
||||||
if identity is not None and not identity.endswith(domain):
|
if identity is not None and not identity.endswith(domain):
|
||||||
raise ParameterError("identity must end with domain")
|
raise ParameterError("identity must end with domain")
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user