gpg: decouple identity from device
This commit is contained in:
parent
9123cef810
commit
6a5acba0b0
@ -123,5 +123,5 @@ def auto_unlock():
|
|||||||
|
|
||||||
args = p.parse_args()
|
args = p.parse_args()
|
||||||
util.setup_logging(verbosity=args.verbose)
|
util.setup_logging(verbosity=args.verbose)
|
||||||
d = device.detect(identity_str='', curve_name='')
|
d = device.detect()
|
||||||
log.info('unlocked %s device', d)
|
log.info('unlocked %s device', d)
|
||||||
|
@ -12,28 +12,28 @@ class Client(object):
|
|||||||
|
|
||||||
def __init__(self, user_id, curve_name):
|
def __init__(self, user_id, curve_name):
|
||||||
"""Connect to the device and retrieve required public key."""
|
"""Connect to the device and retrieve required public key."""
|
||||||
self.device = device.detect(identity_str='',
|
self.device = device.detect()
|
||||||
curve_name=curve_name)
|
|
||||||
self.device.identity_dict['proto'] = 'gpg'
|
|
||||||
self.device.identity_dict['host'] = user_id
|
|
||||||
self.user_id = user_id
|
self.user_id = user_id
|
||||||
|
self.identity = device.interface.Identity(
|
||||||
|
identity_str='gpg://{}'.format(user_id),
|
||||||
|
curve_name=curve_name)
|
||||||
|
|
||||||
def pubkey(self, ecdh=False):
|
def pubkey(self, ecdh=False):
|
||||||
"""Return public key as VerifyingKey object."""
|
"""Return public key as VerifyingKey object."""
|
||||||
with self.device:
|
with self.device:
|
||||||
pubkey = self.device.pubkey(ecdh=ecdh)
|
pubkey = self.device.pubkey(ecdh=ecdh, identity=self.identity)
|
||||||
return formats.decompress_pubkey(
|
return formats.decompress_pubkey(
|
||||||
pubkey=pubkey, curve_name=self.device.curve_name)
|
pubkey=pubkey, curve_name=self.identity.curve_name)
|
||||||
|
|
||||||
def sign(self, digest):
|
def sign(self, digest):
|
||||||
"""Sign the digest and return a serialized signature."""
|
"""Sign the digest and return a serialized signature."""
|
||||||
log.info('please confirm GPG signature on %s for "%s"...',
|
log.info('please confirm GPG signature on %s for "%s"...',
|
||||||
self.device, self.user_id)
|
self.device, self.user_id)
|
||||||
if self.device.curve_name == formats.CURVE_NIST256:
|
if self.identity.curve_name == formats.CURVE_NIST256:
|
||||||
digest = digest[:32] # sign the first 256 bits
|
digest = digest[:32] # sign the first 256 bits
|
||||||
log.debug('signing digest: %s', util.hexlify(digest))
|
log.debug('signing digest: %s', util.hexlify(digest))
|
||||||
with self.device:
|
with self.device:
|
||||||
sig = self.device.sign(blob=digest)
|
sig = self.device.sign(blob=digest, identity=self.identity)
|
||||||
return (util.bytes2num(sig[:32]), util.bytes2num(sig[32:]))
|
return (util.bytes2num(sig[:32]), util.bytes2num(sig[32:]))
|
||||||
|
|
||||||
def ecdh(self, pubkey):
|
def ecdh(self, pubkey):
|
||||||
@ -41,4 +41,4 @@ class Client(object):
|
|||||||
log.info('please confirm GPG decryption on %s for "%s"...',
|
log.info('please confirm GPG decryption on %s for "%s"...',
|
||||||
self.device, self.user_id)
|
self.device, self.user_id)
|
||||||
with self.device:
|
with self.device:
|
||||||
return self.device.ecdh(pubkey=pubkey)
|
return self.device.ecdh(pubkey=pubkey, identity=self.identity)
|
||||||
|
Loading…
Reference in New Issue
Block a user