mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-07-17 01:32:37 +02:00
Remove redundant Python 2 code (#493)
Co-authored-by: Kelly Brazil <kellyjonbrazil@gmail.com>
This commit is contained in:
committed by
GitHub
parent
d5a8b4eed2
commit
1b1bc46222
@ -45,10 +45,6 @@ __version_info__ = tuple(int(segment) for segment in __version__.split("."))
|
|||||||
import sys
|
import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
PY3 = sys.version_info[0] == 3
|
|
||||||
|
|
||||||
if PY3:
|
|
||||||
unicode = str
|
|
||||||
|
|
||||||
if sys.platform.startswith('java'):
|
if sys.platform.startswith('java'):
|
||||||
import platform
|
import platform
|
||||||
@ -490,10 +486,7 @@ def _get_win_folder_from_registry(csidl_name):
|
|||||||
registry for this guarantees us the correct answer for all CSIDL_*
|
registry for this guarantees us the correct answer for all CSIDL_*
|
||||||
names.
|
names.
|
||||||
"""
|
"""
|
||||||
if PY3:
|
|
||||||
import winreg as _winreg
|
import winreg as _winreg
|
||||||
else:
|
|
||||||
import _winreg
|
|
||||||
|
|
||||||
shell_folder_name = {
|
shell_folder_name = {
|
||||||
"CSIDL_APPDATA": "AppData",
|
"CSIDL_APPDATA": "AppData",
|
||||||
|
@ -5,7 +5,7 @@ import socket
|
|||||||
import struct
|
import struct
|
||||||
|
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._types import byte_cls, bytes_to_list, str_cls, type_name
|
from ._types import type_name
|
||||||
|
|
||||||
|
|
||||||
def inet_ntop(address_family, packed_ip):
|
def inet_ntop(address_family, packed_ip):
|
||||||
@ -33,7 +33,7 @@ def inet_ntop(address_family, packed_ip):
|
|||||||
repr(address_family)
|
repr(address_family)
|
||||||
))
|
))
|
||||||
|
|
||||||
if not isinstance(packed_ip, byte_cls):
|
if not isinstance(packed_ip, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
packed_ip must be a byte string, not %s
|
packed_ip must be a byte string, not %s
|
||||||
@ -52,7 +52,7 @@ def inet_ntop(address_family, packed_ip):
|
|||||||
))
|
))
|
||||||
|
|
||||||
if address_family == socket.AF_INET:
|
if address_family == socket.AF_INET:
|
||||||
return '%d.%d.%d.%d' % tuple(bytes_to_list(packed_ip))
|
return '%d.%d.%d.%d' % tuple(list(packed_ip))
|
||||||
|
|
||||||
octets = struct.unpack(b'!HHHHHHHH', packed_ip)
|
octets = struct.unpack(b'!HHHHHHHH', packed_ip)
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ def inet_pton(address_family, ip_string):
|
|||||||
repr(address_family)
|
repr(address_family)
|
||||||
))
|
))
|
||||||
|
|
||||||
if not isinstance(ip_string, str_cls):
|
if not isinstance(ip_string, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
ip_string must be a unicode string, not %s
|
ip_string must be a unicode string, not %s
|
||||||
|
@ -13,25 +13,16 @@ from __future__ import unicode_literals, division, absolute_import, print_functi
|
|||||||
from encodings import idna # noqa
|
from encodings import idna # noqa
|
||||||
import codecs
|
import codecs
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
|
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._types import byte_cls, str_cls, type_name, bytes_to_list, int_types
|
from ._types import type_name
|
||||||
|
|
||||||
if sys.version_info < (3,):
|
from urllib.parse import (
|
||||||
from urlparse import urlsplit, urlunsplit
|
|
||||||
from urllib import (
|
|
||||||
quote as urlquote,
|
|
||||||
unquote as unquote_to_bytes,
|
|
||||||
)
|
|
||||||
|
|
||||||
else:
|
|
||||||
from urllib.parse import (
|
|
||||||
quote as urlquote,
|
quote as urlquote,
|
||||||
unquote_to_bytes,
|
unquote_to_bytes,
|
||||||
urlsplit,
|
urlsplit,
|
||||||
urlunsplit,
|
urlunsplit,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
def iri_to_uri(value, normalize=False):
|
def iri_to_uri(value, normalize=False):
|
||||||
@ -48,7 +39,7 @@ def iri_to_uri(value, normalize=False):
|
|||||||
A byte string of the ASCII-encoded URI
|
A byte string of the ASCII-encoded URI
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
value must be a unicode string, not %s
|
value must be a unicode string, not %s
|
||||||
@ -57,18 +48,6 @@ def iri_to_uri(value, normalize=False):
|
|||||||
))
|
))
|
||||||
|
|
||||||
scheme = None
|
scheme = None
|
||||||
# Python 2.6 doesn't split properly is the URL doesn't start with http:// or https://
|
|
||||||
if sys.version_info < (2, 7) and not value.startswith('http://') and not value.startswith('https://'):
|
|
||||||
real_prefix = None
|
|
||||||
prefix_match = re.match('^[^:]*://', value)
|
|
||||||
if prefix_match:
|
|
||||||
real_prefix = prefix_match.group(0)
|
|
||||||
value = 'http://' + value[len(real_prefix):]
|
|
||||||
parsed = urlsplit(value)
|
|
||||||
if real_prefix:
|
|
||||||
value = real_prefix + value[7:]
|
|
||||||
scheme = _urlquote(real_prefix[:-3])
|
|
||||||
else:
|
|
||||||
parsed = urlsplit(value)
|
parsed = urlsplit(value)
|
||||||
|
|
||||||
if scheme is None:
|
if scheme is None:
|
||||||
@ -81,7 +60,7 @@ def iri_to_uri(value, normalize=False):
|
|||||||
password = _urlquote(parsed.password, safe='!$&\'()*+,;=')
|
password = _urlquote(parsed.password, safe='!$&\'()*+,;=')
|
||||||
port = parsed.port
|
port = parsed.port
|
||||||
if port is not None:
|
if port is not None:
|
||||||
port = str_cls(port).encode('ascii')
|
port = str(port).encode('ascii')
|
||||||
|
|
||||||
netloc = b''
|
netloc = b''
|
||||||
if username is not None:
|
if username is not None:
|
||||||
@ -112,7 +91,7 @@ def iri_to_uri(value, normalize=False):
|
|||||||
path = ''
|
path = ''
|
||||||
|
|
||||||
output = urlunsplit((scheme, netloc, path, query, fragment))
|
output = urlunsplit((scheme, netloc, path, query, fragment))
|
||||||
if isinstance(output, str_cls):
|
if isinstance(output, str):
|
||||||
output = output.encode('latin1')
|
output = output.encode('latin1')
|
||||||
return output
|
return output
|
||||||
|
|
||||||
@ -128,7 +107,7 @@ def uri_to_iri(value):
|
|||||||
A unicode string of the IRI
|
A unicode string of the IRI
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
value must be a byte string, not %s
|
value must be a byte string, not %s
|
||||||
@ -148,7 +127,7 @@ def uri_to_iri(value):
|
|||||||
if hostname:
|
if hostname:
|
||||||
hostname = hostname.decode('idna')
|
hostname = hostname.decode('idna')
|
||||||
port = parsed.port
|
port = parsed.port
|
||||||
if port and not isinstance(port, int_types):
|
if port and not isinstance(port, int):
|
||||||
port = port.decode('ascii')
|
port = port.decode('ascii')
|
||||||
|
|
||||||
netloc = ''
|
netloc = ''
|
||||||
@ -160,7 +139,7 @@ def uri_to_iri(value):
|
|||||||
if hostname is not None:
|
if hostname is not None:
|
||||||
netloc += hostname
|
netloc += hostname
|
||||||
if port is not None:
|
if port is not None:
|
||||||
netloc += ':' + str_cls(port)
|
netloc += ':' + str(port)
|
||||||
|
|
||||||
path = _urlunquote(parsed.path, remap=['/'], preserve=True)
|
path = _urlunquote(parsed.path, remap=['/'], preserve=True)
|
||||||
query = _urlunquote(parsed.query, remap=['&', '='], preserve=True)
|
query = _urlunquote(parsed.query, remap=['&', '='], preserve=True)
|
||||||
@ -182,7 +161,7 @@ def _iri_utf8_errors_handler(exc):
|
|||||||
resume at)
|
resume at)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
bytes_as_ints = bytes_to_list(exc.object[exc.start:exc.end])
|
bytes_as_ints = list(exc.object[exc.start:exc.end])
|
||||||
replacements = ['%%%02x' % num for num in bytes_as_ints]
|
replacements = ['%%%02x' % num for num in bytes_as_ints]
|
||||||
return (''.join(replacements), exc.end)
|
return (''.join(replacements), exc.end)
|
||||||
|
|
||||||
@ -230,7 +209,7 @@ def _urlquote(string, safe=''):
|
|||||||
string = re.sub('%[0-9a-fA-F]{2}', _extract_escape, string)
|
string = re.sub('%[0-9a-fA-F]{2}', _extract_escape, string)
|
||||||
|
|
||||||
output = urlquote(string.encode('utf-8'), safe=safe.encode('utf-8'))
|
output = urlquote(string.encode('utf-8'), safe=safe.encode('utf-8'))
|
||||||
if not isinstance(output, byte_cls):
|
if not isinstance(output, bytes):
|
||||||
output = output.encode('ascii')
|
output = output.encode('ascii')
|
||||||
|
|
||||||
# Restore the existing quoted values that we extracted
|
# Restore the existing quoted values that we extracted
|
||||||
|
@ -1,135 +0,0 @@
|
|||||||
# Copyright (c) 2009 Raymond Hettinger
|
|
||||||
#
|
|
||||||
# Permission is hereby granted, free of charge, to any person
|
|
||||||
# obtaining a copy of this software and associated documentation files
|
|
||||||
# (the "Software"), to deal in the Software without restriction,
|
|
||||||
# including without limitation the rights to use, copy, modify, merge,
|
|
||||||
# publish, distribute, sublicense, and/or sell copies of the Software,
|
|
||||||
# and to permit persons to whom the Software is furnished to do so,
|
|
||||||
# subject to the following conditions:
|
|
||||||
#
|
|
||||||
# The above copyright notice and this permission notice shall be
|
|
||||||
# included in all copies or substantial portions of the Software.
|
|
||||||
#
|
|
||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
||||||
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
|
||||||
# OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
||||||
# NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
|
||||||
# HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
|
||||||
# WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
||||||
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
|
||||||
# OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
|
|
||||||
import sys
|
|
||||||
|
|
||||||
if not sys.version_info < (2, 7):
|
|
||||||
|
|
||||||
from collections import OrderedDict
|
|
||||||
|
|
||||||
else:
|
|
||||||
|
|
||||||
from UserDict import DictMixin
|
|
||||||
|
|
||||||
class OrderedDict(dict, DictMixin):
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwds):
|
|
||||||
if len(args) > 1:
|
|
||||||
raise TypeError('expected at most 1 arguments, got %d' % len(args))
|
|
||||||
try:
|
|
||||||
self.__end
|
|
||||||
except AttributeError:
|
|
||||||
self.clear()
|
|
||||||
self.update(*args, **kwds)
|
|
||||||
|
|
||||||
def clear(self):
|
|
||||||
self.__end = end = []
|
|
||||||
end += [None, end, end] # sentinel node for doubly linked list
|
|
||||||
self.__map = {} # key --> [key, prev, next]
|
|
||||||
dict.clear(self)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
if key not in self:
|
|
||||||
end = self.__end
|
|
||||||
curr = end[1]
|
|
||||||
curr[2] = end[1] = self.__map[key] = [key, curr, end]
|
|
||||||
dict.__setitem__(self, key, value)
|
|
||||||
|
|
||||||
def __delitem__(self, key):
|
|
||||||
dict.__delitem__(self, key)
|
|
||||||
key, prev, next_ = self.__map.pop(key)
|
|
||||||
prev[2] = next_
|
|
||||||
next_[1] = prev
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
end = self.__end
|
|
||||||
curr = end[2]
|
|
||||||
while curr is not end:
|
|
||||||
yield curr[0]
|
|
||||||
curr = curr[2]
|
|
||||||
|
|
||||||
def __reversed__(self):
|
|
||||||
end = self.__end
|
|
||||||
curr = end[1]
|
|
||||||
while curr is not end:
|
|
||||||
yield curr[0]
|
|
||||||
curr = curr[1]
|
|
||||||
|
|
||||||
def popitem(self, last=True):
|
|
||||||
if not self:
|
|
||||||
raise KeyError('dictionary is empty')
|
|
||||||
if last:
|
|
||||||
key = reversed(self).next()
|
|
||||||
else:
|
|
||||||
key = iter(self).next()
|
|
||||||
value = self.pop(key)
|
|
||||||
return key, value
|
|
||||||
|
|
||||||
def __reduce__(self):
|
|
||||||
items = [[k, self[k]] for k in self]
|
|
||||||
tmp = self.__map, self.__end
|
|
||||||
del self.__map, self.__end
|
|
||||||
inst_dict = vars(self).copy()
|
|
||||||
self.__map, self.__end = tmp
|
|
||||||
if inst_dict:
|
|
||||||
return (self.__class__, (items,), inst_dict)
|
|
||||||
return self.__class__, (items,)
|
|
||||||
|
|
||||||
def keys(self):
|
|
||||||
return list(self)
|
|
||||||
|
|
||||||
setdefault = DictMixin.setdefault
|
|
||||||
update = DictMixin.update
|
|
||||||
pop = DictMixin.pop
|
|
||||||
values = DictMixin.values
|
|
||||||
items = DictMixin.items
|
|
||||||
iterkeys = DictMixin.iterkeys
|
|
||||||
itervalues = DictMixin.itervalues
|
|
||||||
iteritems = DictMixin.iteritems
|
|
||||||
|
|
||||||
def __repr__(self):
|
|
||||||
if not self:
|
|
||||||
return '%s()' % (self.__class__.__name__,)
|
|
||||||
return '%s(%r)' % (self.__class__.__name__, self.items())
|
|
||||||
|
|
||||||
def copy(self):
|
|
||||||
return self.__class__(self)
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def fromkeys(cls, iterable, value=None):
|
|
||||||
d = cls()
|
|
||||||
for key in iterable:
|
|
||||||
d[key] = value
|
|
||||||
return d
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
if isinstance(other, OrderedDict):
|
|
||||||
if len(self) != len(other):
|
|
||||||
return False
|
|
||||||
for p, q in zip(self.items(), other.items()):
|
|
||||||
if p != q:
|
|
||||||
return False
|
|
||||||
return True
|
|
||||||
return dict.__eq__(self, other)
|
|
||||||
|
|
||||||
def __ne__(self, other):
|
|
||||||
return not self == other
|
|
||||||
|
@ -2,27 +2,9 @@
|
|||||||
from __future__ import unicode_literals, division, absolute_import, print_function
|
from __future__ import unicode_literals, division, absolute_import, print_function
|
||||||
|
|
||||||
import inspect
|
import inspect
|
||||||
import sys
|
|
||||||
|
|
||||||
|
|
||||||
if sys.version_info < (3,):
|
def chr_cls(num):
|
||||||
str_cls = unicode # noqa
|
|
||||||
byte_cls = str
|
|
||||||
int_types = (int, long) # noqa
|
|
||||||
|
|
||||||
def bytes_to_list(byte_string):
|
|
||||||
return [ord(b) for b in byte_string]
|
|
||||||
|
|
||||||
chr_cls = chr
|
|
||||||
|
|
||||||
else:
|
|
||||||
str_cls = str
|
|
||||||
byte_cls = bytes
|
|
||||||
int_types = int
|
|
||||||
|
|
||||||
bytes_to_list = list
|
|
||||||
|
|
||||||
def chr_cls(num):
|
|
||||||
return bytes([num])
|
return bytes([num])
|
||||||
|
|
||||||
|
|
||||||
|
@ -48,8 +48,10 @@ Other type classes are defined that help compose the types listed above.
|
|||||||
|
|
||||||
from __future__ import unicode_literals, division, absolute_import, print_function
|
from __future__ import unicode_literals, division, absolute_import, print_function
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from fractions import Fraction
|
from fractions import Fraction
|
||||||
|
from io import BytesIO
|
||||||
import binascii
|
import binascii
|
||||||
import copy
|
import copy
|
||||||
import math
|
import math
|
||||||
@ -58,22 +60,10 @@ import sys
|
|||||||
|
|
||||||
from . import _teletex_codec
|
from . import _teletex_codec
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._ordereddict import OrderedDict
|
from ._types import type_name, chr_cls
|
||||||
from ._types import type_name, str_cls, byte_cls, int_types, chr_cls
|
|
||||||
from .parser import _parse, _dump_header
|
from .parser import _parse, _dump_header
|
||||||
from .util import int_to_bytes, int_from_bytes, timezone, extended_datetime, create_timezone, utc_with_dst
|
from .util import int_to_bytes, int_from_bytes, timezone, extended_datetime, create_timezone, utc_with_dst
|
||||||
|
|
||||||
if sys.version_info <= (3,):
|
|
||||||
from cStringIO import StringIO as BytesIO
|
|
||||||
|
|
||||||
range = xrange # noqa
|
|
||||||
_PY2 = True
|
|
||||||
|
|
||||||
else:
|
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
_PY2 = False
|
|
||||||
|
|
||||||
|
|
||||||
_teletex_codec.register()
|
_teletex_codec.register()
|
||||||
|
|
||||||
@ -220,7 +210,7 @@ class Asn1Value(object):
|
|||||||
An instance of the current class
|
An instance of the current class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(encoded_data, byte_cls):
|
if not isinstance(encoded_data, bytes):
|
||||||
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
|
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
|
||||||
|
|
||||||
spec = None
|
spec = None
|
||||||
@ -291,7 +281,7 @@ class Asn1Value(object):
|
|||||||
cls = self.__class__
|
cls = self.__class__
|
||||||
# Allow explicit to be specified as a simple 2-element tuple
|
# Allow explicit to be specified as a simple 2-element tuple
|
||||||
# instead of requiring the user make a nested tuple
|
# instead of requiring the user make a nested tuple
|
||||||
if cls.explicit is not None and isinstance(cls.explicit[0], int_types):
|
if cls.explicit is not None and isinstance(cls.explicit[0], int):
|
||||||
cls.explicit = (cls.explicit, )
|
cls.explicit = (cls.explicit, )
|
||||||
if hasattr(cls, '_setup'):
|
if hasattr(cls, '_setup'):
|
||||||
self._setup()
|
self._setup()
|
||||||
@ -299,7 +289,7 @@ class Asn1Value(object):
|
|||||||
|
|
||||||
# Normalize tagging values
|
# Normalize tagging values
|
||||||
if explicit is not None:
|
if explicit is not None:
|
||||||
if isinstance(explicit, int_types):
|
if isinstance(explicit, int):
|
||||||
if class_ is None:
|
if class_ is None:
|
||||||
class_ = 'context'
|
class_ = 'context'
|
||||||
explicit = (class_, explicit)
|
explicit = (class_, explicit)
|
||||||
@ -309,7 +299,7 @@ class Asn1Value(object):
|
|||||||
tag = None
|
tag = None
|
||||||
|
|
||||||
if implicit is not None:
|
if implicit is not None:
|
||||||
if isinstance(implicit, int_types):
|
if isinstance(implicit, int):
|
||||||
if class_ is None:
|
if class_ is None:
|
||||||
class_ = 'context'
|
class_ = 'context'
|
||||||
implicit = (class_, implicit)
|
implicit = (class_, implicit)
|
||||||
@ -336,11 +326,11 @@ class Asn1Value(object):
|
|||||||
|
|
||||||
if explicit is not None:
|
if explicit is not None:
|
||||||
# Ensure we have a tuple of 2-element tuples
|
# Ensure we have a tuple of 2-element tuples
|
||||||
if len(explicit) == 2 and isinstance(explicit[1], int_types):
|
if len(explicit) == 2 and isinstance(explicit[1], int):
|
||||||
explicit = (explicit, )
|
explicit = (explicit, )
|
||||||
for class_, tag in explicit:
|
for class_, tag in explicit:
|
||||||
invalid_class = None
|
invalid_class = None
|
||||||
if isinstance(class_, int_types):
|
if isinstance(class_, int):
|
||||||
if class_ not in CLASS_NUM_TO_NAME_MAP:
|
if class_ not in CLASS_NUM_TO_NAME_MAP:
|
||||||
invalid_class = class_
|
invalid_class = class_
|
||||||
else:
|
else:
|
||||||
@ -356,7 +346,7 @@ class Asn1Value(object):
|
|||||||
repr(invalid_class)
|
repr(invalid_class)
|
||||||
))
|
))
|
||||||
if tag is not None:
|
if tag is not None:
|
||||||
if not isinstance(tag, int_types):
|
if not isinstance(tag, int):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
explicit tag must be an integer, not %s
|
explicit tag must be an integer, not %s
|
||||||
@ -379,7 +369,7 @@ class Asn1Value(object):
|
|||||||
repr(class_)
|
repr(class_)
|
||||||
))
|
))
|
||||||
if tag is not None:
|
if tag is not None:
|
||||||
if not isinstance(tag, int_types):
|
if not isinstance(tag, int):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
implicit tag must be an integer, not %s
|
implicit tag must be an integer, not %s
|
||||||
@ -445,9 +435,6 @@ class Asn1Value(object):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if _PY2:
|
|
||||||
return self.__bytes__()
|
|
||||||
else:
|
|
||||||
return self.__unicode__()
|
return self.__unicode__()
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
@ -456,9 +443,6 @@ class Asn1Value(object):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if _PY2:
|
|
||||||
return '<%s %s b%s>' % (type_name(self), id(self), repr(self.dump()))
|
|
||||||
else:
|
|
||||||
return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))
|
return '<%s %s %s>' % (type_name(self), id(self), repr(self.dump()))
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
@ -608,9 +592,6 @@ class Asn1Value(object):
|
|||||||
self.parsed.debug(nest_level + 2)
|
self.parsed.debug(nest_level + 2)
|
||||||
elif hasattr(self, 'chosen'):
|
elif hasattr(self, 'chosen'):
|
||||||
self.chosen.debug(nest_level + 2)
|
self.chosen.debug(nest_level + 2)
|
||||||
else:
|
|
||||||
if _PY2 and isinstance(self.native, byte_cls):
|
|
||||||
print('%s Native: b%s' % (prefix, repr(self.native)))
|
|
||||||
else:
|
else:
|
||||||
print('%s Native: %s' % (prefix, self.native))
|
print('%s Native: %s' % (prefix, self.native))
|
||||||
|
|
||||||
@ -1058,7 +1039,7 @@ class Choice(Asn1Value):
|
|||||||
A instance of the current class
|
A instance of the current class
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(encoded_data, byte_cls):
|
if not isinstance(encoded_data, bytes):
|
||||||
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
|
raise TypeError('encoded_data must be a byte string, not %s' % type_name(encoded_data))
|
||||||
|
|
||||||
value, _ = _parse_build(encoded_data, spec=cls, spec_params=kwargs, strict=strict)
|
value, _ = _parse_build(encoded_data, spec=cls, spec_params=kwargs, strict=strict)
|
||||||
@ -1425,16 +1406,10 @@ class Concat(object):
|
|||||||
|
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
"""
|
"""
|
||||||
Since str is different in Python 2 and 3, this calls the appropriate
|
|
||||||
method, __unicode__() or __bytes__()
|
|
||||||
|
|
||||||
:return:
|
:return:
|
||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if _PY2:
|
|
||||||
return self.__bytes__()
|
|
||||||
else:
|
|
||||||
return self.__unicode__()
|
return self.__unicode__()
|
||||||
|
|
||||||
def __bytes__(self):
|
def __bytes__(self):
|
||||||
@ -1684,7 +1659,7 @@ class Primitive(Asn1Value):
|
|||||||
A byte string
|
A byte string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a byte string, not %s
|
%s value must be a byte string, not %s
|
||||||
@ -1784,7 +1759,7 @@ class AbstractString(Constructable, Primitive):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -1915,7 +1890,7 @@ class Integer(Primitive, ValueMap):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if isinstance(value, str_cls):
|
if isinstance(value, str):
|
||||||
if self._map is None:
|
if self._map is None:
|
||||||
raise ValueError(unwrap(
|
raise ValueError(unwrap(
|
||||||
'''
|
'''
|
||||||
@ -1935,7 +1910,7 @@ class Integer(Primitive, ValueMap):
|
|||||||
|
|
||||||
value = self._reverse_map[value]
|
value = self._reverse_map[value]
|
||||||
|
|
||||||
elif not isinstance(value, int_types):
|
elif not isinstance(value, int):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be an integer or unicode string when a name_map
|
%s value must be an integer or unicode string when a name_map
|
||||||
@ -2004,7 +1979,7 @@ class _IntegerBitString(object):
|
|||||||
# return an empty chunk, for cases like \x23\x80\x00\x00
|
# return an empty chunk, for cases like \x23\x80\x00\x00
|
||||||
return []
|
return []
|
||||||
|
|
||||||
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
|
unused_bits_len = self.contents[0]
|
||||||
value = int_from_bytes(self.contents[1:])
|
value = int_from_bytes(self.contents[1:])
|
||||||
bits = (len(self.contents) - 1) * 8
|
bits = (len(self.contents) - 1) * 8
|
||||||
|
|
||||||
@ -2135,7 +2110,7 @@ class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap)
|
|||||||
if key in value:
|
if key in value:
|
||||||
bits[index] = 1
|
bits[index] = 1
|
||||||
|
|
||||||
value = ''.join(map(str_cls, bits))
|
value = ''.join(map(str, bits))
|
||||||
|
|
||||||
elif value.__class__ == tuple:
|
elif value.__class__ == tuple:
|
||||||
if self._map is None:
|
if self._map is None:
|
||||||
@ -2146,7 +2121,7 @@ class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap)
|
|||||||
if bit:
|
if bit:
|
||||||
name = self._map.get(index, index)
|
name = self._map.get(index, index)
|
||||||
self._native.add(name)
|
self._native.add(name)
|
||||||
value = ''.join(map(str_cls, value))
|
value = ''.join(map(str, value))
|
||||||
|
|
||||||
else:
|
else:
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
@ -2220,7 +2195,7 @@ class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap)
|
|||||||
A boolean if the bit is set
|
A boolean if the bit is set
|
||||||
"""
|
"""
|
||||||
|
|
||||||
is_int = isinstance(key, int_types)
|
is_int = isinstance(key, int)
|
||||||
if not is_int:
|
if not is_int:
|
||||||
if not isinstance(self._map, dict):
|
if not isinstance(self._map, dict):
|
||||||
raise ValueError(unwrap(
|
raise ValueError(unwrap(
|
||||||
@ -2266,7 +2241,7 @@ class BitString(_IntegerBitString, Constructable, Castable, Primitive, ValueMap)
|
|||||||
ValueError - when _map is not set or the key name is invalid
|
ValueError - when _map is not set or the key name is invalid
|
||||||
"""
|
"""
|
||||||
|
|
||||||
is_int = isinstance(key, int_types)
|
is_int = isinstance(key, int)
|
||||||
if not is_int:
|
if not is_int:
|
||||||
if self._map is None:
|
if self._map is None:
|
||||||
raise ValueError(unwrap(
|
raise ValueError(unwrap(
|
||||||
@ -2365,7 +2340,7 @@ class OctetBitString(Constructable, Castable, Primitive):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a byte string, not %s
|
%s value must be a byte string, not %s
|
||||||
@ -2435,7 +2410,7 @@ class OctetBitString(Constructable, Castable, Primitive):
|
|||||||
List with one tuple, consisting of a byte string and an integer (unused bits)
|
List with one tuple, consisting of a byte string and an integer (unused bits)
|
||||||
"""
|
"""
|
||||||
|
|
||||||
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
|
unused_bits_len = self.contents[0]
|
||||||
if not unused_bits_len:
|
if not unused_bits_len:
|
||||||
return [(self.contents[1:], ())]
|
return [(self.contents[1:], ())]
|
||||||
|
|
||||||
@ -2448,11 +2423,11 @@ class OctetBitString(Constructable, Castable, Primitive):
|
|||||||
raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))
|
raise ValueError('Bit string has {0} unused bits'.format(unused_bits_len))
|
||||||
|
|
||||||
mask = (1 << unused_bits_len) - 1
|
mask = (1 << unused_bits_len) - 1
|
||||||
last_byte = ord(self.contents[-1]) if _PY2 else self.contents[-1]
|
last_byte = self.contents[-1]
|
||||||
|
|
||||||
# zero out the unused bits in the last byte.
|
# zero out the unused bits in the last byte.
|
||||||
zeroed_byte = last_byte & ~mask
|
zeroed_byte = last_byte & ~mask
|
||||||
value = self.contents[1:-1] + (chr(zeroed_byte) if _PY2 else bytes((zeroed_byte,)))
|
value = self.contents[1:-1] + bytes((zeroed_byte,))
|
||||||
|
|
||||||
unused_bits = _int_to_bit_tuple(last_byte & mask, unused_bits_len)
|
unused_bits = _int_to_bit_tuple(last_byte & mask, unused_bits_len)
|
||||||
|
|
||||||
@ -2505,7 +2480,7 @@ class IntegerBitString(_IntegerBitString, Constructable, Castable, Primitive):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, int_types):
|
if not isinstance(value, int):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a positive integer, not %s
|
%s value must be a positive integer, not %s
|
||||||
@ -2570,7 +2545,7 @@ class OctetString(Constructable, Castable, Primitive):
|
|||||||
A byte string
|
A byte string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a byte string, not %s
|
%s value must be a byte string, not %s
|
||||||
@ -2654,7 +2629,7 @@ class IntegerOctetString(Constructable, Castable, Primitive):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, int_types):
|
if not isinstance(value, int):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a positive integer, not %s
|
%s value must be a positive integer, not %s
|
||||||
@ -2752,7 +2727,7 @@ class ParsableOctetString(Constructable, Castable, Primitive):
|
|||||||
A byte string
|
A byte string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a byte string, not %s
|
%s value must be a byte string, not %s
|
||||||
@ -2904,7 +2879,7 @@ class ParsableOctetBitString(ParsableOctetString):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, byte_cls):
|
if not isinstance(value, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a byte string, not %s
|
%s value must be a byte string, not %s
|
||||||
@ -2934,7 +2909,7 @@ class ParsableOctetBitString(ParsableOctetString):
|
|||||||
A byte string
|
A byte string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
unused_bits_len = ord(self.contents[0]) if _PY2 else self.contents[0]
|
unused_bits_len = self.contents[0]
|
||||||
if unused_bits_len:
|
if unused_bits_len:
|
||||||
raise ValueError('ParsableOctetBitString should have no unused bits')
|
raise ValueError('ParsableOctetBitString should have no unused bits')
|
||||||
|
|
||||||
@ -3007,7 +2982,7 @@ class ObjectIdentifier(Primitive, ValueMap):
|
|||||||
type_name(cls)
|
type_name(cls)
|
||||||
))
|
))
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
value must be a unicode string, not %s
|
value must be a unicode string, not %s
|
||||||
@ -3045,7 +3020,7 @@ class ObjectIdentifier(Primitive, ValueMap):
|
|||||||
type_name(cls)
|
type_name(cls)
|
||||||
))
|
))
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
value must be a unicode string, not %s
|
value must be a unicode string, not %s
|
||||||
@ -3079,7 +3054,7 @@ class ObjectIdentifier(Primitive, ValueMap):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -3153,24 +3128,22 @@ class ObjectIdentifier(Primitive, ValueMap):
|
|||||||
|
|
||||||
part = 0
|
part = 0
|
||||||
for byte in self.contents:
|
for byte in self.contents:
|
||||||
if _PY2:
|
|
||||||
byte = ord(byte)
|
|
||||||
part = part * 128
|
part = part * 128
|
||||||
part += byte & 127
|
part += byte & 127
|
||||||
# Last byte in subidentifier has the eighth bit set to 0
|
# Last byte in subidentifier has the eighth bit set to 0
|
||||||
if byte & 0x80 == 0:
|
if byte & 0x80 == 0:
|
||||||
if len(output) == 0:
|
if len(output) == 0:
|
||||||
if part >= 80:
|
if part >= 80:
|
||||||
output.append(str_cls(2))
|
output.append(str(2))
|
||||||
output.append(str_cls(part - 80))
|
output.append(str(part - 80))
|
||||||
elif part >= 40:
|
elif part >= 40:
|
||||||
output.append(str_cls(1))
|
output.append(str(1))
|
||||||
output.append(str_cls(part - 40))
|
output.append(str(part - 40))
|
||||||
else:
|
else:
|
||||||
output.append(str_cls(0))
|
output.append(str(0))
|
||||||
output.append(str_cls(part))
|
output.append(str(part))
|
||||||
else:
|
else:
|
||||||
output.append(str_cls(part))
|
output.append(str(part))
|
||||||
part = 0
|
part = 0
|
||||||
|
|
||||||
self._dotted = '.'.join(output)
|
self._dotted = '.'.join(output)
|
||||||
@ -3240,7 +3213,7 @@ class Enumerated(Integer):
|
|||||||
ValueError - when an invalid value is passed
|
ValueError - when an invalid value is passed
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, int_types) and not isinstance(value, str_cls):
|
if not isinstance(value, int) and not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be an integer or a unicode string, not %s
|
%s value must be an integer or a unicode string, not %s
|
||||||
@ -3249,7 +3222,7 @@ class Enumerated(Integer):
|
|||||||
type_name(value)
|
type_name(value)
|
||||||
))
|
))
|
||||||
|
|
||||||
if isinstance(value, str_cls):
|
if isinstance(value, str):
|
||||||
if value not in self._reverse_map:
|
if value not in self._reverse_map:
|
||||||
raise ValueError(unwrap(
|
raise ValueError(unwrap(
|
||||||
'''
|
'''
|
||||||
@ -3507,7 +3480,7 @@ class Sequence(Asn1Value):
|
|||||||
if self.children is None:
|
if self.children is None:
|
||||||
self._parse_children()
|
self._parse_children()
|
||||||
|
|
||||||
if not isinstance(key, int_types):
|
if not isinstance(key, int):
|
||||||
if key not in self._field_map:
|
if key not in self._field_map:
|
||||||
raise KeyError(unwrap(
|
raise KeyError(unwrap(
|
||||||
'''
|
'''
|
||||||
@ -3554,7 +3527,7 @@ class Sequence(Asn1Value):
|
|||||||
if self.children is None:
|
if self.children is None:
|
||||||
self._parse_children()
|
self._parse_children()
|
||||||
|
|
||||||
if not isinstance(key, int_types):
|
if not isinstance(key, int):
|
||||||
if key not in self._field_map:
|
if key not in self._field_map:
|
||||||
raise KeyError(unwrap(
|
raise KeyError(unwrap(
|
||||||
'''
|
'''
|
||||||
@ -3605,7 +3578,7 @@ class Sequence(Asn1Value):
|
|||||||
if self.children is None:
|
if self.children is None:
|
||||||
self._parse_children()
|
self._parse_children()
|
||||||
|
|
||||||
if not isinstance(key, int_types):
|
if not isinstance(key, int):
|
||||||
if key not in self._field_map:
|
if key not in self._field_map:
|
||||||
raise KeyError(unwrap(
|
raise KeyError(unwrap(
|
||||||
'''
|
'''
|
||||||
@ -4003,7 +3976,7 @@ class Sequence(Asn1Value):
|
|||||||
encoded using
|
encoded using
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(field_name, str_cls):
|
if not isinstance(field_name, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
field_name must be a unicode string, not %s
|
field_name must be a unicode string, not %s
|
||||||
@ -4051,7 +4024,7 @@ class Sequence(Asn1Value):
|
|||||||
try:
|
try:
|
||||||
name = self._fields[index][0]
|
name = self._fields[index][0]
|
||||||
except (IndexError):
|
except (IndexError):
|
||||||
name = str_cls(index)
|
name = str(index)
|
||||||
self._native[name] = child.native
|
self._native[name] = child.native
|
||||||
except (ValueError, TypeError) as e:
|
except (ValueError, TypeError) as e:
|
||||||
self._native = None
|
self._native = None
|
||||||
@ -4879,7 +4852,7 @@ class AbstractTime(AbstractString):
|
|||||||
A dict with the parsed values
|
A dict with the parsed values
|
||||||
"""
|
"""
|
||||||
|
|
||||||
string = str_cls(self)
|
string = str(self)
|
||||||
|
|
||||||
m = self._TIMESTRING_RE.match(string)
|
m = self._TIMESTRING_RE.match(string)
|
||||||
if not m:
|
if not m:
|
||||||
@ -5018,8 +4991,6 @@ class UTCTime(AbstractTime):
|
|||||||
raise ValueError('Year of the UTCTime is not in range [1950, 2049], use GeneralizedTime instead')
|
raise ValueError('Year of the UTCTime is not in range [1950, 2049], use GeneralizedTime instead')
|
||||||
|
|
||||||
value = value.strftime('%y%m%d%H%M%SZ')
|
value = value.strftime('%y%m%d%H%M%SZ')
|
||||||
if _PY2:
|
|
||||||
value = value.decode('ascii')
|
|
||||||
|
|
||||||
AbstractString.set(self, value)
|
AbstractString.set(self, value)
|
||||||
# Set it to None and let the class take care of converting the next
|
# Set it to None and let the class take care of converting the next
|
||||||
@ -5117,8 +5088,6 @@ class GeneralizedTime(AbstractTime):
|
|||||||
fraction = ''
|
fraction = ''
|
||||||
|
|
||||||
value = value.strftime('%Y%m%d%H%M%S') + fraction + 'Z'
|
value = value.strftime('%Y%m%d%H%M%S') + fraction + 'Z'
|
||||||
if _PY2:
|
|
||||||
value = value.decode('ascii')
|
|
||||||
|
|
||||||
AbstractString.set(self, value)
|
AbstractString.set(self, value)
|
||||||
# Set it to None and let the class take care of converting the next
|
# Set it to None and let the class take care of converting the next
|
||||||
@ -5340,7 +5309,7 @@ def _build_id_tuple(params, spec):
|
|||||||
else:
|
else:
|
||||||
required_class = 2
|
required_class = 2
|
||||||
required_tag = params['implicit']
|
required_tag = params['implicit']
|
||||||
if required_class is not None and not isinstance(required_class, int_types):
|
if required_class is not None and not isinstance(required_class, int):
|
||||||
required_class = CLASS_NAME_TO_NUM_MAP[required_class]
|
required_class = CLASS_NAME_TO_NUM_MAP[required_class]
|
||||||
|
|
||||||
required_class = params.get('class_', required_class)
|
required_class = params.get('class_', required_class)
|
||||||
|
@ -20,7 +20,7 @@ import hashlib
|
|||||||
import math
|
import math
|
||||||
|
|
||||||
from ._errors import unwrap, APIException
|
from ._errors import unwrap, APIException
|
||||||
from ._types import type_name, byte_cls
|
from ._types import type_name
|
||||||
from .algos import _ForceNullParameters, DigestAlgorithm, EncryptionAlgorithm, RSAESOAEPParams, RSASSAPSSParams
|
from .algos import _ForceNullParameters, DigestAlgorithm, EncryptionAlgorithm, RSAESOAEPParams, RSASSAPSSParams
|
||||||
from .core import (
|
from .core import (
|
||||||
Any,
|
Any,
|
||||||
@ -582,7 +582,7 @@ class ECPrivateKey(Sequence):
|
|||||||
if self._key_size is None:
|
if self._key_size is None:
|
||||||
# Infer the key_size from the existing private key if possible
|
# Infer the key_size from the existing private key if possible
|
||||||
pkey_contents = self['private_key'].contents
|
pkey_contents = self['private_key'].contents
|
||||||
if isinstance(pkey_contents, byte_cls) and len(pkey_contents) > 1:
|
if isinstance(pkey_contents, bytes) and len(pkey_contents) > 1:
|
||||||
self.set_key_size(len(self['private_key'].contents))
|
self.set_key_size(len(self['private_key'].contents))
|
||||||
|
|
||||||
elif self._key_size is not None:
|
elif self._key_size is not None:
|
||||||
@ -744,7 +744,7 @@ class PrivateKeyInfo(Sequence):
|
|||||||
A PrivateKeyInfo object
|
A PrivateKeyInfo object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(private_key, byte_cls) and not isinstance(private_key, Asn1Value):
|
if not isinstance(private_key, bytes) and not isinstance(private_key, Asn1Value):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
private_key must be a byte string or Asn1Value, not %s
|
private_key must be a byte string or Asn1Value, not %s
|
||||||
@ -1112,7 +1112,7 @@ class PublicKeyInfo(Sequence):
|
|||||||
A PublicKeyInfo object
|
A PublicKeyInfo object
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(public_key, byte_cls) and not isinstance(public_key, Asn1Value):
|
if not isinstance(public_key, bytes) and not isinstance(public_key, Asn1Value):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
public_key must be a byte string or Asn1Value, not %s
|
public_key must be a byte string or Asn1Value, not %s
|
||||||
@ -1268,7 +1268,7 @@ class PublicKeyInfo(Sequence):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if self._sha1 is None:
|
if self._sha1 is None:
|
||||||
self._sha1 = hashlib.sha1(byte_cls(self['public_key'])).digest()
|
self._sha1 = hashlib.sha1(bytes(self['public_key'])).digest()
|
||||||
return self._sha1
|
return self._sha1
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -1279,7 +1279,7 @@ class PublicKeyInfo(Sequence):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if self._sha256 is None:
|
if self._sha256 is None:
|
||||||
self._sha256 = hashlib.sha256(byte_cls(self['public_key'])).digest()
|
self._sha256 = hashlib.sha256(bytes(self['public_key'])).digest()
|
||||||
return self._sha256
|
return self._sha256
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
@ -15,10 +15,9 @@ from __future__ import unicode_literals, division, absolute_import, print_functi
|
|||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
from ._types import byte_cls, chr_cls, type_name
|
from ._types import chr_cls, type_name
|
||||||
from .util import int_from_bytes, int_to_bytes
|
from .util import int_from_bytes, int_to_bytes
|
||||||
|
|
||||||
_PY2 = sys.version_info <= (3,)
|
|
||||||
_INSUFFICIENT_DATA_MESSAGE = 'Insufficient data - %s bytes requested but only %s available'
|
_INSUFFICIENT_DATA_MESSAGE = 'Insufficient data - %s bytes requested but only %s available'
|
||||||
_MAX_DEPTH = 10
|
_MAX_DEPTH = 10
|
||||||
|
|
||||||
@ -66,7 +65,7 @@ def emit(class_, method, tag, contents):
|
|||||||
if tag < 0:
|
if tag < 0:
|
||||||
raise ValueError('tag must be greater than zero, not %s' % tag)
|
raise ValueError('tag must be greater than zero, not %s' % tag)
|
||||||
|
|
||||||
if not isinstance(contents, byte_cls):
|
if not isinstance(contents, bytes):
|
||||||
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
||||||
|
|
||||||
return _dump_header(class_, method, tag, contents) + contents
|
return _dump_header(class_, method, tag, contents) + contents
|
||||||
@ -101,7 +100,7 @@ def parse(contents, strict=False):
|
|||||||
- 5: byte string trailer
|
- 5: byte string trailer
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(contents, byte_cls):
|
if not isinstance(contents, bytes):
|
||||||
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
||||||
|
|
||||||
contents_len = len(contents)
|
contents_len = len(contents)
|
||||||
@ -130,7 +129,7 @@ def peek(contents):
|
|||||||
An integer with the number of bytes occupied by the ASN.1 value
|
An integer with the number of bytes occupied by the ASN.1 value
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(contents, byte_cls):
|
if not isinstance(contents, bytes):
|
||||||
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
raise TypeError('contents must be a byte string, not %s' % type_name(contents))
|
||||||
|
|
||||||
info, consumed = _parse(contents, len(contents))
|
info, consumed = _parse(contents, len(contents))
|
||||||
@ -171,7 +170,7 @@ def _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0):
|
|||||||
|
|
||||||
if data_len < pointer + 1:
|
if data_len < pointer + 1:
|
||||||
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
||||||
first_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
|
first_octet = encoded_data[pointer]
|
||||||
|
|
||||||
pointer += 1
|
pointer += 1
|
||||||
|
|
||||||
@ -183,7 +182,7 @@ def _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0):
|
|||||||
while True:
|
while True:
|
||||||
if data_len < pointer + 1:
|
if data_len < pointer + 1:
|
||||||
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
||||||
num = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
|
num = encoded_data[pointer]
|
||||||
pointer += 1
|
pointer += 1
|
||||||
if num == 0x80 and tag == 0:
|
if num == 0x80 and tag == 0:
|
||||||
raise ValueError('Non-minimal tag encoding')
|
raise ValueError('Non-minimal tag encoding')
|
||||||
@ -196,7 +195,7 @@ def _parse(encoded_data, data_len, pointer=0, lengths_only=False, depth=0):
|
|||||||
|
|
||||||
if data_len < pointer + 1:
|
if data_len < pointer + 1:
|
||||||
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
raise ValueError(_INSUFFICIENT_DATA_MESSAGE % (1, data_len - pointer))
|
||||||
length_octet = ord(encoded_data[pointer]) if _PY2 else encoded_data[pointer]
|
length_octet = encoded_data[pointer]
|
||||||
pointer += 1
|
pointer += 1
|
||||||
trailer = b''
|
trailer = b''
|
||||||
|
|
||||||
|
@ -11,17 +11,13 @@ Encoding DER to PEM and decoding PEM to DER. Exports the following items:
|
|||||||
|
|
||||||
from __future__ import unicode_literals, division, absolute_import, print_function
|
from __future__ import unicode_literals, division, absolute_import, print_function
|
||||||
|
|
||||||
|
from io import BytesIO
|
||||||
import base64
|
import base64
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
|
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._types import type_name as _type_name, str_cls, byte_cls
|
from ._types import type_name as _type_name
|
||||||
|
|
||||||
if sys.version_info < (3,):
|
|
||||||
from cStringIO import StringIO as BytesIO
|
|
||||||
else:
|
|
||||||
from io import BytesIO
|
|
||||||
|
|
||||||
|
|
||||||
def detect(byte_string):
|
def detect(byte_string):
|
||||||
@ -36,7 +32,7 @@ def detect(byte_string):
|
|||||||
string
|
string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(byte_string, byte_cls):
|
if not isinstance(byte_string, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
byte_string must be a byte string, not %s
|
byte_string must be a byte string, not %s
|
||||||
@ -67,14 +63,14 @@ def armor(type_name, der_bytes, headers=None):
|
|||||||
A byte string of the PEM block
|
A byte string of the PEM block
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(der_bytes, byte_cls):
|
if not isinstance(der_bytes, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
der_bytes must be a byte string, not %s
|
der_bytes must be a byte string, not %s
|
||||||
''' % _type_name(der_bytes)
|
''' % _type_name(der_bytes)
|
||||||
))
|
))
|
||||||
|
|
||||||
if not isinstance(type_name, str_cls):
|
if not isinstance(type_name, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
type_name must be a unicode string, not %s
|
type_name must be a unicode string, not %s
|
||||||
@ -127,7 +123,7 @@ def _unarmor(pem_bytes):
|
|||||||
in the form "Name: Value" that are right after the begin line.
|
in the form "Name: Value" that are right after the begin line.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(pem_bytes, byte_cls):
|
if not isinstance(pem_bytes, bytes):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
pem_bytes must be a byte string, not %s
|
pem_bytes must be a byte string, not %s
|
||||||
|
@ -20,11 +20,11 @@ from __future__ import unicode_literals, division, absolute_import, print_functi
|
|||||||
|
|
||||||
import math
|
import math
|
||||||
import sys
|
import sys
|
||||||
from datetime import datetime, date, timedelta, tzinfo
|
from collections import OrderedDict
|
||||||
|
from datetime import datetime, date, timedelta, timezone, tzinfo
|
||||||
|
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._iri import iri_to_uri, uri_to_iri # noqa
|
from ._iri import iri_to_uri, uri_to_iri # noqa
|
||||||
from ._ordereddict import OrderedDict # noqa
|
|
||||||
from ._types import type_name
|
from ._types import type_name
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
@ -33,185 +33,8 @@ else:
|
|||||||
from socket import inet_ntop, inet_pton # noqa
|
from socket import inet_ntop, inet_pton # noqa
|
||||||
|
|
||||||
|
|
||||||
# Python 2
|
|
||||||
if sys.version_info <= (3,):
|
|
||||||
|
|
||||||
def int_to_bytes(value, signed=False, width=None):
|
def int_to_bytes(value, signed=False, width=None):
|
||||||
"""
|
|
||||||
Converts an integer to a byte string
|
|
||||||
|
|
||||||
:param value:
|
|
||||||
The integer to convert
|
|
||||||
|
|
||||||
:param signed:
|
|
||||||
If the byte string should be encoded using two's complement
|
|
||||||
|
|
||||||
:param width:
|
|
||||||
If None, the minimal possible size (but at least 1),
|
|
||||||
otherwise an integer of the byte width for the return value
|
|
||||||
|
|
||||||
:return:
|
|
||||||
A byte string
|
|
||||||
"""
|
|
||||||
|
|
||||||
if value == 0 and width == 0:
|
|
||||||
return b''
|
|
||||||
|
|
||||||
# Handle negatives in two's complement
|
|
||||||
is_neg = False
|
|
||||||
if signed and value < 0:
|
|
||||||
is_neg = True
|
|
||||||
bits = int(math.ceil(len('%x' % abs(value)) / 2.0) * 8)
|
|
||||||
value = (value + (1 << bits)) % (1 << bits)
|
|
||||||
|
|
||||||
hex_str = '%x' % value
|
|
||||||
if len(hex_str) & 1:
|
|
||||||
hex_str = '0' + hex_str
|
|
||||||
|
|
||||||
output = hex_str.decode('hex')
|
|
||||||
|
|
||||||
if signed and not is_neg and ord(output[0:1]) & 0x80:
|
|
||||||
output = b'\x00' + output
|
|
||||||
|
|
||||||
if width is not None:
|
|
||||||
if len(output) > width:
|
|
||||||
raise OverflowError('int too big to convert')
|
|
||||||
if is_neg:
|
|
||||||
pad_char = b'\xFF'
|
|
||||||
else:
|
|
||||||
pad_char = b'\x00'
|
|
||||||
output = (pad_char * (width - len(output))) + output
|
|
||||||
elif is_neg and ord(output[0:1]) & 0x80 == 0:
|
|
||||||
output = b'\xFF' + output
|
|
||||||
|
|
||||||
return output
|
|
||||||
|
|
||||||
def int_from_bytes(value, signed=False):
|
|
||||||
"""
|
|
||||||
Converts a byte string to an integer
|
|
||||||
|
|
||||||
:param value:
|
|
||||||
The byte string to convert
|
|
||||||
|
|
||||||
:param signed:
|
|
||||||
If the byte string should be interpreted using two's complement
|
|
||||||
|
|
||||||
:return:
|
|
||||||
An integer
|
|
||||||
"""
|
|
||||||
|
|
||||||
if value == b'':
|
|
||||||
return 0
|
|
||||||
|
|
||||||
num = long(value.encode("hex"), 16) # noqa
|
|
||||||
|
|
||||||
if not signed:
|
|
||||||
return num
|
|
||||||
|
|
||||||
# Check for sign bit and handle two's complement
|
|
||||||
if ord(value[0:1]) & 0x80:
|
|
||||||
bit_len = len(value) * 8
|
|
||||||
return num - (1 << bit_len)
|
|
||||||
|
|
||||||
return num
|
|
||||||
|
|
||||||
class timezone(tzinfo): # noqa
|
|
||||||
"""
|
|
||||||
Implements datetime.timezone for py2.
|
|
||||||
Only full minute offsets are supported.
|
|
||||||
DST is not supported.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, offset, name=None):
|
|
||||||
"""
|
|
||||||
:param offset:
|
|
||||||
A timedelta with this timezone's offset from UTC
|
|
||||||
|
|
||||||
:param name:
|
|
||||||
Name of the timezone; if None, generate one.
|
|
||||||
"""
|
|
||||||
|
|
||||||
if not timedelta(hours=-24) < offset < timedelta(hours=24):
|
|
||||||
raise ValueError('Offset must be in [-23:59, 23:59]')
|
|
||||||
|
|
||||||
if offset.seconds % 60 or offset.microseconds:
|
|
||||||
raise ValueError('Offset must be full minutes')
|
|
||||||
|
|
||||||
self._offset = offset
|
|
||||||
|
|
||||||
if name is not None:
|
|
||||||
self._name = name
|
|
||||||
elif not offset:
|
|
||||||
self._name = 'UTC'
|
|
||||||
else:
|
|
||||||
self._name = 'UTC' + _format_offset(offset)
|
|
||||||
|
|
||||||
def __eq__(self, other):
|
|
||||||
"""
|
|
||||||
Compare two timezones
|
|
||||||
|
|
||||||
:param other:
|
|
||||||
The other timezone to compare to
|
|
||||||
|
|
||||||
:return:
|
|
||||||
A boolean
|
|
||||||
"""
|
|
||||||
|
|
||||||
if type(other) != timezone:
|
|
||||||
return False
|
|
||||||
return self._offset == other._offset
|
|
||||||
|
|
||||||
def __getinitargs__(self):
|
|
||||||
"""
|
|
||||||
Called by tzinfo.__reduce__ to support pickle and copy.
|
|
||||||
|
|
||||||
:return:
|
|
||||||
offset and name, to be used for __init__
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self._offset, self._name
|
|
||||||
|
|
||||||
def tzname(self, dt):
|
|
||||||
"""
|
|
||||||
:param dt:
|
|
||||||
A datetime object; ignored.
|
|
||||||
|
|
||||||
:return:
|
|
||||||
Name of this timezone
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self._name
|
|
||||||
|
|
||||||
def utcoffset(self, dt):
|
|
||||||
"""
|
|
||||||
:param dt:
|
|
||||||
A datetime object; ignored.
|
|
||||||
|
|
||||||
:return:
|
|
||||||
A timedelta object with the offset from UTC
|
|
||||||
"""
|
|
||||||
|
|
||||||
return self._offset
|
|
||||||
|
|
||||||
def dst(self, dt):
|
|
||||||
"""
|
|
||||||
:param dt:
|
|
||||||
A datetime object; ignored.
|
|
||||||
|
|
||||||
:return:
|
|
||||||
Zero timedelta
|
|
||||||
"""
|
|
||||||
|
|
||||||
return timedelta(0)
|
|
||||||
|
|
||||||
timezone.utc = timezone(timedelta(0))
|
|
||||||
|
|
||||||
# Python 3
|
|
||||||
else:
|
|
||||||
|
|
||||||
from datetime import timezone # noqa
|
|
||||||
|
|
||||||
def int_to_bytes(value, signed=False, width=None):
|
|
||||||
"""
|
"""
|
||||||
Converts an integer to a byte string
|
Converts an integer to a byte string
|
||||||
|
|
||||||
@ -242,7 +65,7 @@ else:
|
|||||||
width = math.ceil(bits_required / 8) or 1
|
width = math.ceil(bits_required / 8) or 1
|
||||||
return value.to_bytes(width, byteorder='big', signed=signed)
|
return value.to_bytes(width, byteorder='big', signed=signed)
|
||||||
|
|
||||||
def int_from_bytes(value, signed=False):
|
def int_from_bytes(value, signed=False):
|
||||||
"""
|
"""
|
||||||
Converts a byte string to an integer
|
Converts a byte string to an integer
|
||||||
|
|
||||||
|
@ -15,6 +15,7 @@ Other type classes are defined that help compose the types listed above.
|
|||||||
|
|
||||||
from __future__ import unicode_literals, division, absolute_import, print_function
|
from __future__ import unicode_literals, division, absolute_import, print_function
|
||||||
|
|
||||||
|
from collections import OrderedDict
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
from encodings import idna # noqa
|
from encodings import idna # noqa
|
||||||
import hashlib
|
import hashlib
|
||||||
@ -26,8 +27,7 @@ import unicodedata
|
|||||||
|
|
||||||
from ._errors import unwrap
|
from ._errors import unwrap
|
||||||
from ._iri import iri_to_uri, uri_to_iri
|
from ._iri import iri_to_uri, uri_to_iri
|
||||||
from ._ordereddict import OrderedDict
|
from ._types import type_name
|
||||||
from ._types import type_name, str_cls, bytes_to_list
|
|
||||||
from .algos import AlgorithmIdentifier, AnyAlgorithmIdentifier, DigestAlgorithm, SignedDigestAlgorithm
|
from .algos import AlgorithmIdentifier, AnyAlgorithmIdentifier, DigestAlgorithm, SignedDigestAlgorithm
|
||||||
from .core import (
|
from .core import (
|
||||||
Any,
|
Any,
|
||||||
@ -100,7 +100,7 @@ class DNSName(IA5String):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -131,7 +131,7 @@ class URI(IA5String):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -215,7 +215,7 @@ class EmailAddress(IA5String):
|
|||||||
A unicode string
|
A unicode string
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -323,7 +323,7 @@ class IPAddress(OctetString):
|
|||||||
an IPv6 address or IPv6 address with CIDR
|
an IPv6 address or IPv6 address with CIDR
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(value, str_cls):
|
if not isinstance(value, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
%s value must be a unicode string, not %s
|
%s value must be a unicode string, not %s
|
||||||
@ -413,7 +413,7 @@ class IPAddress(OctetString):
|
|||||||
if cidr_int is not None:
|
if cidr_int is not None:
|
||||||
cidr_bits = '{0:b}'.format(cidr_int)
|
cidr_bits = '{0:b}'.format(cidr_int)
|
||||||
cidr = len(cidr_bits.rstrip('0'))
|
cidr = len(cidr_bits.rstrip('0'))
|
||||||
value = value + '/' + str_cls(cidr)
|
value = value + '/' + str(cidr)
|
||||||
self._native = value
|
self._native = value
|
||||||
return self._native
|
return self._native
|
||||||
|
|
||||||
@ -2598,7 +2598,7 @@ class Certificate(Sequence):
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
if self._issuer_serial is None:
|
if self._issuer_serial is None:
|
||||||
self._issuer_serial = self.issuer.sha256 + b':' + str_cls(self.serial_number).encode('ascii')
|
self._issuer_serial = self.issuer.sha256 + b':' + str(self.serial_number).encode('ascii')
|
||||||
return self._issuer_serial
|
return self._issuer_serial
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -2647,7 +2647,7 @@ class Certificate(Sequence):
|
|||||||
# We untag the element since it is tagged via being a choice from GeneralName
|
# We untag the element since it is tagged via being a choice from GeneralName
|
||||||
issuer = issuer.untag()
|
issuer = issuer.untag()
|
||||||
authority_serial = self.authority_key_identifier_value['authority_cert_serial_number'].native
|
authority_serial = self.authority_key_identifier_value['authority_cert_serial_number'].native
|
||||||
self._authority_issuer_serial = issuer.sha256 + b':' + str_cls(authority_serial).encode('ascii')
|
self._authority_issuer_serial = issuer.sha256 + b':' + str(authority_serial).encode('ascii')
|
||||||
else:
|
else:
|
||||||
self._authority_issuer_serial = None
|
self._authority_issuer_serial = None
|
||||||
return self._authority_issuer_serial
|
return self._authority_issuer_serial
|
||||||
@ -2860,7 +2860,7 @@ class Certificate(Sequence):
|
|||||||
with a space between each pair of characters, all uppercase
|
with a space between each pair of characters, all uppercase
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return ' '.join('%02X' % c for c in bytes_to_list(self.sha1))
|
return ' '.join('%02X' % c for c in list(self.sha1))
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def sha256(self):
|
def sha256(self):
|
||||||
@ -2882,7 +2882,7 @@ class Certificate(Sequence):
|
|||||||
with a space between each pair of characters, all uppercase
|
with a space between each pair of characters, all uppercase
|
||||||
"""
|
"""
|
||||||
|
|
||||||
return ' '.join('%02X' % c for c in bytes_to_list(self.sha256))
|
return ' '.join('%02X' % c for c in list(self.sha256))
|
||||||
|
|
||||||
def is_valid_domain_ip(self, domain_ip):
|
def is_valid_domain_ip(self, domain_ip):
|
||||||
"""
|
"""
|
||||||
@ -2896,7 +2896,7 @@ class Certificate(Sequence):
|
|||||||
A boolean - if the domain or IP is valid for the certificate
|
A boolean - if the domain or IP is valid for the certificate
|
||||||
"""
|
"""
|
||||||
|
|
||||||
if not isinstance(domain_ip, str_cls):
|
if not isinstance(domain_ip, str):
|
||||||
raise TypeError(unwrap(
|
raise TypeError(unwrap(
|
||||||
'''
|
'''
|
||||||
domain_ip must be a unicode string, not %s
|
domain_ip must be a unicode string, not %s
|
||||||
|
@ -28,13 +28,13 @@
|
|||||||
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
|
||||||
# OF THE POSSIBILITY OF SUCH DAMAGE.
|
# OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
|
||||||
import sys
|
|
||||||
import string
|
import string
|
||||||
|
|
||||||
if sys.version_info >= (3, 0):
|
|
||||||
def unichr(character): # pylint: disable=redefined-builtin
|
def unichr(character): # pylint: disable=redefined-builtin
|
||||||
return chr(character)
|
return chr(character)
|
||||||
|
|
||||||
|
|
||||||
def ConvertNEXTSTEPToUnicode(hex_digits):
|
def ConvertNEXTSTEPToUnicode(hex_digits):
|
||||||
# taken from http://ftp.unicode.org/Public/MAPPINGS/VENDORS/NEXT/NEXTSTEP.TXT
|
# taken from http://ftp.unicode.org/Public/MAPPINGS/VENDORS/NEXT/NEXTSTEP.TXT
|
||||||
conversion = {
|
conversion = {
|
||||||
|
@ -64,12 +64,10 @@ def GetFileEncoding(path):
|
|||||||
def OpenFileWithEncoding(file_path, encoding):
|
def OpenFileWithEncoding(file_path, encoding):
|
||||||
return codecs.open(file_path, 'r', encoding=encoding, errors='ignore')
|
return codecs.open(file_path, 'r', encoding=encoding, errors='ignore')
|
||||||
|
|
||||||
if sys.version_info < (3, 0):
|
|
||||||
def OpenFile(file_path):
|
def OpenFile(file_path):
|
||||||
return open(file_path, 'rb')
|
return open(file_path, 'rb')
|
||||||
else:
|
|
||||||
def OpenFile(file_path):
|
|
||||||
return open(file_path, 'br')
|
|
||||||
|
|
||||||
class PBParser(object):
|
class PBParser(object):
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ import sys
|
|||||||
from functools import cmp_to_key
|
from functools import cmp_to_key
|
||||||
|
|
||||||
# for python 3.10+ compatibility
|
# for python 3.10+ compatibility
|
||||||
if sys.version_info.major == 3 and sys.version_info.minor >= 10:
|
if sys.version_info >= (3, 10):
|
||||||
import collections
|
import collections
|
||||||
setattr(collections, "MutableMapping", collections.abc.MutableMapping)
|
setattr(collections, "MutableMapping", collections.abc.MutableMapping)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user