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..5e15d7250c1a7e815e170dc565b9db8c1c899f18 |
--- /dev/null |
+++ b/chrome/test/pyautolib/asn1der.py |
@@ -0,0 +1,67 @@ |
+# 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 |
+ |
Nirnimesh
2012/04/10 17:48:55
nit: need 2 blank lines here
|
+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)) |