[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