From 7354aa0d08a06eac42c635670a55f858bd23c943 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Fri, 23 Dec 2022 12:28:06 +0100 Subject: [PATCH 01/45] internal/bech32: remove data length limit Fixes #453 --- cmd/age/age_test.go | 35 ++++++++++++++++++++++++++++++++++ cmd/age/testdata/plugin.txt | 20 +++++++++++++++++++ internal/bech32/bech32.go | 6 ------ internal/bech32/bech32_test.go | 9 +++++---- 4 files changed, 60 insertions(+), 10 deletions(-) create mode 100644 cmd/age/testdata/plugin.txt diff --git a/cmd/age/age_test.go b/cmd/age/age_test.go index 7dfd5fe..a95cdbe 100644 --- a/cmd/age/age_test.go +++ b/cmd/age/age_test.go @@ -5,6 +5,7 @@ package main import ( + "bufio" "os" "testing" @@ -28,11 +29,45 @@ func TestMain(m *testing.M) { main() return 0 }, + "age-plugin-test": func() (exitCode int) { + // TODO: use plugin server package once it's available. + switch os.Args[1] { + case "--age-plugin=recipient-v1": + scanner := bufio.NewScanner(os.Stdin) + scanner.Scan() // add-recipient + scanner.Scan() // body + scanner.Scan() // wrap-file-key + scanner.Scan() // body + fileKey := scanner.Text() + scanner.Scan() // done + scanner.Scan() // body + os.Stdout.WriteString("-> recipient-stanza 0 test\n") + os.Stdout.WriteString(fileKey + "\n") + os.Stdout.WriteString("-> done\n\n") + return 0 + case "--age-plugin=identity-v1": + scanner := bufio.NewScanner(os.Stdin) + scanner.Scan() // add-identity + scanner.Scan() // body + scanner.Scan() // recipient-stanza + scanner.Scan() // body + fileKey := scanner.Text() + scanner.Scan() // done + scanner.Scan() // body + os.Stdout.WriteString("-> file-key 0\n") + os.Stdout.WriteString(fileKey + "\n") + os.Stdout.WriteString("-> done\n\n") + return 0 + default: + return 1 + } + }, })) } func TestScript(t *testing.T) { testscript.Run(t, testscript.Params{ Dir: "testdata", + // TODO: enable AGEDEBUG=plugin without breaking stderr checks. }) } diff --git a/cmd/age/testdata/plugin.txt b/cmd/age/testdata/plugin.txt new file mode 100644 index 0000000..01e3ed8 --- /dev/null +++ b/cmd/age/testdata/plugin.txt @@ -0,0 +1,20 @@ +# encrypt and decrypt a file with a test plugin +age -r age1test10qdmzv9q -o test.age input +age -d -i key.txt test.age +cmp stdout input +! stderr . + +# very long identity and recipient +age -R long-recipient.txt -o test.age input +age -d -i long-key.txt test.age +cmp stdout input +! stderr . + +-- input -- +test +-- key.txt -- +AGE-PLUGIN-TEST-10Q32NLXM +-- long-recipient.txt -- +age1test10pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7qj6rl8p +-- long-key.txt -- +AGE-PLUGIN-TEST-10PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7RC0PU8S7Q5U8SUD diff --git a/internal/bech32/bech32.go b/internal/bech32/bech32.go index c12864f..6f8a48c 100644 --- a/internal/bech32/bech32.go +++ b/internal/bech32/bech32.go @@ -111,9 +111,6 @@ func Encode(hrp string, data []byte) (string, error) { if err != nil { return "", err } - if len(hrp)+len(values)+7 > 90 { - return "", fmt.Errorf("too long: hrp length=%d, data length=%d", len(hrp), len(values)) - } if len(hrp) < 1 { return "", fmt.Errorf("invalid HRP: %q", hrp) } @@ -144,9 +141,6 @@ func Encode(hrp string, data []byte) (string, error) { // Decode decodes a Bech32 string. If the string is uppercase, the HRP will be uppercase. func Decode(s string) (hrp string, data []byte, err error) { - if len(s) > 90 { - return "", nil, fmt.Errorf("too long: len=%d", len(s)) - } if strings.ToLower(s) != s && strings.ToUpper(s) != s { return "", nil, fmt.Errorf("mixed case") } diff --git a/internal/bech32/bech32_test.go b/internal/bech32/bech32_test.go index 4568d62..01ce361 100644 --- a/internal/bech32/bech32_test.go +++ b/internal/bech32/bech32_test.go @@ -28,7 +28,7 @@ func TestBech32(t *testing.T) { str string valid bool }{ - {"A12UEL5L", true}, + {"A12UEL5L", true}, // empty {"a12uel5l", true}, {"an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs", true}, {"abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", true}, @@ -44,11 +44,12 @@ func TestBech32(t *testing.T) { {"1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", false}, // empty hrp // invalid character (DEL) in hrp {"spl" + string(rune(127)) + "t1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", false}, - // too long - {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", false}, + + // long vectors that we do accept despite the spec, see Issue 453 + {"long10pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7rc0pu8s7qfcsvr0", true}, + {"an84characterslonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1569pvx", true}, // BIP 173 invalid vectors. - {"an84characterslonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1569pvx", false}, {"pzry9x0s0muk", false}, {"1pzry9x0s0muk", false}, {"x1b4n0q5v", false}, From a1fabee4c8c5ebe4569cc692f39489406ccd4ad0 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 26 Dec 2022 21:28:00 +0100 Subject: [PATCH 02/45] all: upgrade dependencies --- go.mod | 10 +++++----- go.sum | 22 ++++++++-------------- 2 files changed, 13 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index d4d5b40..eaaefd5 100644 --- a/go.mod +++ b/go.mod @@ -1,12 +1,12 @@ module filippo.io/age -go 1.17 +go 1.19 require ( - filippo.io/edwards25519 v1.0.0-rc.1 - golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 - golang.org/x/sys v0.0.0-20210903071746-97244b99971b - golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b + filippo.io/edwards25519 v1.0.0 + golang.org/x/crypto v0.4.0 + golang.org/x/sys v0.3.0 + golang.org/x/term v0.3.0 ) // Test dependencies. diff --git a/go.sum b/go.sum index c415032..3f691a9 100644 --- a/go.sum +++ b/go.sum @@ -1,20 +1,14 @@ -filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= -filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= +filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e h1:hLDldUUKSNgXte+2H8yZzPVStWa7697IJer9wwfW/dg= github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e/go.mod h1:dNbK7mWDMlmf5ttOAJJg+a4CyamnqDRrw+Uja1sBETc= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 h1:HWj/xjIHfjYU5nVXpTM0s39J9CbLn7Cc5a7IC5rwsMQ= -golang.org/x/crypto v0.0.0-20210817164053-32db794688a5/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b h1:3Dq0eVHn0uaQJmPO+/aYPI/fRMqdrVDbu7MQcku54gg= -golang.org/x/sys v0.0.0-20210903071746-97244b99971b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b h1:9zKuko04nR4gjZ4+DNjHqRlAJqbJETHwiNKDqTfOjfE= -golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= +golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= +golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= +golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/term v0.3.0 h1:qoo4akIqOcDME5bhc/NgxUdovd6BSS2uMsVjB56q1xI= +golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= From c6dcfa1efcaa27879762a934d5bea0d1b83a894c Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 26 Dec 2022 21:29:10 +0100 Subject: [PATCH 03/45] all: temporarily disable testscript tests They require a replace directive that breaks "go install". Will revert this after tagging a new latest release. --- cmd/age/age_test.go | 2 ++ go.mod | 9 --------- go.sum | 6 ------ 3 files changed, 2 insertions(+), 15 deletions(-) diff --git a/cmd/age/age_test.go b/cmd/age/age_test.go index a95cdbe..975af17 100644 --- a/cmd/age/age_test.go +++ b/cmd/age/age_test.go @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. +//go:build ignore + package main import ( diff --git a/go.mod b/go.mod index eaaefd5..ad5526b 100644 --- a/go.mod +++ b/go.mod @@ -8,12 +8,3 @@ require ( golang.org/x/sys v0.3.0 golang.org/x/term v0.3.0 ) - -// Test dependencies. -require ( - github.com/creack/pty v1.1.18 // indirect - github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect - github.com/rogpeppe/go-internal v1.8.1 -) - -replace github.com/rogpeppe/go-internal => github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e diff --git a/go.sum b/go.sum index 3f691a9..e5a1adc 100644 --- a/go.sum +++ b/go.sum @@ -1,11 +1,5 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e h1:hLDldUUKSNgXte+2H8yZzPVStWa7697IJer9wwfW/dg= -github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e/go.mod h1:dNbK7mWDMlmf5ttOAJJg+a4CyamnqDRrw+Uja1sBETc= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= From 5471e05672de168766f5f11453fd324c53c264e5 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 26 Dec 2022 22:09:03 +0100 Subject: [PATCH 04/45] Revert "all: temporarily disable testscript tests" This reverts commit 90a446549a5f003c09e76ccb057051969eadd17a. --- cmd/age/age_test.go | 2 -- go.mod | 9 +++++++++ go.sum | 6 ++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/cmd/age/age_test.go b/cmd/age/age_test.go index 975af17..a95cdbe 100644 --- a/cmd/age/age_test.go +++ b/cmd/age/age_test.go @@ -2,8 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build ignore - package main import ( diff --git a/go.mod b/go.mod index ad5526b..eaaefd5 100644 --- a/go.mod +++ b/go.mod @@ -8,3 +8,12 @@ require ( golang.org/x/sys v0.3.0 golang.org/x/term v0.3.0 ) + +// Test dependencies. +require ( + github.com/creack/pty v1.1.18 // indirect + github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect + github.com/rogpeppe/go-internal v1.8.1 +) + +replace github.com/rogpeppe/go-internal => github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e diff --git a/go.sum b/go.sum index e5a1adc..3f691a9 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,11 @@ filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e h1:hLDldUUKSNgXte+2H8yZzPVStWa7697IJer9wwfW/dg= +github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e/go.mod h1:dNbK7mWDMlmf5ttOAJJg+a4CyamnqDRrw+Uja1sBETc= +github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= +github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= +github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= golang.org/x/crypto v0.4.0/go.mod h1:3quD/ATkf6oY+rnes5c3ExXTbLc8mueNue5/DoinL80= golang.org/x/sys v0.3.0 h1:w8ZOecv6NaNa/zC8944JTU3vz4u6Lagfk4RPQxv92NQ= From edf7388f7731b274b055dcab3ec4006cc4961b68 Mon Sep 17 00:00:00 2001 From: "Berk D. Demir" Date: Thu, 29 Dec 2022 12:34:31 -0800 Subject: [PATCH 05/45] age: depend on c2sp.org/CCTV/age for TestVectors Simplifies importing test data from CCTV without needing to invoke "go mod download" from TestVectors. Makes life easier for package builders with no networking, like Nixpkgs. --- go.mod | 1 + go.sum | 2 ++ testkit_test.go | 33 ++++++--------------------------- 3 files changed, 9 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index eaaefd5..7f5a6b8 100644 --- a/go.mod +++ b/go.mod @@ -11,6 +11,7 @@ require ( // Test dependencies. require ( + c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03 github.com/creack/pty v1.1.18 // indirect github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect github.com/rogpeppe/go-internal v1.8.1 diff --git a/go.sum b/go.sum index 3f691a9..ec52009 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03 h1:0e2QjhWG02SgzlUOvNYaFraf04OBsUPOLxf+K+Ae/yM= +c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03/go.mod h1:FomMrUJ2Lxt5jCLmZkG3FHa72zUprnhd3v/Z18Snm4w= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e h1:hLDldUUKSNgXte+2H8yZzPVStWa7697IJer9wwfW/dg= diff --git a/testkit_test.go b/testkit_test.go index e4480b4..ab315e5 100644 --- a/testkit_test.go +++ b/testkit_test.go @@ -11,50 +11,29 @@ import ( "bytes" "crypto/sha256" "encoding/hex" - "encoding/json" "errors" "io" - "os" - "os/exec" - "path/filepath" + "io/fs" "strings" "testing" "filippo.io/age" "filippo.io/age/armor" + + agetest "c2sp.org/CCTV/age" ) func TestVectors(t *testing.T) { - if _, err := exec.LookPath("go"); err != nil { - t.Skipf("skipping test because 'go' command is unavailable: %v", err) - } - - // Download the testkit files from CCTV using `go mod download -json` so the - // cached source of the testdata can be reused. - path := "c2sp.org/CCTV/age@v0.0.0-20221027185432-cfaa74dc42af" - cmd := exec.Command("go", "mod", "download", "-json", path) - output, err := cmd.Output() - if err != nil { - t.Fatalf("failed to run `go mod download -json %s`, output: %s", path, output) - } - var dm struct { - Dir string // absolute path to cached source root directory - } - if err := json.Unmarshal(output, &dm); err != nil { - t.Fatal(err) - } - testkitDir := filepath.Join(dm.Dir, "testdata") - - tests, err := filepath.Glob(testkitDir + "/*") + tests, err := fs.ReadDir(agetest.Vectors, ".") if err != nil { t.Fatal(err) } for _, test := range tests { - contents, err := os.ReadFile(test) + name := test.Name() + contents, err := fs.ReadFile(agetest.Vectors, name) if err != nil { t.Fatal(err) } - name := filepath.Base(test) t.Run(name, func(t *testing.T) { testVector(t, contents) }) From 8e3f74c283b2e9b3cd0ec661fa4008504e536d20 Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Mon, 2 Jan 2023 13:31:28 +0100 Subject: [PATCH 06/45] cmd/age: deflake TestScript and update testscript --- cmd/age/age_test.go | 4 ++++ go.mod | 4 ++-- go.sum | 6 ++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/cmd/age/age_test.go b/cmd/age/age_test.go index a95cdbe..3d8793b 100644 --- a/cmd/age/age_test.go +++ b/cmd/age/age_test.go @@ -43,6 +43,8 @@ func TestMain(m *testing.M) { scanner.Scan() // body os.Stdout.WriteString("-> recipient-stanza 0 test\n") os.Stdout.WriteString(fileKey + "\n") + scanner.Scan() // ok + scanner.Scan() // body os.Stdout.WriteString("-> done\n\n") return 0 case "--age-plugin=identity-v1": @@ -56,6 +58,8 @@ func TestMain(m *testing.M) { scanner.Scan() // body os.Stdout.WriteString("-> file-key 0\n") os.Stdout.WriteString(fileKey + "\n") + scanner.Scan() // ok + scanner.Scan() // body os.Stdout.WriteString("-> done\n\n") return 0 default: diff --git a/go.mod b/go.mod index 7f5a6b8..13f1712 100644 --- a/go.mod +++ b/go.mod @@ -12,9 +12,9 @@ require ( // Test dependencies. require ( c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03 - github.com/creack/pty v1.1.18 // indirect github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect github.com/rogpeppe/go-internal v1.8.1 ) -replace github.com/rogpeppe/go-internal => github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e +// https://github.com/rogpeppe/go-internal/pull/172 +replace github.com/rogpeppe/go-internal => github.com/FiloSottile/go-internal v1.8.2-0.20230102123319-d43ebe7f1660 diff --git a/go.sum b/go.sum index ec52009..9bcb745 100644 --- a/go.sum +++ b/go.sum @@ -2,10 +2,8 @@ c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03 h1:0e2QjhWG02SgzlUOvNYaFraf c2sp.org/CCTV/age v0.0.0-20221230231406-5ea85644bd03/go.mod h1:FomMrUJ2Lxt5jCLmZkG3FHa72zUprnhd3v/Z18Snm4w= filippo.io/edwards25519 v1.0.0 h1:0wAIcmJUqRdI8IJ/3eGi5/HwXZWPujYXXlkrQogz0Ek= filippo.io/edwards25519 v1.0.0/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= -github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e h1:hLDldUUKSNgXte+2H8yZzPVStWa7697IJer9wwfW/dg= -github.com/FiloSottile/go-internal v1.8.2-0.20220728122003-0ced171a3e0e/go.mod h1:dNbK7mWDMlmf5ttOAJJg+a4CyamnqDRrw+Uja1sBETc= -github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= -github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= +github.com/FiloSottile/go-internal v1.8.2-0.20230102123319-d43ebe7f1660 h1:o9Uw6fW8MF/K9RlbCO5e/5e6uXPdwND1NyRnn1NHjgE= +github.com/FiloSottile/go-internal v1.8.2-0.20230102123319-d43ebe7f1660/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e h1:aoZm08cpOy4WuID//EZDgcC4zIxODThtZNPirFr42+A= github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= golang.org/x/crypto v0.4.0 h1:UVQgzMY87xqpKNgb+kDsll2Igd33HszWHFLmpaRMq/8= From 502b180b1708b8ec49a4e4e926ca8950c0b2b780 Mon Sep 17 00:00:00 2001 From: andros21 Date: Sat, 22 Apr 2023 09:46:50 +0000 Subject: [PATCH 07/45] README: dark/light mode logo (#500) https://docs.github.com/en/get-started/writing-on-github/getting-started-with-writing-and-formatting-on-github/basic-writing-and-formatting-syntax#specifying-the-theme-an-image-is-shown-to --- README.md | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index d630287..1b3e928 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -

The age logo, an wireframe of St. Peters dome in Rome, with the text: age, file encryption

+

+ + + + The age logo, an wireframe of St. Peters dome in Rome, with the text: age, file encryption + +

[![Go Reference](https://pkg.go.dev/badge/filippo.io/age.svg)](https://pkg.go.dev/filippo.io/age) [![man page]()](https://filippo.io/age/age.1) From 877ca247e3a8131cb486c78986868853a5fe603a Mon Sep 17 00:00:00 2001 From: zhsj Date: Sat, 22 Apr 2023 17:53:03 +0800 Subject: [PATCH 08/45] .github/workflows: update ronn to 0.9 (#483) This fixes apostrophes in generated manpage. Apostrophes should be entered as `'` ; using `\'` produces an acute accent. ronn in Ubuntu is from https://github.com/apjanke/ronn-ng --- .github/workflows/ronn.yml | 6 +- .github/workflows/ronn/Dockerfile | 8 -- .github/workflows/ronn/Gemfile | 5 - .github/workflows/ronn/Gemfile.lock | 20 ---- .github/workflows/ronn/action.yml | 4 - doc/age-keygen.1 | 38 +------ doc/age-keygen.1.html | 33 +++--- doc/age.1 | 155 +++------------------------- doc/age.1.html | 153 +++++++++++++++++---------- 9 files changed, 134 insertions(+), 288 deletions(-) delete mode 100644 .github/workflows/ronn/Dockerfile delete mode 100644 .github/workflows/ronn/Gemfile delete mode 100644 .github/workflows/ronn/Gemfile.lock delete mode 100644 .github/workflows/ronn/action.yml diff --git a/.github/workflows/ronn.yml b/.github/workflows/ronn.yml index eb4f50c..504a77b 100644 --- a/.github/workflows/ronn.yml +++ b/.github/workflows/ronn.yml @@ -6,7 +6,6 @@ on: paths: - '**.ronn' - '**/ronn.yml' - - '**/ronn/**' permissions: contents: read jobs: @@ -16,9 +15,10 @@ jobs: steps: - name: Checkout uses: actions/checkout@v2 + - name: Install ronn + run: sudo apt-get update && sudo apt-get install -y ronn - name: Run ronn - uses: ./.github/workflows/ronn - id: ronn + run: bash -O globstar -c 'ronn **/*.ronn' - name: Undo email mangling # rdiscount randomizes the output for no good reason, which causes # changes to always get committed. Sigh. diff --git a/.github/workflows/ronn/Dockerfile b/.github/workflows/ronn/Dockerfile deleted file mode 100644 index f373ec3..0000000 --- a/.github/workflows/ronn/Dockerfile +++ /dev/null @@ -1,8 +0,0 @@ -FROM ruby:3.0.1-buster - -RUN apt-get update && apt-get install -y groff -RUN bundle config --global frozen 1 -COPY Gemfile Gemfile.lock ./ -RUN bundle install -ENTRYPOINT ["bash", "-O", "globstar", "-c", \ - "/usr/local/bundle/bin/ronn **/*.ronn"] diff --git a/.github/workflows/ronn/Gemfile b/.github/workflows/ronn/Gemfile deleted file mode 100644 index 544b2e3..0000000 --- a/.github/workflows/ronn/Gemfile +++ /dev/null @@ -1,5 +0,0 @@ -# frozen_string_literal: true - -source "https://rubygems.org" - -gem "ronn", "~> 0.7.3" diff --git a/.github/workflows/ronn/Gemfile.lock b/.github/workflows/ronn/Gemfile.lock deleted file mode 100644 index 45c7cd5..0000000 --- a/.github/workflows/ronn/Gemfile.lock +++ /dev/null @@ -1,20 +0,0 @@ -GEM - remote: https://rubygems.org/ - specs: - hpricot (0.8.6) - mustache (1.1.1) - rdiscount (2.2.0.2) - ronn (0.7.3) - hpricot (>= 0.8.2) - mustache (>= 0.7.0) - rdiscount (>= 1.5.8) - -PLATFORMS - aarch64-linux - x86_64-linux - -DEPENDENCIES - ronn (~> 0.7.3) - -BUNDLED WITH - 2.2.15 diff --git a/.github/workflows/ronn/action.yml b/.github/workflows/ronn/action.yml deleted file mode 100644 index 4734499..0000000 --- a/.github/workflows/ronn/action.yml +++ /dev/null @@ -1,4 +0,0 @@ -name: Ronn -runs: - using: docker - image: Dockerfile diff --git a/doc/age-keygen.1 b/doc/age-keygen.1 index 3aced70..65f65aa 100644 --- a/doc/age-keygen.1 +++ b/doc/age-keygen.1 @@ -1,88 +1,56 @@ -.\" generated with Ronn/v0.7.3 -.\" http://github.com/rtomayko/ronn/tree/0.7.3 -. -.TH "AGE\-KEYGEN" "1" "September 2022" "" "" -. +.\" generated with Ronn-NG/v0.9.1 +.\" http://github.com/apjanke/ronn-ng/tree/0.9.1 +.TH "AGE\-KEYGEN" "1" "January 2023" "" .SH "NAME" \fBage\-keygen\fR \- generate age(1) key pairs -. .SH "SYNOPSIS" \fBage\-keygen\fR [\fB\-o\fR \fIOUTPUT\fR] -. .br \fBage\-keygen\fR \fB\-y\fR [\fB\-o\fR \fIOUTPUT\fR] [\fIINPUT\fR] -. .br -. .SH "DESCRIPTION" \fBage\-keygen\fR generates a new native age(1) key pair, and outputs the identity to standard output or to the \fIOUTPUT\fR file\. The output includes the public key and the current time as comments\. -. .P If the output is not going to a terminal, \fBage\-keygen\fR prints the public key to standard error\. -. .SH "OPTIONS" -. .TP \fB\-o\fR, \fB\-\-output\fR=\fIOUTPUT\fR Write the identity to \fIOUTPUT\fR instead of standard output\. -. .IP If \fIOUTPUT\fR already exists, it is not overwritten\. -. .TP \fB\-y\fR Read an identity file from \fIINPUT\fR or from standard input and output the corresponding recipient(s), one per line, with no comments\. -. .TP \fB\-\-version\fR Print the version and exit\. -. .SH "EXAMPLES" Generate a new identity: -. .IP "" 4 -. .nf - $ age\-keygen # created: 2021\-01\-02T15:30:45+01:00 # public key: age1lvyvwawkr0mcnnnncaghunadrqkmuf9e6507x9y920xxpp866cnql7dp2z AGE\-SECRET\-KEY\-1N9JEPW6DWJ0ZQUDX63F5A03GX8QUW7PXDE39N8UYF82VZ9PC8UFS3M7XA9 -. .fi -. .IP "" 0 -. .P Write a new identity to \fBkey\.txt\fR: -. .IP "" 4 -. .nf - $ age\-keygen \-o key\.txt Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p -. .fi -. .IP "" 0 -. .P Convert an identity to a recipient: -. .IP "" 4 -. .nf - $ age\-keygen \-y key\.txt age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p -. .fi -. .IP "" 0 -. .SH "SEE ALSO" age(1) -. .SH "AUTHORS" Filippo Valsorda \fIage@filippo\.io\fR diff --git a/doc/age-keygen.1.html b/doc/age-keygen.1.html index 167ca32..d0c69fd 100644 --- a/doc/age-keygen.1.html +++ b/doc/age-keygen.1.html @@ -1,8 +1,8 @@ - - + + age-keygen(1) - generate age(1) key pairs