Home | Trees | Indices | Help |
|
---|
|
1 # 2 # Copyright (C) 2003-2006, Robey Pointer <robey@lag.net> 3 # 4 # Permission is hereby granted, free of charge, to any person obtaining 5 # a copy of this software and associated documentation files (the 6 # "Software"), to deal in the Software without restriction, including 7 # without limitation the rights to use, copy, modify, merge, publish, 8 # distribute, sublicense, and/or sell copies of the Software, and to 9 # permit persons to whom the Software is furnished to do so, subject to 10 # the following conditions: 11 # 12 # The above copyright notice and this permission notice shall be included 13 # in all copies or substantial portions of the Software. 14 # 15 # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS 16 # OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 # IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY 19 # CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, 20 # TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 21 # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 22 # 23 24 import struct 25 26 27 UNIVERSAL = 0 28 APPLICATION = 1 29 CONTEXT = 2 30 PRIVATE = 3 31 3234 pass35 3638 "turns a normalized byte string into a long-int (adapted from Crypto.Util.number)" 39 out = 0L 40 negative = 0 41 if not always_positive and (len(s) > 0) and (ord(s[0]) >= 0x80): 42 negative = 1 43 if len(s) % 4: 44 filler = '\x00' 45 if negative: 46 filler = '\xff' 47 s = filler * (4 - len(s) % 4) + s 48 for i in range(0, len(s), 4): 49 out = (out << 32) + struct.unpack('>I', s[i:i+4])[0] 50 if negative: 51 out -= (1L << (8 * len(s))) 52 return out53 5456 "turns a long-int into a normalized byte string (adapted from Crypto.Util.number)" 57 # after much testing, this algorithm was deemed to be the fastest 58 s = '' 59 n = long(n) 60 while (n != 0) and (n != -1): 61 s = struct.pack('>I', n & 0xffffffffL) + s 62 n = n >> 32 63 # strip off leading zeros, FFs 64 for i in enumerate(s): 65 if (n == 0) and (i[1] != '\000'): 66 break 67 if (n == -1) and (i[1] != '\xff'): 68 break 69 else: 70 # degenerate case, n was either 0 or -1 71 i = (0,) 72 if n == 0: 73 s = '\000' 74 else: 75 s = '\xff' 76 s = s[i[0]:] 77 if add_sign_padding: 78 if (n == 0) and (ord(s[0]) >= 0x80): 79 s = '\x00' + s 80 if (n == -1) and (ord(s[0]) < 0x80): 81 s = '\xff' + s 82 return s83
Home | Trees | Indices | Help |
|
---|
Generated by Epydoc 3.0alpha3 on Mon Nov 27 18:56:26 2006 | http://epydoc.sourceforge.net |