Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
What's new
10
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Open sidebar
mf
go-multiaddr
Commits
d288e979
Commit
d288e979
authored
Mar 29, 2019
by
idk
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
variable-length garlic32 addresses
parent
dfe50992
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
64 additions
and
18 deletions
+64
-18
multiaddr_test.go
multiaddr_test.go
+19
-1
protocols.go
protocols.go
+9
-0
transcoders.go
transcoders.go
+36
-17
No files found.
multiaddr_test.go
View file @
d288e979
...
...
@@ -54,6 +54,11 @@ func TestConstructFails(t *testing.T) {
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA:0"
,
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA:-1"
,
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA@:666"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu77"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu:80"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq:-1"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzu@"
,
"/udp/1234/sctp"
,
"/udp/1234/udt/1234"
,
"/udp/1234/utp/1234"
,
...
...
@@ -97,6 +102,11 @@ func TestConstructSucceeds(t *testing.T) {
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA/http"
,
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA/udp/8080"
,
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA/tcp/8080"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuqzwas"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq/http"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq/tcp/8080"
,
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq/udp/8080"
,
"/udp/0"
,
"/tcp/0"
,
"/sctp/0"
,
...
...
@@ -181,13 +191,15 @@ func TestStringToBytes(t *testing.T) {
t
.
Error
(
"failed to decode hex"
,
h
)
}
//t.Log("196", h, []byte(b1))
b2
,
err
:=
stringToBytes
(
s
)
if
err
!=
nil
{
t
.
Error
(
"failed to convert"
,
s
,
err
)
}
if
!
bytes
.
Equal
(
b1
,
b2
)
{
t
.
Error
(
"failed to convert
\n
"
,
s
,
"to
\n
"
,
b1
,
"got
\n
"
,
b2
)
t
.
Error
(
"failed to convert
\n
"
,
s
,
"to
\n
"
,
hex
.
EncodeToString
(
b1
)
,
"got
\n
"
,
hex
.
EncodeToString
(
b2
)
)
}
if
err
:=
validateBytes
(
b2
);
err
!=
nil
{
...
...
@@ -202,6 +214,9 @@ func TestStringToBytes(t *testing.T) {
testString
(
"/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd:1234"
,
"bd03adadec040be047f9658668b11a504f3155001f231a37f54c4476c07fb4cc139ed7e30304d2"
)
testString
(
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA"
,
"ca0383038d3fc8c976a86ae4e78ba378e75ec41bc9ab1542a9cb422581987e118f5cb0c024f3639d6ad9b3aff613672f07bfbbbfc2f920ef910534ecaa6ff9c03e0fa4872a764d2fce6d4cfc5a5a9800cd95944cc9ef0241f753fe71494a175f334b35682459acadc4076428ab49b5a83a49d2ea2366b06461e4a559b0111fa750e0de0c138a94d1231ed5979572ff53922905636221994bdabc44bd0c17fef11622b16432db3f193400af53cc61aa9bfc0c4c8d874b41a6e18732f0b60f5662ef1a89c80589dd8366c90bb58bb85ead56356aba2a244950ca170abbd01094539014f84bdd383e4a10e00cee63dfc3e809506e2d9b54edbdca1bace6eaa119e68573d30533791fba830f5d80be5c051a77c09415e3b8fe3139400848be5244b8ae96bb0c4a24f819cba0488f34985eac741d3359180bd72cafa1559e4c19f54ea8cedbb6a5afde4319396eb92aab340c60a50cc2284580cb3ad09017e8d9abc60269b3d8d687680bd86ce834412273d4f2e3bf68dd3d6fe87e2426ac658cd5c77fd5c0aa000000"
)
testString
(
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq"
,
"cb0320efbcd45d0c5dc79781ac6f20ea5055a036afb48d45a52e7d68ec7d4338919e69"
)
}
func
TestBytesToString
(
t
*
testing
.
T
)
{
...
...
@@ -219,6 +234,7 @@ func TestBytesToString(t *testing.T) {
s2
,
err
:=
bytesToString
(
b
)
if
err
!=
nil
{
t
.
Log
(
"236"
,
s1
,
":"
,
string
(
h
),
":"
,
s2
)
t
.
Error
(
"failed to convert"
,
b
,
err
)
}
...
...
@@ -234,6 +250,8 @@ func TestBytesToString(t *testing.T) {
testString
(
"/onion3/vww6ybal4bd7szmgncyruucpgfkqahzddi37ktceo3ah7ngmcopnpyyd:1234"
,
"bd03adadec040be047f9658668b11a504f3155001f231a37f54c4476c07fb4cc139ed7e30304d2"
)
testString
(
"/garlic64/jT~IyXaoauTni6N4517EG8mrFUKpy0IlgZh-EY9csMAk82Odatmzr~YTZy8Hv7u~wvkg75EFNOyqb~nAPg-khyp2TS~ObUz8WlqYAM2VlEzJ7wJB91P-cUlKF18zSzVoJFmsrcQHZCirSbWoOknS6iNmsGRh5KVZsBEfp1Dg3gwTipTRIx7Vl5Vy~1OSKQVjYiGZS9q8RL0MF~7xFiKxZDLbPxk0AK9TzGGqm~wMTI2HS0Gm4Ycy8LYPVmLvGonIBYndg2bJC7WLuF6tVjVquiokSVDKFwq70BCUU5AU-EvdOD5KEOAM7mPfw-gJUG4tm1TtvcobrObqoRnmhXPTBTN5H7qDD12AvlwFGnfAlBXjuP4xOUAISL5SRLiulrsMSiT4GcugSI80mF6sdB0zWRgL1yyvoVWeTBn1TqjO27alr95DGTluuSqrNAxgpQzCKEWAyzrQkBfo2avGAmmz2NaHaAvYbOg0QSJz1PLjv2jdPW~ofiQmrGWM1cd~1cCqAAAA"
,
"ca0383038d3fc8c976a86ae4e78ba378e75ec41bc9ab1542a9cb422581987e118f5cb0c024f3639d6ad9b3aff613672f07bfbbbfc2f920ef910534ecaa6ff9c03e0fa4872a764d2fce6d4cfc5a5a9800cd95944cc9ef0241f753fe71494a175f334b35682459acadc4076428ab49b5a83a49d2ea2366b06461e4a559b0111fa750e0de0c138a94d1231ed5979572ff53922905636221994bdabc44bd0c17fef11622b16432db3f193400af53cc61aa9bfc0c4c8d874b41a6e18732f0b60f5662ef1a89c80589dd8366c90bb58bb85ead56356aba2a244950ca170abbd01094539014f84bdd383e4a10e00cee63dfc3e809506e2d9b54edbdca1bace6eaa119e68573d30533791fba830f5d80be5c051a77c09415e3b8fe3139400848be5244b8ae96bb0c4a24f819cba0488f34985eac741d3359180bd72cafa1559e4c19f54ea8cedbb6a5afde4319396eb92aab340c60a50cc2284580cb3ad09017e8d9abc60269b3d8d687680bd86ce834412273d4f2e3bf68dd3d6fe87e2426ac658cd5c77fd5c0aa000000"
)
testString
(
"/garlic32/566niximlxdzpanmn4qouucvua3k7neniwss47li5r6ugoertzuq"
,
"cb0320efbcd45d0c5dc79781ac6f20ea5055a036afb48d45a52e7d68ec7d4338919e69"
)
}
func
TestBytesSplitAndJoin
(
t
*
testing
.
T
)
{
...
...
protocols.go
View file @
d288e979
...
...
@@ -21,6 +21,7 @@ const (
P_ONION
=
0x01BC
// also for backwards compatibility
P_ONION3
=
0x01BD
P_GARLIC64
=
0x01CA
P_GARLIC32
=
0x01CB
P_P2P_WEBRTC_DIRECT
=
0x0114
)
...
...
@@ -101,6 +102,13 @@ var (
Size
:
LengthPrefixedVarSize
,
Transcoder
:
TranscoderGarlic64
,
}
protoGARLIC32
=
Protocol
{
Name
:
"garlic32"
,
Code
:
P_GARLIC32
,
VCode
:
CodeToVarint
(
P_GARLIC32
),
Size
:
LengthPrefixedVarSize
,
Transcoder
:
TranscoderGarlic32
,
}
protoUTP
=
Protocol
{
Name
:
"utp"
,
Code
:
P_UTP
,
...
...
@@ -160,6 +168,7 @@ func init() {
protoONION2
,
protoONION3
,
protoGARLIC64
,
protoGARLIC32
,
protoUTP
,
protoUDT
,
protoQUIC
,
...
...
transcoders.go
View file @
d288e979
...
...
@@ -250,33 +250,52 @@ var TranscoderGarlic32 = NewTranscoderFromFunctions(garlic32StB, garlic32BtS, ga
var
garlicBase32Encoding
=
base32
.
NewEncoding
(
"abcdefghijklmnopqrstuvwxyz234567"
)
func
garlic32StB
(
s
string
)
([]
byte
,
error
)
{
// garlic address without the ".b32.i2p" substring, with padding
if
len
(
s
)
!=
52
||
len
(
s
)
<
55
||
len
(
s
)
>
63
{
return
nil
,
fmt
.
Errorf
(
"failed to parse garlic addr: %s not a i2p base32 address. len: %d"
,
s
,
len
(
s
))
}
garlicHostBytes
,
err
:=
garlicBase32Encoding
.
Decode
(
s
)
// garlic address without the ".b32.i2p" substring
if
len
(
s
)
<
55
{
if
len
(
s
)
!=
52
{
return
nil
,
fmt
.
Errorf
(
"failed to parse garlic addr: %s not a i2p base32 address. len: %d"
,
s
,
len
(
s
))
}
}
padout
:=
func
(
s2
string
)
string
{
str
:=
""
for
x
:=
0
;
x
<
56
;
x
++
{
if
x
<
len
(
s
)
{
str
+=
string
(
s
[
x
])
}
else
{
str
+=
"="
}
}
return
str
}
garlicHostBytes
,
err
:=
garlicBase32Encoding
.
DecodeString
(
padout
(
s
))
if
err
!=
nil
{
return
nil
,
fmt
.
Errorf
(
"failed to decode base32 garlic addr: %s
%s
"
,
s
,
err
)
return
nil
,
fmt
.
Errorf
(
"failed to decode base32 garlic addr: %s
err %s len %v
"
,
s
,
err
,
len
(
s
)
)
}
bytes
:=
[]
byte
{}
bytes
=
append
(
bytes
,
garlicHostBytes
...
)
return
bytes
,
nil
return
garlicHostBytes
,
nil
}
func
garlic32BtS
(
b
[]
byte
)
(
string
,
error
)
{
if
len
(
b
)
!=
32
||
len
(
b
)
<
35
{
return
""
,
fmt
.
Errorf
(
"failed to validate garlic addr: %s not an i2p base32 address. len: %d
\n
"
,
b
,
len
(
b
))
if
len
(
b
)
>
35
{
if
len
(
b
)
<
32
{
return
""
,
fmt
.
Errorf
(
"failed to validate garlic addr: %s not an i2p base32 address. len: %d
\n
"
,
b
,
len
(
b
))
}
}
addr
:=
strings
.
Replace
(
strings
.
ToLower
(
garlicBase32Encoding
.
EncodeToString
(
b
)),
"="
,
""
,
-
1
)
return
addr
,
nil
unpad
:=
func
(
s2
string
)
string
{
return
strings
.
Replace
(
s2
,
"="
,
""
,
-
1
)
}
return
unpad
(
garlicBase32Encoding
.
EncodeToString
(
b
)),
nil
}
func
garlic32Validate
(
b
[]
byte
)
error
{
if
len
(
b
)
!=
32
||
len
(
b
)
<
35
{
return
fmt
.
Errorf
(
"failed to validate garlic addr: %s not an i2p base32 address. len: %d
\n
"
,
b
,
len
(
b
))
if
len
(
b
)
>
35
{
if
len
(
b
)
<
32
{
return
fmt
.
Errorf
(
"failed to validate garlic addr: %s not an i2p base32 address. len: %d
\n
"
,
b
,
len
(
b
))
}
}
str
,
_
:=
garlic32BtS
(
b
)
fmt
.
Printf
(
"%s, %d"
,
str
,
len
(
b
))
return
nil
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment