PNG  IHDR;IDATxܻn0K )(pA 7LeG{ §㻢|ذaÆ 6lذaÆ 6lذaÆ 6lom$^yذag5bÆ 6lذaÆ 6lذa{ 6lذaÆ `}HFkm,mӪôô! x|'ܢ˟;E:9&ᶒ}{v]n&6 h_tڠ͵-ҫZ;Z$.Pkž)!o>}leQfJTu іچ\X=8Rن4`Vwl>nG^is"ms$ui?wbs[m6K4O.4%/bC%t Mז -lG6mrz2s%9s@-k9=)kB5\+͂Zsٲ Rn~GRC wIcIn7jJhۛNCS|j08yiHKֶۛkɈ+;SzL/F*\Ԕ#"5m2[S=gnaPeғL lذaÆ 6l^ḵaÆ 6lذaÆ 6lذa; _ذaÆ 6lذaÆ 6lذaÆ RIENDB` #----------------------------------------------------------------------------- # Copyright (c) 2008-2010, David P. D. Moss. All rights reserved. # # Released under the BSD license. See the LICENSE file for details. #----------------------------------------------------------------------------- """A basic implementation of RFC 1924 ;-)""" from netaddr.core import AddrFormatError from netaddr.ip import IPAddress from netaddr.compat import _zip #----------------------------------------------------------------------------- def chr_range(low, high): """Returns all characters between low and high chars.""" return [chr(i) for i in range(ord(low), ord(high)+1)] #: Base 85 integer index to character lookup table. BASE_85 = chr_range('0', '9') + chr_range('A', 'Z') + chr_range('a', 'z') + \ ['!', '#', '$', '%', '&', '(',')', '*', '+', '-',';', '<', '=', '>', '?', '@', '^', '_','`', '{', '|', '}', '~'] #: Base 85 digit to integer lookup table. BASE_85_DICT = dict(_zip(BASE_85, range(0, 86))) #----------------------------------------------------------------------------- def ipv6_to_base85(addr): """Convert a regular IPv6 address to base 85.""" ip = IPAddress(addr) int_val = int(ip) remainder = [] while int_val > 0: remainder.append(int_val % 85) int_val //= 85 return ''.join([BASE_85[w] for w in reversed(remainder)]) #----------------------------------------------------------------------------- def base85_to_ipv6(addr): """ Convert a base 85 IPv6 address to its hexadecimal format. """ tokens = list(addr) if len(tokens) != 20: raise AddrFormatError('Invalid base 85 IPv6 addess: %r' % addr) result = 0 for i, num in enumerate(reversed(tokens)): num = BASE_85_DICT[num] result += (num * 85 ** i) ip = IPAddress(result, 6) return str(ip)