diff options
author | Uri Blumenthal <[email protected]> | 2015-08-11 16:43:00 -0400 |
---|---|---|
committer | Uri Blumenthal <[email protected]> | 2015-08-11 16:43:00 -0400 |
commit | 881cc4c4fa540552e9dc938915cf6ec9f32915db (patch) | |
tree | 0c490b5b8484dade35f76d6bd2e4aad2e3f3eb1d | |
parent | 7dd0de39c452341503d7755ecdf9520d6577c628 (diff) |
Made output prettier and more understandable
-rwxr-xr-x | src/python/botan.py | 96 |
1 files changed, 65 insertions, 31 deletions
diff --git a/src/python/botan.py b/src/python/botan.py index 10b7d0fec..f2c1d33cd 100755 --- a/src/python/botan.py +++ b/src/python/botan.py @@ -1,10 +1,11 @@ -#!/usr/bin/python +#!/usr/bin/env python """ Python wrapper of the botan crypto library http://botan.randombit.net (C) 2015 Jack Lloyd +(C) 2015 Uri Blumenthal (extensions and patches) Botan is released under the Simplified BSD License (see license.txt) """ @@ -15,7 +16,7 @@ from ctypes import * """ Module initialization """ -botan = CDLL('libbotan-1.11.so') +botan = CDLL('libbotan-1.11.dylib') expected_api_rev = 20150210 botan_api_rev = botan.botan_ffi_api_version() @@ -494,40 +495,51 @@ def test(): r = rng("user") - print version_string() - print version_major(), version_minor(), version_patch() + print("\n%s" % version_string()) + print("v%d.%d.%d\n" % (version_major(), version_minor(), version_patch())) - print kdf('KDF2(SHA-1)', '701F3480DFE95F57941F804B1B2413EF'.decode('hex'), 7, '55A4E9DD5F4CA2EF82'.decode('hex')).encode('hex') + print("KDF2(SHA-1) %s" % + kdf('KDF2(SHA-1)', '701F3480DFE95F57941F804B1B2413EF'.decode('hex'), 7, + '55A4E9DD5F4CA2EF82'.decode('hex')).encode('hex')) - print pbkdf('PBKDF2(SHA-1)', '', 32, 10000, '0001020304050607'.decode('hex'))[2].encode('hex').upper() - print '59B2B1143B4CB1059EC58D9722FB1C72471E0D85C6F7543BA5228526375B0127' + print("PBKDF2(SHA-1) %s" % + pbkdf('PBKDF2(SHA-1)', '', 32, 10000, + '0001020304050607'.decode('hex'))[2].encode('hex').upper()) + print("good output %s\n" % + '59B2B1143B4CB1059EC58D9722FB1C72471E0D85C6F7543BA5228526375B0127') (salt,iterations,psk) = pbkdf_timed('PBKDF2(SHA-256)', 'xyz', 32, 200) - print salt.encode('hex'), iterations - print 'x', psk.encode('hex') - print 'y', pbkdf('PBKDF2(SHA-256)', 'xyz', 32, iterations, salt)[2].encode('hex') + print("PBKDF2(SHA-256) x=timed, y=iterated; salt = %s #iterations = %d\n" % + (salt.encode('hex'), iterations)) + print('x %s' % psk.encode('hex')) + print('y %s\n' % + (pbkdf('PBKDF2(SHA-256)', 'xyz', 32, iterations, salt)[2].encode('hex'))) hmac = message_authentication_code('HMAC(SHA-256)') hmac.set_key('0102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F20'.decode('hex')) hmac.update('616263'.decode('hex')) - + hmac_output = hmac.final() - - print hmac_output.encode('hex') + if hmac_output != 'A21B1F5D4CF4F73A4DD939750F7A066A7F98CC131CB16A6692759021CFAB8181'.decode('hex'): - print 'Bad HMAC' - - print r.get(42).encode('hex'), r.get(13).encode('hex'), r.get(9).encode('hex') + print('Bad HMAC\n') + else: + print("HMAC output (good): %s\n" % hmac_output.encode('hex')) + + print("rng output:\n\t%s\n\t%s\n\t%s\n" % + (r.get(42).encode('hex'), r.get(13).encode('hex'), r.get(9).encode('hex'))) h = hash_function('MD5') assert h.output_length() == 16 h.update('h') h.update('i') - print "md5", h.final().encode('hex') + print("md5 hash: %s\n" % (h.final().encode('hex'))) + gcm = cipher('AES-128/GCM') - print gcm.default_nonce_length(), gcm.update_granularity() + print("AES-128/GCM: default nonce=%d update_size=%d" % + (gcm.default_nonce_length(), gcm.update_granularity())) gcm_dec = cipher('AES-128/GCM', encrypt=False) iv = r.get(12) @@ -537,27 +549,48 @@ def test(): gcm.start(iv) assert len(gcm.update('')) == 0 ct = gcm.finish(pt) - print "gcm ct", ct.encode('hex') + print("GCM ct %s" % ct.encode('hex')) gcm_dec.set_key(key) gcm_dec.start(iv) dec = gcm_dec.finish(ct) - print "gcm pt", pt.encode('hex'), len(pt) - print "gcm de", dec.encode('hex'), len(dec) + print("GCM pt %s %d" % (pt.encode('hex'), len(pt))) + print("GCM de %s %d\n" % (dec.encode('hex'), len(dec))) + + ocb = cipher('AES-128/OCB') + print("AES-128/OCB: default nonce=%d update_size=%d" % + (ocb.default_nonce_length(), ocb.update_granularity())) + ocb_dec = cipher('AES-128/OCB', encrypt=False) + + iv = r.get(12) + key = r.get(16) + pt = r.get(21) + ocb.set_key(key) + ocb.start(iv) + assert len(ocb.update('')) == 0 + ct = ocb.finish(pt) + print("OCB ct %s" % ct.encode('hex')) + + ocb_dec.set_key(key) + ocb_dec.start(iv) + dec = ocb_dec.finish(ct) + print("OCB pt %s %d" % (pt.encode('hex'), len(pt))) + print("OCB de %s %d\n" % (dec.encode('hex'), len(dec))) rsapriv = private_key('rsa', 1536, r) dec = pk_op_decrypt(rsapriv, "EME1(SHA-256)") rsapub = rsapriv.get_public_key() - print rsapub.fingerprint("SHA-1") - print rsapub.algo_name(), rsapub.estimated_strength() + print("rsapub %s/SHA-1 fingerprint: %s (estimated strength %s)" % + (rsapub.algo_name(), rsapub.fingerprint("SHA-1"), rsapub.estimated_strength())) enc = pk_op_encrypt(rsapub, "EME1(SHA-256)") ctext = enc.encrypt('foof', r) - print ctext.encode('hex') - print dec.decrypt(ctext) + print("ptext \'%s\'" % 'foof') + print("ctext \'%s\'" % ctext.encode('hex')) + print("decrypt \'%s\'\n" % dec.decrypt(ctext)) signer = pk_op_sign(rsapriv, 'EMSA4(SHA-384)') @@ -566,20 +599,20 @@ def test(): sig = signer.finish(r) r.reseed(200) - print sig.encode('hex') + print("EMSA4(SHA-384) signature: %s" % sig.encode('hex')) verify = pk_op_verify(rsapub, 'EMSA4(SHA-384)') verify.update('mess') verify.update('age') - print "good sig accepted?", verify.check_signature(sig) + print("good sig accepted? %s" % verify.check_signature(sig)) verify.update('mess of things') verify.update('age') - print "bad sig accepted?", verify.check_signature(sig) + print("bad sig accepted? %s" % verify.check_signature(sig)) verify.update('message') - print "good sig accepted?", verify.check_signature(sig) + print("good sig accepted? %s\n" % verify.check_signature(sig)) dh_grp = 'secp256r1' #dh_grp = 'curve25519' @@ -593,12 +626,13 @@ def test(): a_dh = pk_op_key_agreement(a_dh_priv, dh_kdf) b_dh = pk_op_key_agreement(b_dh_priv, dh_kdf) - print "dh pubs", a_dh.public_value().encode('hex'), b_dh.public_value().encode('hex') + print("dh pubs\n\t%s\n\t%s\n" % + (a_dh.public_value().encode('hex'), b_dh.public_value().encode('hex'))) a_key = a_dh.agree(b_dh.public_value(), 20, 'salt') b_key = b_dh.agree(a_dh.public_value(), 20, 'salt') - print "dh shared", a_key.encode('hex'), b_key.encode('hex') + print("dh shared\n\t%s\n\t%s\n" % (a_key.encode('hex'), b_key.encode('hex'))) #f = open('key.ber','wb') |