annotate mod_s2s_v6mesh/base32.lib.lua @ 6513:5fb466693e85

mod_storage_xmlarchive: Ensure list index files are removed using os.remove() on the list files leaves the new index files behind since util.datamanager does not know they are removed. Thanks Link Mauve
author Kim Alvefur <zash@zash.se>
date Tue, 07 Apr 2026 21:10:54 +0200
parents 9f43226c7de1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
6472
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
1 --[[
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
2 borrowed from basexx library for Lua, under MIT License (MIT)
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
3 Copyright (c) 2013 aiq
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
4 The MIT License (MIT)
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
5
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
6 Copyright (c) 2013 aiq
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
7
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
8 Permission is hereby granted, free of charge, to any person obtaining a copy of
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
9 this software and associated documentation files (the "Software"), to deal in
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
10 the Software without restriction, including without limitation the rights to
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
11 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
12 the Software, and to permit persons to whom the Software is furnished to do so,
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
13 subject to the following conditions:
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
14
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
15 The above copyright notice and this permission notice shall be included in all
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
16 copies or substantial portions of the Software.
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
17
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
18 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
19 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
20 FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
21 COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
22 IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
23 CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
24 ----------------------------------------------------------------------------]]
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
25
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
26 local function ignore_set( str, set )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
27 if set then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
28 str = str:gsub( "["..set.."]", "" )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
29 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
30 return str
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
31 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
32
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
33 local function divide_string( str, max )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
34 local result = {}
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
35
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
36 local start = 1
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
37 for i = 1, #str do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
38 if i % max == 0 then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
39 table.insert( result, str:sub( start, i ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
40 start = i + 1
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
41 elseif i == #str then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
42 table.insert( result, str:sub( start, i ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
43 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
44 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
45
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
46 return result
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
47 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
48
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
49 function to_bit( str )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
50 return ( str:gsub( '.', function ( c )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
51 local byte = string.byte( c )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
52 local bits = {}
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
53 for _ = 1,8 do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
54 table.insert( bits, byte % 2 )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
55 byte = math.floor( byte / 2 )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
56 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
57 return table.concat( bits ):reverse()
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
58 end ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
59 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
60
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
61 local function number_to_bit( num, length )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
62 local bits = {}
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
63
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
64 while num > 0 do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
65 local rest = math.floor( math.fmod( num, 2 ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
66 table.insert( bits, rest )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
67 num = ( num - rest ) / 2
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
68 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
69
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
70 while #bits < length do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
71 table.insert( bits, "0" )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
72 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
73
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
74 return string.reverse( table.concat( bits ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
75 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
76
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
77 local function pure_from_bit( str )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
78 return ( str:gsub( '........', function ( cc )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
79 return string.char( tonumber( cc, 2 ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
80 end ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
81 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
82
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
83 local function unexpected_char_error( str, pos )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
84 local c = string.sub( str, pos, pos )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
85 return string.format( "unexpected character at position %d: '%s'", pos, c )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
86 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
87
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
88 local function from_basexx( str, alphabet, bits )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
89 local result = {}
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
90 for i = 1, #str do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
91 local c = string.sub( str, i, i )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
92 if c ~= '=' then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
93 local index = string.find( alphabet, c, 1, true )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
94 if not index then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
95 return nil, unexpected_char_error( str, i )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
96 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
97 table.insert( result, number_to_bit( index - 1, bits ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
98 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
99 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
100
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
101 local value = table.concat( result )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
102 local pad = #value % 8
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
103 return pure_from_bit( string.sub( value, 1, #value - pad ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
104 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
105
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
106 local function to_basexx( str, alphabet, bits, pad )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
107 local bitString = to_bit( str )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
108
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
109 local chunks = divide_string( bitString, bits )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
110 local result = {}
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
111 for _,value in ipairs( chunks ) do
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
112 if ( #value < bits ) then
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
113 value = value .. string.rep( '0', bits - #value )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
114 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
115 local pos = tonumber( value, 2 ) + 1
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
116 table.insert( result, alphabet:sub( pos, pos ) )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
117 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
118
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
119 table.insert( result, pad )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
120 return table.concat( result )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
121 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
122
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
123 local base32Alphabet = "abcdefghijklmnopqrstuvwxyz234567"
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
124 local base32PadMap = { "", "======", "====", "===", "=" }
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
125
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
126 local function from_base32( str, ignore )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
127 str = ignore_set( str, ignore )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
128 return from_basexx( string.lower( str ), base32Alphabet, 5 )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
129 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
130
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
131 function to_base32( str )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
132 return to_basexx( str, base32Alphabet, 5, base32PadMap[ #str % 5 + 1 ] )
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
133 end
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
134
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
135 return {
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
136 decode = from_base32;
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
137 encode = to_base32;
9f43226c7de1 mod_s2s_v6mesh: DNS-less federation for IPv6 networks
Matthew Wild <mwild1@gmail.com>
parents:
diff changeset
138 };