anvilresearch / jose

JSON Object Signing and Encryption for Node.js and the browser
MIT License
24 stars 7 forks source link
cryptographic-algorithms encryption jose json jwa jwd jwe jwk jws jwt pem signatures signing webcrypto

NOTICE

We’re archiving Anvil Connect and all related packages. This code is entirely MIT Licensed. You’re free to do with it what you want. That said, we are recommending against using it, due to the potential for security issues arising from unmaintained software. For more information, see the announcement at anvil.io.

JOSE (@trust/jose)

standard-readme compliant

JSON Object Signing and Encryption for Node.js and Browsers

The JOSE suite of specifications standardizes various mechanisms required for integrity protection and encryption of data structured and serialized as JSON. This package implements JWT, JWD, JWS, JWE (in progress), JWA, JWK, and JWK Set for use in JavaScript applications.

Underlying cryptography is provided by W3C Web Cryptography API, available natively in browsers and via npm in Node.js. Additionally, JSON Schema is used for object initialization and validation with JWT and JWD.

Table of Contents

Security

TBD

Install

$ npm install @trust/jose --save

Usage

Node.js

const { JWT, JWD, JWA, JWKSet } = require('@trust/jose')

Browser

If you npm install jose as a dependency, the Webpack'd minified bundle will be available in the dist/ directory as jose.min.js.

If you're actively developing/testing this lib, you can npm run dist, and the bundle will be rebuilt.

To use in the browser, simply import the bundle in a <script> tag, and the lib will be loaded into the window.JOSE global variable.

Example test.html file, to illustrate:

<html>
<head>
  <script src="https://github.com/anvilresearch/jose/raw/master/dist/jose.min.js"></script>
  <script>
    // You can now start using the library
    let jwt = new JOSE.JWT({
      header: { alg: 'HS256' },
      payload: { iss: 'https://forge.anvil.io' }
    })
  </script>
</head>
<body>
Sample usage of JOSE lib in a browser.
</body>
</html>

Develop

Install

$ git clone git@github.com:anvilresearch/jose.git
$ cd jose
$ npm install

Test

$ npm test        // Node.js
$ npm run karma   // Karma (browser)

API

JWK

new JWK()

(static) importKey()

JWKSet

new JWKSet()

(static) importKeys()

JWT

new JWT()

(static) decode(token) → {JWT}

(static) encode(…data) → {Promise.<SerializedToken>}

(static) from(data) → {JWT}

(static) fromCompact(data) → {JWT}

(static) fromFlattened(data) → {JWT}

(static) fromGeneral(data) → {JWT}

(static) sign() → {Promise.<SerializedToken>}

(static) verify(…data) → {Promise.<JWT>}

encode(…data) → {Promise.<SerializedToken>}

isJWE()

resolveKeys()

serialize() → {SerializedToken}

sign(…data) → {Promise.<SerializedToken>}

toCompact()

toFlattened()

toGeneral()

toJWD() → {JWD}

verify(…data) → {Promise.<(Boolean|Object)>}

JWD

JWD inherits from JWT.

new JWD()

(static) decode(token) → {JWD}

(static) fromDocumentFlattened(data) → {JWD}

(static) fromDocumentGeneral(data) → {JWD}

serialize() → {SerializedToken}

toDocumentFlattened()

toDocumentGeneral()

toJWT() → {JWT}

Contribute

Issues

Pull requests

Policy

Style guide

Code reviews

Collaborating

Weekly project meeting

Pair programming

Code of conduct

Contributors

MIT License

Copyright (c) 2016 Anvil Research, Inc.