aboutsummaryrefslogtreecommitdiff
path: root/rpkid.with_tls/rpki/roa.py
diff options
context:
space:
mode:
Diffstat (limited to 'rpkid.with_tls/rpki/roa.py')
-rw-r--r--rpkid.with_tls/rpki/roa.py76
1 files changed, 76 insertions, 0 deletions
diff --git a/rpkid.with_tls/rpki/roa.py b/rpkid.with_tls/rpki/roa.py
new file mode 100644
index 00000000..9f7c1849
--- /dev/null
+++ b/rpkid.with_tls/rpki/roa.py
@@ -0,0 +1,76 @@
+"""
+ROA (Route Origin Authorization).
+
+At the moment this is just the ASN.1 encoder.
+
+This corresponds to draft-ietf-sidr-roa-format, which is a work in
+progress, so this may need updating later.
+
+$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.
+
+draft-ietf-sidr-roa-format-03 2.1.3.2 specifies:
+
+ RouteOriginAttestation ::= SEQUENCE {
+ version [0] INTEGER DEFAULT 0,
+ asID ASID,
+ ipAddrBlocks SEQUENCE OF ROAIPAddressFamily }
+
+ ASID ::= INTEGER
+
+ ROAIPAddressFamily ::= SEQUENCE {
+ addressFamily OCTET STRING (SIZE (2..3)),
+ addresses SEQUENCE OF ROAIPAddress }
+
+ ROAIPAddress ::= SEQUENCE {
+ address IPAddress,
+ maxLength INTEGER OPTIONAL }
+
+ IPAddress ::= BIT STRING
+"""
+
+from POW._der import *
+
+class ROAIPAddress(Sequence):
+ def __init__(self, optional=0, default=''):
+ self.address = BitString()
+ self.maxLength = Integer(1)
+ contents = [ self.address, self.maxLength ]
+ Sequence.__init__(self, contents, optional, default)
+
+class ROAIPAddresses(SequenceOf):
+ def __init__(self, optional=0, default=''):
+ SequenceOf.__init__(self, ROAIPAddress, optional, default)
+
+class ROAIPAddressFamily(Sequence):
+ def __init__(self, optional=0, default=''):
+ self.addressFamily = OctetString()
+ self.addresses = ROAIPAddresses()
+ contents = [ self.addressFamily, self.addresses ]
+ Sequence.__init__(self, contents, optional, default)
+
+class ROAIPAddressFamilies(SequenceOf):
+ def __init__(self, optional=0, default=''):
+ SequenceOf.__init__(self, ROAIPAddressFamily, optional, default)
+
+class RouteOriginAttestation(Sequence):
+ def __init__(self, optional=0, default=''):
+ self.version = Integer()
+ self.explicitVersion = Explicit(CLASS_CONTEXT, FORM_CONSTRUCTED, 0, self.version, 0, 'oAMCAQA=')
+ self.asID = Integer()
+ self.ipAddrBlocks = ROAIPAddressFamilies()
+ contents = [ self.explicitVersion, self.asID, self.ipAddrBlocks ]
+ Sequence.__init__(self, contents, optional, default)