| Index: net/tools/testserver/asn1.py
|
| diff --git a/net/tools/testserver/asn1.py b/net/tools/testserver/asn1.py
|
| deleted file mode 100644
|
| index c0e0398626c0869a4f796825ef5c0a3c61e08ba7..0000000000000000000000000000000000000000
|
| --- a/net/tools/testserver/asn1.py
|
| +++ /dev/null
|
| @@ -1,165 +0,0 @@
|
| -# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| -# Use of this source code is governed by a BSD-style license that can be
|
| -# found in the LICENSE file.
|
| -
|
| -# This file implements very minimal ASN.1, DER serialization.
|
| -
|
| -import types
|
| -
|
| -
|
| -def ToDER(obj):
|
| - '''ToDER converts the given object into DER encoding'''
|
| - if type(obj) == types.NoneType:
|
| - # None turns into NULL
|
| - return TagAndLength(5, 0)
|
| - if type(obj) == types.StringType:
|
| - # Strings are PRINTABLESTRING
|
| - return TagAndLength(19, len(obj)) + obj
|
| - if type(obj) == types.BooleanType:
|
| - val = "\x00"
|
| - if obj:
|
| - val = "\xff"
|
| - return TagAndLength(1, 1) + val
|
| - if type(obj) == types.IntType or type(obj) == types.LongType:
|
| - big_endian = []
|
| - val = obj
|
| - while val != 0:
|
| - big_endian.append(val & 0xff)
|
| - val >>= 8
|
| -
|
| - if len(big_endian) == 0 or big_endian[-1] >= 128:
|
| - big_endian.append(0)
|
| -
|
| - big_endian.reverse()
|
| - return TagAndLength(2, len(big_endian)) + ToBytes(big_endian)
|
| -
|
| - return obj.ToDER()
|
| -
|
| -
|
| -def ToBytes(array_of_bytes):
|
| - '''ToBytes converts the array of byte values into a binary string'''
|
| - return ''.join([chr(x) for x in array_of_bytes])
|
| -
|
| -
|
| -def TagAndLength(tag, length):
|
| - der = [tag]
|
| - if length < 128:
|
| - der.append(length)
|
| - elif length < 256:
|
| - der.append(0x81)
|
| - der.append(length)
|
| - elif length < 65535:
|
| - der.append(0x82)
|
| - der.append(length >> 8)
|
| - der.append(length & 0xff)
|
| - else:
|
| - assert False
|
| -
|
| - return ToBytes(der)
|
| -
|
| -
|
| -class Raw(object):
|
| - '''Raw contains raw DER encoded bytes that are used verbatim'''
|
| - def __init__(self, der):
|
| - self.der = der
|
| -
|
| - def ToDER(self):
|
| - return self.der
|
| -
|
| -
|
| -class Explicit(object):
|
| - '''Explicit prepends an explicit tag'''
|
| - def __init__(self, tag, child):
|
| - self.tag = tag
|
| - self.child = child
|
| -
|
| - def ToDER(self):
|
| - der = ToDER(self.child)
|
| - tag = self.tag
|
| - tag |= 0x80 # content specific
|
| - tag |= 0x20 # complex
|
| - return TagAndLength(tag, len(der)) + der
|
| -
|
| -
|
| -class ENUMERATED(object):
|
| - def __init__(self, value):
|
| - self.value = value
|
| -
|
| - def ToDER(self):
|
| - return TagAndLength(10, 1) + chr(self.value)
|
| -
|
| -
|
| -class SEQUENCE(object):
|
| - def __init__(self, children):
|
| - self.children = children
|
| -
|
| - def ToDER(self):
|
| - der = ''.join([ToDER(x) for x in self.children])
|
| - return TagAndLength(0x30, len(der)) + der
|
| -
|
| -
|
| -class SET(object):
|
| - def __init__(self, children):
|
| - self.children = children
|
| -
|
| - def ToDER(self):
|
| - der = ''.join([ToDER(x) for x in self.children])
|
| - return TagAndLength(0x31, len(der)) + der
|
| -
|
| -
|
| -class OCTETSTRING(object):
|
| - def __init__(self, val):
|
| - self.val = val
|
| -
|
| - def ToDER(self):
|
| - return TagAndLength(4, len(self.val)) + self.val
|
| -
|
| -
|
| -class OID(object):
|
| - def __init__(self, parts):
|
| - self.parts = parts
|
| -
|
| - def ToDER(self):
|
| - if len(self.parts) < 2 or self.parts[0] > 6 or self.parts[1] >= 40:
|
| - assert False
|
| -
|
| - der = [self.parts[0]*40 + self.parts[1]]
|
| - for x in self.parts[2:]:
|
| - if x == 0:
|
| - der.append(0)
|
| - else:
|
| - octets = []
|
| - while x != 0:
|
| - v = x & 0x7f
|
| - if len(octets) > 0:
|
| - v |= 0x80
|
| - octets.append(v)
|
| - x >>= 7
|
| - octets.reverse()
|
| - der = der + octets
|
| -
|
| - return TagAndLength(6, len(der)) + ToBytes(der)
|
| -
|
| -
|
| -class UTCTime(object):
|
| - def __init__(self, time_str):
|
| - self.time_str = time_str
|
| -
|
| - def ToDER(self):
|
| - return TagAndLength(23, len(self.time_str)) + self.time_str
|
| -
|
| -
|
| -class GeneralizedTime(object):
|
| - def __init__(self, time_str):
|
| - self.time_str = time_str
|
| -
|
| - def ToDER(self):
|
| - return TagAndLength(24, len(self.time_str)) + self.time_str
|
| -
|
| -
|
| -class BitString(object):
|
| - def __init__(self, bits):
|
| - self.bits = bits
|
| -
|
| - def ToDER(self):
|
| - return TagAndLength(3, 1 + len(self.bits)) + "\x00" + self.bits
|
|
|