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
- Host: GitHub
- URL: https://github.com/paragonie/paseto-browser.js
- Owner: paragonie
- License: other
- Created: 2022-07-26T13:47:34.000Z (over 3 years ago)
- Default Branch: master
- Last Pushed: 2022-07-26T14:07:50.000Z (over 3 years ago)
- Last Synced: 2025-03-30T23:31:31.510Z (10 months ago)
- Language: JavaScript
- Homepage:
- Size: 99.6 KB
- Stars: 4
- Watchers: 3
- Forks: 1
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# PASETO for the Web Browser
[](https://github.com/paragonie/paseto-browser.js/actions?workflow=CI)
[](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.