Skip to content

Commit

Permalink
keybase sign
Browse files Browse the repository at this point in the history
Closes oconnor663#2.
  • Loading branch information
oconnor663 committed Oct 14, 2015
1 parent c076354 commit ffd99f4
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 8 deletions.
47 changes: 40 additions & 7 deletions clinacl.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,12 @@
clinacl verifygen <signingkey>
clinacl sign <signingkey>
clinacl verify <verifykey>
clinacl keybase
clinacl keybase sign <signingkey>
clinacl keybase verify
"""

NACL_SIG_LEN = 64


def to_hex(bytes):
return binascii.hexlify(bytes).decode('ascii')
Expand Down Expand Up @@ -102,7 +105,33 @@ def verify(keyhex):
write_to_stdout(plainbytes)


def keybase():
def keybase_sign(keyhex):
signing_keybytes = from_hex(keyhex)
signingkey = nacl.signing.SigningKey(signing_keybytes)
verify_keybytes = signingkey.verify_key.encode()
plainbytes = read_from_stdin()
attached_sig = signingkey.sign(plainbytes)
detatched_sig = attached_sig[:NACL_SIG_LEN]
# This is the signature format currently used by Keybase's servers. See the
# comments in keybase_verify().
blob = {
'body': {
'payload': plainbytes,
'key': b'\x01\x20' + verify_keybytes + b'\x0a',
'sig': detatched_sig,
'detached': True,
'sig_type': 32,
'hash_type': 10
},
'tag': 514,
'version': 1,
}
sig_msgpack_bytes = umsgpack.packb(blob)
sig_base64 = base64.b64encode(sig_msgpack_bytes)
write_to_stdout(sig_base64)


def keybase_verify():
# A Keybase NaCl signature is a Base64-encoded MessagePack blob containing
# the payload, the signing KID, and the detatched signature bytes. We
# decode, unpack, and then verify the signature. If it's valid, we print
Expand Down Expand Up @@ -133,12 +162,16 @@ def main():
signinggen()
elif args['verifygen']:
verifygen(args['<signingkey>'])
elif args['sign']:
sign(args['<signingkey>'])
elif args['verify']:
verify(args['<verifykey>'])
elif args['keybase']:
keybase()
if args['sign']:
keybase_sign(args['<signingkey>'])
elif args['verify']:
keybase_verify()
else:
if args['sign']:
sign(args['<signingkey>'])
elif args['verify']:
verify(args['<verifykey>'])


if __name__ == '__main__':
Expand Down
4 changes: 3 additions & 1 deletion test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@ runtests() {
echo verified | clinacl sign $signingkey | clinacl verify $verifykey

link='g6Rib2R5hqhkZXRhY2hlZMOpaGFzaF90eXBlCqNrZXnEIwEgb0QEGch1mSRBwXnmm+ElpwHWSpGF4Y5wGq9Wz1BEOsYKp3BheWxvYWTFA5x7ImJvZHkiOnsiZGV2aWNlIjp7ImlkIjoiZjRmZTNkMWYwYzgxM2QxMzBiZDUwNTllMWFkMzI4MTgiLCJzdGF0dXMiOjIsInR5cGUiOiJkZXNrdG9wIn0sImtleSI6eyJlbGRlc3Rfa2lkIjoiMDEwMTA0ZTcyNDM2MmU3YmE2NjMzOTgwYTYyNTdmMDQzZjdjM2Q4NzMzNTUwNTk0YTc5MmFhY2Y2YzZkNDY3N2RkOTQwYSIsImhvc3QiOiJrZXliYXNlLmlvIiwia2lkIjoiMDEyMDZmNDQwNDE5Yzg3NTk5MjQ0MWMxNzllNjliZTEyNWE3MDFkNjRhOTE4NWUxOGU3MDFhYWY1NmNmNTA0NDNhYzYwYSIsInVpZCI6ImJmNjUyNjZkMGQ4ZGYzYWQ1ZDFiMzY3ZjU3OGU2ODE5IiwidXNlcm5hbWUiOiJyYWxwaCJ9LCJyZXZva2UiOnsia2lkcyI6WyIwMTIwNWVkYzAwYTE3M2E1NDMyNGFkNTIzN2M5MzlhNmFiYmY5ZmY2MTIxMDk0NjY4OWRhMWQ3MjEzMjlhY2RhYjlkZTBhIiwiMDEyMWE1M2MyMzcxMGUxODUwYTMyODJhMWFhZDZmNTM4NjczZDA3OGMxMTJmMWYyM2UyYjE3MTE5NDFiZTFjM2RkNGIwYSJdfSwidHlwZSI6InJldm9rZSIsInZlcnNpb24iOjF9LCJjbGllbnQiOnsibmFtZSI6ImtleWJhc2UuaW8gZ28gY2xpZW50IiwidmVyc2lvbiI6IjAuMS43In0sImN0aW1lIjoxNDI5NjUxNDk5LCJleHBpcmVfaW4iOjMxNTM2MDAwMCwibWVya2xlX3Jvb3QiOnsiY3RpbWUiOjE0Mjk2NTEzOTIsImhhc2giOiIyZGVhODhjMjNiYjc0OWY5ZGQ5OWNlYjAyYzQ2MGM2NTgxYzc4NjVhMmFiZTU0Y2ZkNDVmZmU2OWZlODA0MWFjY2UyOWJmOGMwMzcxZjgwZGZlZWMwNWY4NmY5MWVhYzMxN2RhY2JjMmU1MDM2NmIxNGJkOTg2ZjZhMjVmNDZhMiIsInNlcW5vIjoyNTd9LCJwcmV2IjoiNTgwOGQ2OTRlOWFjNDFhMDEwZjMwNTk5YmRmNGM4MDdlNzc4Mjg2YWYyMmZkNWY0NWExMmJjZWM3NDBjMGEzNiIsInNlcW5vIjoxNSwidGFnIjoic2lnbmF0dXJlIn2jc2lnxEAaomeO/0vh2uEtIo1HQ6lQW07IKoSqfLyYnpbbks3tYxo+a7VXMC/NgzdUExivyhira4cUzk43Q7EboDF2EDEMqHNpZ190eXBlIKN0YWfNAgKndmVyc2lvbgE='
echo $link | clinacl keybase
echo $link | clinacl keybase verify
echo

echo keybase verified | clinacl keybase sign $signingkey | clinacl keybase verify
}

echo === testing Python 2 ===
Expand Down

0 comments on commit ffd99f4

Please sign in to comment.