Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
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.
- Host: GitHub
- URL: https://github.com/FiloSottile/typage
- Owner: FiloSottile
- License: bsd-3-clause
- Created: 2023-07-23T17:42:01.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-07-23T00:33:54.000Z (4 months ago)
- Last Synced: 2024-07-23T11:11:22.903Z (4 months ago)
- Topics: age-encryption
- Language: TypeScript
- Homepage:
- Size: 1.18 MB
- Stars: 77
- Watchers: 3
- Forks: 10
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-age - typage - encryption)) — TypeScript implementation on top of libsodium.js. (Implementations)
README
[`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)```