From c50f1ae2e1778edd5d1f780a3dcf3892c7d845db Mon Sep 17 00:00:00 2001 From: Filippo Valsorda Date: Tue, 21 Jun 2022 12:41:38 +0100 Subject: [PATCH] cmd/age: replace tests with testscript --- cmd/age/age.go | 2 +- cmd/age/age_test.go | 102 ++++-------------- cmd/age/testdata/default_key.txt | 6 -- cmd/age/testdata/default_password.txt | 1 - cmd/age/testdata/ed25519.txt | 29 +++++ cmd/age/testdata/good_ed25519.age | Bin 215 -> 0 bytes cmd/age/testdata/good_ed25519_key.txt | 7 -- cmd/age/testdata/good_ed25519_key.txt.pub | 1 - cmd/age/testdata/good_rsa.age | Bin 644 -> 0 bytes cmd/age/testdata/good_rsa_key.txt.pub | 1 - cmd/age/testdata/good_simple.age | Bin 203 -> 0 bytes cmd/age/testdata/nomatch_scrypt.age | Bin 185 -> 0 bytes cmd/age/testdata/nomatch_x25519.age | Bin 203 -> 0 bytes .../testdata/{good_rsa_key.txt => rsa.txt} | 22 ++++ cmd/age/testdata/usage.txt | 20 ++++ cmd/age/testdata/x25519.txt | 21 ++++ cmd/age/tui.go | 20 +++- go.mod | 5 + go.sum | 4 + 19 files changed, 139 insertions(+), 102 deletions(-) delete mode 100644 cmd/age/testdata/default_key.txt delete mode 100644 cmd/age/testdata/default_password.txt create mode 100644 cmd/age/testdata/ed25519.txt delete mode 100644 cmd/age/testdata/good_ed25519.age delete mode 100644 cmd/age/testdata/good_ed25519_key.txt delete mode 100644 cmd/age/testdata/good_ed25519_key.txt.pub delete mode 100644 cmd/age/testdata/good_rsa.age delete mode 100644 cmd/age/testdata/good_rsa_key.txt.pub delete mode 100644 cmd/age/testdata/good_simple.age delete mode 100644 cmd/age/testdata/nomatch_scrypt.age delete mode 100644 cmd/age/testdata/nomatch_x25519.age rename cmd/age/testdata/{good_rsa_key.txt => rsa.txt} (62%) create mode 100644 cmd/age/testdata/usage.txt create mode 100644 cmd/age/testdata/x25519.txt diff --git a/cmd/age/age.go b/cmd/age/age.go index 648a9eb..d53558e 100644 --- a/cmd/age/age.go +++ b/cmd/age/age.go @@ -103,7 +103,7 @@ func main() { if len(os.Args) == 1 { flag.Usage() - os.Exit(1) + exit(1) } var ( diff --git a/cmd/age/age_test.go b/cmd/age/age_test.go index fd3c45e..3c3527b 100644 --- a/cmd/age/age_test.go +++ b/cmd/age/age_test.go @@ -5,93 +5,29 @@ package main import ( - "errors" - "io" "os" - "path/filepath" - "strings" "testing" - "filippo.io/age" + "github.com/rogpeppe/go-internal/testscript" ) -func TestVectors(t *testing.T) { - var defaultIDs []age.Identity - - password, err := os.ReadFile("testdata/default_password.txt") - if err != nil { - t.Fatal(err) - } - p := strings.TrimSpace(string(password)) - i, err := age.NewScryptIdentity(p) - if err != nil { - t.Fatal(err) - } - defaultIDs = append(defaultIDs, i) - - ids, err := parseIdentitiesFile("testdata/default_key.txt") - if err != nil { - t.Fatal(err) - } - defaultIDs = append(defaultIDs, ids...) - - files, _ := filepath.Glob("testdata/*.age") - for _, f := range files { - _, name := filepath.Split(f) - name = strings.TrimSuffix(name, ".age") - expectPass := strings.HasPrefix(name, "good_") - expectFailure := strings.HasPrefix(name, "fail_") - expectNoMatch := strings.HasPrefix(name, "nomatch_") - t.Run(name, func(t *testing.T) { - identities := defaultIDs - ids, err := parseIdentitiesFile("testdata/" + name + "_key.txt") - if err == nil { - identities = ids - } - password, err := os.ReadFile("testdata/" + name + "_password.txt") - if err == nil { - p := strings.TrimSpace(string(password)) - i, err := age.NewScryptIdentity(p) - if err != nil { - t.Fatal(err) +func TestMain(m *testing.M) { + os.Exit(testscript.RunMain(m, map[string]func() int{ + "age": func() (exitCode int) { + testOnlyPanicInsteadOfExit = true + defer func() { + if testOnlyDidExit { + exitCode = recover().(int) } - identities = []age.Identity{i} - } - - in, err := os.Open("testdata/" + name + ".age") - if err != nil { - t.Fatal(err) - } - r, err := age.Decrypt(in, identities...) - if expectFailure { - if err == nil { - _, err = io.ReadAll(r) - } - if err == nil { - t.Fatal("expected Decrypt or Read failure") - } - if e := new(age.NoIdentityMatchError); errors.As(err, &e) { - t.Errorf("got ErrIncorrectIdentity, expected more specific error") - } - } else if expectNoMatch { - if err == nil { - t.Fatal("expected Decrypt failure") - } - if e := new(age.NoIdentityMatchError); !errors.As(err, &e) { - t.Errorf("expected ErrIncorrectIdentity, got %v", err) - } - } else if expectPass { - if err != nil { - t.Fatal(err) - } - out, err := io.ReadAll(r) - if err != nil { - t.Fatal(err) - } - t.Logf("%s", out) - } else { - t.Fatal("invalid test vector: missing prefix") - } - }) - } + }() + main() + return 0 + }, + })) +} + +func TestScript(t *testing.T) { + testscript.Run(t, testscript.Params{ + Dir: "testdata", + }) } diff --git a/cmd/age/testdata/default_key.txt b/cmd/age/testdata/default_key.txt deleted file mode 100644 index 3195a61..0000000 --- a/cmd/age/testdata/default_key.txt +++ /dev/null @@ -1,6 +0,0 @@ -# created: 2021-02-02T13:09:43+01:00 -# public key: age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 - -# TODO: regenerate empty_recipient_body.age -AGE-SECRET-KEY-1TRYTV7PQS5XPUYSTAQZCD7DQCWC7Q77YJD7UVFJRMW4J82Q6930QS70MRX diff --git a/cmd/age/testdata/default_password.txt b/cmd/age/testdata/default_password.txt deleted file mode 100644 index adc6efa..0000000 --- a/cmd/age/testdata/default_password.txt +++ /dev/null @@ -1 +0,0 @@ -now-major-idea-author-clerk-bronze-all-soul-uncover-glad diff --git a/cmd/age/testdata/ed25519.txt b/cmd/age/testdata/ed25519.txt new file mode 100644 index 0000000..e874e2b --- /dev/null +++ b/cmd/age/testdata/ed25519.txt @@ -0,0 +1,29 @@ +# encrypt and decrypt a file with -R +age -R key.pem.pub -o test.age input +age -d -i key.pem test.age +stdout test + +# encrypt and decrypt a file with -i +age -e -i key.pem -o test.age input +age -d -i key.pem test.age +stdout test + +# encrypt and decrypt a file with the wrong key +age -R otherkey.pem.pub -o test.age input +! age -d -i key.pem test.age +stderr 'no identity matched any of the recipients' + +-- input -- +test +-- key.pem -- +-----BEGIN OPENSSH PRIVATE KEY----- +b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW +QyNTUxOQAAACB/aTuac9tiWRGrKEtixFlryYlGCPTOpdbmXN9RRmDF2gAAAKDgV/GC4Ffx +ggAAAAtzc2gtZWQyNTUxOQAAACB/aTuac9tiWRGrKEtixFlryYlGCPTOpdbmXN9RRmDF2g +AAAECvFoQXQzXgJLQ+Gz4PfEcfyZwC2gUjOiWTD//mTPyD8H9pO5pz22JZEasoS2LEWWvJ +iUYI9M6l1uZc31FGYMXaAAAAG2ZpbGlwcG9AQmlzdHJvbWF0aC1NMS5sb2NhbAEC +-----END OPENSSH PRIVATE KEY----- +-- key.pem.pub -- +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH9pO5pz22JZEasoS2LEWWvJiUYI9M6l1uZc31FGYMXa +-- otherkey.pem.pub -- +ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIJFlMdZUMrWjJ3hh60MLALXSqUdAjBo/qEMJzvpekpoM diff --git a/cmd/age/testdata/good_ed25519.age b/cmd/age/testdata/good_ed25519.age deleted file mode 100644 index d6ddc32b9e9e96f0960beebbba48beb95e6f23d6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 215 zcmV;|04V=qXJsvAZewzJaCB*JZZ2z>EiE8JYEL+EW;1qVI5Tf_ zaY$2UY-d+cHD^(8WinE4Z#i^kFM4NJMR_@NFjWc^=-IB)7bQyY9mj5JJYv>5pe0pj R6IvZKBL$hU;7-EnpP#eVN=pC$ diff --git a/cmd/age/testdata/good_ed25519_key.txt b/cmd/age/testdata/good_ed25519_key.txt deleted file mode 100644 index df1d9ab..0000000 --- a/cmd/age/testdata/good_ed25519_key.txt +++ /dev/null @@ -1,7 +0,0 @@ ------BEGIN OPENSSH PRIVATE KEY----- -b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW -QyNTUxOQAAACB/aTuac9tiWRGrKEtixFlryYlGCPTOpdbmXN9RRmDF2gAAAKDgV/GC4Ffx -ggAAAAtzc2gtZWQyNTUxOQAAACB/aTuac9tiWRGrKEtixFlryYlGCPTOpdbmXN9RRmDF2g -AAAECvFoQXQzXgJLQ+Gz4PfEcfyZwC2gUjOiWTD//mTPyD8H9pO5pz22JZEasoS2LEWWvJ -iUYI9M6l1uZc31FGYMXaAAAAG2ZpbGlwcG9AQmlzdHJvbWF0aC1NMS5sb2NhbAEC ------END OPENSSH PRIVATE KEY----- diff --git a/cmd/age/testdata/good_ed25519_key.txt.pub b/cmd/age/testdata/good_ed25519_key.txt.pub deleted file mode 100644 index 5be7d60..0000000 --- a/cmd/age/testdata/good_ed25519_key.txt.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIH9pO5pz22JZEasoS2LEWWvJiUYI9M6l1uZc31FGYMXa diff --git a/cmd/age/testdata/good_rsa.age b/cmd/age/testdata/good_rsa.age deleted file mode 100644 index a693af3fde5302105886140fc2b459d94e76bc9d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmWO2JF=5d007X=0y|5q*E&oLa3PT9&G3CmZU~U@O=Sp#&n5hG2^6nz2in@&y#=_E zH{-Yk#}(M8$Ne5BV?$AR+FUW;6v{n27Jn z_4(#YQ)wHXSR`_VJz8n{9xZQ0?!gf}_4^~}gWQOTY%8Ad{e)vT*2B7{#Fo6POaG~Ylcp$|`C zqa@44qOT~E6TKDch%CEmDsFKpTIeU5S;Pm=^=`!NnhoJy3p&2&!+n7BDXQ1` zvH(=!qp1}Y6YSd-+qZdRQ|lct^$dhYbEOcRD2yVaW_R@+UN4R1pRhv)$85B=3&6YJ z9KyAzZs_J(qlmFvrgGAY!mSgrvguOhdU-wVLqb93ptFe4Hi_#~5MmEx6p6SV$E@!q z0)rdIkaL0T3LpyStq&4zN>dIf6?P=|N;HbY{68c~&@7QN(x-yzw2+BAHcQDK@@#45 z(&pIvR7tXhUM3UA@uYtX%IU}$$RjMZ0U>X sF}+8#>?{A-Ns{HZpADcMXUH||9 diff --git a/cmd/age/testdata/good_rsa_key.txt.pub b/cmd/age/testdata/good_rsa_key.txt.pub deleted file mode 100644 index 6c63ce8..0000000 --- a/cmd/age/testdata/good_rsa_key.txt.pub +++ /dev/null @@ -1 +0,0 @@ -ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDULTit0KUehbigbhsQaZo2oXLgMug8nTfnzDhcf5cEzdOJZyF6i5aRQbqbXIOYeTS3Shpp/iE6d60qi93JBBfveAZqr76tK7lVK8fstvAAGgbo9L9Ru5nhWX0HTlZUOodUT2E0rgAeoFzfvcZTaajzPmikrESmuaJLcdJ3crbCIyovkTxc85KbSn+Ky5grntdVR7GXve0HuIgwuSXGNyO0/hEQyhCEco4w53LZDXl3Dlxgb52u0QCsFFiQJmZ3RWnbCz2mNjM9Vo5KRt2pJ4u74lVsfXCvAqG4GsDd5WXCNRNaQ7gUdw1eSnvvcy3hxeEqLNN9tHaFCjEuyPfXfTVd3t0SlXreyoNbV75rYvZ2F6aLxyMMys+5bpnX0tu2LSq4Bvj5xIsBokjgEd3UXyj1eErsQdUJ0gghAMpXOjVbISwPAGMvUsH2unGbjvfaxnK57S7KAXOYznjhBf5ayIleAc+4LVD/KeMtGbpkyXXozC9jwH9cZBbGU4BtElAbzh8= diff --git a/cmd/age/testdata/good_simple.age b/cmd/age/testdata/good_simple.age deleted file mode 100644 index 5f7ab75d819630ec753f05db25e8d1d67e428217..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 203 zcmV;+05tz$XJsvAZewzJaCB*JZZ2crsFYNKR%>b#!wu zNij1qOLt8}d0As@T6#-EM@@QARbfqQNI6P0dNc|-aYcG+bV)`uPIF8~Zg_S$MMZQ& zcTZ7iSZXy_NNg)eS7Ag;PGv!BD>Mo%EiE8UD>rO2O)qa|LwR~yR%}p8Gc!X}NJuzA zWMoD#X>?0BFi}=3NlA8CSV0Q2UD^pC$t!w614+sH=jt7}$B*eu{QQ%up5O{dh$Ydb FqZd^JM`r*4 diff --git a/cmd/age/testdata/nomatch_scrypt.age b/cmd/age/testdata/nomatch_scrypt.age deleted file mode 100644 index 49f0cbcd3a2eee57557194a0505da0cfcddf6e98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 185 zcmYdHPt{G$OD?J`D9Oyv)5|YP*Do{V(zR1428$^~nC1J21UY6o2N_mmrWgd|o zDwsP3c?E=JC3!jH1I?@ z@(s-h4a#u}FtR9dPV@;hDlV=p_DT!NNawOJj*Li5(a*^;)-QMSHOVtC%W?P2bP7&S z%W${INy`i{4K+{9%JMe$@a59g)m88}(he=CN-Zf4Fw!=63aE4sG;uZy^9_kKt12%r z4axK?2upUWG$~A}^yOmad9i+OI^VKVjmf_Pt!k1555IrwBX+Xm*Bjfk6+g|AI%*XG D7x_kb diff --git a/cmd/age/testdata/good_rsa_key.txt b/cmd/age/testdata/rsa.txt similarity index 62% rename from cmd/age/testdata/good_rsa_key.txt rename to cmd/age/testdata/rsa.txt index e7bd862..c9ac561 100644 --- a/cmd/age/testdata/good_rsa_key.txt +++ b/cmd/age/testdata/rsa.txt @@ -1,3 +1,21 @@ +# encrypt and decrypt a file with -R +age -R key.pem.pub -o test.age input +age -d -i key.pem test.age +stdout test + +# encrypt and decrypt a file with -i +age -e -i key.pem -o test.age input +age -d -i key.pem test.age +stdout test + +# encrypt and decrypt a file with the wrong key +age -R otherkey.pem.pub -o test.age input +! age -d -i key.pem test.age +stderr 'no identity matched any of the recipients' + +-- input -- +test +-- key.pem -- -----BEGIN OPENSSH PRIVATE KEY----- b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn NhAAAAAwEAAQAAAYEA1C04rdClHoW4oG4bEGmaNqFy4DLoPJ0358w4XH+XBM3TiWcheouW @@ -36,3 +54,7 @@ EX0mNDXOlKOP2YAIMrDt5CkPdEh6qQG21LCZXTWmwheZ9iN2vOl/fKqUW9lqd/kTe6WsON hIpZhs2+oz54Riq1ZwzO9NkcYrvZoDKbDopL1r2ibw0mkgCJrxpWi0Yt2Iooh4GXXqP5C9 T8hrZCbrVJkjKd5QAAABtmaWxpcHBvQEJpc3Ryb21hdGgtTTEubG9jYWwBAgMEBQY= -----END OPENSSH PRIVATE KEY----- +-- key.pem.pub -- +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDULTit0KUehbigbhsQaZo2oXLgMug8nTfnzDhcf5cEzdOJZyF6i5aRQbqbXIOYeTS3Shpp/iE6d60qi93JBBfveAZqr76tK7lVK8fstvAAGgbo9L9Ru5nhWX0HTlZUOodUT2E0rgAeoFzfvcZTaajzPmikrESmuaJLcdJ3crbCIyovkTxc85KbSn+Ky5grntdVR7GXve0HuIgwuSXGNyO0/hEQyhCEco4w53LZDXl3Dlxgb52u0QCsFFiQJmZ3RWnbCz2mNjM9Vo5KRt2pJ4u74lVsfXCvAqG4GsDd5WXCNRNaQ7gUdw1eSnvvcy3hxeEqLNN9tHaFCjEuyPfXfTVd3t0SlXreyoNbV75rYvZ2F6aLxyMMys+5bpnX0tu2LSq4Bvj5xIsBokjgEd3UXyj1eErsQdUJ0gghAMpXOjVbISwPAGMvUsH2unGbjvfaxnK57S7KAXOYznjhBf5ayIleAc+4LVD/KeMtGbpkyXXozC9jwH9cZBbGU4BtElAbzh8= +-- otherkey.pem.pub -- +ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDF0OPu95EY25O5KmYFLIkiZZFKUlfvaRgmfIT6OcZvPRXBzo0MS/lcrYvAc0RsUVbZ1B3Y9oWmKt/IMXTztCXiza70rO1NI7ciayv5svY/wGMoveutddhA64IjrQKs4m+6Qmjs/dYTnfsk1BzmXrdRKUSqH6c4Id7pRLC1ySLu+4og3nTTpBRBpg+uSkc4Ua6ce6A6RX14PPJ+TAXMfZyKNyaubQhgzLB/CfdXxZqWdAnyooiE7fb6CEB5uppnA5BpPdcWAkSixbwxRHbRC+OSCqMOV6+z+NlO/qSOKJcXfCQnJP/qjJTJde0dYhXG4RILOzIkGVieGJJONDXvj61mMj568IhJz0AEf/UMhvEL79iJ6yZW82Go/zcYkDDfd3KRE3pW+6p9Onu3XqOiQABS+9rEVRBnqYsPajiHBIanBeXpWKGbjznakvxhdRifhOWwAsQDfLmGzh+JnV1vOUjyxKtLNv9zi/oeuYCaIyF7F6en8LMbYSz8YONMZygGxMU= diff --git a/cmd/age/testdata/usage.txt b/cmd/age/testdata/usage.txt new file mode 100644 index 0000000..e526e87 --- /dev/null +++ b/cmd/age/testdata/usage.txt @@ -0,0 +1,20 @@ +# -help +age -p -help +! stdout . +stderr 'Usage:' + +# -h +age -p -h +! stdout . +stderr 'Usage:' + +# unknown flag +! age -p -this-flag-does-not-exist +! stdout . +stderr 'flag provided but not defined' +stderr 'Usage:' + +# no arguments +! age +! stdout . +stderr 'Usage:' diff --git a/cmd/age/testdata/x25519.txt b/cmd/age/testdata/x25519.txt new file mode 100644 index 0000000..e1bf8e9 --- /dev/null +++ b/cmd/age/testdata/x25519.txt @@ -0,0 +1,21 @@ +# encrypt and decrypt a file with -r +age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o test.age input +age -d -i key.txt test.age +stdout test + +# encrypt and decrypt a file with -i +age -e -i key.txt -o test.age input +age -d -i key.txt test.age +stdout test + +# encrypt and decrypt a file with the wrong key +age -r age12phkzssndd5axajas2h74vtge62c86xjhd6u9anyanqhzvdg6sps0xthgl -o test.age input +! age -d -i key.txt test.age +stderr 'no identity matched any of the recipients' + +-- input -- +test +-- key.txt -- +# created: 2021-02-02T13:09:43+01:00 +# public key: age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef +AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0 diff --git a/cmd/age/tui.go b/cmd/age/tui.go index cc2fa95..6b8ae76 100644 --- a/cmd/age/tui.go +++ b/cmd/age/tui.go @@ -34,7 +34,8 @@ func printf(format string, v ...interface{}) { func errorf(format string, v ...interface{}) { l.Printf("age: error: "+format, v...) - l.Fatalf("age: report unexpected or unhelpful errors at https://filippo.io/age/report") + l.Printf("age: report unexpected or unhelpful errors at https://filippo.io/age/report") + exit(1) } func warningf(format string, v ...interface{}) { @@ -46,7 +47,22 @@ func errorWithHint(error string, hints ...string) { for _, hint := range hints { l.Printf("age: hint: %s", hint) } - l.Fatalf("age: report unexpected or unhelpful errors at https://filippo.io/age/report") + l.Printf("age: report unexpected or unhelpful errors at https://filippo.io/age/report") + exit(1) +} + +// If testOnlyPanicInsteadOfExit is true, exit will set testOnlyDidExit and +// panic instead of calling os.Exit. This way, the wrapper in TestMain can +// recover the panic and return the exit code only if it was originated in exit. +var testOnlyPanicInsteadOfExit bool +var testOnlyDidExit bool + +func exit(code int) { + if testOnlyPanicInsteadOfExit { + testOnlyDidExit = true + panic(code) + } + os.Exit(code) } // clearLine clears the current line on the terminal, or opens a new line if diff --git a/go.mod b/go.mod index 0120f90..4d01f6a 100644 --- a/go.mod +++ b/go.mod @@ -4,7 +4,12 @@ go 1.17 require ( filippo.io/edwards25519 v1.0.0-rc.1 + github.com/rogpeppe/go-internal v1.8.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 ) + +require github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e // indirect + +replace github.com/rogpeppe/go-internal v1.8.1 => github.com/FiloSottile/go-internal v1.8.2-0.20220621104300-7a6402ba46b3 // https://github.com/rogpeppe/go-internal/pull/160 diff --git a/go.sum b/go.sum index b26cf57..9b905de 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,9 @@ filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= +github.com/FiloSottile/go-internal v1.8.2-0.20220621104300-7a6402ba46b3 h1:GbSKIczszYD/5OPHiW+iH6GrQRcpfQ5gS0XrWIZ+V6Q= +github.com/FiloSottile/go-internal v1.8.2-0.20220621104300-7a6402ba46b3/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.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=