Open3

nest: `node-jose` で鍵ペアを生成する

okuokuokuoku

鍵の生成

import jose from "node-jose";
import fs from "fs";

const keystore = jose.JWK.createKeyStore();

async function run(){
    await keystore.generate("EC", "P-256");
    await keystore.generate("RSA", 3072);

    fs.writeFileSync("./keys.json", JSON.stringify(keystore.toJSON(true)));
}

run();

... 特にコメントは無いな。。 Key storeオブジェクトを作って generate する。

鍵ペアの場合、秘密鍵をエクスポートするには toJSONtrue を渡す必要がある。

okuokuokuoku

鍵の出力

前回書いたデバイスキーは、JSON形式の鍵(JWK)を含んだオブジェクトをbase64urlエンコードしたものになっている。というわけでエンコードする。

import jose from "node-jose";
import fs from "fs";


async function run(){
    const ks = JSON.parse(fs.readFileSync("./keys.json"));
    const cfg = JSON.parse(fs.readFileSync("./config.json"));
    const keystore = await jose.JWK.asKeyStore(ks);

    const eckey = keystore.all({kty: "EC"})[0];

    let devicekey = {};

    devicekey.u = cfg.deviceuri;
    devicekey.k = eckey.toJSON(); // Public key only

    console.log("Devicekey", jose.util.base64url.encode(JSON.stringify(devicekey)));
}

run();

(config.json にはデバイスのURLが含まれている)

ユーザーに渡すキーには公開鍵のみがあれば十分なので、 toJSON には空を渡す。