You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
trezor-agent/trezor_agent/gpg/debug_subkeys.py

44 lines
1.4 KiB
Python

#!/usr/bin/env python
"""Check GPG v2 signature for a given public key."""
import argparse
import logging
from . import decode
from .. import util
log = logging.getLogger(__name__)
def main():
"""Main function."""
p = argparse.ArgumentParser()
p.add_argument('pubkey')
p.add_argument('-v', '--verbose', action='store_true', default=False)
args = p.parse_args()
logging.basicConfig(level=logging.DEBUG if args.verbose else logging.INFO,
format='%(asctime)s %(levelname)-10s %(message)s')
stream = open(args.pubkey, 'rb')
parser = decode.parse_packets(util.Reader(stream))
pubkey, userid, sig1, subkey, sig2 = parser
digest = decode.digest_packets([pubkey, userid, sig1])
assert sig1['hash_prefix'] == digest[:2]
decode.verify_digest(
pubkey=pubkey, digest=digest,
signature=sig1['sig'], label='GPG public key (self sig)')
digest = decode.digest_packets([pubkey, subkey, sig2])
assert sig2['hash_prefix'] == digest[:2]
decode.verify_digest(
pubkey=pubkey, digest=digest,
signature=sig2['sig'], label='GPG subkey (1st sig)')
sig3, = sig2['embedded']
digest = decode.digest_packets([pubkey, subkey, sig3])
decode.verify_digest(
pubkey=subkey, digest=digest,
signature=sig3['sig'], label='GPG subkey (2nd sig)')
if __name__ == '__main__':
main()