# $Id$ # Copyright (C) 2007--2008 American Registry for Internet Numbers ("ARIN") # # Permission to use, copy, modify, and distribute this software for any # purpose with or without fee is hereby granted, provided that the above # copyright notice and this permission notice appear in all copies. # # THE SOFTWARE IS PROVIDED "AS IS" AND ARIN DISCLAIMS ALL WARRANTIES WITH # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS. IN NO EVENT SHALL ARIN BE LIABLE FOR ANY SPECIAL, DIRECT, # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE # OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR # PERFORMANCE OF THIS SOFTWARE. import os def run(func, arg, *cmd): i, o = func(cmd) i.write(arg) i.close() value = o.read() o.close() return value def encode(xml, cer, key): return run(os.popen2, xml, "openssl", "smime", "-sign", "-nodetach", "-outform", "PEM", "-signer", cer, "-inkey", key) def decode(cms, dir): return run(os.popen2, cms, "openssl", "smime", "-verify", "-inform", "PEM", "-CApath", dir) def relaxng(xml, rng): return run(os.popen4, xml, "xmllint", "--noout", "--relaxng", rng, "-") def main(): dir = "biz-certs" cer = "biz-certs/Alice-EE.cer" key = "biz-certs/Alice-EE.key" rng = "up-down-schema.rng" for x in xml: print x e = encode(x, cer, key) print e d = decode(e, dir) print d v = relaxng(d, rng) print v print "=====\n" # Ugly inline stuff here for initial testing xml = [ ''' 2001 17 [Readable text] ''', ''' deadbeef ''', ''' deadbeef deadbeef ''', ''' ''', ''' deadbeef deadbeef ''', ''' ''', ''' ''' ] main()