#!/usr/bin/python import cStringIO import time import sys import gpgme import database def decrypt_ciphertext(db, ctx, ciphertext_id, cycle, ciphertext): try: decrypt_start = time.time() ciphertext_io = cStringIO.StringIO(ciphertext) plaintext_io = cStringIO.StringIO() ctx.decrypt_verify(ciphertext_io, plaintext_io) plaintext = plaintext_io.getvalue() decrypt_end = time.time() db.accept_plaintext(ciphertext_id, cycle, decrypt_start, decrypt_end, plaintext) sys.stderr.write('Decrypted dataset for cycle %s:\n' % cycle) sys.stderr.write(' Ciphertext length: %i bytes\n' % len(ciphertext)) sys.stderr.write(' Plaintext length: %i bytes\n' % len(plaintext)) except gpgme.GpgmeError, e: sys.stdout.write('Unable to decrypt encrypted dataset for cycle %s:\n' % cycle) sys.stdout.write(' %i %i %s\n' % (e.source, e.code, e.message)) db = database.Database() ctx = gpgme.Context() for ciphertext_id, cycle, ciphertext in db.need_decrypted(): decrypt_ciphertext(db, ctx, ciphertext_id, cycle, ciphertext)