Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/FiloSottile/typage

A TypeScript implementation of the age file encryption format, based on libsodium.
https://github.com/FiloSottile/typage

age-encryption

Last synced: 3 months ago
JSON representation

A TypeScript implementation of the age file encryption format, based on libsodium.

Awesome Lists containing this project

README

        





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

[`age-encryption`](https://www.npmjs.com/package/age-encryption) is a TypeScript implementation of the
[age](https://age-encryption.org) file encryption format.

## Installation

```sh
npm install age-encryption
```

## Usage

`age-encryption` is a modern ES Module, compatible with Node.js and Bun, with built-in types.

> [!WARNING]
> The examples below refer to version 0.2.0, which has not been published yet.

#### Encrypt and decrypt a file with a new recipient / identity pair

```ts
import * as age from "age-encryption"

const identity = age.generateIdentity()
const recipient = age.identityToRecipient(identity)
console.log(identity)
console.log(recipient)

const e = new age.Encrypter()
e.addRecipient(recipient)
const ciphertext = e.encrypt("Hello, age!")

const d = new age.Decrypter()
d.addIdentity(identity)
const out = d.decrypt(ciphertext, "text")
console.log(out)
```

#### Encrypt and decrypt a file with a passphrase

```ts
import { Encrypter, Decrypter } from "age-encryption"

const e = new Encrypter()
e.setPassphrase("burst-swarm-slender-curve-ability-various-crystal-moon-affair-three")
const ciphertext = e.encrypt("Hello, age!")

const d = new Decrypter()
d.addPassphrase("burst-swarm-slender-curve-ability-various-crystal-moon-affair-three")
const out = d.decrypt(ciphertext, "text")
console.log(out)
```

### Browser usage

`age-encryption` is compatible with modern bundlers such as [esbuild](https://esbuild.github.io/).

To produce a classic library file that sets `age` as a global variable, you can run

```sh
cd "$(mktemp -d)" && npm init -y && npm install esbuild age-encryption
npx esbuild --target=es6 --bundle --minify --outfile=age.js --global-name=age age-encryption
```

or download a pre-built one from the [Releases page](https://github.com/FiloSottile/typage/releases).

Then, you can use it like this

```html

const identity = age.generateIdentity()
const recipient = age.identityToRecipient(identity)
console.log(identity)
console.log(recipient)

const e = new age.Encrypter()
e.addRecipient(recipient)
const ciphertext = e.encrypt("Hello, age!")

const d = new age.Decrypter()
d.addIdentity(identity)
const out = d.decrypt(ciphertext, "text")
console.log(out)

```