Skip to content

Update module filippo.io/age to v1.3.1#48

Open
red-hat-konflux[bot] wants to merge 1 commit intomasterfrom
konflux/mintmaker/master/filippo.io-age-1.x
Open

Update module filippo.io/age to v1.3.1#48
red-hat-konflux[bot] wants to merge 1 commit intomasterfrom
konflux/mintmaker/master/filippo.io-age-1.x

Conversation

@red-hat-konflux
Copy link
Copy Markdown

@red-hat-konflux red-hat-konflux bot commented Aug 3, 2025

This PR contains the following updates:

Package Change Age Confidence
filippo.io/age v1.0.0 -> v1.3.1 age confidence

Release Notes

FiloSottile/age (filippo.io/age)

v1.3.1

Compare Source

v1.3.1 is a minor release to restore version injection from downstream package build processes.

See the v1.3.0 release notes for an overview of recent additions.

v1.3.0: age v1.3.0: post-quantum (and more)!

Compare Source

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

Exactly six years after the first age beta release, v1.3.0 brings post-quantum resistance to age, along with a couple long-requested features, built-in support for recipients compatible with hardware plugins, I/O API improvements, and many usability enhancements.

Post-quantum recipients

age now has native post-quantum recipients based on HPKE with a hybrid ML-KEM-768 KEM. The recipients start with age1pq1..., and the identities start with AGE-SECRET-KEY-PQ-1....

To generate a post-quantum keypair:

$ age-keygen -pq

If you have your own age implementation, C2SP has the specification, and CCTV has test vectors for the new hybrid recipient types.

(If you are using an older age client, an optional plugin is available that provides out-of-the-box support for encryption to hybrid recipients. Hybrid identities can be converted to work with the plugin with age-plugin-pq -identity.)

New I/O APIs

The new DecryptReaderAt API implements seeking decryption, which can be used with zip.NewReader.

The new EncryptReader API implements pull-based encryption by wrapping an io.Reader, as opposed to wrapping an io.Writer like Encrypt.

age-inspect

The new age-inspect(1) tool presents the metadata of an age file without decrypting it.

hello.age is an age file, version "age-encryption.org/v1".

This file is ASCII-armored.

This file is encrypted to the following recipient types:
  - "mlkem768x25519"

This file uses post-quantum encryption.

Size breakdown (assuming it decrypts successfully):

    Header                      1627 bytes
    Armor overhead              1350 bytes
    Encryption overhead           32 bytes
    Payload                     1959 bytes
                        -------------------
    Total                       4968 bytes

Tip: for machine-readable output, use --json.
Built-in recipients compatible with hardware plugins

age(1) now supports encrypting to age1tag1... and age1tagpq1... recipients, which are compatible with hardware plugins. The latest or upcoming versions of age-plugin-yubikey, age-plugin-tpm, and age-plugin-se will support producing these recipients for existing and new keys, and decrypting files encrypted to them.

The filippo.io/age/tag package provides an implementation, including a Recipient.Tag method useful to plugin implementations.

C2SP has the specification for these recipient types.

(For users that are using older age clients, there are compatiblity plugins that can be shipped along with the hardware plugins.)

Non-interactive passphrase input

We have long resisted implementing non-interactive CLI passphrase input, because most use cases are more securely and/or efficiently served by native keys or passphrase-encrypted identities. However, there are some residual use cases.

This is now available through the batchpass plugin, but we invite everyone to read the warning in the man page and help text.

Go framework for implementing plugins

The filippo.io/age/plugin package now provides a framework for exposing age.Recipient and age.Identity implementations as standalone CLI plugins.

For example, this is the entire age-plugin-tagpq compatibility implementation:

package main

import (
	"log"
	"os"

	"filippo.io/age"
	"filippo.io/age/plugin"
	"filippo.io/age/tag"
)

func main() {
	p, err := plugin.New("tagpq")
	if err != nil {
		log.Fatal(err)
	}
	p.HandleRecipient(func(b []byte) (age.Recipient, error) {
		return tag.NewHybridRecipient(b)
	})
	os.Exit(p.Main())
}

Moreover, the new plugin.NewTerminalUI function provides a ready-to-use terminal-based ClientUI implementation for the existing plugin client API.

Armor fixes

The CLI now allows some leading whitespace before the armor header, as the API always did. The API and CLI now reject empty lines in armored data, as required by the spec.

Detached headers

The new set of APIs ExtractHeader, DecryptHeader, and NewInjectedFileKeyIdentity allow working with detached age headers, where the file key is unwrapped separately from the actual file decryption. This can be useful for efficiency or to delegate unwrapping without exposing the file contents.

Usability improvements

The CLI will now refuse to output decrypted binary data to the terminal. (We did this before attending the gpg.fail talk!)

Native identities are now tried first when decrypting through both the CLI and the API, since they can't require interaction. Order is otherwise preserved.

NoIdentityMatchError now exposes the stanza types of the header, unwraps to the errors returned by the Identity.Unwrap method calls, and prints the underlying error if only one identity was provided.

Virtual terminal processing is now enabled on Windows terminals that don't enable it by default, so that ANSI escape sequences work as expected.

Many improved and more proactively helpful error messages.

The release artifacts now include a source tarball with vendored dependencies.

v1.2.1: age v1.2.1: security fix

Compare Source

This release fixes a security vulnerability that could allow an attacker to execute an arbitrary binary under certain conditions.

See GHSA-32gq-x56h-299c.

Plugin names may now only contain alphanumeric characters or the four special characters +-._.

Thanks to ⬡-49016 for reporting this issue.

v1.2.0: age v1.2.0

Compare Source

A small release to build the release binaries with a more recent Go toolchain, and to fix a couple CLI edge cases (#​491, #​555).

The Go module now exposes a plugin package that provides an age plugin client. That is, Recipient and Identity implementations that invoke a plugin binary, allowing the use of age plugins in Go programs.

Finally, Recipients can now return a set of "labels" by implementing RecipientWithLabels. This allows replicating the special behavior of the scrypt Recipient in third-party Recipients, or applying policy useful for authenticated or post-quantum Recipients.

// RecipientWithLabels can be optionally implemented by a Recipient, in which
// case Encrypt will use WrapWithLabels instead of Wrap.
//
// Encrypt will succeed only if the labels returned by all the recipients
// (assuming the empty set for those that don't implement RecipientWithLabels)
// are the same.
//
// This can be used to ensure a recipient is only used with other recipients
// with equivalent properties (for example by setting a "postquantum" label) or
// to ensure a recipient is always used alone (by returning a random label, for
// example to preserve its authentication properties).
type RecipientWithLabels interface {
	WrapWithLabels(fileKey []byte) (s []*Stanza, labels []string, err error)
}

v1.1.1: age v1.1.1

Compare Source

age v1.1.1 is a patch release to fix go install filippo.io/age/...@​latest.

See the release notes for v1.1.0 for changes since v1.0.0.

v1.1.0: age v1.1.0: plugin and YubiKeys support

Compare Source

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

age is a simple, modern and secure file encryption tool, format, and Go library. It features small explicit keys, no config options, and UNIX-style composability. Learn more by reading the README, the age(1) man page, the Go API reference, the format specification, or the full release changelog. Watch the repository or follow @​filippo@abyssdomain.expert to be notified of new releases.

🛠️ FYI, age now has an extensive test suite which all age implementations are encouraged to adopt.

Plugin support

The age CLI now supports plugins, such as age-plugin-yubikey by @​str4d. To try it on macOS with Homebrew:

$ brew upgrade age
$ brew install age-plugin-yubikey
$ age-plugin-yubikey # interactive setup
$ age -r age1yubikey1qwt50d05nh5vutpdzmlg5wn80xq5negm4uj9ghv0snvdd3yysf5yw3rhl3t
$ age -d -i age-yubikey-identity-388178f3.txt

Plugins must be loaded explicitly by using their respective recipient or identity, and are not tied to a specific header stanza type. This means plugins can be used not only to support new recipient types such as PIV tokens (i.e. YubiKeys) or cloud KMS solutions, but also to produce passphrase-encrypted files that can be decrypted without plugins, to store age native private keys on secure elements, or even for agent functionality or to proxy decryption operations to remote machines.

Plugins operate over a simple textual stdin/stdout protocol (C2SP/C2SP#5). Developers are encouraged to reach out with plugin ideas and announcements. Read more in the relevant man page section.

Breaking changes

If -i is used, passphrase-encrypted files are now rejected. Previously, a passphrase-encrypted file was auto-detected and the identity file was ignored. This could lead to unexpected behavior, such as a script blocking for user interaction, based on potentially untrusted input files. Now, age -d must be invoked without -i arguments to decrypt passphrase-encrypted files. A helpful error is printed otherwise. This should not break any automated system as passphrase decryption was always interactive.

Empty final chunks are now rejected. If a payload was a multiple of 64KiB long, there were two valid encryptions for it: with a "full" last chunk encrypting 64KiB, or with an additional "empty" chunk encrypting 0 bytes. age, rage, and all other known implementations only ever produced the former. (Note that age will forever decrypt files it generated.) The latter is now rejected. The specification has been updated (C2SP/C2SP#13) and test cases are included in the test suite.

Minor changes

PKCS#8-encoded Ed25519 private keys (such as 1Password exports) are now supported as SSH identities.

If an armored file is pasted into the terminal, age will now attempt to wait until the end of the file before prompting for a password.

Some invalid files are now correctly rejected, in particular encrypted files with trailing data. (Yay for the test suite!)

If /dev/tty is present but can't be opened, age will now fallback to trying to treat stdin as a terminal as if /dev/tty wasn't present. (Thanks @​brandsimon!)

Input prompts now go to the terminal, even if standard error is redirected.

Values of the new armor.Error type are now returned wrapped in decryption errors when appropriate.

Windows binary releases are now signed. (Thanks @​technion!)

Documentation and error messages were improved.


Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

To execute skipped test pipelines write comment /ok-to-test.


Documentation

Find out how to configure dependency updates in MintMaker documentation or see all available configuration options in Renovate documentation.

@red-hat-konflux
Copy link
Copy Markdown
Author

red-hat-konflux bot commented Aug 3, 2025

ℹ Artifact update notice

File name: go.mod

In order to perform the update(s) described in the table above, Renovate ran the go get command, which resulted in the following additional change(s):

  • 3 additional dependencies were updated
  • The go directive was updated for compatibility reasons

Details:

Package Change
go 1.18 -> 1.24.0
golang.org/x/crypto v0.0.0-20210817164053-32db794688a5 -> v0.45.0
golang.org/x/net v0.0.0-20220805013720-a33c5aa5df48 -> v0.47.0
golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10 -> v0.38.0

@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Oct 10, 2025
@red-hat-konflux red-hat-konflux bot closed this Oct 10, 2025
@red-hat-konflux red-hat-konflux bot deleted the konflux/mintmaker/master/filippo.io-age-1.x branch October 10, 2025 09:07
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Oct 10, 2025
@red-hat-konflux red-hat-konflux bot reopened this Oct 10, 2025
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from 24a60d4 to e590386 Compare October 10, 2025 13:03
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Nov 25, 2025
@red-hat-konflux red-hat-konflux bot closed this Nov 25, 2025
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Nov 25, 2025
@red-hat-konflux red-hat-konflux bot reopened this Nov 25, 2025
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from fb15664 to e590386 Compare November 25, 2025 13:04
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Dec 14, 2025
@red-hat-konflux red-hat-konflux bot closed this Dec 14, 2025
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Dec 14, 2025
@red-hat-konflux red-hat-konflux bot reopened this Dec 14, 2025
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from 014e6f3 to e590386 Compare December 14, 2025 16:56
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Dec 17, 2025
@red-hat-konflux red-hat-konflux bot closed this Dec 17, 2025
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Dec 17, 2025
@red-hat-konflux red-hat-konflux bot reopened this Dec 17, 2025
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from 2bd2861 to e590386 Compare December 17, 2025 08:58
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Dec 18, 2025
@red-hat-konflux red-hat-konflux bot closed this Dec 18, 2025
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Dec 18, 2025
@red-hat-konflux red-hat-konflux bot reopened this Dec 18, 2025
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from 658ff55 to e590386 Compare December 18, 2025 20:58
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 Update module filippo.io/age to v1.2.1 - autoclosed Dec 19, 2025
@red-hat-konflux red-hat-konflux bot closed this Dec 19, 2025
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.2.1 - autoclosed Update module filippo.io/age to v1.2.1 Dec 19, 2025
@red-hat-konflux red-hat-konflux bot closed this Jan 1, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Jan 2, 2026
@red-hat-konflux red-hat-konflux bot reopened this Jan 2, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 Update module filippo.io/age to v1.3.1 - autoclosed Jan 10, 2026
@red-hat-konflux red-hat-konflux bot closed this Jan 10, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Jan 10, 2026
@red-hat-konflux red-hat-konflux bot reopened this Jan 10, 2026
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from da05ffc to a435156 Compare January 10, 2026 05:04
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 Update module filippo.io/age to v1.3.1 - autoclosed Jan 19, 2026
@red-hat-konflux red-hat-konflux bot closed this Jan 19, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Jan 19, 2026
@red-hat-konflux red-hat-konflux bot reopened this Jan 19, 2026
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch 2 times, most recently from a435156 to 111075e Compare January 19, 2026 20:50
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 Update module filippo.io/age to v1.3.1 - autoclosed Feb 1, 2026
@red-hat-konflux red-hat-konflux bot closed this Feb 1, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Feb 1, 2026
@red-hat-konflux red-hat-konflux bot reopened this Feb 1, 2026
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch from 111075e to 6b39321 Compare February 1, 2026 16:20
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 Update module filippo.io/age to v1.3.1 - autoclosed Feb 9, 2026
@red-hat-konflux red-hat-konflux bot closed this Feb 9, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Feb 10, 2026
@red-hat-konflux red-hat-konflux bot reopened this Feb 10, 2026
@red-hat-konflux red-hat-konflux bot force-pushed the konflux/mintmaker/master/filippo.io-age-1.x branch 2 times, most recently from 6b39321 to e967b08 Compare February 10, 2026 00:34
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 Update module filippo.io/age to v1.3.1 - autoclosed Feb 14, 2026
@red-hat-konflux red-hat-konflux bot closed this Feb 14, 2026
@red-hat-konflux red-hat-konflux bot changed the title Update module filippo.io/age to v1.3.1 - autoclosed Update module filippo.io/age to v1.3.1 Feb 14, 2026
@red-hat-konflux red-hat-konflux bot reopened this Feb 14, 2026
Signed-off-by: red-hat-konflux <126015336+red-hat-konflux[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants