BeyondCodeBootcamp / BeyondCodeBootcamp/passkeys

doc: example generating keypairs with WebCrypto & node:crypto

オープン
#10 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る
主要言語
JavaScript
スター
2
フォーク
1
PR マージ指標
30日以内にマージされた PR はありません

説明

```js
'use strict';

let Fs = require('node:fs/promises');

async function generateKeyPair(algo) {
let keyPair = await crypto.subtle.generateKey(algo, true, ['sign', 'verify']);

let name = algo.namedCurve || algo.name;

let privateKeyAb = await crypto.subtle.exportKey('pkcs8', keyPair.privateKey);
let privateKeyDER = new Uint8Array(privateKeyAb);
let privateKeyPath = `./key.${name}.der`.toLowerCase();
await Fs.writeFile(privateKeyPath, privateKeyDER);

let publicKeyAb = await crypto.subtle.exportKey('spki', keyPair.publicKey);
let publicKeyDER = new Uint8Array(publicKeyAb);
let publicKeyPath = `./pub.${name}.der`.toLowerCase();
await Fs.writeFile(publicKeyPath, publicKeyDER);

console.info(`Key pair generated and saved as ${privateKeyPath} and ${publicKeyPath}`);
}

let Crypto = require('node:crypto');

async function generateSecp256k1KeyPair() {
return new Promise(function (resolve, reject) {
Crypto.generateKeyPair(
'ec',
{
namedCurve: 'secp256k1',
publicKeyEncoding: {
type: 'spki',
format: 'der',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der',
},
},
async function (err, publicKey, privateKey) {
if (err) {
return reject(err);
}

await Fs.writeFile('./key.secp256k1.der', privateKey);
await Fs.writeFile('./pub.secp256k1.der', publicKey);

console.info(
'secp256k1 key pair generated and saved as ./key.secp256k1.der and ./pub.secp256k1.der',
);
},
);
});
}

async function main() {
await generateKeyPair({ name: 'Ed25519' });
await generateKeyPair({ name: 'ECDSA', namedCurve: 'P-256' });
// this should be possible with WebCrypto as well, but I don't know the name to use
//await generateKeyPair({ name: 'ECDSA', namedCurve: 'secp256k1' });
// it does work with node:crypto
await generateSecp256k1KeyPair();
}

main().catch(function (err) {
console.error(err.stack);
process.exit(1);
});
```

コントリビューションガイド

このリポジトリのコントリビューションガイドは索引されていません

調査の方向性

Issue の JavaScript 例、特に generateKeyPair、generateSecp256k1KeyPair、main から始め、WebCrypto と node:crypto の使用方法を比較します。文書化されているアルゴリズム名と、生成される想定ファイルを確認し、WebCrypto での secp256k1 のサポートに関する未解決の問題も含めます。この例で意図した鍵ペア生成が明確に網羅されていれば完了です。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
javascript, node.js
領域
cryptography, documentation
issue の種類
ドキュメント
難易度
3/5
見積もり時間
1〜2日
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。