mirror of
https://github.com/FiloSottile/age.git
synced 2026-01-22 11:12:47 +00:00
Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bbe6ce5eeb | ||
|
|
1e1badabf7 | ||
|
|
2293a9afef | ||
|
|
01fe9cd84a | ||
|
|
bd0511b415 | ||
|
|
febaaded87 | ||
|
|
0a40718a93 |
11
.github/workflows/build.yml
vendored
11
.github/workflows/build.yml
vendored
@@ -22,7 +22,7 @@ jobs:
|
||||
- {GOOS: freebsd, GOARCH: amd64}
|
||||
steps:
|
||||
- name: Install Go
|
||||
uses: actions/setup-go@v2
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.x
|
||||
- name: Checkout repository
|
||||
@@ -62,9 +62,9 @@ jobs:
|
||||
GOARCH: ${{ matrix.GOARCH }}
|
||||
GOARM: ${{ matrix.GOARM }}
|
||||
- name: Upload workflow artifacts
|
||||
uses: actions/upload-artifact@v2
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: age-binaries
|
||||
name: age-binaries-${{ matrix.GOOS }}-${{ matrix.GOARCH }}
|
||||
path: age-*
|
||||
upload:
|
||||
name: Upload release binaries
|
||||
@@ -75,9 +75,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download workflow artifacts
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: age-binaries
|
||||
pattern: age-binaries-*
|
||||
merge-multiple: true
|
||||
- name: Upload release artifacts
|
||||
run: gh release upload "$GITHUB_REF_NAME" age-*
|
||||
env:
|
||||
|
||||
4
.github/workflows/ronn.yml
vendored
4
.github/workflows/ronn.yml
vendored
@@ -29,7 +29,7 @@ jobs:
|
||||
mv "$f.tmp" "$f"
|
||||
done
|
||||
- name: Upload generated files
|
||||
uses: actions/upload-artifact@v3
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: man-pages
|
||||
path: |
|
||||
@@ -45,7 +45,7 @@ jobs:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v4
|
||||
- name: Download generated files
|
||||
uses: actions/download-artifact@v2
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: man-pages
|
||||
path: doc/
|
||||
|
||||
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
@@ -33,7 +33,7 @@ jobs:
|
||||
- name: Install bootstrap Go
|
||||
uses: actions/setup-go@v5
|
||||
with:
|
||||
go-version: 1.22
|
||||
go-version: stable
|
||||
- name: Install Go tip (UNIX)
|
||||
if: runner.os != 'Windows'
|
||||
run: |
|
||||
|
||||
@@ -133,6 +133,12 @@ $ age --decrypt -i key.txt data.tar.gz.age > data.tar.gz
|
||||
<code>scoop bucket add extras && scoop install age</code>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td>pkgx</td>
|
||||
<td>
|
||||
<code>pkgx install age</code>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
On Windows, Linux, macOS, and FreeBSD you can use the pre-built binaries.
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"fmt"
|
||||
"io"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"runtime/debug"
|
||||
"strings"
|
||||
@@ -223,9 +224,21 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
var inUseFiles []string
|
||||
for _, i := range identityFlags {
|
||||
if i.Type != "i" {
|
||||
continue
|
||||
}
|
||||
inUseFiles = append(inUseFiles, absPath(i.Value))
|
||||
}
|
||||
for _, f := range recipientsFileFlags {
|
||||
inUseFiles = append(inUseFiles, absPath(f))
|
||||
}
|
||||
|
||||
var in io.Reader = os.Stdin
|
||||
var out io.Writer = os.Stdout
|
||||
if name := flag.Arg(0); name != "" && name != "-" {
|
||||
inUseFiles = append(inUseFiles, absPath(name))
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
errorf("failed to open input file %q: %v", name, err)
|
||||
@@ -246,6 +259,11 @@ func main() {
|
||||
}
|
||||
}
|
||||
if name := outFlag; name != "" && name != "-" {
|
||||
for _, f := range inUseFiles {
|
||||
if f == absPath(name) {
|
||||
errorf("input and output file are the same: %q", name)
|
||||
}
|
||||
}
|
||||
f := newLazyOpener(name)
|
||||
defer func() {
|
||||
if err := f.Close(); err != nil {
|
||||
@@ -465,6 +483,7 @@ func decrypt(identities []age.Identity, in io.Reader, out io.Writer) {
|
||||
if err != nil {
|
||||
errorf("%v", err)
|
||||
}
|
||||
out.Write(nil) // trigger the lazyOpener even if r is empty
|
||||
if _, err := io.Copy(out, r); err != nil {
|
||||
errorf("%v", err)
|
||||
}
|
||||
@@ -531,3 +550,10 @@ func (l *lazyOpener) Close() error {
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func absPath(name string) string {
|
||||
if abs, err := filepath.Abs(name); err == nil {
|
||||
return abs
|
||||
}
|
||||
return name
|
||||
}
|
||||
|
||||
78
cmd/age/testdata/output_file.txt
vendored
Normal file
78
cmd/age/testdata/output_file.txt
vendored
Normal file
@@ -0,0 +1,78 @@
|
||||
# https://github.com/FiloSottile/age/issues/57
|
||||
age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o test.age input
|
||||
! age -o test.out -d -i wrong.txt test.age
|
||||
! exists test.out
|
||||
! age -o test.out -d test.age
|
||||
! exists test.out
|
||||
! age -o test.out -d -i notexist test.age
|
||||
! exists test.out
|
||||
! age -o test.out -d -i wrong.txt notexist
|
||||
! exists test.out
|
||||
! age -o test.out -r BAD
|
||||
! exists test.out
|
||||
! age -o test.out -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef notexist
|
||||
! exists test.out
|
||||
! age -o test.out -p notexist
|
||||
! exists test.out
|
||||
|
||||
# https://github.com/FiloSottile/age/issues/555
|
||||
age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o empty.age empty
|
||||
exists empty.age
|
||||
age -d -i key.txt empty.age
|
||||
! stdout .
|
||||
! stderr .
|
||||
age -d -i key.txt -o new empty.age
|
||||
! stderr .
|
||||
cmp new empty
|
||||
|
||||
# https://github.com/FiloSottile/age/issues/491
|
||||
cp input inputcopy
|
||||
! age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o inputcopy inputcopy
|
||||
stderr 'input and output file are the same'
|
||||
cmp inputcopy input
|
||||
! age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o ./inputcopy inputcopy
|
||||
stderr 'input and output file are the same'
|
||||
cmp inputcopy input
|
||||
mkdir foo
|
||||
! age -r age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef -o inputcopy foo/../inputcopy
|
||||
stderr 'input and output file are the same'
|
||||
cmp inputcopy input
|
||||
cp key.txt keycopy
|
||||
age -e -i keycopy -o test.age input
|
||||
! age -d -i keycopy -o keycopy test.age
|
||||
stderr 'input and output file are the same'
|
||||
cmp key.txt keycopy
|
||||
|
||||
[!linux] [!darwin] skip # no pty support
|
||||
[darwin] [go1.20] skip # https://go.dev/issue/61779
|
||||
|
||||
ttyin terminal
|
||||
! age -p -o inputcopy inputcopy
|
||||
stderr 'input and output file are the same'
|
||||
cmp inputcopy input
|
||||
|
||||
# https://github.com/FiloSottile/age/issues/159
|
||||
ttyin terminal
|
||||
age -p -a -o test.age input
|
||||
ttyin terminalwrong
|
||||
! age -o test.out -d test.age
|
||||
ttyout 'Enter passphrase'
|
||||
stderr 'incorrect passphrase'
|
||||
! exists test.out
|
||||
|
||||
-- terminal --
|
||||
password
|
||||
password
|
||||
-- terminalwrong --
|
||||
wrong
|
||||
-- input --
|
||||
age
|
||||
-- empty --
|
||||
-- key.txt --
|
||||
# created: 2021-02-02T13:09:43+01:00
|
||||
# public key: age1xmwwc06ly3ee5rytxm9mflaz2u56jjj36s0mypdrwsvlul66mv4q47ryef
|
||||
AGE-SECRET-KEY-1EGTZVFFV20835NWYV6270LXYVK2VKNX2MMDKWYKLMGR48UAWX40Q2P2LM0
|
||||
-- wrong.txt --
|
||||
# created: 2024-06-16T12:14:00+02:00
|
||||
# public key: age10k7vsqmeg3sp8elfyq5ts55feg4huarpcaf9dmljn9umydg3gymsvx4dp9
|
||||
AGE-SECRET-KEY-1NPX08S4LELW9K68FKU0U05XXEKG6X7GT004TPNYLF86H3M00D3FQ3VQQNN
|
||||
@@ -1,6 +1,6 @@
|
||||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "AGE\-KEYGEN" "1" "April 2023" ""
|
||||
.TH "AGE\-KEYGEN" "1" "June 2024" ""
|
||||
.SH "NAME"
|
||||
\fBage\-keygen\fR \- generate age(1) key pairs
|
||||
.SH "SYNOPSIS"
|
||||
|
||||
@@ -137,7 +137,7 @@ age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>April 2023</li>
|
||||
<li class='tc'>June 2024</li>
|
||||
<li class='tr'>age-keygen(1)</li>
|
||||
</ol>
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
.\" generated with Ronn-NG/v0.9.1
|
||||
.\" http://github.com/apjanke/ronn-ng/tree/0.9.1
|
||||
.TH "AGE" "1" "April 2023" ""
|
||||
.TH "AGE" "1" "June 2024" ""
|
||||
.SH "NAME"
|
||||
\fBage\fR \- simple, modern, and secure file encryption
|
||||
.SH "SYNOPSIS"
|
||||
|
||||
@@ -432,7 +432,7 @@ $ age -d -i age-yubikey-identity-388178f3.txt secrets.txt.age
|
||||
|
||||
<ol class='man-decor man-foot man foot'>
|
||||
<li class='tl'></li>
|
||||
<li class='tc'>April 2023</li>
|
||||
<li class='tc'>June 2024</li>
|
||||
<li class='tr'>age(1)</li>
|
||||
</ol>
|
||||
|
||||
|
||||
Reference in New Issue
Block a user