[Checkins] SVN: keas.kmi/trunk/ Add a command-line script for testing the LocalKeyManagementFacility.
Marius Gedminas
marius at pov.lt
Thu Sep 4 16:33:47 EDT 2008
Log message for revision 90834:
Add a command-line script for testing the LocalKeyManagementFacility.
Changed:
U keas.kmi/trunk/buildout.cfg
U keas.kmi/trunk/setup.py
A keas.kmi/trunk/src/keas/kmi/testclient.py
-=-
Modified: keas.kmi/trunk/buildout.cfg
===================================================================
--- keas.kmi/trunk/buildout.cfg 2008-09-04 20:19:35 UTC (rev 90833)
+++ keas.kmi/trunk/buildout.cfg 2008-09-04 20:33:47 UTC (rev 90834)
@@ -1,6 +1,6 @@
[buildout]
develop = .
-parts = test coverage-test coverage-report python paster runserver ctags
+parts = test coverage-test coverage-report python paster runserver testclient ctags
[test]
recipe = zc.recipe.testrunner
@@ -47,3 +47,7 @@
eggs = ${paster:eggs}
scripts = paster=runserver
arguments = ['serve', 'server.ini']
+
+[testclient]
+recipe = zc.recipe.egg
+eggs = keas.kmi
Modified: keas.kmi/trunk/setup.py
===================================================================
--- keas.kmi/trunk/setup.py 2008-09-04 20:19:35 UTC (rev 90833)
+++ keas.kmi/trunk/setup.py 2008-09-04 20:33:47 UTC (rev 90834)
@@ -69,6 +69,9 @@
],
zip_safe = False,
entry_points = """
+ [console_scripts]
+ testclient = keas.kmi.testclient:main
+
[paste.app_factory]
main = keas.kmi.wsgi:application_factory
""",
Added: keas.kmi/trunk/src/keas/kmi/testclient.py
===================================================================
--- keas.kmi/trunk/src/keas/kmi/testclient.py (rev 0)
+++ keas.kmi/trunk/src/keas/kmi/testclient.py 2008-09-04 20:33:47 UTC (rev 90834)
@@ -0,0 +1,122 @@
+##############################################################################
+#
+# Copyright (c) 2008 Zope Foundation and Contributors.
+# All Rights Reserved.
+#
+# This software is subject to the provisions of the Zope Public License,
+# Version 2.1 (ZPL). A copy of the ZPL should accompany this distribution.
+# THIS SOFTWARE IS PROVIDED "AS IS" AND ANY AND ALL EXPRESS OR IMPLIED
+# WARRANTIES ARE DISCLAIMED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+# WARRANTIES OF TITLE, MERCHANTABILITY, AGAINST INFRINGEMENT, AND FITNESS
+# FOR A PARTICULAR PURPOSE.
+#
+##############################################################################
+"""
+$Id$
+"""
+__docformat__ = "reStructuredText"
+
+import sys
+import optparse
+import textwrap
+
+from keas.kmi.facility import LocalKeyManagementFacility
+
+
+def ping(kmf):
+ client = kmf.clientClass(kmf.url)
+ print client.fullStatus
+
+
+def new_key(kmf):
+ sys.stdout.write(kmf.generate())
+
+
+def read_kek(kekfile):
+ try:
+ return file(kekfile, 'rb').read()
+ except IOError, e:
+ print >> sys.stderr, "Could not read key encrypting key from %s" % kekfile
+ print >> sys.stderr, e
+ sys.exit(1)
+
+
+def read_data(filename=None):
+ if not filename:
+ return sys.stdin.read()
+ else:
+ try:
+ return file(filename, 'rb').read()
+ except IOError, e:
+ print >> sys.stderr, "Could not read %s" % filename
+ print >> sys.stderr, e
+ sys.exit(1)
+
+
+def get_key(kmf, kekfile):
+ key_encrypting_key = read_kek(kekfile)
+ key = kmf.getEncryptionKey(key_encrypting_key)
+ sys.stdout.write(key)
+
+
+def encrypt(kmf, kekfile, filename=None):
+ key_encrypting_key = read_kek(kekfile)
+ data = read_data(filename)
+ encrypted = kmf.encrypt(key_encrypting_key, data)
+ sys.stdout.write(encrypted)
+
+
+def decrypt(kmf, kekfile, filename=None):
+ key_encrypting_key = read_kek(kekfile)
+ data = read_data(filename)
+ decrypted = kmf.decrypt(key_encrypting_key, data)
+ sys.stdout.write(decrypted)
+
+
+def main():
+ parser = optparse.OptionParser(textwrap.dedent("""\
+ usage: %prog URL
+ see if the server is alive
+
+ %prog URL -n > key.txt
+ generate a new key and key encrypting key
+
+ %prog URL -e key.txt data.txt > encrypted.txt
+ encrypt data
+
+ %prog URL -d key.txt encrytped.txt > data.txt
+ decrypt data
+
+ %prog URL -g key.txt > secretkey.bin
+ get the secret encryption key
+ """.rstrip()),
+ description="Client for a Key Management Server.")
+ parser.add_option('-n', '--new',
+ help='generate a new key',
+ action='store_const', dest='action',
+ const=new_key)
+ parser.add_option('-g', '--get-key',
+ help='get key',
+ action='store_const', dest='action',
+ const=get_key)
+ parser.add_option('-e', '--encrypt',
+ help='encrypt data',
+ action='store_const', dest='action',
+ const=encrypt)
+ parser.add_option('-d', '--decrypt',
+ help='decrypt data',
+ action='store_const', dest='action',
+ const=decrypt)
+ opts, args = parser.parse_args()
+ if not opts.action:
+ opts.action = ping
+ if not args:
+ parser.error('please specify the KMS server URL')
+
+ url = args.pop(0)
+ kmf = LocalKeyManagementFacility(url)
+
+ try:
+ opts.action(kmf, *args)
+ except TypeError:
+ parser.error('incorrect number of arguments')
Property changes on: keas.kmi/trunk/src/keas/kmi/testclient.py
___________________________________________________________________
Name: svn:keywords
+ Id
More information about the Checkins
mailing list