@neykoor/curve25519-ts
v0.0.13
Published
TypeScript implementation of Curve25519 (X25519 key agreement and Ed25519-style signing)
Maintainers
Readme
curve25519-ts
Fork de curve25519-js (Harvey Connor, basado en axlsign.js/TweetNaCl) renombrado como curve25519-ts.
API pública sin cambios: generateKeyPair(seed), sharedKey(secretKey, publicKey), sign(secretKey, msg, opt_random?), verify(publicKey, msg, signature), signMessage, openMessage.
Cambios respecto al original
sharedKey()rechaza claves públicas de orden bajo. Si el resultado del intercambio Diffie-Hellman (X25519) es todo-cero (lo que ocurre con la clave pública0x00...00u otros puntos de orden bajo conocidos), ahora lanzaError('invalid public key (low-order point)')en vez de devolver un secreto compartido predecible en silencio.curve25519_sign()limpia de memoria la clave Ed25519 derivada (edsk) inmediatamente después de firmar, en vez de dejarla en el buffer indefinidamente.checkArrayTypes()corregido: usaba el objetoargumentsen vez de sus propios parámetros rest declarados; ahora valida los argumentos que realmente recibe.- Se eliminó el
export default {}(no tenía propósito y podía confundir a quien hicieraimport curve25519 from 'curve25519-ts'). package.jsonahora declara"types": "lib/index.d.ts"para que los consumidores TypeScript reciban los tipos generados portscautomáticamente.openMessage()ya no muta elsignedMsgque le pasas. Antes reenviaba el array del caller directo acurve25519_sign_open, que le limpiaba el bit alto del último byte; una segunda verificación del mismo buffer fallaba connullaunque la firma fuera válida. Ahora trabaja sobre una copia.tsconfig.jsondeclararootDir: "./src"explícito. Sin esto, algunos compiladores de TypeScript emiten enlib/src/index.jsen vez delib/index.js, rompiendo elmain/typesdepackage.json.package.jsonagrega el scriptprepare, que corre el build automáticamente al instalar el paquete como dependencia de git o antes denpm publish, para no volver a publicar/consumir el paquete sinlib//lib-esm/compilados.- Limpieza de memoria extendida a todos los buffers intermedios con material de clave.
crypto_scalarmult()limpia el escalar clampeado (z) tras el intercambio;crypto_sign_direct()ycrypto_sign_direct_rnd()limpian el nonce derivado (r), el hash intermedio (h) y el acumulador (x) tras firmar. - Tipado explícito en toda la librería. Se eliminó
anyde todas las firmas internas y públicas a favor deUint8Array,Float64Array/GFyPoint([GF, GF, GF, GF]), conexport interface KeyPair. - Migrado de
tslint(deprecado) a ESLint (@typescript-eslint+eslint-config-prettier). - TypeScript actualizado a
^5.4.5(antes^3.5.3). - Build dual CommonJS + ESM.
npm run buildgeneralib/(CJS) ylib-esm/(ESM);package.jsondeclaraexportsmap conrequire/import/types. package.jsondeclarafiles: ["lib", "lib-esm"]para controlar explícitamente qué se publica, en vez de depender solo de.npmignore.- Código fuente sin comentarios.
Build
npm install
npm run buildGenera lib/ (CommonJS) y lib-esm/ (ES Modules).
Lint / Format
npm run lint
npm run format