12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- #!/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)
|