Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

212
Views
ECMAScript 8, espera asíncrona, errores sintácticos javascript

usar más de un async() en una cadena en la función rompe mi función. ¿Hay alguna manera de incluir Key2pkcs8() dentro de generateKey() ?

 async function generateKey() { let getKeyPair = await crypto.subtle.generateKey( { name: "ECDH", namedCurve: "P-384" }, false, ["deriveKey"] ); let PriKey = async() => { let PriKey = await getKeyPair.privateKey; console.log("pri = " + PriKey); return PriKey; }; let PubKey = async() => { let PubKey = await getKeyPair.publicKey; console.log("pub = " + PubKey); }; let Key2pkcs8 = async(PriKey, PubKey) => { let Key2pkcs8Pub = await crypto.subtle.exportKey("pkcs8", PubKey); let Key2pkcs8Pri = await crypto.subtle.exportKey("pkcs8", PriKey); return pkcs8keyarray = [Key2pkcs8Pub, Key2pkcs8Pri]; return Keyarray = [PriKey(), PubKey()]; // i want to put <return pkcs8keyarray()> here };

generateKey().then(Key2pkcs8 => console.log(Key2pkcs8[0], Key2pkcs8[1])); funciona como se esperaba y devuelve pri = [object CryptoKey] Promise { <state>: "fulfilled", <value>: undefined } Promise { <state>: "fulfilled", <value>: CryptoKey }

pero cuando se usa return pkcs8keyarray() en lugar de return Keyarray = [PriKey(), PubKey()]; se rompe y vuelve indefinido

tenía la intención de que key2pkcs2 tomara una clave como variable (clave pública o privada) y luego devolviera ambas en una matriz al final similar al ejemplo

about 4 years ago · Juan Pablo Isaza
2 answers
Answer question

0

Su programa demuestra un malentendido de las promesas, async/await, el módulo criptográfico y javascript en su conjunto.

  • Use let solo cuando desee reasignar valores a un enlace
  • No reasigne funciones a valores, especialmente donde es fácilmente evitable
  • Declaraciones como return Keyarray = ... están filtrando variables globales y no se comportan como probablemente esperabas
  • No necesita crear una nueva función async cada vez que desee await otro valor asíncrono
  • No puede simplemente console.log las claves públicas o privadas. Según los documentos de exportKey , devuelve una promesa que se resuelve en un ArrayBuffer que son datos de bytes sin procesar y no tienen una representación de cadena.
 async function generateKey() { const {privateKey, publicKey} = // <- get privateKey, publicKey await crypto.subtle.generateKey( { name: "ECDH", namedCurve: "P-384" }, true, ["deriveKey"] ) return [ await crypto.subtle.exportKey("pkcs8", privateKey), // <- export private await crypto.subtle.exportKey("pkcs8", publicKey), // <- export public ] }

Dado que generateKey devuelve un par de matrices de [private, public] , podemos usarlas fácilmente en las otras funciones asíncronas que escriba:

 async function myfunction() { const [private, public] = await generateKey() // <- resolves pair // do something }

Mueva todos los efectos secundarios aguas abajo en los controladores .then . La persona que llama es responsable de catch los errores. Manejar siempre los errores -

 myfunction().then(console.log).catch(console.error)

No intente implementar soluciones criptográficas si no comprende estas cosas simples. Obtendrá algo 100% mal e introducirá una vulnerabilidad y usted y sus usuarios sufrirán las consecuencias.

El código en esta respuesta no está probado y solo está aquí para resaltar los errores que puedo ver fácilmente. No use el código palabra por palabra y no espere que lo copie/pegue directamente en su proyecto. No entiendo cuáles son sus requisitos o intenciones y, por lo tanto, no puedo hacer recomendaciones u ofrecer otros consejos.

Para obtener más información sobre el mal uso de async y await , consulte estas preguntas y respuestas relacionadas .

about 4 years ago · Juan Pablo Isaza Report

0

async function generateKey() { let keyPair = await crypto.subtle.generateKey( { name: "ECDH", namedCurve: "P-384" }, false, ["deriveKey"] ); let PriKey = (keyPair) => { let PriKey = keyPair.privateKey; console.log("pri = " + PriKey); return keyPair; }; let PubKey = (keyPair) => { let PubKey = keyPair.publicKey; console.log("pub = " + PubKey); return keyPair; }; let Key2pkcs8 = async(keyPair) => { console.log("key = " + keyPair); let Key2pkcs8 = await crypto.subtle.exportKey("pkcs8", keyPair); return Key2pkcs8; }; let printme = async() => { let printme = await Key2pkcs8(PubKey()); console.log(printme); return printme; }; return printme(); }

Uso:

 generateKey().then(Key2pkcs8 => console.log(Key2pkcs8 ));

Si su vida externa es asíncrona, await ya convertirá el flujo asíncrono en sincronizado, lo await significa que getKeyPair (o keyPair en mi fragmento) ya estará disponible cuando llame a otras funciones.

PubKey y PriKey no necesitan ser asíncronos, y en ambos casos no está devolviendo nada. Key2pkcs8 tampoco devuelve nada, entonces, ¿qué es exactamente lo que quiere await Key2pkcs8(PubKey()); ¿regresar? Idealmente, todas estas funciones deberían devolver algo si desea que la Promise resultante se resuelva en algo que no sea undefined . Pruebe el fragmento anterior, no lo probé.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!