RSA / ECDSA keys
JSON Web Keys (JWK) is a format specified in RFC7517 for storing RSA/EC/AES keys in a JSON based format. It can be used to import/export such keys in the browser using the new W3C WebCryptoAPI.
The jose package makes it easy to read/write such keys
in R for use with JWT or any other functionality from the
openssl package.
Linking to: OpenSSL 3.0.13 30 Jan 2024
{
"kty": "EC",
"crv": "P-256",
"x": "AwhlUGqqcoas56TmMklF1wp51UenCO3DTnU6jpsvBYo",
"y": "z2CDULCD3R6d4kLWzPb7PH3xVOxD6n5_vBtKbB2Nqyw",
"d": "LZxFR1xs0lPzUnQAndNkpvgqM9SL5taovNQHl1z1EOE"
}
{
"kty": "EC",
"crv": "P-256",
"x": "AwhlUGqqcoas56TmMklF1wp51UenCO3DTnU6jpsvBYo",
"y": "z2CDULCD3R6d4kLWzPb7PH3xVOxD6n5_vBtKbB2Nqyw"
}
# Read JWK key
(out <- read_jwk(json))[256-bit ecdsa public key]
md5: 8303badff3a80c8109fee5b96bafabc8
sha256: 56d6c6a8f1603b7e76eb703948b52fe895bd40a127cd3b014276d939c7a192c8
identical(pubkey, out)[1] TRUE
AES/HMAC keys
JWT also specifies a format for encoding AES/HMAC secrets. Such secret keys are simply raw bytes.
# Random secret
(key <- rand_bytes(16)) [1] 5a c7 ec 29 8f 59 d8 e5 b2 f9 73 e9 f7 a4 88 fe
(jwk <- write_jwk(key)){"kty":"oct","k":"WsfsKY9Z2OWy-XPp96SI_g"}
read_jwk(jwk) [1] 5a c7 ec 29 8f 59 d8 e5 b2 f9 73 e9 f7 a4 88 fe