Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

doc: example generating keypairs with WebCrypto & node:crypto

Abierto
#10 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
3/5
Tiempo estimado
1-2 días
Aptitud para principiantes
35/100
Tipo de issue
Documentación
Claridad
Bastante claro
Estado de actividad
Estancado
Stack tecnológico
javascript, node.js

Línea de trabajo

Comienza con el ejemplo de JavaScript del issue, especialmente con generateKeyPair, generateSecp256k1KeyPair y main, y compara su uso de WebCrypto y node:crypto. Confirma los nombres de algoritmo documentados y los archivos generados esperados, incluida la cuestión abierta sobre la compatibilidad con secp256k1 en WebCrypto; se considera terminado cuando el ejemplo cubra claramente la generación de pares de claves prevista.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

'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);
});
Lenguaje dominante
JavaScript
Estrellas
2
Forks
1
Métricas de merge de PR
Sin PR fusionados en 30 d

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de BeyondCodeBootcamp/passkeys

Todos los issues de BeyondCodeBootcamp/passkeys

Issues similares

Más issues de JavaScript

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.