Example #1
0
 def test_control(self):
     self.assertEqual(
         list(StringParser(escape_chars=";").parse(r"foo;bar")), [(0, "f"),
                                                                  (0, "o"),
                                                                  (0, "o"),
                                                                  (1, ";"),
                                                                  (0, "b"),
                                                                  (0, "a"),
                                                                  (0, "r")])
Example #2
0
 def test_split_recombine_escaped_meta_reassemble(self):
     sp = StringParser(escape_chars=";+")
     sstr = sp.split("f\\+o;bar", control_char=";", reassemble=True)
     self.assertEqual(len(sstr), 2)
     self.assertEqual(sstr[0], "f\\+o")
     self.assertEqual(sstr[1], "bar")
Example #3
0
 def test_split_recombine_meta(self):
     sp = StringParser(escape_chars=";+")
     sstr = sp.split("f+o;bar", control_char=";")
     self.assertEqual(len(sstr), 2)
     self.assertEqual(sp.escape(sstr[0]), "f+o")
     self.assertEqual(sp.escape(sstr[1]), "bar")
Example #4
0
 def test_split_escaped_meta(self):
     sstr = StringParser(escape_chars=";+").split("f\\+o;bar",
                                                  control_char=";")
     self.assertEqual(len(sstr), 2)
     self.assertEqual(sstr[0], [(0, "f"), (0, "+"), (0, "o")])
     self.assertEqual(sstr[1], [(0, "b"), (0, "a"), (0, "r")])
Example #5
0
 def test_no_escape_expected(self):
     with self.assertRaises(StringParseException):
         list(StringParser(escape_chars=";").parse(r"foo\bar"))
Example #6
0
 def test_end_of_string(self):
     with self.assertRaises(StringParseException):
         list(StringParser(escape_chars=";").parse("foo;bar\\"))
Example #7
0
 def test_unescaped(self):
     self.assertEqual(list(StringParser(escape_chars=";").parse("foo")),
                      [(0, "f"), (0, "o"), (0, "o")])
Example #8
0
#	along with x509sak; if not, write to the Free Software
#	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#
#	Johannes Bauer <*****@*****.**>

import collections
import pyasn1.error
import pyasn1.type.char
import pyasn1.codec.der.encoder
import pyasn1.codec.der.decoder
from pyasn1.type.char import UTF8String
from x509sak.OID import OID, OIDDB
from x509sak.Exceptions import InvalidInputException
from x509sak.StringParser import StringParser

_RFC2253_StringParser = StringParser(escape_chars="\\+\"<>;,=")


class RelativeDistinguishedName():
    _RDNItem = collections.namedtuple("RDNItem", [
        "oid", "derdata", "asn1", "decodable", "printable", "printable_value"
    ])

    def __init__(self, rdn_list):
        assert (isinstance(rdn_list, (tuple, list)))
        assert (all(isinstance(value[0], OID) for value in rdn_list))
        assert (all(isinstance(value[1], bytes) for value in rdn_list))
        if len(rdn_list) == 0:
            raise InvalidInputException("Empty RDN is not permitted.")
        self._rdn_list = tuple(
            self._decode_item(oid, derdata) for (oid, derdata) in rdn_list)