gotr: provide potr (rev f5551d6). now only depends on PyCrypto>=2.1
This commit is contained in:
65
gotr/potr/utils.py
Normal file
65
gotr/potr/utils.py
Normal file
@@ -0,0 +1,65 @@
|
||||
# Copyright 2012 Kjell Braden <afflux@pentabarf.de>
|
||||
#
|
||||
# This file is part of the python-potr library.
|
||||
#
|
||||
# python-potr is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Lesser General Public License as published by
|
||||
# the Free Software Foundation; either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# python-potr is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Lesser General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Lesser General Public License
|
||||
# along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# some python3 compatibilty
|
||||
from __future__ import unicode_literals
|
||||
|
||||
|
||||
import struct
|
||||
|
||||
def pack_mpi(n):
|
||||
return pack_data(long_to_bytes(n))
|
||||
def read_mpi(data):
|
||||
n, data = read_data(data)
|
||||
return bytes_to_long(n), data
|
||||
def pack_data(data):
|
||||
return struct.pack(b'!I', len(data)) + data
|
||||
def read_data(data):
|
||||
datalen, data = unpack(b'!I', data)
|
||||
return data[:datalen], data[datalen:]
|
||||
def unpack(fmt, buf):
|
||||
s = struct.Struct(fmt)
|
||||
return s.unpack(buf[:s.size]) + (buf[s.size:],)
|
||||
|
||||
|
||||
def bytes_to_long(b):
|
||||
l = len(b)
|
||||
s = 0
|
||||
for i in range(l):
|
||||
s += byte_to_long(b[i:i+1]) << 8*(l-i-1)
|
||||
return s
|
||||
|
||||
def long_to_bytes(l):
|
||||
b = b''
|
||||
while l != 0:
|
||||
b = long_to_byte(l & 0xff) + b
|
||||
l >>= 8
|
||||
return b
|
||||
|
||||
def byte_to_long(b):
|
||||
return struct.unpack(b'B', b)[0]
|
||||
def long_to_byte(l):
|
||||
return struct.pack(b'B', l)
|
||||
|
||||
def human_hash(fp):
|
||||
fp = fp.upper()
|
||||
fplen = len(fp)
|
||||
wordsize = fplen//5
|
||||
buf = ''
|
||||
for w in range(0, fplen, wordsize):
|
||||
buf += '{0} '.format(fp[w:w+wordsize])
|
||||
return buf.rstrip()
|
||||
Reference in New Issue
Block a user