diff options
Diffstat (limited to 'rpkid/rpki/left_right.py')
-rw-r--r-- | rpkid/rpki/left_right.py | 136 |
1 files changed, 83 insertions, 53 deletions
diff --git a/rpkid/rpki/left_right.py b/rpkid/rpki/left_right.py index db7f9191..2edd8ca3 100644 --- a/rpkid/rpki/left_right.py +++ b/rpkid/rpki/left_right.py @@ -215,18 +215,18 @@ class self_elt(data_elt): element_name = "self" attributes = ("action", "type", "tag", "self_id", "crl_interval", "regen_margin") - elements = ("extension_preference", "biz_cert", "biz_glue") + elements = ("extension_preference", "bpki_cert", "bpki_glue") booleans = ("rekey", "reissue", "revoke", "run_now", "publish_world_now", "clear_extension_preferences") sql_template = rpki.sql.template("self", "self_id", "use_hsm", "crl_interval", "regen_margin", - ("biz_cert", rpki.x509.X509), ("biz_glue", rpki.x509.X509)) + ("bpki_cert", rpki.x509.X509), ("bpki_glue", rpki.x509.X509)) self_id = None use_hsm = False crl_interval = None regen_margin = None - biz_cert = None - biz_glue = None + bpki_cert = None + bpki_glue = None def __init__(self): """Initialize a self_elt.""" @@ -325,16 +325,16 @@ class self_elt(data_elt): self.prefs.append(pref) stack.append(pref) pref.startElement(stack, name, attrs) - elif name not in ("biz_cert", "biz_glue"): + elif name not in ("bpki_cert", "bpki_glue"): assert name == "self", "Unexpected name %s, stack %s" % (name, stack) self.read_attrs(attrs) def endElement(self, stack, name, text): """Handle <self/> element.""" - if name == "biz_cert": - self.biz_cert = rpki.x509.X509(Base64 = text) - elif name == "biz_glue": - self.biz_glue = rpki.x509.X509(Base64 = text) + if name == "bpki_cert": + self.bpki_cert = rpki.x509.X509(Base64 = text) + elif name == "bpki_glue": + self.bpki_glue = rpki.x509.X509(Base64 = text) else: assert name == "self", "Unexpected name %s, stack %s" % (name, stack) stack.pop() @@ -342,6 +342,10 @@ class self_elt(data_elt): def toXML(self): """Generate <self/> element.""" elt = self.make_elt() + if self.bpki_cert and not self.bpki_cert.empty(): + self.make_b64elt(elt, "bpki_cert", self.bpki_cert.get_DER()) + if self.bpki_glue and not self.bpki_glue.empty(): + self.make_b64elt(elt, "bpki_glue", self.bpki_glue.get_DER()) elt.extend([i.toXML() for i in self.prefs]) return elt @@ -532,15 +536,18 @@ class parent_elt(data_elt): element_name = "parent" attributes = ("action", "type", "tag", "self_id", "parent_id", "bsc_id", "repository_id", "peer_contact_uri", "sia_base", "sender_name", "recipient_name") - elements = ("peer_biz_cert", "peer_biz_glue") + elements = ("bpki_cms_cert", "bpki_cms_glue", "bpki_https_cert", "bpki_https_glue") booleans = ("rekey", "reissue", "revoke") sql_template = rpki.sql.template("parent", "parent_id", "self_id", "bsc_id", "repository_id", - ("peer_biz_cert", rpki.x509.X509), ("peer_biz_glue", rpki.x509.X509), + ("bpki_cms_cert", rpki.x509.X509), ("bpki_cms_glue", rpki.x509.X509), + ("bpki_https_cert", rpki.x509.X509), ("bpki_https_glue", rpki.x509.X509), "peer_contact_uri", "sia_base", "sender_name", "recipient_name") - peer_biz_cert = None - peer_biz_glue = None + bpki_cms_cert = None + bpki_cms_glue = None + bpki_https_cert = None + bpki_https_glue = None def repository(self): """Fetch repository object to which this parent object links.""" @@ -570,16 +577,20 @@ class parent_elt(data_elt): def startElement(self, stack, name, attrs): """Handle <parent/> element.""" - if name not in ("peer_biz_cert", "peer_biz_glue"): + if name not in ("bpki_cms_cert", "bpki_cms_glue", "bpki_https_cert", "bpki_https_glue"): assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) self.read_attrs(attrs) def endElement(self, stack, name, text): """Handle <parent/> element.""" - if name == "peer_biz_cert": - self.peer_biz_cert = rpki.x509.X509(Base64 = text) - elif name == "peer_biz_glue": - self.peer_biz_glue = rpki.x509.X509(Base64 = text) + if name == "bpki_cms_cert": + self.bpki_cms_cert = rpki.x509.X509(Base64 = text) + elif name == "bpki_cms_glue": + self.bpki_cms_glue = rpki.x509.X509(Base64 = text) + elif name == "bpki_https_cert": + self.bpki_https_cert = rpki.x509.X509(Base64 = text) + elif name == "bpki_https_glue": + self.bpki_https_glue = rpki.x509.X509(Base64 = text) else: assert name == "parent", "Unexpected name %s, stack %s" % (name, stack) stack.pop() @@ -587,10 +598,14 @@ class parent_elt(data_elt): def toXML(self): """Generate <parent/> element.""" elt = self.make_elt() - if self.peer_biz_cert and not self.peer_biz_cert.empty(): - self.make_b64elt(elt, "peer_biz_cert", self.peer_biz_cert.get_DER()) - if self.peer_biz_glue and not self.peer_biz_glue.empty(): - self.make_b64elt(elt, "peer_biz_glue", self.peer_biz_glue.get_DER()) + if self.bpki_cms_cert and not self.bpki_cms_cert.empty(): + self.make_b64elt(elt, "bpki_cms_cert", self.bpki_cms_cert.get_DER()) + if self.bpki_cms_glue and not self.bpki_cms_glue.empty(): + self.make_b64elt(elt, "bpki_cms_glue", self.bpki_cms_glue.get_DER()) + if self.bpki_https_cert and not self.bpki_https_cert.empty(): + self.make_b64elt(elt, "bpki_https_cert", self.bpki_https_cert.get_DER()) + if self.bpki_https_glue and not self.bpki_https_glue.empty(): + self.make_b64elt(elt, "bpki_https_glue", self.bpki_https_glue.get_DER()) return elt def query_up_down(self, q_pdu): @@ -619,13 +634,16 @@ class parent_elt(data_elt): recipient = self.recipient_name) q_cms = rpki.up_down.cms_msg.wrap(q_msg, bsc.private_key_id, bsc.signing_cert) - der = rpki.https.client(server_ta = self.peer_biz_cert, + assert self.self().bpki_cert is not None + assert self.bpki_https_cert is not None + + der = rpki.https.client(server_ta = (self.gctx.bpki_ta, self.self().bpki_cert, self.bpki_https_cert), client_key = bsc.private_key_id, client_cert = bsc.signing_cert, msg = q_cms, url = self.peer_contact_uri) - r_msg = rpki.up_down.cms_msg.unwrap(der, self.peer_biz_cert) + r_msg = rpki.up_down.cms_msg.unwrap(der, (self.gctx.bpki_ta, self.self().bpki_cert, self.bpki_cms_cert)) r_msg.payload.check_response() return r_msg @@ -635,13 +653,15 @@ class child_elt(data_elt): element_name = "child" attributes = ("action", "type", "tag", "self_id", "child_id", "bsc_id") - elements = ("peer_biz_cert", "peer_biz_glue") + elements = ("bpki_cert", "bpki_glue") booleans = ("reissue", ) - sql_template = rpki.sql.template("child", "child_id", "self_id", "bsc_id", ("peer_biz_cert", rpki.x509.X509)) + sql_template = rpki.sql.template("child", "child_id", "self_id", "bsc_id", + ("bpki_cert", rpki.x509.X509), + ("bpki_glue", rpki.x509.X509)) - peer_biz_cert = None - peer_biz_glue = None + bpki_cert = None + bpki_glue = None clear_https_ta_cache = False def child_certs(self, ca_detail = None, ski = None, unique = False): @@ -671,17 +691,17 @@ class child_elt(data_elt): def startElement(self, stack, name, attrs): """Handle <child/> element.""" - if name not in ("peer_biz_cert", "peer_biz_glue"): + if name not in ("bpki_cert", "bpki_glue"): assert name == "child", "Unexpected name %s, stack %s" % (name, stack) self.read_attrs(attrs) def endElement(self, stack, name, text): """Handle <child/> element.""" - if name == "peer_biz_cert": - self.peer_biz_cert = rpki.x509.X509(Base64 = text) + if name == "bpki_cert": + self.bpki_cert = rpki.x509.X509(Base64 = text) self.clear_https_ta_cache = True - elif name == "peer_biz_glue": - self.peer_biz_glue = rpki.x509.X509(Base64 = text) + elif name == "bpki_glue": + self.bpki_glue = rpki.x509.X509(Base64 = text) self.clear_https_ta_cache = True else: assert name == "child", "Unexpected name %s, stack %s" % (name, stack) @@ -690,10 +710,10 @@ class child_elt(data_elt): def toXML(self): """Generate <child/> element.""" elt = self.make_elt() - if self.peer_biz_cert and not self.peer_biz_cert.empty(): - self.make_b64elt(elt, "peer_biz_cert", self.peer_biz_cert.get_DER()) - if self.peer_biz_glue and not self.peer_biz_glue.empty(): - self.make_b64elt(elt, "peer_biz_glue", self.peer_biz_glue.get_DER()) + if self.bpki_cert and not self.bpki_cert.empty(): + self.make_b64elt(elt, "bpki_cert", self.bpki_cert.get_DER()) + if self.bpki_glue and not self.bpki_glue.empty(): + self.make_b64elt(elt, "bpki_glue", self.bpki_glue.get_DER()) return elt def serve_up_down(self, query): @@ -704,7 +724,7 @@ class child_elt(data_elt): bsc = self.bsc() if bsc is None: raise rpki.exceptions.BSCNotFound, "Could not find BSC %s" % self.bsc_id - q_msg = rpki.up_down.cms_msg.unwrap(query, self.peer_biz_cert) + q_msg = rpki.up_down.cms_msg.unwrap(query, (self.gctx.bpki_ta, self.self().bpki_cert, self.bpki_cert)) q_msg.payload.gctx = self.gctx if enforce_strict_up_down_xml_sender and q_msg.sender != str(self.child_id): raise rpki.exceptions.BadSender, "Unexpected XML sender %s" % q_msg.sender @@ -726,14 +746,16 @@ class repository_elt(data_elt): element_name = "repository" attributes = ("action", "type", "tag", "self_id", "repository_id", "bsc_id", "peer_contact_uri") - elements = ("peer_biz_cert", "peer_biz_glue") + elements = ("bpki_cms_cert", "bpki_cms_glue", "bpki_https_cert", "bpki_https_glue") - sql_template = rpki.sql.template("repository", "repository_id", "self_id", "bsc_id", - ("peer_biz_cert", rpki.x509.X509), "peer_contact_uri", - ("peer_biz_glue", rpki.x509.X509)) + sql_template = rpki.sql.template("repository", "repository_id", "self_id", "bsc_id", "peer_contact_uri", + ("bpki_cms_cert", rpki.x509.X509), ("bpki_cms_glue", rpki.x509.X509), + ("bpki_https_cert", rpki.x509.X509), ("bpki_https_glue", rpki.x509.X509)) - peer_biz_cert = None - peer_biz_glue = None + bpki_cms_cert = None + bpki_cms_glue = None + bpki_https_cert = None + bpki_https_glue = None def parents(self): """Fetch all parent objects that link to this repository object.""" @@ -741,16 +763,20 @@ class repository_elt(data_elt): def startElement(self, stack, name, attrs): """Handle <repository/> element.""" - if name not in ("peer_biz_cert", "peer_biz_glue"): + if name not in ("bpki_cms_cert", "bpki_cms_glue", "bpki_https_cert", "bpki_https_glue"): assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) self.read_attrs(attrs) def endElement(self, stack, name, text): """Handle <repository/> element.""" - if name == "peer_biz_cert": - self.peer_biz_cert = rpki.x509.X509(Base64 = text) - elif name == "peer_biz_glue": - self.peer_biz_glue = rpki.x509.X509(Base64 = text) + if name == "bpki_cms_cert": + self.bpki_cms_cert = rpki.x509.X509(Base64 = text) + elif name == "bpki_cms_glue": + self.bpki_cms_glue = rpki.x509.X509(Base64 = text) + elif name == "bpki_https_cert": + self.bpki_https_cert = rpki.x509.X509(Base64 = text) + elif name == "bpki_https_glue": + self.bpki_https_glue = rpki.x509.X509(Base64 = text) else: assert name == "repository", "Unexpected name %s, stack %s" % (name, stack) stack.pop() @@ -758,10 +784,14 @@ class repository_elt(data_elt): def toXML(self): """Generate <repository/> element.""" elt = self.make_elt() - if self.peer_biz_cert: - self.make_b64elt(elt, "peer_biz_cert", self.peer_biz_cert.get_DER()) - if self.peer_biz_glue: - self.make_b64elt(elt, "peer_biz_glue", self.peer_biz_glue.get_DER()) + if self.bpki_cms_cert: + self.make_b64elt(elt, "bpki_cms_cert", self.bpki_cms_cert.get_DER()) + if self.bpki_cms_glue: + self.make_b64elt(elt, "bpki_cms_glue", self.bpki_cms_glue.get_DER()) + if self.bpki_https_cert: + self.make_b64elt(elt, "bpki_https_cert", self.bpki_https_cert.get_DER()) + if self.bpki_https_glue: + self.make_b64elt(elt, "bpki_https_glue", self.bpki_https_glue.get_DER()) return elt @staticmethod |