aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--scripts/rpki/cms.py9
-rw-r--r--scripts/rpki/https.py9
-rw-r--r--scripts/rpki/ipaddrs.py3
-rw-r--r--scripts/rpki/left_right.py58
-rw-r--r--scripts/rpki/pkcs10.py3
-rw-r--r--scripts/rpki/resource_set.py3
-rw-r--r--scripts/rpki/sql.py46
-rw-r--r--scripts/rpki/up_down.py29
-rw-r--r--scripts/rpki/x509.py21
-rwxr-xr-xscripts/rpkid.py3
10 files changed, 126 insertions, 58 deletions
diff --git a/scripts/rpki/cms.py b/scripts/rpki/cms.py
index 5b27a97f..999e3197 100644
--- a/scripts/rpki/cms.py
+++ b/scripts/rpki/cms.py
@@ -8,7 +8,8 @@ requires disk I/O, and likes PEM format. Fix this later.
import os, rpki.x509, rpki.exceptions, lxml.etree
-# openssl smime -sign -nodetach -outform DER -signer biz-certs/Alice-EE.cer -certfile biz-certs/Alice-CA.cer -inkey biz-certs/Alice-EE.key -in PLAN -out PLAN.der
+# openssl smime -sign -nodetach -outform DER -signer biz-certs/Alice-EE.cer
+# -certfile biz-certs/Alice-CA.cer -inkey biz-certs/Alice-EE.key -in PLAN -out PLAN.der
def sign(plaintext, keypair, certs):
"""Sign plaintext as CMS with specified key and bag of certificates.
@@ -36,7 +37,8 @@ def sign(plaintext, keypair, certs):
f.write(plaintext)
f.close()
- i,o = os.popen2(("openssl", "smime", "-sign", "-nodetach", "-outform", "DER", "-binary", "-signer", signer_filename,
+ i,o = os.popen2(("openssl", "smime", "-sign", "-nodetach", "-outform", "DER", "-binary",
+ "-signer", signer_filename,
"-certfile", certfile_filename, "-inkey", "/dev/stdin", "-in", plaintext_filename))
i.write(keypair.get_PEM())
i.close()
@@ -86,4 +88,5 @@ def xml_verify(elt, ta):
def xml_sign(elt, key, certs):
"""Composite routine to sign CMS-wrapped XML."""
- return sign(lxml.etree.tostring(elt, pretty_print=True, encoding="us-ascii", xml_declaration=True), key, certs)
+ return sign(lxml.etree.tostring(elt, pretty_print=True, encoding="us-ascii", xml_declaration=True),
+ key, certs)
diff --git a/scripts/rpki/https.py b/scripts/rpki/https.py
index 6aeba62a..eec9e3a0 100644
--- a/scripts/rpki/https.py
+++ b/scripts/rpki/https.py
@@ -42,7 +42,8 @@ def client(msg, privateKey, certChain, x509TrustList, url):
return response.read()
else:
r = response.read()
- raise rpki.exceptions.HTTPRequestFailed, "HTTP request failed with status %s, response %s" % (response.status, r)
+ raise rpki.exceptions.HTTPRequestFailed, \
+ "HTTP request failed with status %s, response %s" % (response.status, r)
class requestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
"""Derived type to supply POST handler."""
@@ -61,11 +62,13 @@ class requestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
try:
handler = self.rpki_find_handler()
if self.headers["Content-Type"] != rpki_content_type:
- rcode, rtext = 415, "Received Content-Type %s, expected %s" % (self.headers["Content-Type"], rpki_content_type)
+ rcode, rtext = 415, "Received Content-Type %s, expected %s" \
+ % (self.headers["Content-Type"], rpki_content_type)
elif handler is None:
rcode, rtext = 404, "No handler found for URL " + self.path
else:
- rcode, rtext = handler(query = self.rfile.read(int(self.headers["Content-Length"])), path = self.path)
+ rcode, rtext = handler(query = self.rfile.read(int(self.headers["Content-Length"])),
+ path = self.path)
except Exception, edata:
traceback.print_exc()
rcode, rtext = 500, "Unhandled exception %s" % edata
diff --git a/scripts/rpki/ipaddrs.py b/scripts/rpki/ipaddrs.py
index 161ffae4..32410691 100644
--- a/scripts/rpki/ipaddrs.py
+++ b/scripts/rpki/ipaddrs.py
@@ -51,4 +51,5 @@ class v6addr(long):
def __str__(self):
"""Convert a v6addr object to string format."""
- return socket.inet_ntop(socket.AF_INET6, struct.pack("!QQ", long(self) >> 64, long(self) & 0xFFFFFFFFFFFFFFFF))
+ return socket.inet_ntop(socket.AF_INET6,
+ struct.pack("!QQ", long(self) >> 64, long(self) & 0xFFFFFFFFFFFFFFFF))
diff --git a/scripts/rpki/left_right.py b/scripts/rpki/left_right.py
index 73d2130d..e4756a51 100644
--- a/scripts/rpki/left_right.py
+++ b/scripts/rpki/left_right.py
@@ -3,7 +3,8 @@
"""RPKI "left-right" protocol."""
import base64, lxml.etree, time
-import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions, rpki.https, rpki.up_down, rpki.relaxng
+import rpki.sax_utils, rpki.resource_set, rpki.x509, rpki.sql, rpki.exceptions
+import rpki.https, rpki.up_down, rpki.relaxng
xmlns = "http://www.hactrn.net/uris/rpki/left-right-spec/"
@@ -227,7 +228,10 @@ class self_elt(data_elt):
def serve_post_save_hook(self, q_pdu, r_pdu):
"""Extra server actions for self_elt."""
if self.rekey or self.reissue or self.revoke or self.run_now or self.publish_world_now:
- raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("rekey", "reissue", "revoke", "run_now", "publish_world_now") if getattr(self, b))
+ raise NotImplementedError, \
+ "Unimplemented control %s" % ", ".join(b for b in ("rekey", "reissue", "revoke",
+ "run_now", "publish_world_now")
+ if getattr(self, b))
def startElement(self, stack, name, attrs):
"""Handle <self/> element."""
@@ -255,7 +259,8 @@ class self_elt(data_elt):
"""Run the regular client poll cycle with each of this self's parents in turn."""
for parent in parent_elt.sql_fetch_where(gctx, "self_id = %s" % self.self_id):
r_pdu = rpki.up_down.list_pdu(gctx, parent)
- ca_map = dict((ca.parent_resource_class, ca) for ca in rpki.sql.ca_obj.sql_fetch_where(gctx, "parent_id = %s", parent.parent_id))
+ ca_map = dict((ca.parent_resource_class, ca)
+ for ca in rpki.sql.ca_obj.sql_fetch_where(gctx, "parent_id = %s", parent.parent_id))
for rc in r_pdu.payload:
if rc.class_name in ca_map:
ca = ca_map[rc.class_name]
@@ -293,7 +298,8 @@ class bsc_elt(data_elt):
def sql_insert_hook(self, gctx):
"""Extra SQL insert actions for bsc_elt -- handle signing certs."""
if self.signing_cert:
- gctx.cur.executemany("INSERT bsc_cert (cert, bsc_id) VALUES (%s, %s)", ((x.get_DER(), self.bsc_id) for x in self.signing_cert))
+ gctx.cur.executemany("INSERT bsc_cert (cert, bsc_id) VALUES (%s, %s)",
+ ((x.get_DER(), self.bsc_id) for x in self.signing_cert))
def sql_delete_hook(self, gctx):
"""Extra SQL delete actions for bsc_elt -- handle signing certs."""
@@ -349,11 +355,13 @@ class parent_elt(data_elt):
"""<parent/> element."""
element_name = "parent"
- attributes = ("action", "type", "self_id", "parent_id", "bsc_id", "repository_id", "peer_contact_uri", "sia_base")
+ attributes = ("action", "type", "self_id", "parent_id", "bsc_id", "repository_id",
+ "peer_contact_uri", "sia_base")
elements = ("cms_ta", "https_ta")
booleans = ("rekey", "reissue", "revoke")
- sql_template = rpki.sql.template("parent", "parent_id", "self_id", "bsc_id", "repository_id", "cms_ta", "https_ta", "peer_contact_uri", "sia_base")
+ sql_template = rpki.sql.template("parent", "parent_id", "self_id", "bsc_id", "repository_id",
+ "cms_ta", "https_ta", "peer_contact_uri", "sia_base")
cms_ta = None
https_ta = None
@@ -361,7 +369,9 @@ class parent_elt(data_elt):
def serve_post_save_hook(self, q_pdu, r_pdu):
""""Extra server actions for parent_elt."""
if self.rekey or self.reissue or self.revoke:
- raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("rekey", "reissue", "revoke") if getattr(self, b))
+ raise NotImplementedError, \
+ "Unimplemented control %s" % ", ".join(b for b in ("rekey","reissue","revoke")
+ if getattr(self, b))
def startElement(self, stack, name, attrs):
"""Handle <parent/> element."""
@@ -408,7 +418,9 @@ class parent_elt(data_elt):
q_elt = q_msg.toXML()
rpki.relaxng.up_down.assertValid(q_elt)
q_cms = rpki.cms.xml_sign(q_elt, bsc.private_key_id, bsc.signing_cert)
- r_cms = self.client_up_down_reply(gctx, q_pdu, rpki.https.client(x509TrustList = rpki.x509.X509_chain(self.https_ta), msg = q_cms, url = self.peer_contact_uri))
+ r_cms = self.client_up_down_reply(gctx, q_pdu,
+ rpki.https.client(x509TrustList = rpki.x509.X509_chain(self.https_ta),
+ msg = q_cms, url = self.peer_contact_uri))
r_elt = rpki.cms.xml_verify(r_cms, self.cms_ta)
rpki.relaxng.up_down.assertValid(r_elt)
return rpki.up_down.sax_handler.saxify(r_elt)
@@ -428,7 +440,8 @@ class child_elt(data_elt):
def serve_post_save_hook(self, q_pdu, r_pdu):
"""Extra server actions for child_elt."""
if self.reissue:
- raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("reissue",) if getattr(self, b))
+ raise NotImplementedError, \
+ "Unimplemented control %s" % ", ".join(b for b in ("reissue",) if getattr(self, b))
def startElement(self, stack, name, attrs):
"""Handle <child/> element."""
@@ -473,7 +486,8 @@ class repository_elt(data_elt):
attributes = ("action", "type", "self_id", "repository_id", "bsc_id", "peer_contact_uri")
elements = ("cms_ta", "https_ta")
- sql_template = rpki.sql.template("repository", "repository_id", "self_id", "bsc_id", "cms_ta", "peer_contact_uri")
+ sql_template = rpki.sql.template("repository", "repository_id", "self_id", "bsc_id", "cms_ta",
+ "peer_contact_uri")
cms_ta = None
https_ta = None
@@ -510,24 +524,29 @@ class route_origin_elt(data_elt):
attributes = ("action", "type", "self_id", "route_origin_id", "as_number", "ipv4", "ipv6")
booleans = ("suppress_publication",)
- sql_template = rpki.sql.template("route_origin", "route_origin_id", "self_id", "as_number", "ca_detail_id", "roa")
+ sql_template = rpki.sql.template("route_origin", "route_origin_id", "self_id", "as_number",
+ "ca_detail_id", "roa")
ca_detail_id = None
roa = None
def sql_fetch_hook(self, gctx):
"""Extra SQL fetch actions for route_origin_elt -- handle address ranges."""
- self.ipv4 = rpki.resource_set.resource_set_ipv4.from_sql(gctx.cur,
- "SELECT start_ip, end_ip FROM route_origin_range WHERE route_origin_id = %s AND start_ip NOT LIKE '%:%'",
- self.route_origin_id)
- self.ipv6 = rpki.resource_set.resource_set_ipv6.from_sql(gctx.cur,
- "SELECT start_ip, end_ip FROM route_origin_range WHERE route_origin_id = %s AND start_ip LIKE '%:%'",
- self.route_origin_id)
+ self.ipv4 = rpki.resource_set.resource_set_ipv4.from_sql(gctx.cur, """
+ SELECT start_ip, end_ip FROM route_origin_range
+ WHERE route_origin_id = %s AND start_ip NOT LIKE '%:%'
+ """, self.route_origin_id)
+ self.ipv6 = rpki.resource_set.resource_set_ipv6.from_sql(gctx.cur, """
+ SELECT start_ip, end_ip FROM route_origin_range
+ WHERE route_origin_id = %s AND start_ip LIKE '%:%'
+ """, self.route_origin_id)
def sql_insert_hook(self, gctx):
"""Extra SQL insert actions for route_origin_elt -- handle address ranges."""
if self.ipv4 + self.ipv6:
- gctx.cur.executemany("INSERT route_origin_range (route_origin_id, start_ip, end_ip) VALUES (%s, %s, %s)",
+ gctx.cur.executemany("""
+ INSERT route_origin_range (route_origin_id, start_ip, end_ip)
+ VALUES (%s, %s, %s)""",
((self.route_origin_id, x.min, x.max) for x in self.ipv4 + self.ipv6))
def sql_delete_hook(self, gctx):
@@ -537,7 +556,8 @@ class route_origin_elt(data_elt):
def serve_post_save_hook(self, q_pdu, r_pdu):
"""Extra server actions for route_origin_elt."""
if self.suppress_publication:
- raise NotImplementedError, "Unimplemented control %s" % ", ".join(b for b in ("suppress_publication",) if getattr(self, b))
+ raise NotImplementedError, \
+ "Unimplemented control %s" % ", ".join(b for b in ("suppress_publication",) if getattr(self, b))
def startElement(self, stack, name, attrs):
"""Handle <route_origin/> element."""
diff --git a/scripts/rpki/pkcs10.py b/scripts/rpki/pkcs10.py
index 25326c20..7f8ee17d 100644
--- a/scripts/rpki/pkcs10.py
+++ b/scripts/rpki/pkcs10.py
@@ -35,7 +35,8 @@ def make_request(keypair):
f.write(req_fmt % commonName)
f.close()
- i,o = os.popen2(["openssl", "req", "-config", config_filename, "-new", "-key", "/dev/stdin", "-outform", "DER"])
+ i,o = os.popen2(["openssl", "req", "-config", config_filename, "-new",
+ "-key", "/dev/stdin", "-outform", "DER"])
i.write(keypair.get_PEM())
i.close()
pkcs10 = rpki.x509.PKCS10(DER = o.read())
diff --git a/scripts/rpki/resource_set.py b/scripts/rpki/resource_set.py
index d176e70a..3436398c 100644
--- a/scripts/rpki/resource_set.py
+++ b/scripts/rpki/resource_set.py
@@ -103,7 +103,8 @@ def _rsplit(rset, that):
"""Split a resource range into two resource ranges."""
this = rset.pop(0)
cell_type = type(this.min)
- assert type(this) is type(that) and type(this.max) is cell_type and type(that.min) is cell_type and type(that.max) is cell_type
+ assert type(this) is type(that) and type(this.max) is cell_type and \
+ type(that.min) is cell_type and type(that.max) is cell_type
if this.min < that.min:
rset.insert(0, type(this)(this.min, cell_type(that.min - 1)))
rset.insert(1, type(this)(that.min, this.max))
diff --git a/scripts/rpki/sql.py b/scripts/rpki/sql.py
index 713a6e85..f47c6572 100644
--- a/scripts/rpki/sql.py
+++ b/scripts/rpki/sql.py
@@ -20,8 +20,11 @@ class template(object):
self.index = index_column
self.columns = columns
self.select = "SELECT %s FROM %s" % (", ".join(columns), table_name)
- self.insert = "INSERT %s (%s) VALUES (%s)" % (table_name, ", ".join(data_columns), ", ".join("%(" + s + ")s" for s in data_columns))
- self.update = "UPDATE %s SET %s WHERE %s = %%(%s)s" % (table_name, ", ".join(s + " = %(" + s + ")s" for s in data_columns), index_column, index_column)
+ self.insert = "INSERT %s (%s) VALUES (%s)" % (table_name, ", ".join(data_columns),
+ ", ".join("%(" + s + ")s" for s in data_columns))
+ self.update = "UPDATE %s SET %s WHERE %s = %%(%s)s" % \
+ (table_name, ", ".join(s + " = %(" + s + ")s" for s in data_columns),
+ index_column, index_column)
self.delete = "DELETE FROM %s WHERE %s = %%s" % (table_name, index_column)
## @var sql_cache
@@ -70,7 +73,8 @@ class sql_persistant(object):
elif len(results) == 1:
return results[0]
else:
- raise rpki.exceptions.DBConsistancyError, "Database contained multiple matches for %s.%s" % (cls.__name__, id)
+ raise rpki.exceptions.DBConsistancyError, \
+ "Database contained multiple matches for %s.%s" % (cls.__name__, id)
@classmethod
def sql_fetch_all(cls, gctx):
@@ -183,7 +187,8 @@ class sql_persistant(object):
class ca_obj(sql_persistant):
"""Internal CA object."""
- sql_template = template("ca", "ca_id", "last_crl_sn", "next_crl_update", "last_issued_sn", "last_manifest_sn", "next_manifest_update", "sia_uri", "parent_id")
+ sql_template = template("ca", "ca_id", "last_crl_sn", "next_crl_update", "last_issued_sn",
+ "last_manifest_sn", "next_manifest_update", "sia_uri", "parent_id")
def construct_sia_uri(self, gctx, parent, rc):
"""Construct the sia_uri value for this CA given configured
@@ -209,22 +214,30 @@ class ca_obj(sql_persistant):
cert_map = dict((c.get_SKI(), c) for c in rc.certs)
ca_details = ca_detail_obj.sql_fetch_where(gctx, "ca_id = %s AND latest_ca_cert IS NOT NULL", ca.ca_id)
as, v4, v6 = ca_detail_obj.sql_fetch_active(gctx, ca_id).latest_ca_cert.get_3779resources()
- undersized = not rc.resource_set_as.issubset(as) or not rc.resource_set_ipv4.issubset(v4) or not rc.resource_set_ipv6.issubset(v6)
- oversized = not as.issubset(rc.resource_set_as) or not v4.issubset(rc.resource_set_ipv4) or not v6.issubset(rc.resource_set_ipv6)
+ undersized = not rc.resource_set_as.issubset(as) or \
+ not rc.resource_set_ipv4.issubset(v4) or not rc.resource_set_ipv6.issubset(v6)
+ oversized = not as.issubset(rc.resource_set_as) or \
+ not v4.issubset(rc.resource_set_ipv4) or not v6.issubset(rc.resource_set_ipv6)
sia_uri = self.construct_sia_uri()
sia_uri_changed = self.sia_uri != sia_uri
if sia_uri_changed:
self.sia_uri = sia_uri
self.sql_mark_dirty()
for ca_detail in ca_details:
- assert ca_detail.state != "pending" or (as, v4, v6) == ca_detail.get_3779resources(), "Resource mismatch for pending cert"
+ assert ca_detail.state != "pending" or (as, v4, v6) == ca_detail.get_3779resources(), \
+ "Resource mismatch for pending cert"
for ca_detail in ca_details:
ski = ca_detail.latest_ca_cert.get_SKI()
- assert ski in cert_map, "Certificate in our database missing from list_response, SKI %s" % ca_detail.latest_ca_cert.hSKI()
- if ca_detail.state != "deprecated" and (undersized or oversized or sia_uri_changed or ca_detail.latest_ca_cert != cert_map[ski]):
- ca_detail.update(gctx, parent, self, rc, cert_map[ski], undersized, oversized, sia_uri_changed, as, v4, v6)
+ assert ski in cert_map, \
+ "Certificate in our database missing from list_response, SKI %s" % \
+ ca_detail.latest_ca_cert.hSKI()
+ if ca_detail.state != "deprecated" and \
+ (undersized or oversized or sia_uri_changed or ca_detail.latest_ca_cert != cert_map[ski]):
+ ca_detail.update(gctx, parent, self, rc, cert_map[ski], undersized, oversized, sia_uri_changed,
+ as, v4, v6)
del cert_map[ski]
- assert not cert_map, "Certificates in list_response missing from our database, SKIs %s" % ", ".join(c.hSKI() for c in cert_map.values())
+ assert not cert_map, "Certificates in list_response missing from our database, SKIs %s" % \
+ ", ".join(c.hSKI() for c in cert_map.values())
@classmethod
def create(cls, gctx, parent, rc):
@@ -270,8 +283,9 @@ class ca_obj(sql_persistant):
class ca_detail_obj(sql_persistant):
"""Internal CA detail object."""
- sql_template = template("ca", "ca_detail_id", "private_key_id", "public_key", "latest_ca_cert", "manifest_private_key_id",
- "manifest_public_key", "latest_manifest_cert", "latest_manifest", "latest_crl", "state", "ca_cert_uri", "ca_id")
+ sql_template = template("ca", "ca_detail_id", "private_key_id", "public_key", "latest_ca_cert",
+ "manifest_private_key_id", "manifest_public_key", "latest_manifest_cert",
+ "latest_manifest", "latest_crl", "state", "ca_cert_uri", "ca_id")
def sql_decode(self, vals):
"""Decode SQL representation of a ca_detail_obj."""
@@ -290,7 +304,8 @@ class ca_detail_obj(sql_persistant):
def sql_encode(self):
"""Encode SQL representation of a ca_detail_obj."""
d = sql_persistant.sql_encode(self)
- for i in ("private_key_id", "public_key", "latest_ca_cert", "manifest_private_key_id", "manifest_public_key", "latest_manifest_cert", "latest_manifest", "latest_crl"):
+ for i in ("private_key_id", "public_key", "latest_ca_cert", "manifest_private_key_id",
+ "manifest_public_key", "latest_manifest_cert", "latest_manifest", "latest_crl"):
d[i] = getattr(self, i).get_DER()
return d
@@ -327,7 +342,8 @@ class ca_detail_obj(sql_persistant):
if oversized or sia_uri_changed:
for child_cert in child_cert_obj.sql_fetch_where(gctx, "ca_detail_id = %s" % self.ca_detail_id):
child_as, child_v4, child_v6 = child_cert.cert.get_3779resources()
- if sia_uri_changed or not child_as.issubset(as) or not child_v4.issubset(v4) or not child_v6.issubset(v6):
+ if sia_uri_changed or not child_as.issubset(as) or \
+ not child_v4.issubset(v4) or not child_v6.issubset(v6):
child_cert.reissue(gctx, self, as, v4, v6)
@classmethod
diff --git a/scripts/rpki/up_down.py b/scripts/rpki/up_down.py
index d5d3d93e..5c2ad35c 100644
--- a/scripts/rpki/up_down.py
+++ b/scripts/rpki/up_down.py
@@ -110,7 +110,8 @@ class certificate_elt(base_elt):
def toXML(self):
"""Generate a <certificate/> element."""
- elt = self.make_elt("certificate", "cert_url", "req_resource_set_as", "req_resource_set_ipv4", "req_resource_set_ipv6")
+ elt = self.make_elt("certificate", "cert_url",
+ "req_resource_set_as", "req_resource_set_ipv4", "req_resource_set_ipv6")
elt.text = self.cert.get_Base64()
return elt
@@ -147,7 +148,8 @@ class class_elt(base_elt):
def toXML(self):
"""Generate a <class/> element."""
- elt = self.make_elt("class", "class_name", "cert_url", "resource_set_as", "resource_set_ipv4", "resource_set_ipv6", "suggested_sia_head")
+ elt = self.make_elt("class", "class_name", "cert_url",
+ "resource_set_as", "resource_set_ipv4", "resource_set_ipv6", "suggested_sia_head")
elt.extend([i.toXML() for i in self.certs])
self.make_b64elt(elt, "issuer", self.issuer.get_DER())
return elt
@@ -163,7 +165,10 @@ class list_pdu(base_elt):
"""Serve one "list" PDU."""
r_msg.payload = list_response_pdu()
irdb_as, irdb_v4, irdb_v6 = rpki.left_right.irdb_query(gctx, child.self_id, child.child_id)
- for ca_id in rpki.sql.fetch_column(gctx, "SELECT ca_id FROM ca WHERE ca.parent_id = parent.parent_id AND parent.self_id = %s" % child.self_id):
+ for ca_id in rpki.sql.fetch_column(gctx, """
+ SELECT ca_id FROM ca
+ WHERE ca.parent_id = parent.parent_id AND parent.self_id = %s
+ """ % child.self_id):
ca_detail = rpki.sql.ca_detail_obj.sql_fetch_active(gctx, ca_id)
if not ca_detail:
continue
@@ -174,7 +179,9 @@ class list_pdu(base_elt):
rc.class_name = str(ca_id)
rc.cert_url = multi_uri(ca_detail.ca_cert_uri)
rc.resource_set_as, rc.resource_set_ipv4, rc.resource_set_ipv6 = rc_as, rc_v4, rc_v6
- for child_cert in rpki.sql.child_cert_obj.sql_fetch_where(gctx, "child_id = %s AND ca_detail_id = %s" % (child.child_id, ca_detail.ca_detail_id)):
+ for child_cert in rpki.sql.child_cert_obj.sql_fetch_where(gctx, """
+ child_id = %s AND ca_detail_id = %s
+ """ % (child.child_id, ca_detail.ca_detail_id)):
c = certificate_elt()
c.cert_url = multi_uri(ca.sia_uri + child_cert.cert.gSKI() + ".cer")
c.cert = child_cert.cert
@@ -231,7 +238,8 @@ class issue_pdu(base_elt):
def toXML(self):
"""Generate payload of "issue" PDU."""
- elt = self.make_elt("request", "class_name", "req_resource_set_as", "req_resource_set_ipv4", "req_resource_set_ipv6")
+ elt = self.make_elt("request", "class_name", "req_resource_set_as",
+ "req_resource_set_ipv4", "req_resource_set_ipv6")
elt.text = self.pkcs10.get_Base64()
return [elt]
@@ -249,11 +257,14 @@ class issue_pdu(base_elt):
self.pkcs10.check_valid_rpki()
# Check current cert, if any
- rc_as, rc_v4, rc_v6 = ca_detail.latest_ca_cert.get_3779resources(rpki.left_right.irdb_query(gctx, child.self_id, child.child_id))
+ irdb_resources = rpki.left_right.irdb_query(gctx, child.self_id, child.child_id)
+ rc_as, rc_v4, rc_v6 = ca_detail.latest_ca_cert.get_3779resources(irdb_resources)
req_key = self.pkcs10.getPublicKey()
req_sia = self.pkcs10.get_SIA()
req_ski = self.pkcs10.get_SKI()
- child_cert = rpki.sql.child_cert_obj.sql_fetch_where(gctx, "child_id = %s AND ca_detail_id = %s AND ski = %s" % (child.child_id, ca_detail.ca_detail_id, req_ski))
+ child_cert = rpki.sql.child_cert_obj.sql_fetch_where(gctx, """
+ child_id = %s AND ca_detail_id = %s AND ski = %s
+ """ % (child.child_id, ca_detail.ca_detail_id, req_ski))
assert len(child_cert) < 2
child_cert = child_cert[0] if child_cert else None
@@ -339,7 +350,9 @@ class revoke_pdu(revoke_syntax):
ca_detail = rpki.sql.ca_detail_obj.sql_fetch_active(gctx, ca_id)
if ca is None or ca_detail is None:
raise rpki.exceptions.NotInDatabase
- for c in rpki.sql.child_cert_obj.sql_fetch_where(gctx, "child_id = %s AND ca_detail_id = %s AND ski = %s" % (child.child_id, ca_detail.ca_detail_id, self.get_SKI())):
+ for c in rpki.sql.child_cert_obj.sql_fetch_where(gctx, """
+ child_id = %s AND ca_detail_id = %s AND ski = %s
+ """ % (child.child_id, ca_detail.ca_detail_id, self.get_SKI())):
c.sql_delete()
r_msg.payload = revoke_response_pdu()
r_msg.payload.class_name = self.class_name
diff --git a/scripts/rpki/x509.py b/scripts/rpki/x509.py
index 96503f3d..40412d61 100644
--- a/scripts/rpki/x509.py
+++ b/scripts/rpki/x509.py
@@ -164,7 +164,9 @@ class DER_object(object):
return (self.get_POWpkix().getExtension((1, 3, 6, 1, 5, 5, 7, 1, 1)) or ((), 0, None))[2]
def get_3779resources(self, as_intersector = None, v4_intersector = None, v6_intersector = None):
- """Get RFC 3779 resources as rpki.resource_set objects. Only works for subclasses that support getExtensions()."""
+ """Get RFC 3779 resources as rpki.resource_set objects.
+ Only works for subclasses that support getExtensions().
+ """
as, v4, v6 = rpki.resource_set.parse_extensions(self.get_POWpkix().getExtensions())
if as_intersector is not None:
as = as.intersection(as_intersector)
@@ -245,7 +247,8 @@ class X509(DER_object):
"""Extract the public key from this certificate."""
return RSApublic(DER = self.get_POWpkix().tbs.subjectPublicKeyInfo.toString())
- def issue(self, keypair, subject_key, serial, sia, aia, crldp, cn = None, notAfter = None, as = None, v4 = None, v6 = None, is_ca = True):
+ def issue(self, keypair, subject_key, serial, sia, aia, crldp,
+ cn = None, notAfter = None, as = None, v4 = None, v6 = None, is_ca = True):
"""Issue a certificate."""
now = time.time()
@@ -407,9 +410,12 @@ class PKCS10(DER_object):
raise rpki.exceptions.BadPKCS10, "Signature check failed"
if self.get_POWpkix().certificationRequestInfo.version != 0:
- raise rpki.exceptions.BadPKCS10, "Bad version number %s" % self.get_POWpkix().certificationRequestInfo.version
+ raise rpki.exceptions.BadPKCS10, \
+ "Bad version number %s" % self.get_POWpkix().certificationRequestInfo.version
- if oid2name.get(self.get_POWpkix().signatureAlgorithm) not in ("sha256WithRSAEncryption", "sha384WithRSAEncryption", "sha512WithRSAEncryption"):
+ if oid2name.get(self.get_POWpkix().signatureAlgorithm) not in ("sha256WithRSAEncryption",
+ "sha384WithRSAEncryption",
+ "sha512WithRSAEncryption"):
raise rpki.exceptions.BadPKCS10, "Bad signature algorithm %s" % self.get_POWpkix().signatureAlgorithm
exts = self.getExtensions()
@@ -428,7 +434,8 @@ class PKCS10(DER_object):
raise rpki.exceptions.BadPKCS10, "keyUsage doesn't match basicConstraints"
for method, location in req_exts.get("subjectInfoAccess", ()):
- if oid2name.get(method) == "caRepository" and (location[0] != "uri" or (location[1].startswith("rsync://") and not location[1].endswith("/"))):
+ if oid2name.get(method) == "caRepository" and \
+ (location[0] != "uri" or (location[1].startswith("rsync://") and not location[1].endswith("/"))):
raise rpki.exceptions.BadPKCS10, "Certificate request includes bad SIA component: %s" % location
# This one is an implementation restriction. I don't yet
@@ -449,9 +456,11 @@ class PKCS10(DER_object):
@classmethod
def create(cls, keypair, exts = None):
"""Create a new request for a given keypair, including given SIA value."""
+ cn = "".join(("%02X" % ord(i) for i in keypair.get_SKI()))
req = POW.pkix.CertificationRequest()
req.certificationRequestInfo.version.set(0)
- req.certificationRequestInfo.subject.set((((POW.pkix.obj2oid("commonName"), ("printableString", "".join(("%02X" % ord(i) for i in keypair.get_SKI())))),),))
+ req.certificationRequestInfo.subject.set((((POW.pkix.obj2oid("commonName"),
+ ("printableString", cn)),),))
if exts is not None:
req.setExtension(exts)
req.sign(keypair.get_POW(), POW.SHA256_DIGEST)
diff --git a/scripts/rpkid.py b/scripts/rpkid.py
index b4b20d73..fb0ccd60 100755
--- a/scripts/rpkid.py
+++ b/scripts/rpkid.py
@@ -6,7 +6,8 @@ framework onto which I'm bolting various parts for testing.
"""
import tlslite.api, MySQLdb, xml.sax, lxml.etree, lxml.sax, POW, POW.pkix, traceback, os, time
-import rpki.https, rpki.config, rpki.resource_set, rpki.up_down, rpki.left_right, rpki.relaxng, rpki.cms, rpki.exceptions, rpki.x509
+import rpki.https, rpki.config, rpki.resource_set, rpki.up_down, rpki.left_right, rpki.relaxng
+import rpki.cms, rpki.exceptions, rpki.x509
def left_right_handler(query, path):
try: