#!/usr/bin/env python2 import sys import pywii as wii if len(sys.argv) != 3: print "Usage: %s keyfile.[priv|pub] infile"%sys.argv[0] sys.exit(1) if sys.argv[1] == "-": k = sys.stdin.read() else: k = open(sys.argv[1],"rb").read() if len(k) not in (30,60): print "Failed to read key" sys.exit(2) if len(k) == 30: print "Key is a private key, generating public key..." q = wii.ec.priv_to_pub(k) else: q = k print "Public key:" pq = q.encode('hex') print "X =",pq[:30] print " ",pq[30:60] print "Y =",pq[60:90] print " ",pq[90:] print indata = open(sys.argv[2],"rb").read() if len(indata) < 64 or indata[:4] != "SIG0": print "Invalid header" sys.exit(3) r = indata[4:34] s = indata[34:64] sha = wii.SHA.new(indata[64:]).digest() print "SHA1: %s"%sha.encode('hex') print print "Signature:" print "R =",r[:15].encode('hex') print " ",r[15:].encode('hex') print "S =",s[:15].encode('hex') print " ",s[15:].encode('hex') print if wii.ec.check_ecdsa(q,r,s,sha): print "Signature is VALID" else: print "Signature is INVALID" sys.exit(4)