From 99fa80c8f730e00ebc6655e72fbe95e3566e0a57 Mon Sep 17 00:00:00 2001
From: Gabriel Handford
Date: Tue, 21 Jul 2020 13:25:07 -0700
Subject: [PATCH] encoding: Decode helpers (not must)
---
box_test.go | 30 +++++++++++++++---------------
edx25519_test.go | 22 +++++++++++-----------
encoding/encode.go | 16 ++++++++--------
encoding/encode_test.go | 12 ++++++++----
secretbox_test.go | 24 ++++++++++++------------
5 files changed, 54 insertions(+), 50 deletions(-)
diff --git a/box_test.go b/box_test.go
index 78b4f04..4dc6958 100644
--- a/box_test.go
+++ b/box_test.go
@@ -40,21 +40,21 @@ func ExampleBoxSeal() {
}
func TestBox(t *testing.T) {
- ka := keys.Bytes32(encoding.DecodeHex("77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a"))
- kpa := keys.Bytes32(encoding.DecodeHex("8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a"))
- kb := keys.Bytes32(encoding.DecodeHex("5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb"))
- kpb := keys.Bytes32(encoding.DecodeHex("de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f"))
- nonce := keys.Bytes24(encoding.DecodeHex("69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37"))
- plain := encoding.DecodeHex("be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc" +
- "e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31" +
- "0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde" +
- "048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864" +
- "5e0705")
- cipher := encoding.DecodeHex("f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce" +
- "48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972" +
- "71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae" +
- "90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3" +
- "7973f622a43d14a6599b1f654cb45a74e355a5")
+ ka := keys.Bytes32(encoding.MustDecode("77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a", encoding.Hex))
+ kpa := keys.Bytes32(encoding.MustDecode("8520f0098930a754748b7ddcb43ef75a0dbf3a0d26381af4eba4a98eaa9b4e6a", encoding.Hex))
+ kb := keys.Bytes32(encoding.MustDecode("5dab087e624a8a4b79e17f8b83800ee66f3bb1292618b6fd1c2f8b27ff88e0eb", encoding.Hex))
+ kpb := keys.Bytes32(encoding.MustDecode("de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f", encoding.Hex))
+ nonce := keys.Bytes24(encoding.MustDecode("69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37", encoding.Hex))
+ plain := encoding.MustDecode("be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc"+
+ "e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31"+
+ "0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde"+
+ "048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864"+
+ "5e0705", encoding.Hex)
+ cipher := encoding.MustDecode("f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce"+
+ "48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972"+
+ "71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae"+
+ "90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3"+
+ "7973f622a43d14a6599b1f654cb45a74e355a5", encoding.Hex)
alice := keys.NewX25519KeyFromPrivateKey(ka)
bob := keys.NewX25519KeyFromPrivateKey(kb)
diff --git a/edx25519_test.go b/edx25519_test.go
index f1f1fc1..ec41df3 100644
--- a/edx25519_test.go
+++ b/edx25519_test.go
@@ -77,17 +77,17 @@ func ExampleEdX25519Key_Sign() {
}
func TestSign(t *testing.T) {
- // private := encoding.MustHex("b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd")
- // public := encoding.MustHex("77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb")
- kp := encoding.DecodeHex("b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd" +
- "77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb")
- msg := encoding.DecodeHex("916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171" +
- "ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01" +
- "dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313" +
- "c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460" +
- "376d7f3ac22ff372c18f613f2ae2e856af40")
- sig := encoding.DecodeHex("6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b" +
- "4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509")
+ // private := encoding.MustDecode("b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd", encoding.Hex)
+ // public := encoding.MustDecode("77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb", encoding.Hex)
+ kp := encoding.MustDecode("b18e1d0045995ec3d010c387ccfeb984d783af8fbb0f40fa7db126d889f6dadd"+
+ "77f48b59caeda77751ed138b0ec667ff50f8768c25d48309a8f386a2bad187fb", encoding.Hex)
+ msg := encoding.MustDecode("916c7d1d268fc0e77c1bef238432573c39be577bbea0998936add2b50a653171"+
+ "ce18a542b0b7f96c1691a3be6031522894a8634183eda38798a0c5d5d79fbd01"+
+ "dd04a8646d71873b77b221998a81922d8105f892316369d5224c9983372d2313"+
+ "c6b1f4556ea26ba49d46e8b561e0fc76633ac9766e68e21fba7edca93c4c7460"+
+ "376d7f3ac22ff372c18f613f2ae2e856af40", encoding.Hex)
+ sig := encoding.MustDecode("6bd710a368c1249923fc7a1610747403040f0cc30815a00f9ff548a896bbda0b"+
+ "4eb2ca19ebcf917f0f34200a9edbad3901b64ab09cc5ef7b9bcc3c40c0ff7509", encoding.Hex)
key := keys.NewEdX25519KeyFromPrivateKey(keys.Bytes64(kp))
diff --git a/encoding/encode.go b/encoding/encode.go
index 414f6f7..271a5ad 100644
--- a/encoding/encode.go
+++ b/encoding/encode.go
@@ -158,8 +158,8 @@ func MustDecode(s string, encoding Encoding) []byte {
}
// DecodeHex decode base16 (hex).
-func DecodeHex(s string) []byte {
- return MustDecode(s, Hex)
+func DecodeHex(s string) ([]byte, error) {
+ return Decode(s, Hex)
}
// EncodeHex encode base16 (hex).
@@ -168,8 +168,8 @@ func EncodeHex(b []byte) string {
}
// DecodeBase32 decode base32.
-func DecodeBase32(s string) []byte {
- return MustDecode(s, Base32)
+func DecodeBase32(s string) ([]byte, error) {
+ return Decode(s, Base32)
}
// EncodeBase32 encode base32.
@@ -178,8 +178,8 @@ func EncodeBase32(b []byte) string {
}
// DecodeBase62 decode base62.
-func DecodeBase62(s string) []byte {
- return MustDecode(s, Base62)
+func DecodeBase62(s string) ([]byte, error) {
+ return Decode(s, Base62)
}
// EncodeBase62 encode base62.
@@ -188,8 +188,8 @@ func EncodeBase62(b []byte) string {
}
// DecodeBase64 decode base64.
-func DecodeBase64(s string) []byte {
- return MustDecode(s, Base64)
+func DecodeBase64(s string) ([]byte, error) {
+ return Decode(s, Base64)
}
// EncodeBase64 encode base64.
diff --git a/encoding/encode_test.go b/encoding/encode_test.go
index b960416..ee7ccc4 100644
--- a/encoding/encode_test.go
+++ b/encoding/encode_test.go
@@ -80,15 +80,19 @@ func TestEncodeBase64(t *testing.T) {
func TestMustEncodeDecode(t *testing.T) {
in := bytes.Repeat([]byte{0x01}, 32)
- out := encoding.DecodeBase32(encoding.EncodeBase32(in))
+ out, err := encoding.DecodeBase32(encoding.EncodeBase32(in))
+ require.NoError(t, err)
require.Equal(t, in, out)
- out = encoding.DecodeBase62(encoding.EncodeBase62(in))
+ out, err = encoding.DecodeBase62(encoding.EncodeBase62(in))
+ require.NoError(t, err)
require.Equal(t, in, out)
- out = encoding.DecodeBase64(encoding.EncodeBase64(in))
+ out, err = encoding.DecodeBase64(encoding.EncodeBase64(in))
+ require.NoError(t, err)
require.Equal(t, in, out)
- out = encoding.DecodeHex(encoding.EncodeHex(in))
+ out, err = encoding.DecodeHex(encoding.EncodeHex(in))
+ require.NoError(t, err)
require.Equal(t, in, out)
}
diff --git a/secretbox_test.go b/secretbox_test.go
index b183f9d..8d8a8c7 100644
--- a/secretbox_test.go
+++ b/secretbox_test.go
@@ -19,18 +19,18 @@ func TestSecretBox(t *testing.T) {
}
func TestSecretBoxSeal(t *testing.T) {
- key := keys.Bytes32(encoding.DecodeHex("1b27556473e985d462cd51197a9a46c76009549eac6474f206c4ee0844f68389"))
- iv := keys.Bytes24(encoding.DecodeHex("69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37"))
- plain := encoding.DecodeHex("be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc" +
- "e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31" +
- "0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde" +
- "048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864" +
- "5e0705")
- cipher := encoding.DecodeHex("f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce" +
- "48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972" +
- "71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae" +
- "90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3" +
- "7973f622a43d14a6599b1f654cb45a74e355a5")
+ key := keys.Bytes32(encoding.MustDecode("1b27556473e985d462cd51197a9a46c76009549eac6474f206c4ee0844f68389", encoding.Hex))
+ iv := keys.Bytes24(encoding.MustDecode("69696ee955b62b73cd62bda875fc73d68219e0036b7a0b37", encoding.Hex))
+ plain := encoding.MustDecode("be075fc53c81f2d5cf141316ebeb0c7b5228c52a4c62cbd44b66849b64244ffc"+
+ "e5ecbaaf33bd751a1ac728d45e6c61296cdc3c01233561f41db66cce314adb31"+
+ "0e3be8250c46f06dceea3a7fa1348057e2f6556ad6b1318a024a838f21af1fde"+
+ "048977eb48f59ffd4924ca1c60902e52f0a089bc76897040e082f93776384864"+
+ "5e0705", encoding.Hex)
+ cipher := encoding.MustDecode("f3ffc7703f9400e52a7dfb4b3d3305d98e993b9f48681273c29650ba32fc76ce"+
+ "48332ea7164d96a4476fb8c531a1186ac0dfc17c98dce87b4da7f011ec48c972"+
+ "71d2c20f9b928fe2270d6fb863d51738b48eeee314a7cc8ab932164548e526ae"+
+ "90224368517acfeabd6bb3732bc0e9da99832b61ca01b6de56244a9e88d5f9b3"+
+ "7973f622a43d14a6599b1f654cb45a74e355a5", encoding.Hex)
encrypted := keys.PrivSecretBoxSeal(plain, iv, key)
require.Equal(t, iv[:], encrypted[:24])