{"_id":"bls-sign","_rev":"53-f9ce313f461902a9dbd59a9bc0569f96","name":"bls-sign","dist-tags":{"latest":"0.13.23"},"versions":{"0.13.3":{"name":"bls-sign","version":"0.13.3","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"url":"https://vladimirkovalchuk8.wixsite.com/profile","name":"Vladimir Kovalchuk","email":"vladimir.k@clever-solution.com"},"license":"MIT","_id":"bls-sign@0.13.3","maintainers":[{"name":"wa1one1","email":"vladimir.k@clever-solution.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"4356f88b70a71ab9700045a1690ab5bdc8f6926e","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.3.tgz","fileCount":4,"integrity":"sha512-gwFGxox0P/1YdiKMcMcI4Ql/5WCrGbgq1aaHqsla/gqWIzJrQwLbUPCCmReCkuzvcjZ1ooo6bJj00+Qk1N2pmA==","signatures":[{"sig":"MEUCIQDEJyrOKvNQI+KKls2RM6ePfDM6jhNhH85X/EZtLJPxeQIgLc/fgLrk8i+5nbDIkfbbVuBTXfk0suxrQbpXyUrpsPQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":28669,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJflJIPCRA9TVsSAnZWagAAC70QAINJSDGSVusxXL9+YKy9\nMFC264lC7/reFYh0atyMVcYwn9PfWAJYzVDxywA8eOejeeJwmyxmHgIbCqGt\n4cLJajrrwm+yniKRrjv6jrIaxCf1z9wvyom3C43+o5L9sd9gJdvyQZt6gSO3\nk/mqWswqxrnwjxcDM5DAOjrZwZnIeQuVyRHyEoK1dL9eaxXVuufVPaWuBEkt\nCOuT9nvGu3mjp6xCilzOS87jDO3yTHq9ez33TSDYpP0oIP+DQgxgR7FLswYb\ndCawr9zzfy8EWEmmMDJrijp1oWAZ9qm3YqlOoZ9RIFYo0DUmWOv1rXPxJlcu\nyTaAJPKCSgsnL95AW96nxiPss0oKmjsVJtZrsgqZJHMyQ+mAxzQ266nWCoRa\n4H/naKBGaZeCTS71fpHq9ytx6a3ejhUICUZdnpcS/uksJbdXnjO5cijCl7RV\nmXve/StpOLtinBcGEEoUCA1bhl9YjFwQJdToJJDoZPZnd0IGQVnxCVz26rhQ\n0f6kBWBj8bpU/nGcN0PBVygCJODOEkbtdcb515ahvz2PwgvnoDYgsexMAV+8\nmtruC02Qoseva8XWfBeVKpq/E+YTEQ7eo6ioMS9Xzn9o2cC5YgQcDbcE4zWZ\nPPZ70COFxohTISQiNwNDCfMblauXrrcgiKZSRq32udWhnYn0d2eDURPtSIKF\nXILP\r\n=QG0y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","gitHead":"aa3b956542ebf8329a1c71e23e0d9feb21dd0705","scripts":{"test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.k@clever-solution.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"6.14.8","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"14.10.1","dependencies":{"alg-field":"^0.1.2","bigint-crypto-utils":"^3.0.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","webpack":"^5.0.0-rc.6","@babel/core":"^7.12.1","webpack-cli":"^3.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","regenerator-runtime":"^0.13.7","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.3_1603572239449_0.25308152127802885","host":"s3://npm-registry-packages"}},"0.13.10":{"name":"bls-sign","version":"0.13.10","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"url":"https://vladimirkovalchuk8.wixsite.com/profile","name":"Vladimir Kovalchuk","email":"vladimir.k@clever-solution.com"},"license":"MIT","_id":"bls-sign@0.13.10","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"59109068d9fca56e4df1fb2c7742c438633c4371","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.10.tgz","fileCount":4,"integrity":"sha512-T8Sn9vSSp+kuvETwa8yrPzdKLPn3baWwtRYaXqkTA/PFEAtGqdHX21VFDEF0ncYSII1jQQqt4vpiI/Ey9D5P0Q==","signatures":[{"sig":"MEQCIED0DUjhAes2KliIRcZCAa0ajZaK0RrJ19PF16uUKheyAiBpZ+Bn6n3dOsrTfUQ4P4hGr1h9zra2mRjPJHs9vBpQGQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":25939},"main":"dist/index.js","gitHead":"ec2413461acfb7a131eca0d89745c82bfecee64c","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.1.10","alg-field":"^0.1.10","bigint-crypto-utils":"^3.0.8"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","crypto-browserify":"^3.12.0","stream-browserify":"^3.0.0","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.10_1785954703603_0.23073481765232184","host":"s3://npm-registry-packages-npm-production"}},"0.13.11":{"name":"bls-sign","version":"0.13.11","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"url":"https://vladimirkovalchuk8.wixsite.com/profile","name":"Vladimir Kovalchuk","email":"vladimir.k@clever-solution.com"},"license":"MIT","_id":"bls-sign@0.13.11","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"777ebd2823227abe5a8a73f7081344da897fe9a3","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.11.tgz","fileCount":4,"integrity":"sha512-QO8bauKpGZWQLlUtEp8v7A9GAZRqj2gqBtqiV3zeh2V05FUbeLVGW/cgxDK0EbdtfPPWUZnn2KFRSFK9NH3Ukg==","signatures":[{"sig":"MEUCIDGUna54TdplMOX0111sDPJQzYljbKU/WAr/EWjc6QfEAiEA+4wggB5jgY6nmSb74+TqRsGpkQ0VsV1pAyzoampXFq8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":29413},"main":"dist/index.js","gitHead":"806fcb3ff3c0cf4b20846d240e2f1325adba934b","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.1.10","alg-field":"^0.1.10"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.11_1786025332628_0.9503048760433699","host":"s3://npm-registry-packages-npm-production"}},"0.13.13":{"name":"bls-sign","version":"0.13.13","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.13","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"ea7af39efbaf7dd391eee05c6f6fa3b1b5cea81f","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.13.tgz","fileCount":4,"integrity":"sha512-w39pXQcSaTiSYbKCoZbWJDL5AwGS5NqvnHaXyA9IH+4grcgqyTgHYH8uqsp5bxxJ01MU+69G6/mEA7TJWizUHg==","signatures":[{"sig":"MEYCIQCd/UhBHQGXTt6TAo68HtvE8T2CvE2UcqybIgpPaAG9/AIhANVb1vawsLIzpKZS1Exuj7tx+Z4VgksEzQYwA9SSc3IS","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":42998},"main":"dist/index.js","gitHead":"43ec7d6595e97873b83c0684f6bf4a35400f1d0b","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.1","alg-field":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.13_1786046599919_0.7993249471153376","host":"s3://npm-registry-packages-npm-production"}},"0.13.14":{"name":"bls-sign","version":"0.13.14","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.14","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"da65e2d35138126083670e40ea2c68b89456e947","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.14.tgz","fileCount":4,"integrity":"sha512-5rNJ/saFFxJAExC8W6gYtdCijqK/fLyGzt2bjzz7l9khxYYBic4e7foxk5oS3/nDs4/04abXQwexll2Cu/LR1w==","signatures":[{"sig":"MEQCIByw3jJ73DV2Vc0csaVGepvcWLcc7k9yI8mbD2BjuoN8AiBuKtr3qr8ECR6Hor2uLUYTI4Jg16DBv4OmWrYw5ZUwqg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":43375},"main":"dist/index.js","gitHead":"2783a9acbb772cd6aa2f17753a082e7da3121322","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.1","alg-field":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.14_1786046947354_0.07098532415140757","host":"s3://npm-registry-packages-npm-production"}},"0.13.15":{"name":"bls-sign","version":"0.13.15","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.15","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"e9f7500a71874c298c767b2bd381f5e15276a022","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.15.tgz","fileCount":4,"integrity":"sha512-NUcEiiVHeYyaFmPKwwpuuAjLY1+os9Bxux8iXHFDEtcsNx2hRGYYq/smLtoRoxyzC9vi3ZGkpsXRXzj5+0uXUA==","signatures":[{"sig":"MEYCIQD01mAvLW9hZ8LhZtBIJeXgs7Ll+SV7Nxyo04T4Pbd9zgIhAP7azdhy5N8h0chj7bYeMFKe20RSo8qmrkUE0pY8kzIK","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":46966},"main":"dist/index.js","gitHead":"9657233805bfe79c3f6ba104fedeee5faba23cfb","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.1","alg-field":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.15_1786048037025_0.7060713035731407","host":"s3://npm-registry-packages-npm-production"}},"0.13.16":{"name":"bls-sign","version":"0.13.16","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.16","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"dd3fcb09b833353920687849915e7a9205972e19","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.16.tgz","fileCount":4,"integrity":"sha512-hGXuFjd+jpsaAW3hAjCUdPw67zbakAAre1CNm9BU3F/Ub91rMXI3X0PE2VIecPhrM+Eg/+K7XbXpIM46gmjRLA==","signatures":[{"sig":"MEUCIQDZUMMjfa6CHy58Z4+9EutgaSR449Jq98KOpkwRQK9KWwIgUabjHsYHvCz1BzPeEbkkBLp6jWqFZHj2ie7zfvT+EuI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48958},"main":"dist/index.js","gitHead":"ec1178fcf1ca90c5b1e92bb19d99be2350c9702e","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.1","alg-field":"^0.2.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.16_1786048441146_0.4793945371484334","host":"s3://npm-registry-packages-npm-production"}},"0.13.17":{"name":"bls-sign","version":"0.13.17","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.17","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"218dcb66c038921af0e80084e6a6fbaa88073382","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.17.tgz","fileCount":4,"integrity":"sha512-GIXJHVPKTpdR+i+58cVfnu76QO6zm+Nfsez0Y2ftIojSMzQcaBoLsg8S6T+yMR7EgaoMi5rQ8F0AD71UswRK3w==","signatures":[{"sig":"MEUCIQCPH/vMhlEYBFb2uaNpvVcJTFXk5YT6l+6o1+jCbNJTZQIgTBgoMcnh/Itn1idMl5DsCCy7+9g+WNVBe8D6itn3Ols=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48844},"main":"dist/index.js","gitHead":"4b9b1ec7272ac760ee3185ec4f0f3606e736c761","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.2","alg-field":"^0.2.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.17_1786048983233_0.7321377757728578","host":"s3://npm-registry-packages-npm-production"}},"0.13.18":{"name":"bls-sign","version":"0.13.18","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.18","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"81ad635a2f88a3054223ec81b690cf50b6d874b8","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.18.tgz","fileCount":4,"integrity":"sha512-CJ0CT/t4QDKWwGUFtAEl4hZXg7p5NFrH3pZ0gyKw0BX+Gc/1lxsishNaK5PVyap1oU2C1UwrvfYjxid7ysEbUA==","signatures":[{"sig":"MEUCIQDsN87+sMebrtoAJ9WbpEmoZsVbUwVhjPjooOUI/suTDAIgBNpuQZnRXYfPkKR9rh00kwhdhqKiUV3JIQ2hqHw1qIM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49141},"main":"dist/index.js","gitHead":"fe60324624c23b98e648ac67917c0f536dcff1c6","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.2.2","alg-field":"^0.2.4"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.18_1786058983839_0.9196180979877739","host":"s3://npm-registry-packages-npm-production"}},"0.13.19":{"name":"bls-sign","version":"0.13.19","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.19","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"963e62688b97bd4b00659454127f11cca325980f","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.19.tgz","fileCount":4,"integrity":"sha512-c7G6EiQHdPfNf/IaJcu2YqVFUFQzg4uitS105gjuM548L0WhFmDNkZIg5Dxf+brwynrA1kYvlASLmI51TRRLHQ==","signatures":[{"sig":"MEYCIQDTkLBR0b70G6RYUoemw1phquxKWwbjs5BD8VtQsKwycAIhAIef3hx3CJBs7kDmVl66ByjrBVgPpNmb3C7MLsQzvR+c","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":48425},"main":"dist/index.js","gitHead":"947238fef9a41ea5b91ec09e2749f40a2214812a","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.3.0","alg-field":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.19_1786106724693_0.2584433689240029","host":"s3://npm-registry-packages-npm-production"}},"0.13.20":{"name":"bls-sign","version":"0.13.20","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.20","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"3104833293ac75a4c02f0c4ff6635afdd914d076","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.20.tgz","fileCount":5,"integrity":"sha512-O5wlXwvx3g00c5ulJPp44oqVUXibYbS/Nq82rnQspm904ncZgZnnZx+H9ONzhlAMJ8wtSZBgzfmqZHvQ0k1yxw==","signatures":[{"sig":"MEUCIQCast3qwWSC1mApxxUTaKnfOxlSreNxZbDCK09cB7bDRAIgH8EHEqEv0fRB7+LDdElHD/HQQRMJtiCSTC9/9CIZDJE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":158938},"main":"dist/index.js","unpkg":"dist-web/index.js","browser":"dist-web/index.js","gitHead":"916ffd9e3543c354002820915d80a68da3e4238f","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"jsdelivr":"dist-web/index.js","repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.3.0","alg-field":"^0.3.0"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.20_1786107522720_0.6941045941191737","host":"s3://npm-registry-packages-npm-production"}},"0.13.21":{"name":"bls-sign","version":"0.13.21","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.21","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"f2b62d17683c9fb0d2078a4c7cd481a079578bcb","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.21.tgz","fileCount":5,"integrity":"sha512-VcN4567W1vHYwgCqqT4UBVToFtrLSxVr+SOW5aUk7RlaGL/2N3ICXZ/JjNFF0KKmi3kw5my44tvhfuNlp5+BCQ==","signatures":[{"sig":"MEUCIQDwoDCkrWvmmMdTnyPDICheFa6jQM85IRFQ27sBoEnIpwIgaV1FvA129lENKCpOadB7QuF9gRjx/1w59Sw5y4IEw60=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":118820},"main":"dist/index.js","unpkg":"dist-web/index.js","browser":"dist-web/index.js","gitHead":"4bf8935f58a3ca1ff37c9487c054124024463ac3","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"jsdelivr":"dist-web/index.js","repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.4.0","alg-field":"^0.3.1"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","terser-webpack-plugin":"^5.6.1","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.21_1786302106254_0.08656304142584959","host":"s3://npm-registry-packages-npm-production"}},"0.13.22":{"name":"bls-sign","version":"0.13.22","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","_id":"bls-sign@0.13.22","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"homepage":"https://github.com/wa1one/bls-sign#readme","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"dist":{"shasum":"cb7c2720e6e0121caf6399b8a23beed593ca80a2","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.22.tgz","fileCount":5,"integrity":"sha512-jh0+Qd3qUox/295bxazSj7Z7GHquV+z2Mm/wEC5KG6yI9WetEqtldlLEPI2uo/5E/riuBAuAz+srWvZBAX1j7Q==","signatures":[{"sig":"MEQCIDc7XHFJp5T8z8p1/e45OYOjznXloXihzaObQI/jdwy4AiBnAPUE3+fJKSDXDWo3fqbY6CawJbYaAfzJjQ/v/XVixQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":110297},"main":"dist/index.js","unpkg":"dist-web/index.js","browser":"dist-web/index.js","gitHead":"842fbaec9aad4f99fc93663180f0e655c6b8b418","scripts":{"lint":"eslint .","test":"jest all.test.js","build":"webpack --mode production"},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"jsdelivr":"dist-web/index.js","repository":{"url":"git+https://github.com/wa1one/bls-sign.git","type":"git"},"_npmVersion":"11.6.1","description":"BLS threshold signatures creation and verification","directories":{},"jsnext:main":"main.mjs","_nodeVersion":"24.11.0","dependencies":{"alg-bn":"^0.4.2","alg-field":"^0.3.2"},"_hasShrinkwrap":false,"devDependencies":{"jest":"^26.5.3","buffer":"^5.6.0","eslint":"^10.8.0","globals":"^17.8.0","webpack":"^5.0.0","@eslint/js":"^10.0.1","@babel/core":"^7.12.1","webpack-cli":"^4.3.12","babel-loader":"^8.1.0","@babel/preset-env":"^7.12.1","regenerator-runtime":"^0.13.7","terser-webpack-plugin":"^5.6.1","eslint-config-prettier":"^10.1.8","@babel/plugin-proposal-class-properties":"^7.12.1"},"_npmOperationalInternal":{"tmp":"tmp/bls-sign_0.13.22_1786302504263_0.9085987021500712","host":"s3://npm-registry-packages-npm-production"}},"0.13.23":{"name":"bls-sign","version":"0.13.23","description":"BLS threshold signatures creation and verification","main":"dist/index.js","browser":"dist-web/index.js","unpkg":"dist-web/index.js","jsdelivr":"dist-web/index.js","jsnext:main":"main.mjs","scripts":{"test":"jest all.test.js","build":"webpack --mode production","lint":"eslint ."},"repository":{"type":"git","url":"git+https://github.com/wa1one/bls-sign.git"},"keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"devDependencies":{"@babel/core":"^7.12.1","@babel/plugin-proposal-class-properties":"^7.12.1","@babel/preset-env":"^7.12.1","@eslint/js":"^10.0.1","babel-loader":"^8.1.0","buffer":"^5.6.0","eslint":"^10.8.0","eslint-config-prettier":"^10.1.8","globals":"^17.8.0","jest":"^26.5.3","regenerator-runtime":"^0.13.7","terser-webpack-plugin":"^5.6.1","webpack":"^5.0.0","webpack-cli":"^4.3.12"},"license":"MIT","bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"homepage":"https://github.com/wa1one/bls-sign#readme","dependencies":{"alg-bn":"^0.4.2","alg-field":"^0.3.2"},"gitHead":"78c230678f19ba87b92aab02604968fa455a0c89","_id":"bls-sign@0.13.23","_nodeVersion":"24.11.0","_npmVersion":"11.6.1","dist":{"integrity":"sha512-JC7KN93QF/RU2w98KlQOPyMlENtzUdt8/tQ2zt90nDHK5Dd/CYANyE40Aom5VHddhsp1RDvZp496bKxX82Cebw==","shasum":"a3d7e7385994bde73075e3f955a8eddfdae7065b","tarball":"https://registry.npmjs.org/bls-sign/-/bls-sign-0.13.23.tgz","fileCount":5,"unpackedSize":112048,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIB+bo2DxQ2dBH906OXN8gGp6JlgFvu0GyEYdom3vxpHqAiEA3jxLcZ+6jrrGlJq3SixGuFXrZSc7zwxzi1mX1/M4Gug="}]},"_npmUser":{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"},"directories":{},"maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/bls-sign_0.13.23_1786567773857_0.6492792005255503"},"_hasShrinkwrap":false}},"time":{"created":"2018-11-09T14:45:52.000Z","modified":"2026-08-12T20:49:34.192Z","0.5.0":"2018-11-09T14:45:52.244Z","0.5.1":"2018-11-09T14:57:14.935Z","0.8.0":"2019-06-10T13:10:13.480Z","0.9.0":"2019-06-10T13:19:33.020Z","0.9.1":"2019-06-10T13:28:21.518Z","0.9.2":"2019-06-10T13:40:27.744Z","1.0.0":"2019-06-11T07:47:40.354Z","0.9.3":"2019-06-11T09:35:28.000Z","0.10.0":"2019-06-26T15:22:24.891Z","0.11.0":"2020-10-14T17:31:06.614Z","0.12.0":"2020-10-16T10:18:11.641Z","0.12.1":"2020-10-16T11:56:39.814Z","0.12.2":"2020-10-20T23:12:25.577Z","0.12.3":"2020-10-20T23:32:54.922Z","0.12.4":"2020-10-23T23:32:38.701Z","0.12.5":"2020-10-23T23:48:57.826Z","0.13.0":"2020-10-24T08:15:13.606Z","0.13.1":"2020-10-24T10:05:15.777Z","0.13.2":"2020-10-24T10:07:05.098Z","0.13.3":"2020-10-24T20:43:59.609Z","0.13.10":"2026-08-05T18:31:43.755Z","0.13.11":"2026-08-06T14:08:52.768Z","0.13.13":"2026-08-06T20:03:20.054Z","0.13.14":"2026-08-06T20:09:07.505Z","0.13.15":"2026-08-06T20:27:17.153Z","0.13.16":"2026-08-06T20:34:01.291Z","0.13.17":"2026-08-06T20:43:03.402Z","0.13.18":"2026-08-06T23:29:43.999Z","0.13.19":"2026-08-07T12:45:24.828Z","0.13.20":"2026-08-07T12:58:42.869Z","0.13.21":"2026-08-09T19:01:46.410Z","0.13.22":"2026-08-09T19:08:24.431Z","0.13.23":"2026-08-12T20:49:34.019Z"},"bugs":{"url":"https://github.com/wa1one/bls-sign/issues"},"author":{"name":"Volodymyr Kovalchuk","email":"vladimir.kovalchuk.88@gmail.com"},"license":"MIT","homepage":"https://github.com/wa1one/bls-sign#readme","keywords":["BLS","Signature","Cryptography","Threshold","Signature"],"repository":{"type":"git","url":"git+https://github.com/wa1one/bls-sign.git"},"description":"BLS threshold signatures creation and verification","maintainers":[{"name":"wa1one1","email":"vladimir.kovalchuk.88@gmail.com"}],"readme":"# bls-sign\n\nnpm: [bls-sign](https://www.npmjs.com/package/bls-sign)\n\n### This package is still being downloaded ~10 times a week after 6 years! I decided to publish some small updates using new AI features. I am going to split 2 curves to 2 packages.\n\n### Boneh–Lynn–Shacham signature scheme\n\nThe Boneh–Lynn–Shacham (BLS) signature scheme allows a user to verify that a signer is authentic. The scheme uses a bilinear pairing for verification, and signatures are elements of an elliptic curve group. Working in an elliptic curve group provides some defense against index calculus attacks, allowing shorter signatures than FDH signatures for a similar level of security. Signatures produced by the BLS signature scheme are often referred to as short signatures, BLS short signatures, or simply BLS signatures. The signature scheme is provably secure (it is existentially unforgeable under adaptive chosen-message attacks), assuming both the existence of random oracles and the intractability of the computational Diffie–Hellman problem in a gap Diffie–Hellman group.\n\n### Usage\n\n```\nnpm install bls-sign\n```\n\n```js\nconst { BLSSigner, BLSSecretKey, BLSPublicKey } = require('bls-sign')\n\nconst signer = new BLSSigner(256)\n\n// Q is a fixed global generator on G1; H is the message hashed onto G2\nconst Q = signer.G.multiply(4n)\nconst H = signer.getRandomPointOnEt()\n\nconst secretKey = new BLSSecretKey()\nconst publicKey = new BLSPublicKey(secretKey, Q)\nconst signature = secretKey.sign(H)\n\nsigner.verify(Q, H, publicKey, signature) // true\n```\n\n#### In the browser\n\nA self-contained UMD build (with `alg-field`/`alg-bn` inlined and no Node `crypto` dependency) is published alongside the package, so it can be loaded straight from a CDN — no build step:\n\n```html\n<script src=\"https://unpkg.com/bls-sign\"></script>\n<script>\n  const { BLSSigner, BLSSecretKey, BLSPublicKey } = window['bls-sign']\n\n  const signer = new BLSSigner(256)\n  const Q = signer.G.multiply(4n)\n  const H = signer.getRandomPointOnEt()\n\n  const secretKey = new BLSSecretKey()\n  const publicKey = new BLSPublicKey(secretKey, Q)\n\n  console.log(signer.verify(Q, H, publicKey, secretKey.sign(H))) // true\n</script>\n```\n\nPin a version for production (`https://unpkg.com/bls-sign@0.13.20/dist-web/index.js`); jsDelivr serves the same file. Bundlers pick this build up automatically through the `browser` field, which also avoids the Node `crypto` import that the main entry point uses.\n\n#### Using the BLS12-381 curve\n\nThe default curve is alt_bn128 (BN254), matching Ethereum's precompiles. A signer over BLS12-381 (the curve used by Ethereum consensus, Zcash, Chia, and filecoin) works identically:\n\n```js\nconst signer = BLSSigner.bls12381(256)\n\nconst Q = signer.G.multiply(4n)\nconst H = signer.getRandomPointOnEt()\n\nconst secretKey = new BLSSecretKey()\nconst publicKey = new BLSPublicKey(secretKey, Q)\n\nsigner.verify(Q, H, publicKey, secretKey.sign(H)) // true\n```\n\nThe final exponentiation uses the standard optimized easy-part/hard-part split (Hayashida–Hayasaka–Teruya decomposition over the cyclotomic subgroup), and `verify` runs a single merged product check, so a full `verify` takes on the order of 110 ms (see the Performance section below). The computed value is the cube of the textbook pairing — a bijection on the result subgroup, so all equality and verification semantics are identical; only raw pairing outputs compared against other libraries would differ.\n\n#### Threshold signatures\n\nA secret key can be split into `n` shares, any `k` of which are enough to reconstruct it (Shamir's Secret Sharing):\n\n```js\n// split secretKey into 5 shares, any 3 of which reconstruct it\nconst shares = secretKey.share(5, 3)\n\nconst recovered = new BLSSecretKey()\nrecovered.recover(shares.slice(0, 3))\n\nrecovered.s === secretKey.s // true\n```\n\n### Performance\n\nBenchmarked against the actual packages published on npm, installed fresh with each version's own declared dependencies. Environment: Node v24.11.0, Apple M2 Pro. Times are the mean over repeated iterations after warmup. (0.13.12 was never published to npm and was code-identical to 0.13.11, so 0.13.11 stands in for it below.)\n\n#### BN254 (alt_bn128, default curve)\n\n| Operation                        | 0.13.11 | 0.13.13 | 0.13.14 | 0.13.15    |\n| -------------------------------- | ------- | ------- | ------- | ---------- |\n| `sign`                           | 0.76 ms | 0.70 ms | 0.72 ms | 0.71 ms    |\n| `verify`                         | 176 ms  | 175 ms  | 170 ms  | **111 ms** |\n| `getRandomPointOnEt`             | 0.99 ms | 1.1 ms  | 1.0 ms  | 1.0 ms     |\n| `share(5, 3)`                    | 12 µs   | 11 µs   | 12 µs   | 11 µs      |\n| secret `recover` (3 shares)      | 2.5 µs  | 3.3 µs  | 2.6 µs  | 2.4 µs     |\n| signature aggregation (3 shares) | 0.65 ms | 0.67 ms | 0.65 ms | 0.64 ms    |\n\nBN254 performance was flat from 0.13.11 through 0.13.14 — in particular, the `alg-field`/`alg-bn` 0.1.x → 0.2.x upgrade (which rewrote the field tower to be curve-parameterized) cost nothing on the default-curve path. 0.13.15 restructured `verify` into a single product check `e(−sQ, H) · e(Q, sH) == 1` over a merged multi-Miller loop, sharing one squaring chain and one final exponentiation across both pairings instead of running two independent pairing computations.\n\n#### BLS12-381 (`BLSSigner.bls12381()`, added in 0.13.13)\n\n| Operation                          | 0.13.13 | 0.13.14 | 0.13.15    | 0.13.16   |\n| ---------------------------------- | ------- | ------- | ---------- | --------- |\n| first `bls12381()` call (one-time) | 0.91 s  | 0.95 s  | 0.94 s     | **~2 ms** |\n| `sign`                             | 0.73 ms | 0.77 ms | 0.75 ms    | 0.75 ms   |\n| `verify`                           | 3.36 s  | 183 ms  | **113 ms** | 112 ms    |\n| signature aggregation (3 shares)   | 0.69 ms | 0.68 ms | 0.69 ms    | 0.69 ms   |\n\nThe 18x `verify` speedup in 0.13.14 comes from replacing the generic 4314-bit final exponentiation with the optimized easy-part/hard-part split (Hayashida–Hayasaka–Teruya decomposition over the cyclotomic subgroup); 0.13.15 adds the same merged single-product verify as BN254. Verification on the two curves is now equally fast (~110 ms). Signing and aggregation are scalar-multiplication-bound and unaffected.\n\nIn 0.13.16 the extension-tower parameters (non-residue and all Frobenius coefficients) are hardcoded rather than derived by brute-force search on first use, eliminating the ~0.9 s one-time `bls12381()` cost; a unit test re-runs the generic derivation and asserts it still matches the hardcoded constants.\n\nThe `sign` figures above predate 0.13.23. Secret keys were one byte then, so scalar multiplication only had 8 bits to walk; with full-width 254-bit keys `sign` costs ~33 ms on both curves. That is the real price of the key size, not a regression — `verify` is unchanged, since the pairing dominates it.\n\n### API\n\n#### `BLSSigner`\n\nHolds the curve's fixed generator points and provides the top-level sign/verify helpers.\n\n- `new BLSSigner(bitLength, G, G2, PairingCheckImpl, fieldPrime)` — creates `G` (a generator point on G1) and `G2` (a generator point on G2); both default to alt_bn128's standard generators and can be overridden, along with the pairing implementation and base-field prime. `bitLength` is currently unused.\n- `BLSSigner.bls12381(bitLength)` — factory returning a signer over the BLS12-381 curve (standard generators, M-type-twist optimal ate pairing) instead of the default alt_bn128.\n- `.G`, `.G2` — the fixed generator points.\n- `.getRandomPointOnE()` — a random scalar multiple of `G` (a random point on G1).\n- `.getRandomPointOnEt()` — a random scalar multiple of `G2` (a random point on G2); typically used as the \"message\" point `H`.\n- `.sign(H, s)` — low-level signing: returns `H.multiply(s)`, a raw point (not a `BLSSignature`). For normal use prefer `BLSSecretKey.sign(H)` below.\n- `.verify(Q, H, sQ, sH)` — checks `e(sQ, H) === e(Q, sH)`. `sQ` must be a `BLSPublicKey`, `sH` a `BLSSignature`.\n- `.getPairing()`, `.getParameters()` — currently always return `undefined`; unimplemented.\n\n#### `BLSSecretKey`\n\n- `new BLSSecretKey(s, order)` — wraps a secret scalar. If `s` is omitted, generates a uniformly random secret in `[1, order-1]`, where `order` defaults to the BN254 subgroup order (~254 bits, and a valid scalar on either supported curve). Before 0.13.23 this drew a single random byte, giving a keyspace of 256 — see the security note below.\n- `.toString()`\n- `.getPublicKey(Q)` — derives this key's `BLSPublicKey` for generator `Q`.\n- `.sign(H)` — signs point `H`, returning a `BLSSignature`.\n- `.getMasterSecretKey(k)` — builds the `k` coefficients of a degree `k-1` sharing polynomial with `this` as the constant term (the secret). Throws if `k <= 1`.\n- `.share(n, k)` — Shamir's Secret Sharing: splits the secret into `n` shares (ids `1..n`) drawn from a degree `k-1` polynomial; any `k` of the returned shares can reconstruct the secret. Throws if `k > n`.\n- `.recover(vec)` — reconstructs the secret from an array of shares via Lagrange interpolation and sets `this.s` (`this.id` becomes `0`). Passing fewer than `k` shares does not throw — it silently produces a different, wrong secret, so callers are responsible for gathering enough shares.\n\n#### `BLSPublicKey`\n\n- `new BLSPublicKey(secretKey, Q)` — computes `sQ = Q.multiply(secretKey.s)`.\n- `.toString()`\n\n#### `BLSSignature`\n\n- `.toString()`\n- `.recover(signVec)` — combines an array of partial signatures (each produced by a key share's `.sign()`) into one valid signature via Lagrange interpolation, without ever reconstructing the underlying secret key. Same \"fewer than `k` shares silently gives a wrong result\" caveat as `BLSSecretKey.recover`.\n\n`BLSSignature` instances are normally produced by `BLSSecretKey.sign()` / `BLSSignature.recover()`, not constructed directly.\n\n#### `BLSPolynomial`\n\nInternal helper backing the threshold-sharing methods above:\n\n- `.eval(msk, x)` — evaluates the sharing polynomial (coefficients `msk`, each with an `.s`) at `x`.\n- `.calcDelta(ids, modulus)` — computes the Lagrange basis coefficients at `x = 0` for an array of share ids. These are fractions in general (for ids `1,2,4` the first is `8/3`), so pass the group order as `modulus` to get them as exact modular values; without a modulus they are only returned when every coefficient happens to be an integer, and an inexact set throws rather than silently truncating. Throws if fewer than 2 ids are given, or if two ids are equal.\n- `.lagrange(vec)` — reconstructs either a secret scalar (if entries have `.s`, via exact rational interpolation) or an aggregated signature point (if entries have `.sH`, via coefficients reduced modulo the curve's group order) at `x = 0`. Throws if given fewer than two shares.\n\n#### `Parameters`\n\nRe-exported from `alg-field`: the curve's field parameters — `Parameters.p` (the base field prime) and `Parameters.n` (the curve/group order).\n\n### Security notes\n\n**Key generation.** Up to and including 0.13.22, `new BLSSecretKey()` drew a single random byte, so there were only 256 possible keys — an attacker could derive the public key for every candidate and recover any secret instantly. Since 0.13.23 keys are drawn uniformly from `[1, order-1]` (~254 bits), as are the sharing polynomial's coefficients. **If you generated keys with an earlier version, treat them as compromised and reissue them.**\n\n**Message encoding.** `getRandomPointOnEt()` is a convenience for demos and tests, not a hash-to-curve. Mapping a message to a curve point safely requires a proper hash-to-curve construction (RFC 9380); this package does not provide one, so signatures over attacker-influenced messages are not covered by the usual security argument.\n\n**No encryption.** BLS is a signature scheme: it authenticates messages, it does not hide them. There is no encrypt/decrypt here, and the pairing should not be improvised into one.\n\n**Not audited.** This is a from-scratch implementation maintained for learning and experimentation. It has had no third-party cryptographic review, and the pairing and threshold code have both carried real correctness bugs found only recently. For production use prefer an audited library such as `@noble/curves` or `blst`.\n\n### The Scheme\n\n```\n e : G1 x G2 -> Fp12 ; ate pairing over BN curve\n Q in G1 ; fixed global parameter\n H : {str} -> G2\n s in Fr: secret key\n sQ in G1; public key\n s H(m) in G2; signature of m\n verify ; e(sQ, H(m)) = e(Q, s H(m))\n```\n\n#### Shamir Secret Sharing and Lagrange Interpolation\n\nShamir's Secret Sharing is an algorithm in cryptography created by Adi Shamir. It is a form of secret sharing where a secret is divided into parts, giving each participant its own unique part. Some or all of the parts are needed in order to reconstruct the secret.\n\nCounting on all participants to combine the secret might be impractical, so the threshold scheme is sometimes used instead, where any k of the parts is sufficient to reconstruct the original secret.\n\n![alt text](https://media.geeksforgeeks.org/wp-content/uploads/20200415120740/math4.png)\n\n### Interactive demo\n\n**Live: [wa1one.github.io/bls-sign](https://wa1one.github.io/bls-sign/)**\n\n[`demo.html`](demo.html) is a self-contained browser playground for the whole API: pick a curve (alt_bn128 or BLS12-381), generate or set a secret key, sign a text message (SHA-256 → G2 point), verify — including against a tampered message or the wrong key — and split the secret into k-of-n shares, then aggregate any subset of partial signatures and see whether the result verifies. Every operation shows its wall-clock time.\n\nTo run it locally instead (it loads the locally built browser bundle):\n\n```\nnpm install\nnpm run build\nopen demo.html   # or serve the repo root with any static file server\n```\n\nThe demo is repository-only — it is not part of the published npm package.\n\n### Build\n\n```\nnpm run build\n```\n\n### Run tests\n\n```\nnpm run test\n```\n\nCurves are compatible with Ethereum.\n","readmeFilename":"README.md"}