{"_id":"curve25519-js","_rev":"4-380078f5132702eb97246a3fdda41aff","name":"curve25519-js","dist-tags":{"latest":"0.0.4"},"versions":{"0.0.1":{"name":"curve25519-js","version":"0.0.1","description":"Javascript implementation of Curve25519","main":"lib/index.js","scripts":{"build":"tsc","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json"},"repository":{"type":"git","url":"git+https://github.com/harveyconnor/curve25519-js.git"},"author":{"name":"Harvey Connor","email":"harvey@smartguide.com.au"},"license":"MIT","bugs":{"url":"https://github.com/harveyconnor/curve25519-js/issues"},"homepage":"https://github.com/harveyconnor/curve25519-js#readme","keywords":["sign","curve25519","x25519","ed25519"],"devDependencies":{"@types/node":"^12.6.9","prettier":"^1.18.2","tslint":"^5.18.0","tslint-config-prettier":"^1.18.0","typescript":"^3.5.3"},"gitHead":"657c5130364662fb12c3f6de962f0b13dfa94d1c","_id":"curve25519-js@0.0.1","_nodeVersion":"10.15.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-VDj+EQQP5paFZGTGrjmtEQ4gPxf+eovk4vZOlmFpvxwZ9EZM25LNNdIe1aXy9aCBU7lctbrsv2JBKdWfivO7Jw==","shasum":"db5b744387e05293ac72bdf8f93abed5ea10faff","tarball":"https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.1.tgz","fileCount":8,"unpackedSize":49989,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ8EbCRA9TVsSAnZWagAAuuYQAJbwJ/c2zRAtcRYU7Ad5\nYqa3O7nW3PmJzoceR0dWa7/SWEuw7U0nMRCwWN0s/6df5YpeKn9zUyj1Q3F7\nQatre3lsAglWTFdr2wDYvYx9RmaLj+37Ddl/D0rIe1Rg6GrkBnminZu0L+Ow\nhI37dALeDXMNBHJnT+3IfMh4KZlSPschp8Uuq23bcowPDPUU8407gV3nUFlQ\nhGG7KKD4UJGCLlCat9p/an7P/VFrl/TnRFVFqHc90Hny7jbsUaT6oiDHZ4bq\n0gfaJOSgMfEFFgMiksl7LZtn5hqg5TJkoBbP/KdFoSoFbrpJLF6V5a+KU1Ca\nE+YZdOVy13EdQ6OHawjh35bNT4RktTi9xkqbkcbTLSShpgNkzirlEvZwwuIe\nUOyCtJ02938XZ5taGrY+MAoqTcnBc2DLvLDHAvPR/HqJ21UWkXEKwz5TOA6a\nwFvL2WjYk2iCsarwusLUTBlcoky5+/Vga82E+JYw0umUudr0vs+K10ahJfLU\nkged4/J4uW7nIhH4guEnXAMJ4fjZejcmafcG+wy2TAxy1+Nvrgr1ArXF0GXq\nSRQ+lP/FSKRepA7e6wK4Dd9pLZuPYtgrW+kIWzdsA1iVGBNpYaW2M8PVShMw\nm4PhnIa/avLhjV1pInTieKrB7G7SPITTo6H0ABB4Z2BtsL8dwdp3y1U/Pivu\nbKF5\r\n=jJAQ\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIACsbwy0cv33XA61uTYfMuK2eKvlXTfrRkZFiGjlhmGGAiEAzMMSc6N9gCZ2Ml5Y10dHc9h+MW4x7PrWaIn7uhswnnQ="}]},"maintainers":[{"name":"harveyconnor","email":"harveyconnor97@gmail.com"}],"_npmUser":{"name":"harveyconnor","email":"harveyconnor97@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/curve25519-js_0.0.1_1564721434656_0.13302293645061924"},"_hasShrinkwrap":false},"0.0.2":{"name":"curve25519-js","version":"0.0.2","description":"Javascript implementation of Curve25519","main":"lib/index.js","scripts":{"build":"tsc","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json"},"repository":{"type":"git","url":"git+https://github.com/harveyconnor/curve25519-js.git"},"author":{"name":"Harvey Connor","email":"harvey@smartguide.com.au"},"license":"MIT","bugs":{"url":"https://github.com/harveyconnor/curve25519-js/issues"},"homepage":"https://github.com/harveyconnor/curve25519-js#readme","keywords":["sign","curve25519","x25519","ed25519"],"devDependencies":{"@types/node":"^12.6.9","prettier":"^1.18.2","tslint":"^5.18.0","tslint-config-prettier":"^1.18.0","typescript":"^3.5.3"},"gitHead":"c983325fd5e01042b0ded5458a74b6af77ac1d77","_id":"curve25519-js@0.0.2","_nodeVersion":"10.15.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-KnJXQ1rJJBmKK1tdp+CrtQxLLLKTBSz1P5JRdPHPJQCFnhBOY8fJ8PyPpppZ2d7Gh9HHswKVWMU4+9/jU4DfcQ==","shasum":"3f73aef7a92c318edcc6f2d6557dea54b0735bfd","tarball":"https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.2.tgz","fileCount":8,"unpackedSize":49926,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ8QzCRA9TVsSAnZWagAA5QMQAIPwUpts9ciJaX5t5jtq\nYiT7xSg6slSW4dkqLwtkkTpM3DxfLResI+pX6h8Xl6tP2HLUHROVkLC/eT0R\nA0zpxAMXjCmaOgnwtAFJzXglO+DrOLrhZCy2SDYCJTBBAFSpG0ktL/tOIbK1\nUHN8AbtNEX0Ib4Sx1LzDg1Zl8WDaCKqMftzFtIwvK2F29HUsXdLXw0ostjK7\nPChOtIaJIjdD4ire7cKxXO5PiSV7MdqpQ23PZ4lH/sQERv4/x6fBHAWaXQ6I\nLlgASJXCeGFG+8i3szTP+SicMvNdwkdfu8d2EhXBwn2ORmS5xBsSLw9u1u2s\noGB24ll20oM/OJErcgRkMvPRe3P7Er1hu1WGxcBqABG9L9G+p6woxFAIKsTV\n/d8qO5BW7xb7LafseQSNt1YUnzwbjeHD8zyXUEQkIgOGZy1d8sp//03ITRX0\ndh+euWNu95lMFoDfJJMuvLIix5TJldbxTNSEbc3GXs4vSQcJHl14XSCj0TFF\n9XVujEB10oYDvR3pCjCKvR7RCr+OKxODvCRsjA8vP3kNTDdVrlluSPv5dTQa\n/Jea+0IPt4G/I6tWgtlV16et06fzTXo2NdJ12+JmN+mERVLxBCVXd964l9e8\n708yp6K7XRqk9FSU1zHcBPfqAKCJ/q3UARopUsAwFpw1XACYAwDo77nGZrTv\nPFEy\r\n=mrj5\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIDsTaZe+FNcezlnSNCQ5LlXdERJrHuZ605mTGqo7Y5SoAiEA9vMdHfZIBZOOTHYJ/X/s99B90l5CHw3E5VFkO5URp8c="}]},"maintainers":[{"name":"harveyconnor","email":"harveyconnor97@gmail.com"}],"_npmUser":{"name":"harveyconnor","email":"harveyconnor97@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/curve25519-js_0.0.2_1564722226866_0.26245364443928376"},"_hasShrinkwrap":false},"0.0.3":{"name":"curve25519-js","version":"0.0.3","description":"Javascript implementation of Curve25519","main":"lib/index.js","scripts":{"build":"tsc","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json"},"repository":{"type":"git","url":"git+https://github.com/harveyconnor/curve25519-js.git"},"author":{"name":"Harvey Connor","email":"harvey@smartguide.com.au"},"license":"MIT","bugs":{"url":"https://github.com/harveyconnor/curve25519-js/issues"},"homepage":"https://github.com/harveyconnor/curve25519-js#readme","keywords":["sign","curve25519","x25519","ed25519"],"devDependencies":{"@types/node":"^12.6.9","prettier":"^1.18.2","tslint":"^5.18.0","tslint-config-prettier":"^1.18.0","typescript":"^3.5.3"},"gitHead":"4d151eb99a4e95dfd0244df5b6cc20a30c7c5c2e","_id":"curve25519-js@0.0.3","_nodeVersion":"10.15.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-tLkLG5kPXNTRfFZIM7WI5QKLkQkemVDKRfqkMvKI0NHpJZlds7okQT83v9Vs9Z31csaMssY6uLjU5ht2XfCqNQ==","shasum":"f74234536db9d28107fe8fe9d075850875b642d3","tarball":"https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.3.tgz","fileCount":8,"unpackedSize":49938,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ8YHCRA9TVsSAnZWagAATrcP/0nSqpbP8A54hgW0NAqV\nbF0Xq+TIyEhAwrlbrv4onjAEHovD+b1LHQlrK7kc3m1KoVo7rnXJWC5Z+2dw\nxcK6dYMNhqROxDfoVnZekff6oUPX+qMi/l1A7aIqEHkOgdBvMYE85a2Oyk2k\n8bCm4EvHySmQJFbSCV8y8bDzE226lOhOdJcHkonXZUcUQ4IESgo9Z9tY/Met\nWwTas06U8bMUYMAh87Qxbr6TORX41yaSFWJdb5MnKyKEYm6X/QpxoCKFsINR\n2uoKaQbVT5DgzENLLsS7B0IHl3pGbvgIAyGeREOQB1kdDZPgqwfKDTBFlHVT\nt9RsljW0olhfB8XVXL1v7jWZI5F6Go58am+08397rWuooLT+wVUEbZ67cr/v\n4dP2y/OgsMHAasHk4BLugOwQqL4tvRLMmDopqf4aFI0sEXajrQxfnfgDku9t\neNWqqJ1vRCAstCrNI+YuOaMxYbg5jhSWKXSX62g/m8cJBvPKrSWupIYzn0SR\nboKcRGUhtpNI5HK6QVWQC9FirKFc19gJQeasfPhSb4vQ7pQ2nZRJ9O1+LKPW\n7kA26onW7i+Fp3SxoLQKNCqjpcahL++ICkn3dybd8VnGXFcQVxL8DsrJrcJv\nZntwZUzSr2K2cDX5JCXa5zbYCKVGe0Uqk/tI2AkQsYQizBwmTm0tAp4RPX/F\nkfcc\r\n=b5T+\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQDUqy+HNNRZiFwr/txvxyi/JKjdGYLC2eYgmIaMdxwTuQIga/a7rQ7/eHc1rhxIKncs17TyriIbu2Z9cLSagXe7NzA="}]},"maintainers":[{"name":"harveyconnor","email":"harveyconnor97@gmail.com"}],"_npmUser":{"name":"harveyconnor","email":"harveyconnor97@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/curve25519-js_0.0.3_1564722695036_0.14037915345678487"},"_hasShrinkwrap":false},"0.0.4":{"name":"curve25519-js","version":"0.0.4","description":"Javascript implementation of Curve25519","main":"lib/index.js","scripts":{"build":"tsc","format":"prettier --write \"src/**/*.ts\" \"src/**/*.js\"","lint":"tslint -p tsconfig.json"},"repository":{"type":"git","url":"git+https://github.com/harveyconnor/curve25519-js.git"},"author":{"name":"Harvey Connor","email":"harvey@smartguide.com.au"},"license":"MIT","bugs":{"url":"https://github.com/harveyconnor/curve25519-js/issues"},"homepage":"https://github.com/harveyconnor/curve25519-js#readme","keywords":["sign","curve25519","x25519","ed25519"],"devDependencies":{"@types/node":"^12.6.9","prettier":"^1.18.2","tslint":"^5.18.0","tslint-config-prettier":"^1.18.0","typescript":"^3.5.3"},"gitHead":"3bda844715120ae42b5da0d9002c1a9d2dd10fc7","_id":"curve25519-js@0.0.4","_nodeVersion":"10.15.0","_npmVersion":"6.10.2","dist":{"integrity":"sha512-axn2UMEnkhyDUPWOwVKBMVIzSQy2ejH2xRGy1wq81dqRwApXfIzfbE3hIX0ZRFBIihf/KDqK158DLwESu4AK1w==","shasum":"e6ad967e8cd284590d657bbfc90d8b50e49ba060","tarball":"https://registry.npmjs.org/curve25519-js/-/curve25519-js-0.0.4.tgz","fileCount":8,"unpackedSize":49956,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJdQ9DNCRA9TVsSAnZWagAAnLUQAJvjRKTgqauV8bmbrcWI\nNCeHRo+smCEhQMDS0xc7DIvQRh9sHM8ufcywsunGvjoIhTPBPAG4ed+2vwou\ncm5Lzyh8qBdnSv6eA10UkLa5uB2yzg5kn5RpbeNRqezpvWg55q5c21Dl0vf/\n5XWxI8/RMTCym5lfZC5Qmn27heIsEyQKSPsPcT8tjcL+1Va43Dzv8y1MXikJ\n5C+xsccVif9sUpW6MbnCd1jWj0fmg+QYELkXpyEYbm+8o5niQ2nbl+WODx3O\njKRot6D6jllFFzNqVPHXUe+HJBJXGiEpCIv5MGBo7khJ8ImVVEL1jm6VrczK\nNaZEHF8TVvN/5ZseNWZUfIvRKu5rMkCmpucu0izZ3amrC6bNzXQP7ikXUVQf\nM+FvMm91HIrd+FE8O9X1s3LEOYzhGPbp2DGK3wNG1IvfxBiDgQs2qJs+2NzR\nQY5jpJHsiDi2km1+c3uzeDdzXSFBVQb0VM2UbnaC1W3WnQZBnWffzJTsTojf\nrcbEWMc+1pXX79VmNAJP3t/3t8eP5YF1xHvG2G4km7fvJ3w5WNtdRUwAyNAk\nI9/TS7RWs5X+lISqunWuogOhIxCw7sF2qrhBU99DpSmele3dB8+4zqXUYePb\nsdZeIEw81GC43p/64ardFX43Ju36r+fBuBwxRhTiJeV+wShJj7/AMTCG4RgH\nFMLS\r\n=nSQC\r\n-----END PGP SIGNATURE-----\r\n","signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEQCIFiMwj/UtsxKQ+Ritleu3omDI/15YBbeuBm6UIihEDRiAiAsTuzJkYEyz8tr83sKECdT5o3H9yog0yIrFw2IqcfM9w=="}]},"maintainers":[{"name":"harveyconnor","email":"harveyconnor97@gmail.com"}],"_npmUser":{"name":"harveyconnor","email":"harveyconnor97@gmail.com"},"directories":{},"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/curve25519-js_0.0.4_1564725452966_0.4753635693922946"},"_hasShrinkwrap":false}},"time":{"created":"2019-08-02T04:50:34.656Z","0.0.1":"2019-08-02T04:50:34.825Z","modified":"2022-04-28T01:08:23.770Z","0.0.2":"2019-08-02T05:03:47.052Z","0.0.3":"2019-08-02T05:11:35.240Z","0.0.4":"2019-08-02T05:57:33.151Z"},"maintainers":[{"name":"harveyconnor","email":"harveyconnor97@gmail.com"}],"description":"Javascript implementation of Curve25519","homepage":"https://github.com/harveyconnor/curve25519-js#readme","keywords":["sign","curve25519","x25519","ed25519"],"repository":{"type":"git","url":"git+https://github.com/harveyconnor/curve25519-js.git"},"author":{"name":"Harvey Connor","email":"harvey@smartguide.com.au"},"bugs":{"url":"https://github.com/harveyconnor/curve25519-js/issues"},"license":"MIT","readme":"# curve25519-js\n\nCurve25519 signatures with X25519 keys.\n\n\n## Installation\n\n```\nnpm i curve25519-js\n```\n\n## Usage\n\n```js\nimport { sharedKey } from 'curve25519-js';\n\nconst ALICE_PRIV = '77076d0a7318a57d3c16c17251b26645df4c2f87ebc0992ab177fba51db92c2a';\nconst BOB_PUB = 'de9edb7d7b7dc1b4d35b61c2ece435373f8343c85b78674dadfc7e146f882b4f';\n\nconst alicePriv = Uint8Array.from(Buffer.from(ALICE_PRIV, 'hex'));\n\nconst bobPub = Uint8Array.from(Buffer.from(BOB_PUB, 'hex'));\n\nconst secret = sharedKey(alicePriv, bobPub);\n\nconsole.log('Secret:', Buffer.from(secret).toString('hex'))\n```\n\n## Functions\n\n### generateKeyPair\nGenerates a new key pair from the given 32-byte secret seed (which should be generated with a CSPRNG) and returns it as object:\n```ts\ngenerateKeyPair(seed: Uint8Array(32)): { \n private: Uint8Array(32);\n public: Uint8Array(32);\n}\n```\nThe returned keys can be used for signing and key agreement.\n\n### sign\n\nSigns the given message using the private key and returns signature.\n\n```ts\nsign(secretKey: Uint8Array(32), message: any, [random: Uint8Array(64)]): Uint8Array(64)\n```\n\nOptional random data argument (which must have 64 random bytes) turns on\nhash separation and randomization to make signatures non-deterministic.\n\n### verify\n\nVerifies the given signature for the message using the given private key.\nReturns `true` if the signature is valid, `false` otherwise.\n\n```ts\nverify(publicKey: Uint8Array(32), message: any, signature: Uint8Array(64)): boolean\n```\n\n### signMessage\n\nSigns the given message using the private key and returns\na signed message (signature concatenated with the message copy).\n\n```ts\nsignMessage(secretKey: Uint8Array(32), message: any, [random: Uint8Array(64)]): any\n```\n\nOptional random data argument (which must have 64 random bytes) turns on\nhash separation and randomization to make signatures non-deterministic.\n\n### openMessage\n\nVerifies signed message with the public key and returns the original message\nwithout signature if it's correct or `null` if verification fails.\n\n```ts\nopenMessage(publicKey: Uint8Array(32), signedMessage: any): Message | null\n```\n\n\n### sharedKey\nReturns a raw shared key between own private key and peer's public key (in other words, this is an ECC Diffie-Hellman function X25519, performing scalar multiplication).\n\nThe result should not be used directly as a key, but should be processed with a one-way function (e.g. HSalsa20 as in NaCl, or any secure cryptographic hash function, such as SHA-256, or key derivation function, such as HKDF).\n```ts\nsharedKey(privateKey: Uint8Array(32), publicKey: Uint8Array(32)): Uint8Array(32)\n```\n\n## How is it different from Ed25519?\nAxlsign allows calculating key agreement and signing using just a single X25519 key instead of two different X25519 and Ed25519 keys.\n\nIt uses keys in X25519 format (Montgomery), while Ed25519 uses keys in a different representation (Twisted Edwards). Internally, it converts keys to the correct format, but since such conversion would lose a sign bit, it also embeds the sign bit from public key into signature during signing, and puts it back into the key during verification.\n\nNote: if signing and performing key agreement with a single key is needed, but using keys in X25519 format is not a requrement, a better choice is to use Ed25519 keys, and then convert them to X25519 keys for key agreement (e.g. using ). This allows using only an external conversion functions without changing signature algorithms and formats.\n\n## Credits\n\nRe-written in 2019 with TypeScript support by Harvey Connor.\n\nWritten in 2016 by Dmitry Chestnykh.\nYou can use it under MIT or CC0 license.\n\nCurve25519 signatures idea and math by Trevor Perrin\n\n\nDerived from TweetNaCl.js .\nPorted in 2014 by Dmitry Chestnykh and Devi Mandiri. Public domain.\nImplementation derived from TweetNaCl version 20140427\n","readmeFilename":"README.md"}