mirror of
https://github.com/romanz/amodem.git
synced 2026-04-21 05:36:42 +08:00
gpg: refactor agent rsa/ecdsa signature parsing
This commit is contained in:
@@ -76,24 +76,28 @@ def _parse(s):
|
|||||||
return _parse_term(s)
|
return _parse_term(s)
|
||||||
|
|
||||||
|
|
||||||
def _parse_ecdsa_sig(sig):
|
def _parse_ecdsa_sig(args):
|
||||||
data, (algo, (r, sig_r), (s, sig_s)) = sig
|
(r, sig_r), (s, sig_s) = args
|
||||||
assert data == 'sig-val'
|
|
||||||
assert algo == 'ecdsa'
|
|
||||||
assert r == 'r'
|
assert r == 'r'
|
||||||
assert s == 's'
|
assert s == 's'
|
||||||
return (util.bytes2num(sig_r),
|
return (util.bytes2num(sig_r),
|
||||||
util.bytes2num(sig_s))
|
util.bytes2num(sig_s))
|
||||||
|
|
||||||
|
|
||||||
def _parse_rsa_sig(sig):
|
def _parse_rsa_sig(args):
|
||||||
data, (algo, (s, sig_s)) = sig
|
(s, sig_s), = args
|
||||||
assert data == 'sig-val'
|
|
||||||
assert algo == 'rsa'
|
|
||||||
assert s == 's'
|
assert s == 's'
|
||||||
return (util.bytes2num(sig_s),)
|
return (util.bytes2num(sig_s),)
|
||||||
|
|
||||||
|
|
||||||
|
def _parse_sig(sig):
|
||||||
|
label, sig = sig
|
||||||
|
assert label == 'sig-val'
|
||||||
|
algo_name = sig[0]
|
||||||
|
parser = {'rsa': _parse_rsa_sig, 'ecdsa': _parse_ecdsa_sig}[algo_name]
|
||||||
|
return parser(args=sig[1:])
|
||||||
|
|
||||||
|
|
||||||
def sign(sock, keygrip, digest, algo='rsa'):
|
def sign(sock, keygrip, digest, algo='rsa'):
|
||||||
"""Sign a digest using specified key using GPG agent."""
|
"""Sign a digest using specified key using GPG agent."""
|
||||||
hash_algo = 8 # SHA256
|
hash_algo = 8 # SHA256
|
||||||
@@ -123,7 +127,7 @@ def sign(sock, keygrip, digest, algo='rsa'):
|
|||||||
|
|
||||||
sig, leftover = _parse(sig)
|
sig, leftover = _parse(sig)
|
||||||
assert not leftover
|
assert not leftover
|
||||||
return {'ecdsa': _parse_ecdsa_sig, 'rsa': _parse_rsa_sig}[algo](sig)
|
return _parse_sig(sig)
|
||||||
|
|
||||||
|
|
||||||
def get_keygrip(user_id):
|
def get_keygrip(user_id):
|
||||||
|
|||||||
Reference in New Issue
Block a user