{"_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 <https://github.com/dchest/ed2curve-js>). 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<https://moderncrypto.org/mail-archive/curves/2014/000205.html>\n\nDerived from TweetNaCl.js <https://tweetnacl.js.org>.\nPorted in 2014 by Dmitry Chestnykh and Devi Mandiri. Public domain.\nImplementation derived from TweetNaCl version 20140427\n<http://tweetnacl.cr.yp.to>","readmeFilename":"README.md"}