""" Set up the relationship between an IRBE and an RPKI engine given an IRDB. Our main task here is to create child objects in the RPKI engine for every registrant object in the IRDB. NB: This code is badly out of date, and has been kept only because some of what it's doing might be useful in other tools that haven't been written yet. Don't believe anything you see here. $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, MySQLdb import rpki.left_right, rpki.relaxng, rpki.https import rpki.x509, rpki.config, rpki.log rpki.log.init("irbe-setup") cfg = rpki.config.parser("irbe.conf", "irbe_cli") db = MySQLdb.connect(user = cfg.get("sql-username", section = "irdbd"), db = cfg.get("sql-database", section = "irdbd"), passwd = cfg.get("sql-password", section = "irdbd")) cur = db.cursor() db.autocommit(True) bpki_ta = rpki.x509.X509(Auto_file = cfg.get("bpki-ta")) rpkid_cert = rpki.x509.X509(Auto_files = cfg.get("rpkid-cert")) irbe_cert = rpki.x509.X509(Auto_files = cfg.get("irbe-cert")) irbe_key = rpki.x509.RSA( Auto_file = cfg.get("irbe-key")) https_url = cfg.get("https-url") def call_rpkid(pdu): """ Hand a PDU to rpkid and get back the response. Just throw an exception if anything bad happens, no fancy error handling. """ msg = rpki.left_right.msg.query((pdu,)) cms = rpki.left_right.cms_msg.wrap(msg, irbe_key, irbe_cert) der = rpki.https.client(client_key = irbe_key, client_cert = irbe_cert, server_ta = (bpki_ta, rpkid_cert), url = https_url, msg = cms) msg = rpki.left_right.cms_msg.unwrap(der, (bpki_ta, rpkid_cert)) pdu = msg[0] assert len(msg) == 1 and msg.is_reply() and not isinstance(pdu, rpki.left_right.report_error_elt) return pdu print "Create a self instance" pdu = call_rpkid(rpki.left_right.self_elt.make_pdu(action = "create", crl_interval = 84600)) self_id = pdu.self_id print "Create a business signing context" pdu = rpki.left_right.bsc_elt.make_pdu(action = "create", self_id = self_id, generate_keypair = True) pdu = call_rpkid(pdu) bsc_id = pdu.bsc_id print "Issue the business cert" i, o = os.popen2(("openssl", "x509", "-req", "-CA", "biz-certs/Bob-CA.cer", "-CAkey", "biz-certs/Bob-CA.key", "-CAserial", "biz-certs/Bob-CA.srl")) i.write(pdu.pkcs10_request.get_PEM()) i.close() cer = rpki.x509.X509(PEM = o.read()) o.close() print "Set up the business cert chain" pdu = rpki.left_right.bsc_elt.make_pdu(action = "set", self_id = self_id, bsc_id = bsc_id, signing_cert = cer) call_rpkid(pdu) print "Create a repository context" pdu = call_rpkid(rpki.left_right.repository_elt.make_pdu(action = "create", self_id = self_id, bsc_id = bsc_id)) repository_id = pdu.repository_id print "Create a parent context" ta = rpki.x509.X509(Auto_file = "biz-certs/Elena-Root.cer") pdu = call_rpkid(rpki.left_right.parent_elt.make_pdu( action = "create", self_id = self_id, bsc_id = bsc_id, repository_id = repository_id, bpki_cms_cert = ta, peer_contact_uri = "https://localhost:44333/", sia_base = "rsync://wombat.invalid/")) parent_id = pdu.parent_id print "Create child contexts for everybody" print "Using a single cert for all of these registrants is a crock" cer = rpki.x509.X509(Auto_file = "biz-certs/Frank-Root.cer") cur.execute("SELECT registrant_id, registrant_name FROM registrant") registrants = cur.fetchall() for registrant_id, registrant_name in registrants: print "Attempting to bind", registrant_id, registrant_name pdu = call_rpkid(rpki.left_right.child_elt.make_pdu(action = "create", self_id = self_id, bsc_id = bsc_id, bpki_cms_cert = cer)) print "Attempting to bind", registrant_id, registrant_name, pdu.child_id cur.execute( """ UPDATE registrant SET rpki_self_id = %d, rpki_child_id = %d WHERE registrant_id = %d """, (self_id, pdu.child_id, registrant_id)) 40' href='#n40'>40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151
/* hw_zencod_err.c */
/* ====================================================================
 * Copyright (c) 1999-2002 The OpenSSL Project.  All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer. 
 *
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *
 * 3. All advertising materials mentioning features or use of this
 *    software must display the following acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
 *
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
 *    endorse or promote products derived from this software without
 *    prior written permission. For written permission, please contact
 *    openssl-core@OpenSSL.org.
 *
 * 5. Products derived from this software may not be called "OpenSSL"
 *    nor may "OpenSSL" appear in their names without prior written
 *    permission of the OpenSSL Project.
 *
 * 6. Redistributions of any form whatsoever must retain the following
 *    acknowledgment:
 *    "This product includes software developed by the OpenSSL Project
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
 *
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
 * OF THE POSSIBILITY OF SUCH DAMAGE.
 * ====================================================================
 *
 * This product includes cryptographic software written by Eric Young
 * (eay@cryptsoft.com).  This product includes software written by Tim
 * Hudson (tjh@cryptsoft.com).
 *
 */

/* NOTE: this file was auto generated by the mkerr.pl script: any changes
 * made to it will be overwritten when the script next updates this file,
 * only reason strings will be preserved.
 */

#include <stdio.h>
#include <openssl/err.h>
#include "hw_zencod_err.h"

/* BEGIN ERROR CODES */
#ifndef OPENSSL_NO_ERR
static ERR_STRING_DATA ZENCOD_str_functs[]=
	{
{ERR_PACK(0,ZENCOD_F_ZENCOD_BN_MOD_EXP,0),	"ZENCOD_BN_MOD_EXP"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_CTRL,0),	"ZENCOD_CTRL"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_DH_COMPUTE,0),	"ZENCOD_DH_COMPUTE"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_DH_GENERATE,0),	"ZENCOD_DH_GENERATE"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_DSA_DO_SIGN,0),	"ZENCOD_DSA_DO_SIGN"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_DSA_DO_VERIFY,0),	"ZENCOD_DSA_DO_VERIFY"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_FINISH,0),	"ZENCOD_FINISH"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_INIT,0),	"ZENCOD_INIT"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_RAND,0),	"ZENCOD_RAND"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_RSA_MOD_EXP,0),	"ZENCOD_RSA_MOD_EXP"},
{ERR_PACK(0,ZENCOD_F_ZENCOD_RSA_MOD_EXP_CRT,0),	"ZENCOD_RSA_MOD_EXP_CRT"},
{0,NULL}
	};

static ERR_STRING_DATA ZENCOD_str_reasons[]=
	{
{ZENCOD_R_ALREADY_LOADED                 ,"already loaded"},
{ZENCOD_R_BAD_KEY_COMPONENTS             ,"bad key components"},
{ZENCOD_R_BN_EXPAND_FAIL                 ,"bn expand fail"},
{ZENCOD_R_CTRL_COMMAND_NOT_IMPLEMENTED   ,"ctrl command not implemented"},
{ZENCOD_R_DSO_FAILURE                    ,"dso failure"},
{ZENCOD_R_NOT_LOADED                     ,"not loaded"},
{ZENCOD_R_REQUEST_FAILED                 ,"request failed"},
{ZENCOD_R_UNIT_FAILURE                   ,"unit failure"},
{0,NULL}
	};

#endif

#ifdef ZENCOD_LIB_NAME
static ERR_STRING_DATA ZENCOD_lib_name[]=
        {
{0	,ZENCOD_LIB_NAME},
{0,NULL}
	};
#endif


static int ZENCOD_lib_error_code=0;
static int ZENCOD_error_init=1;

static void ERR_load_ZENCOD_strings(void)
	{
	if (ZENCOD_lib_error_code == 0)
		ZENCOD_lib_error_code=ERR_get_next_error_library();

	if (ZENCOD_error_init)
		{
		ZENCOD_error_init=0;
#ifndef OPENSSL_NO_ERR
		ERR_load_strings(ZENCOD_lib_error_code,ZENCOD_str_functs);
		ERR_load_strings(ZENCOD_lib_error_code,ZENCOD_str_reasons);
#endif

#ifdef ZENCOD_LIB_NAME
		ZENCOD_lib_name->error = ERR_PACK(ZENCOD_lib_error_code,0,0);
		ERR_load_strings(0,ZENCOD_lib_name);
#endif
		}
	}

static void ERR_unload_ZENCOD_strings(void)
	{
	if (ZENCOD_error_init == 0)
		{
#ifndef OPENSSL_NO_ERR
		ERR_unload_strings(ZENCOD_lib_error_code,ZENCOD_str_functs);
		ERR_unload_strings(ZENCOD_lib_error_code,ZENCOD_str_reasons);
#endif

#ifdef ZENCOD_LIB_NAME
		ERR_unload_strings(0,ZENCOD_lib_name);
#endif
		ZENCOD_error_init=1;
		}
	}

static void ERR_ZENCOD_error(int function, int reason, char *file, int line)
	{
	if (ZENCOD_lib_error_code == 0)
		ZENCOD_lib_error_code=ERR_get_next_error_library();
	ERR_PUT_error(ZENCOD_lib_error_code,function,reason,file,line);
	}