| Index: chrome/test/pyautolib/asn1der.py
|
| diff --git a/chrome/test/pyautolib/asn1der.py b/chrome/test/pyautolib/asn1der.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..0a3c6220363a8f974139cfa43e38298fb6a34c74
|
| --- /dev/null
|
| +++ b/chrome/test/pyautolib/asn1der.py
|
| @@ -0,0 +1,61 @@
|
| +#!/usr/bin/env python
|
| +# 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.
|
| +
|
| +"""Helper module for ASN.1/DER encoding."""
|
| +
|
| +import binascii
|
| +import struct
|
| +
|
| +# Tags as defined by ASN.1.
|
| +INTEGER = 2
|
| +BIT_STRING = 3
|
| +NULL = 5
|
| +OBJECT_IDENTIFIER = 6
|
| +SEQUENCE = 0x30
|
| +
|
| +def Data(tag, data):
|
| + """Generic type-length-value encoder.
|
| +
|
| + Args:
|
| + tag: the tag.
|
| + data: the data for the given tag.
|
| + Returns:
|
| + encoded TLV value.
|
| + """
|
| + if len(data) == 0:
|
| + return struct.pack(">BB", tag, 0);
|
| + assert len(data) <= 0xffff;
|
| + return struct.pack(">BBH", tag, 0x82, len(data)) + data;
|
| +
|
| +def Integer(value):
|
| + """Encodes an integer.
|
| +
|
| + Args:
|
| + value: the long value.
|
| + Returns:
|
| + encoded TLV value.
|
| + """
|
| + data = '%x' % value
|
| + return Data(INTEGER, binascii.unhexlify('00' + '0' * (len(data) % 2) + data))
|
| +
|
| +def Bitstring(value):
|
| + """Encodes a bit string.
|
| +
|
| + Args:
|
| + value: a string holding the binary data.
|
| + Returns:
|
| + encoded TLV value.
|
| + """
|
| + return Data(BIT_STRING, '\x00' + value)
|
| +
|
| +def Sequence(values):
|
| + """Encodes a sequence of other values.
|
| +
|
| + Args:
|
| + values: the list of values, must be strings holding already encoded data.
|
| + Returns:
|
| + encoded TLV value.
|
| + """
|
| + return Data(SEQUENCE, ''.join(values))
|
|
|