Skip to content

fix(deps): update module filippo.io/age to v1.3.2 - #205

Merged
patrick-hermann-sva merged 2 commits into
mainfrom
renovate/filippo.io-age-1.x
Oct 7, 2026
Merged

patrick-hermann-sva merged 2 commits into
mainfrom
renovate/filippo.io-age-1.x

Conversation

@renovate

@renovate renovate Bot commented Sep 29, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
filippo.io/age v1.2.1 → v1.3.2 age confidence

Release Notes

FiloSottile/age (filippo.io/age)

v1.3.2: age v1.3.2

Compare Source

age v1.3.2 is a minor release with a wide range of fixes and hardening improvements.

Some previously-accepted inputs are now rejected: headers over 2 MiB or 1024 recipients, malformed SSH keys in recipients files, and non-UTF-8 plaintext written to a terminal (force with -o -).

Pre-built binaries now cover windows/arm64 and darwin/amd64, and release archives include the compatibility plugins (age-plugin-pq, age-plugin-tag, and age-plugin-tagpq).

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.


Configuration

📅 Schedule: (UTC)

  • 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

This PR was generated by Mend Renovate. View the repository job log.

@renovate

renovate Bot commented Sep 29, 2026 •

Copy link
Copy Markdown
Contributor Author

⚠️ Artifact update problem

Renovate failed to update an artifact related to this branch. You probably do not want to merge this PR as-is.

♻ Renovate will retry this branch, including artifacts, only when one of the following happens:

  • any of the package files in this branch needs updating, or
  • the branch becomes conflicted, or
  • you click the rebase/retry checkbox if found above, or
  • you rename this PR's title to start with "rebase!" to trigger it manually

The artifact failure details are included below:

File name: secrets/go.sum
go: downloading filippo.io/age v1.3.2
go: downloading filippo.io/hpke v0.4.0
go: downloading golang.org/x/crypto v0.55.0
go: downloading golang.org/x/sys v0.47.0
go: dagger/secrets imports
	dagger/secrets/internal/dagger: package dagger/secrets/internal/dagger is not in std (/runner/cache/others/go/pkg/mod/golang.org/toolchain@v0.0.1-go1.26.2.linux-amd64/src/dagger/secrets/internal/dagger)

@renovate
renovate Bot force-pushed the renovate/filippo.io-age-1.x branch from 956f765 to 90fdfd6 Compare October 3, 2026 10:46
@renovate
renovate Bot force-pushed the renovate/filippo.io-age-1.x branch from 90fdfd6 to b59d41b Compare October 7, 2026 04:57
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@renovate

renovate Bot commented Oct 7, 2026

Copy link
Copy Markdown
Contributor Author

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

@patrick-hermann-sva
patrick-hermann-sva merged commit 0a8c04f into main Oct 7, 2026
2 checks passed
@patrick-hermann-sva
patrick-hermann-sva deleted the renovate/filippo.io-age-1.x branch October 7, 2026 08:02
github-actions Bot pushed a commit that referenced this pull request Oct 7, 2026
## [3.10.3](v3.10.2...v3.10.3) (2026-10-07)

### Bug Fixes

* **deps:** update module filippo.io/age to v1.3.2 ([#205](#205)) ([0a8c04f](0a8c04f))
@github-actions

github-actions Bot commented Oct 7, 2026

Copy link
Copy Markdown

🎉 This PR is included in version 3.10.3 🎉

The release is available on GitHub release

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant