aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--myrpki.rototill/Makefile7
-rw-r--r--myrpki.rototill/myrpki.py4
-rw-r--r--myrpki.rototill/myrpki.rnc126
-rw-r--r--myrpki.rototill/myrpki.rng322
4 files changed, 348 insertions, 111 deletions
diff --git a/myrpki.rototill/Makefile b/myrpki.rototill/Makefile
index a8306e30..12c7e940 100644
--- a/myrpki.rototill/Makefile
+++ b/myrpki.rototill/Makefile
@@ -2,6 +2,9 @@
all: myrpki.rng
+relaxng: myrpki.rng
+ xmllint --noout --relaxng myrpki.rng `find test -type f -name '*.xml'`
+
lint: myrpki.xml myrpki.rng
xmllint --noout --relaxng myrpki.rng myrpki.xml
@@ -29,5 +32,5 @@ backup:
tar cvvzf test.$$(TZ='' date +%Y.%m.%d.%H.%M.%S).tgz screenlog.* test backup.*.sql
rm backup.*.sql
-test: all
- python yamltest.py
+test: myrpki.rng
+ MYRPKI_RNG=`pwd`/myrpki.rng python yamltest.py
diff --git a/myrpki.rototill/myrpki.py b/myrpki.rototill/myrpki.py
index c84a520b..ff0a7582 100644
--- a/myrpki.rototill/myrpki.py
+++ b/myrpki.rototill/myrpki.py
@@ -749,7 +749,7 @@ def etree_validate(e):
print lxml.etree.tostring(e, pretty_print = True)
raise
-def etree_write(e, filename, verbose = True, validate = False):
+def etree_write(e, filename, verbose = True, validate = True):
"""
Write out an etree to a file, safely.
@@ -769,7 +769,7 @@ def etree_write(e, filename, verbose = True, validate = False):
ElementTree(e).write(filename + ".tmp")
os.rename(filename + ".tmp", filename)
-def etree_read(filename, verbose = False, validate = False):
+def etree_read(filename, verbose = True, validate = True):
"""
Read an etree from a file, verifying then stripping XML namespace
cruft.
diff --git a/myrpki.rototill/myrpki.rnc b/myrpki.rototill/myrpki.rnc
index 29db7a67..feb3cf0f 100644
--- a/myrpki.rototill/myrpki.rnc
+++ b/myrpki.rototill/myrpki.rnc
@@ -7,6 +7,8 @@
default namespace = "http://www.hactrn.net/uris/rpki/myrpki/"
+version = "2"
+
base64 = xsd:base64Binary { maxLength="512000" }
object_handle = xsd:string { maxLength="255" pattern="[\-_A-Za-z0-9]*" }
pubd_handle = xsd:string { maxLength="255" pattern="[\-_A-Za-z0-9/]*" }
@@ -15,54 +17,108 @@ asn_list = xsd:string { maxLength="512000" pattern="[\-,0-9]*" }
ipv4_list = xsd:string { maxLength="512000" pattern="[\-,0-9/.]*" }
ipv6_list = xsd:string { maxLength="512000" pattern="[\-,0-9/:a-fA-F]*" }
-start = element myrpki {
- attribute version { "2" },
+start |= myrpki_pdu
+start |= identity_pdu
+start |= parent_pdu
+start |= repository_pdu
+
+myrpki_pdu = element myrpki {
+ attribute version { version },
attribute handle { object_handle },
- roa_request_elt*,
- child_elt*,
- parent_elt*,
- repository_elt*,
- bpki_ca_certificate_elt?,
- bpki_crl_elt?,
- bpki_bsc_certificate_elt?,
- bpki_bsc_pkcs10_elt?
+ element roa_request {
+ attribute asn { xsd:positiveInteger },
+ attribute v4 { ipv4_list },
+ attribute v6 { ipv6_list }
+ }*,
+ element child {
+ attribute handle { object_handle },
+ attribute valid_until { xsd:dateTime { pattern=".*Z" } },
+ attribute asns { asn_list }?,
+ attribute v4 { ipv4_list }?,
+ attribute v6 { ipv6_list }?,
+ element bpki_certificate { base64 }?
+ }*,
+ element parent {
+ attribute handle { object_handle },
+ attribute service_uri { uri }?,
+ attribute myhandle { object_handle }?,
+ attribute sia_base { uri }?,
+ element bpki_cms_certificate { base64 }?,
+ element bpki_https_certificate { base64 }?
+ }*,
+ element repository {
+ attribute handle { object_handle },
+ attribute service_uri { uri }?,
+ element bpki_certificate { base64 }?
+ }*,
+ element bpki_ca_certificate { base64 }?,
+ element bpki_crl { base64 }?,
+ element bpki_bsc_certificate { base64 }?,
+ element bpki_bsc_pkcs10 { base64 }?
}
-roa_request_elt = element roa_request {
- attribute asn { xsd:positiveInteger },
- attribute v4 { ipv4_list },
- attribute v6 { ipv6_list }
+identity_pdu = element identity {
+ attribute version { version },
+ attribute handle { object_handle },
+ element bpki_ta { base64 }
}
-child_elt = element child {
- attribute handle { object_handle },
+parent_pdu = element parent {
+ attribute version { version },
attribute valid_until { xsd:dateTime { pattern=".*Z" } },
- attribute asns { asn_list }?,
- attribute v4 { ipv4_list }?,
- attribute v6 { ipv6_list }?,
- element bpki_certificate { base64 }?
+ attribute service_uri { uri }?,
+ attribute child_handle { object_handle },
+ attribute parent_handle { object_handle },
+ element bpki_resource_ta { base64 }?,
+ element bpki_server_ta { base64 }?,
+ element bpki_child_ta { base64 }?,
+ element repository {
+ ((attribute type { "offer" }) |
+ (attribute type { "hint" },
+ attribute proposed_sia_base { uri },
+ element contact_info { xsd:string }))
+ }?
}
-parent_elt = element parent {
- attribute handle { object_handle },
- attribute service_uri { uri }?,
- attribute myhandle { object_handle }?,
- attribute sia_base { uri }?,
- element bpki_cms_certificate { base64 }?,
- element bpki_https_certificate { base64 }?
+repository_pdu |= element repository {
+ attribute version { version },
+ attribute type { "confirmed" },
+ attribute parent_handle { object_handle },
+ attribute client_handle { pubd_handle },
+ attribute service_uri { uri },
+ attribute sia_base { uri },
+ attribute repository_handle { object_handle },
+ element bpki_server_ta { base64 }?,
+ element bpki_client_ta { base64 }?,
+ element contact_info { xsd:string }?
}
-repository_elt = element repository {
- attribute handle { object_handle },
- attribute service_uri { uri }?,
- element bpki_certificate { base64 }?
+repository_pdu |= element repository {
+ attribute version { version },
+ attribute type { "request" },
+ attribute handle { pubd_handle },
+ attribute parent_handle { object_handle },
+ element contact_info { xsd:string }?,
+ element bpki_ta { base64 }?
}
-bpki_ca_certificate_elt = element bpki_ca_certificate { base64 }
-bpki_crl_elt = element bpki_crl { base64 }
+repository_pdu |= element repository {
+ attribute version { version },
+ attribute type { "offer" },
+ attribute handle { pubd_handle },
+ attribute parent_handle { object_handle },
+ element bpki_ta { base64 }?
+}
-bpki_bsc_certificate_elt = element bpki_bsc_certificate { base64 }
-bpki_bsc_pkcs10_elt = element bpki_bsc_pkcs10 { base64 }
+repository_pdu |= element repository {
+ attribute version { version },
+ attribute type { "hint" },
+ attribute handle { pubd_handle },
+ attribute parent_handle { object_handle },
+ attribute proposed_sia_base { uri },
+ element contact_info { xsd:string }?,
+ element bpki_ta { base64 }?
+}
# Local Variables:
# indent-tabs-mode: nil
diff --git a/myrpki.rototill/myrpki.rng b/myrpki.rototill/myrpki.rng
index 1fa2cd86..2202f4d2 100644
--- a/myrpki.rototill/myrpki.rng
+++ b/myrpki.rototill/myrpki.rng
@@ -8,6 +8,9 @@
run the compact syntax through trang to get XML syntax.
-->
<grammar ns="http://www.hactrn.net/uris/rpki/myrpki/" xmlns="http://relaxng.org/ns/structure/1.0" datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
+ <define name="version">
+ <value>2</value>
+ </define>
<define name="base64">
<data type="base64Binary">
<param name="maxLength">512000</param>
@@ -48,57 +51,159 @@
<param name="pattern">[\-,0-9/:a-fA-F]*</param>
</data>
</define>
- <start>
+ <start combine="choice">
+ <ref name="myrpki_pdu"/>
+ </start>
+ <start combine="choice">
+ <ref name="identity_pdu"/>
+ </start>
+ <start combine="choice">
+ <ref name="parent_pdu"/>
+ </start>
+ <start combine="choice">
+ <ref name="repository_pdu"/>
+ </start>
+ <define name="myrpki_pdu">
<element name="myrpki">
<attribute name="version">
- <value>2</value>
+ <ref name="version"/>
</attribute>
<attribute name="handle">
<ref name="object_handle"/>
</attribute>
<zeroOrMore>
- <ref name="roa_request_elt"/>
+ <element name="roa_request">
+ <attribute name="asn">
+ <data type="positiveInteger"/>
+ </attribute>
+ <attribute name="v4">
+ <ref name="ipv4_list"/>
+ </attribute>
+ <attribute name="v6">
+ <ref name="ipv6_list"/>
+ </attribute>
+ </element>
</zeroOrMore>
<zeroOrMore>
- <ref name="child_elt"/>
+ <element name="child">
+ <attribute name="handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <attribute name="valid_until">
+ <data type="dateTime">
+ <param name="pattern">.*Z</param>
+ </data>
+ </attribute>
+ <optional>
+ <attribute name="asns">
+ <ref name="asn_list"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="v4">
+ <ref name="ipv4_list"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="v6">
+ <ref name="ipv6_list"/>
+ </attribute>
+ </optional>
+ <optional>
+ <element name="bpki_certificate">
+ <ref name="base64"/>
+ </element>
+ </optional>
+ </element>
</zeroOrMore>
<zeroOrMore>
- <ref name="parent_elt"/>
+ <element name="parent">
+ <attribute name="handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <optional>
+ <attribute name="service_uri">
+ <ref name="uri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="myhandle">
+ <ref name="object_handle"/>
+ </attribute>
+ </optional>
+ <optional>
+ <attribute name="sia_base">
+ <ref name="uri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <element name="bpki_cms_certificate">
+ <ref name="base64"/>
+ </element>
+ </optional>
+ <optional>
+ <element name="bpki_https_certificate">
+ <ref name="base64"/>
+ </element>
+ </optional>
+ </element>
</zeroOrMore>
<zeroOrMore>
- <ref name="repository_elt"/>
+ <element name="repository">
+ <attribute name="handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <optional>
+ <attribute name="service_uri">
+ <ref name="uri"/>
+ </attribute>
+ </optional>
+ <optional>
+ <element name="bpki_certificate">
+ <ref name="base64"/>
+ </element>
+ </optional>
+ </element>
</zeroOrMore>
<optional>
- <ref name="bpki_ca_certificate_elt"/>
+ <element name="bpki_ca_certificate">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <ref name="bpki_crl_elt"/>
+ <element name="bpki_crl">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <ref name="bpki_bsc_certificate_elt"/>
+ <element name="bpki_bsc_certificate">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <ref name="bpki_bsc_pkcs10_elt"/>
+ <element name="bpki_bsc_pkcs10">
+ <ref name="base64"/>
+ </element>
</optional>
</element>
- </start>
- <define name="roa_request_elt">
- <element name="roa_request">
- <attribute name="asn">
- <data type="positiveInteger"/>
- </attribute>
- <attribute name="v4">
- <ref name="ipv4_list"/>
+ </define>
+ <define name="identity_pdu">
+ <element name="identity">
+ <attribute name="version">
+ <ref name="version"/>
</attribute>
- <attribute name="v6">
- <ref name="ipv6_list"/>
+ <attribute name="handle">
+ <ref name="object_handle"/>
</attribute>
+ <element name="bpki_ta">
+ <ref name="base64"/>
+ </element>
</element>
</define>
- <define name="child_elt">
- <element name="child">
- <attribute name="handle">
- <ref name="object_handle"/>
+ <define name="parent_pdu">
+ <element name="parent">
+ <attribute name="version">
+ <ref name="version"/>
</attribute>
<attribute name="valid_until">
<data type="dateTime">
@@ -106,96 +211,169 @@
</data>
</attribute>
<optional>
- <attribute name="asns">
- <ref name="asn_list"/>
+ <attribute name="service_uri">
+ <ref name="uri"/>
</attribute>
</optional>
+ <attribute name="child_handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <attribute name="parent_handle">
+ <ref name="object_handle"/>
+ </attribute>
<optional>
- <attribute name="v4">
- <ref name="ipv4_list"/>
- </attribute>
+ <element name="bpki_resource_ta">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <attribute name="v6">
- <ref name="ipv6_list"/>
- </attribute>
+ <element name="bpki_server_ta">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <element name="bpki_certificate">
+ <element name="bpki_child_ta">
<ref name="base64"/>
</element>
</optional>
+ <optional>
+ <element name="repository">
+ <choice>
+ <attribute name="type">
+ <value>offer</value>
+ </attribute>
+ <group>
+ <attribute name="type">
+ <value>hint</value>
+ </attribute>
+ <attribute name="proposed_sia_base">
+ <ref name="uri"/>
+ </attribute>
+ <element name="contact_info">
+ <data type="string"/>
+ </element>
+ </group>
+ </choice>
+ </element>
+ </optional>
</element>
</define>
- <define name="parent_elt">
- <element name="parent">
- <attribute name="handle">
+ <define name="repository_pdu" combine="choice">
+ <element name="repository">
+ <attribute name="version">
+ <ref name="version"/>
+ </attribute>
+ <attribute name="type">
+ <value>confirmed</value>
+ </attribute>
+ <attribute name="parent_handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <attribute name="client_handle">
+ <ref name="pubd_handle"/>
+ </attribute>
+ <attribute name="service_uri">
+ <ref name="uri"/>
+ </attribute>
+ <attribute name="sia_base">
+ <ref name="uri"/>
+ </attribute>
+ <attribute name="repository_handle">
<ref name="object_handle"/>
</attribute>
<optional>
- <attribute name="service_uri">
- <ref name="uri"/>
- </attribute>
+ <element name="bpki_server_ta">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <attribute name="myhandle">
- <ref name="object_handle"/>
- </attribute>
+ <element name="bpki_client_ta">
+ <ref name="base64"/>
+ </element>
</optional>
<optional>
- <attribute name="sia_base">
- <ref name="uri"/>
- </attribute>
+ <element name="contact_info">
+ <data type="string"/>
+ </element>
+ </optional>
+ </element>
+ </define>
+ <define name="repository_pdu" combine="choice">
+ <element name="repository">
+ <attribute name="version">
+ <ref name="version"/>
+ </attribute>
+ <attribute name="type">
+ <value>request</value>
+ </attribute>
+ <attribute name="handle">
+ <ref name="pubd_handle"/>
+ </attribute>
+ <attribute name="parent_handle">
+ <ref name="object_handle"/>
+ </attribute>
+ <optional>
+ <element name="contact_info">
+ <data type="string"/>
+ </element>
</optional>
<optional>
- <element name="bpki_cms_certificate">
+ <element name="bpki_ta">
<ref name="base64"/>
</element>
</optional>
+ </element>
+ </define>
+ <define name="repository_pdu" combine="choice">
+ <element name="repository">
+ <attribute name="version">
+ <ref name="version"/>
+ </attribute>
+ <attribute name="type">
+ <value>offer</value>
+ </attribute>
+ <attribute name="handle">
+ <ref name="pubd_handle"/>
+ </attribute>
+ <attribute name="parent_handle">
+ <ref name="object_handle"/>
+ </attribute>
<optional>
- <element name="bpki_https_certificate">
+ <element name="bpki_ta">
<ref name="base64"/>
</element>
</optional>
</element>
</define>
- <define name="repository_elt">
+ <define name="repository_pdu" combine="choice">
<element name="repository">
+ <attribute name="version">
+ <ref name="version"/>
+ </attribute>
+ <attribute name="type">
+ <value>hint</value>
+ </attribute>
<attribute name="handle">
+ <ref name="pubd_handle"/>
+ </attribute>
+ <attribute name="parent_handle">
<ref name="object_handle"/>
</attribute>
+ <attribute name="proposed_sia_base">
+ <ref name="uri"/>
+ </attribute>
<optional>
- <attribute name="service_uri">
- <ref name="uri"/>
- </attribute>
+ <element name="contact_info">
+ <data type="string"/>
+ </element>
</optional>
<optional>
- <element name="bpki_certificate">
+ <element name="bpki_ta">
<ref name="base64"/>
</element>
</optional>
</element>
</define>
- <define name="bpki_ca_certificate_elt">
- <element name="bpki_ca_certificate">
- <ref name="base64"/>
- </element>
- </define>
- <define name="bpki_crl_elt">
- <element name="bpki_crl">
- <ref name="base64"/>
- </element>
- </define>
- <define name="bpki_bsc_certificate_elt">
- <element name="bpki_bsc_certificate">
- <ref name="base64"/>
- </element>
- </define>
- <define name="bpki_bsc_pkcs10_elt">
- <element name="bpki_bsc_pkcs10">
- <ref name="base64"/>
- </element>
- </define>
</grammar>
<!--
Local Variables: