Files
nim-jwt-full/README.md
T

2.6 KiB

Nim JWT

This is a standards-compliant implementation of the JWT, JWK, JWS, and JWE standards in Nim, using the BearSSL library to provide the underlying cryptographic primatives.

JWK ownership and threads

JWK and JwkSet have value semantics. Parsed keys own their key material and metadata; changing the input JsonNode after initJwk or initJwkSet does not change the keys. Assigning a key, key set, or Table[string, JwkSet] produces an independent value suitable for handing to a worker thread. Synchronize access to any source value that another thread may be modifying.

The typed accessors (kid, alg, rsaPrv, etc.) return values. The JSON member accessor, key["member"], keeps its Option[JsonNode] return type, but each call returns a fresh node. Mutating that node does not update the key; construct a new key with initJwk to change it. Missing members return none, while an explicit JSON null returns some containing a JNull node. Use %key to serialize a complete key, including extension members, to an independent JSON object.

Internally, arbitrary JSON members are stored as encoded strings in a value table. Only JSON member lookups decode them. Signing and verification use the parsed key fields directly. This ownership guarantee applies to JWK and JwkSet; JWT claims and JOSE headers retain their existing ownership behavior.

Run nimble unittest to run the suite, including worker-thread tests, under both ARC and ORC.

Supported Algorithms (JWA)

RFC7518 (JWA) registers cryptographic algorithms and identifiers to be used with the JSON Web Signature (JWS), JSON Web Encryption (JWE), and JSON Web Key (JWK) specifications.

This library supports all REQUIRED algorithms. Specifically, the following algorithms are supported:

Digital Signature and MACs (JWS)

From RFC7518 section 3 the following algorithms are supported:

  • TBD

Key Management

From RFC7518 section 4 the following algorithms are supported:

  • TBD

Content Encryption

From RFC7518 section 5 the following algorithms are supported:

  • TBD

Keys

From RFC7518 section 6 the following key types are supported:

  • EC
  • RSA
  • otc