mirror of
https://github.com/FiloSottile/age.git
synced 2026-11-08 12:26:58 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
1bf22e2163 | ||
|
|
3d73da544d | ||
|
|
c185781433 |
No files matched your search
@@ -0,0 +1,21 @@
|
||||
# Copyright 2019 Google LLC
|
||||
#
|
||||
# Use of this source code is governed by a BSD-style
|
||||
# license that can be found in the LICENSE file or at
|
||||
# https://developers.google.com/open-source/licenses/bsd
|
||||
|
||||
class Age < Formula
|
||||
desc "Simple, modern, secure file encryption"
|
||||
homepage "https://filippo.io/age"
|
||||
url "https://github.com/FiloSottile/age/archive/v1.0.0-beta1.zip"
|
||||
sha256 "6c7b1de0f312bc6e17e6b26ec27598672d1064e0287f202da5ab7efa9a1bb9d8"
|
||||
|
||||
depends_on "go" => :build
|
||||
|
||||
def install
|
||||
ENV["GOPATH"] = HOMEBREW_CACHE/"go_cache"
|
||||
system "mkdir", bin
|
||||
system "go", "build", "-o", bin, "filippo.io/age/cmd/..."
|
||||
prefix.install_metafiles
|
||||
end
|
||||
end
|
||||
@@ -1,7 +1,57 @@
|
||||
age is meant to be a simple, secure and modern encryption tool with small explicit keys, no config options, and UNIX-style composability. The spec is at [age-encryption.org/v1](https://age-encryption.org/v1).
|
||||
# age
|
||||
|
||||
This implementation is in progress, and things will keep moving around, so it's not yet a good time to contribute, and it's definitely not a good time to rely on it.
|
||||
age is a simple, modern and secure file encryption tool.
|
||||
|
||||
To discuss the spec or other age related topics, please email the mailing list at age-dev@googlegroups.com. Subscribe at [groups.google.com/d/forum/age-dev](https://groups.google.com/d/forum/age-dev) or by emailing age-dev+subscribe@googlegroups.com.
|
||||
I features small explicit keys, no config options, and UNIX-style composability.
|
||||
|
||||
Development is sometimes livestreamed at [twitch.tv/filosottile](https://www.twitch.tv/filosottile).
|
||||
```
|
||||
$ age-keygen -o key.txt
|
||||
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
|
||||
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
|
||||
$ age -d -i key.txt -o data.tar.gz data.tar.gz.age
|
||||
```
|
||||
|
||||
The format specification is at [age-encryption.org/v1](https://age-encryption.org/v1). To discuss the spec or other age related topics, please email the mailing list at age-dev@googlegroups.com. Subscribe at [groups.google.com/d/forum/age-dev](https://groups.google.com/d/forum/age-dev) or by emailing age-dev+subscribe@googlegroups.com.
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
Usage:
|
||||
age -r RECIPIENT [-a] [-o OUTPUT] [INPUT]
|
||||
age --decrypt [-i KEY] [-o OUTPUT] [INPUT]
|
||||
|
||||
Options:
|
||||
-o OUTPUT Write the result to the file at path OUTPUT.
|
||||
-a, --armor Encrypt to a PEM encoded format.
|
||||
-p, --passphrase Encrypt with a passphrase.
|
||||
-r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated.
|
||||
-d, --decrypt Decrypt the input to the output.
|
||||
-i, --identity KEY Use the private key file at path KEY. Can be repeated.
|
||||
|
||||
INPUT defaults to standard input, and OUTPUT defaults to standard output.
|
||||
|
||||
RECIPIENT can be an age public key, as generated by age-keygen, ("age1...")
|
||||
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
|
||||
|
||||
KEY is a path to a file with age secret keys, one per line
|
||||
(ignoring "#" prefixed comments and empty lines), or to an SSH key file.
|
||||
Multiple keys can be provided, and any unused ones will be ignored.
|
||||
```
|
||||
|
||||
## Installation
|
||||
|
||||
On macOS, use Homebrew.
|
||||
|
||||
```
|
||||
brew tap filippo.io/age https://filippo.io/age
|
||||
brew install age
|
||||
```
|
||||
|
||||
On Linux and Windows, use [the pre-built binaries](https://github.com/FiloSottile/age/releases) or build from source with Go 1.13+.
|
||||
|
||||
```
|
||||
git clone https://filippo.io/age && cd age
|
||||
go build filippo.io/cmd/age/...
|
||||
```
|
||||
|
||||
Help from new packagers is very welcome.
|
||||
@@ -9,12 +9,12 @@ package main
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"io"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
"filippo.io/age/internal/age"
|
||||
"golang.org/x/crypto/ssh/terminal"
|
||||
)
|
||||
|
||||
func main() {
|
||||
@@ -46,12 +46,16 @@ func main() {
|
||||
generate(out)
|
||||
}
|
||||
|
||||
func generate(out io.Writer) {
|
||||
func generate(out *os.File) {
|
||||
k, err := age.GenerateX25519Identity()
|
||||
if err != nil {
|
||||
log.Fatalf("Internal error: %v", err)
|
||||
}
|
||||
|
||||
if !terminal.IsTerminal(int(out.Fd())) {
|
||||
fmt.Fprintf(os.Stderr, "Public key: %s\n", k.Recipient())
|
||||
}
|
||||
|
||||
fmt.Fprintf(out, "# created: %s\n", time.Now().Format(time.RFC3339))
|
||||
fmt.Fprintf(out, "# public key: %s\n", k.Recipient())
|
||||
fmt.Fprintf(out, "%s\n", k)
|
||||
|
||||
@@ -27,8 +27,36 @@ func (f *multiFlag) Set(value string) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
const usage = `Usage:
|
||||
age -r RECIPIENT [-a] [-o OUTPUT] [INPUT]
|
||||
age --decrypt [-i KEY] [-o OUTPUT] [INPUT]
|
||||
|
||||
Options:
|
||||
-o OUTPUT Write the result to the file at path OUTPUT.
|
||||
-a, --armor Encrypt to a PEM encoded format.
|
||||
-p, --passphrase Encrypt with a passphrase.
|
||||
-r, --recipient RECIPIENT Encrypt to the specified RECIPIENT. Can be repeated.
|
||||
-d, --decrypt Decrypt the input to the output.
|
||||
-i, --identity KEY Use the private key file at path KEY. Can be repeated.
|
||||
|
||||
INPUT defaults to standard input, and OUTPUT defaults to standard output.
|
||||
|
||||
RECIPIENT can be an age public key, as generated by age-keygen, ("age1...")
|
||||
or an SSH public key ("ssh-ed25519 AAAA...", "ssh-rsa AAAA...").
|
||||
|
||||
KEY is a path to a file with age secret keys, one per line
|
||||
(ignoring "#" prefixed comments and empty lines), or to an SSH key file.
|
||||
Multiple keys can be provided, and any unused ones will be ignored.
|
||||
|
||||
Example:
|
||||
$ age-keygen -o key.txt
|
||||
Public key: age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p
|
||||
$ tar cvz ~/data | age -r age1ql3z7hjy54pw3hyww5ayyfg7zqgvc7w3j2elw8zmrj2kg5sfn9aqmcac8p > data.tar.gz.age
|
||||
$ age -d -i key.txt -o data.tar.gz data.tar.gz.age`
|
||||
|
||||
func main() {
|
||||
_log.SetFlags(0)
|
||||
flag.Usage = func() { fmt.Fprintf(os.Stderr, "%s\n", usage) }
|
||||
|
||||
var (
|
||||
outFlag string
|
||||
|
||||
Reference in new issue
Block a user