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

https://github.com/paragonie/paseto-browser.js

PASETO in the Web Browser
https://github.com/paragonie/paseto-browser.js

Last synced: 8 months ago
JSON representation

PASETO in the Web Browser

Awesome Lists containing this project

README

          

# PASETO for the Web Browser

[![Build Status](https://github.com/paragonie/paseto-browser.js/workflows/CI/badge.svg)](https://github.com/paragonie/paseto-browser.js/actions?workflow=CI)
[![npm version](https://img.shields.io/npm/v/paseto-browser.svg)](https://npm.im/paseto-browser)

This implements PASETO v4.local and v4.public in the browser, as well as
PASERK k4.seal.

## Why?

There are already other implementations of PASETO in JavaScript, but they're
intended for Node.js.

This implementation runs in a web browser (using TweetNaCl for the elliptic curve
operations).

## Installing

### NPM

```terminal
npm install paseto-browser
```

### For Web Browsers

Download the dist files from the GitHub releases, then embed them via `` tags.

Please refer to the [examples](example) directory for more information.

## Usage

### PASETO

#### v4.local

```html
<script src="paseto.v4.local.js" type="module">

(async function () {
// const encryptor = new PasetoV4Local(symmetric_key_uint8array)
const encryptor = PasetoV4Local.generate()

// You can now encode/decode tokens using encryptor
const token = await encryptor.encode({'exp': "2039-01-01T13:37:00+00:00"})
const decoded = await encryptor.decode(token)
console.log(decoded.exp) // "2039-01-01T13:37:00+00:00"
})();

```

#### v4.public

```html

(async function () {
// const keypair = nacl.sign.keyPair()
// const sk = keypair.secretKey
// const pk = keypair.publicKey
// const signer = new PasetoV4Public(pk, sk)
const signer = PasetoV4Public.generate()
// You can now encode/decode tokens using signer

const token = await signer.encode({'exp': "2039-01-01T13:37:00+00:00"})
const decoded = await signer.decode(token)
console.log(decoded.exp) // "2039-01-01T13:37:00+00:00"
})();

```

### PASERK

#### k4.seal

```html

(async function () {
const wrapper = PaserkK4Seal.generate()
/// Alternative 1
// const keypair = nacl.box.keyPair()
// const sk = keypair.secretKey
// const pk = keypair.publicKey
// const test = new PaserkK4Seal(pk, sk)

/// Alternative 2
// const keypair = nacl.sign.keyPair()
// const sk = keypair.secretKey
// const pk = keypair.publicKey
// const test = PaserkK4Seal.fromEdwardsKeys(pk, sk)

// One-side (only needs pk)
const p4l = PasetoV4Local.generate()
const wrapped = await wrapper.wrap(p4l)
const token = await p4l.encode({'exp': "2039-01-01T13:37:00+00:00"}, {'wpk': wrapped})

// Other side (needs pk and sk), receives `token`
const footer = PasetoV4Local.getFooter(token)
const unwrapped = await test.unwrap(footer.wpk)
const decoded = await unwrapped.decode(token)

console.log(decoded.exp) // "2039-01-01T13:37:00+00:00"
})();

```

## Development / Contribution

To test your local changes, checkout this repository from Git then run the following commands:

```terminal
npm install
npm run build
```

### Note on `dist`

> **DO NOT** commit any changes to `dist`; we will rebuild from source.
>
> Any pull requests that touch `dist` will not be accepted.