{"_id":"@borislav.itskov/schnorrkel.js","_rev":"23-4c73a33accbea807a6561efc4b58ff8f","name":"@borislav.itskov/schnorrkel.js","dist-tags":{"latest":"3.1.2"},"versions":{"1.0.0":{"name":"@borislav.itskov/schnorrkel.js","version":"1.0.0","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@1.0.0","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"3eb91be1f397079c759338bff9511ac2787190e0","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-1.0.0.tgz","fileCount":8,"integrity":"sha512-nVgT6907/V2kZsljpY/UGnDxckcSLfT9ZZS13VtPtMKaLQXmY9JkdY6VQGmwKdbMPIas7PSkG+rDEJclQCCSaQ==","signatures":[{"sig":"MEUCIF7B11Si9TW49xQ0pWM2zuiD+dDv0m3VoxLWKGDT0jT0AiEA/OqjZjL6pVBHHg2hWD9+PeZT7hSMX+JHQ4yKwdkXk7c=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":26845,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkJoOaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp8dw//TyokTsrrrzV3H7hrykJQLwB0s7uBhCfRk+QPOOIkV9d2UB+F\r\n5jlHs5HWpYYNFCYZq9XCNB5uQTQfz7ozKi8rwNTMSaQWoUiYufmIZbyOS/Ph\r\n1OYNWI1/zgJlyZXXNEX9ZgzAi1Sf39waa//qi34NAv3Tsk3a1isMDF81b38Y\r\n+y6v4lKDx8pGtGpkhLWbPCiCdW7vjoBQdjXBLFpY78MI+WAXQeyPI3QeGoWq\r\ngqTkh76uw5TMdHPDGNNrwOEh8ubVd9JP6UwJtKV4Ho2zps5a0FOO4sPWid/c\r\niNa8pi9rMWgrXkwXR3N53zTTKBEUpHvjL6Qi1+TRfDIG47dxTABVKITLcCmt\r\nsaoNFP1ZNWqbdJzmxkw09Ts6ya9T4qgzA4QVvxESNzHpOh6neMBZEWrwP6KN\r\nopZHQ/C/DqGhKkqf4IVhTPfJjDAWCFbvb6GEmOz9xXZHLPIWuOizZrZ8Vqzz\r\nKwRx9+ZsA0jsM27yT1AorItZqNPDgsI1GF6QRg/N1+vKSnF3CtfK7hE8140L\r\n3pKRFc+2MmIO74k6K5mti3OSHpz6AHllgi/Nz1Hx3S7dmkPVLubyxMhm7ecc\r\nR888vl2db0O44sBo8QXpMPW3dqV717L3B98L4cyiXBngcO5Pgv8WFAOGICGA\r\nAImoH01+s7TLfUjiLDROPNsHgPfADZHuk98=\r\n=lmpo\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"4ab9442b13f5b9d212952ec31c7d32301cbca2f4","scripts":{"test":"echo \"Error: no test specified\" && exit 1"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.2.0","description":"JavaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"16.19.0","dependencies":{"bigi":"^1.4.2","crypto":"^1.0.1","ecurve":"^1.0.6","ethers":"^5.7","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"hardhat":"^2.13.0","@nomicfoundation/hardhat-toolbox":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_1.0.0_1680245658123_0.8602469145035223","host":"s3://npm-registry-packages"}},"1.0.1":{"name":"@borislav.itskov/schnorrkel.js","version":"1.0.1","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@1.0.1","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"7db74648f1bcd6ff6075590b23c1934c729a36aa","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-1.0.1.tgz","fileCount":9,"integrity":"sha512-v5hG+B1XRQCAApYSOjFVvWj+DZ+wv/zsjubE5j+NDa5hdzMVpn0/wlHZqsF50DZXAZUMOEpCcvmtRQ46sPRPcw==","signatures":[{"sig":"MEUCIA9ZOzXD96ro3OmBsFwa3JWKenM6UHzyAtsfx7mXttM+AiEAubeaGKAU/gmn/+7rZkmSfka59y3qn7r0lHP67GfPxDQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":30171,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkSiSaACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpt2g//cxx++YUyQfiFzEfrPQDmNxuyEc4Q0xyxsvJ+CryOTgixNNdb\r\nydsg5691wu4dosi/FEgwPcb7V15KRm49LRKMWWwfjjPBETITE4FH8X666gT7\r\nV841h1teoPSTXQppUPS4olj44GweTWoNYGIdmyy13qzXH4bwIuPhEpZTq0l7\r\nERA+VQnHpeUaBYTgRKUoXfxn3AXMsEsJKL76aeYMFjy/sa/JbrhIx/76jGDW\r\nWGLxijS5tfdrDgQirqog2XV5UBLURYIQEKBoNU8//1EKNiz/fsKqQW1poCCs\r\n6CWmiqKnqFLUyZUwfHEu18JzRf0U2SE9DwbKmyX9MaciEGJRe+Ufn4Tjdwg0\r\nXfdzfv5sBTkXWfJ5URXWAWqJgLRI91mJEFn/7qBaZ2nK8/VHiK8wlPpqjoH0\r\nWmHNovxcq3duJ0o86Tiw8Urzi7xPxer7GvXBsnWb24WcF5ZM48CGtO1h6J0Y\r\nkq8fMxUMGtrYcmF/jFPCJy5lvHliCIPZHXxzbzG9IRKNP8eD7XnwdA3xALqJ\r\nTVpjVnRbckSQFqzjNMr6swfWIFS3jfeR2nUGQNcWPN0vOZA+hLr6TtJ+Kzht\r\n/82vhumbw/NjP5AfLEm5h5MO2XwS47UXL4MhAKPkF/3CnJtcrvYA6PJlQWUj\r\nFUWgAIec90XbZc/WCoK56UgcAQZCn3Y5bfQ=\r\n=DKmC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"b1870089d52cee8639df53d5c90c6ee2a36b5a3e","scripts":{"test":"hardhat test"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"JavaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","crypto":"^1.0.1","ecurve":"^1.0.6","ethers":"^5.7","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"hardhat":"^2.13.0","@nomicfoundation/hardhat-toolbox":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_1.0.1_1682580633930_0.31082112644282844","host":"s3://npm-registry-packages"}},"1.0.2":{"name":"@borislav.itskov/schnorrkel.js","version":"1.0.2","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@1.0.2","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"9816dbe5007dc11ffa41197e329ca1da833fd0c2","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-1.0.2.tgz","fileCount":9,"integrity":"sha512-InjDI3LY1q51l4oxAgN3v1RD1ojhE59mnH4zSdxjkO7Ysi1FnTQDiJB4fuGr22EJIm2MAaeI/DHwycMHDnUA6g==","signatures":[{"sig":"MEYCIQDgxOsSV8rPnOH9NuHp2w51QQj2Nv0ApcuWtIDRd9PyWgIhAJq3YUPv+aEbG736d6AAtvF4x7o6c4lmSZGYSLr/VOvC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":31589,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJkS21dACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9+Q/8CVclAp10vxE1Yo/ExF+n3Gr8TI9FtpTaQ6Hz6IVH2BNoa6OA\r\nA2y1HGqs6ZFg2G1ErxAxwy/mOBy93ramWEKpJMwZlizwNeK8nU01H0PAR3vh\r\nReZ7XVsV8+kWS2iCj20de7RDAcoCxK4OqgymXA7eBfPVvAuNqNA/rniyOmVs\r\n+oBM7SAfQeEU71zjBfTmyhsGi2PHYo2oRd9Jleh1NDKj9Xzhbwf0Py9Q06Qu\r\ngQBMO/f+mE3OmpEyByf6uhG6RCm8oQWrcy/9+IYCbIOmSNxoaziEZAHC8z3C\r\nQqRhYaXRNt9eol2xlZPmFRKmOcY8smvmdZVLMYx26pjep67q0xfDNZ2ekTuh\r\nSrI4uriMd7fwvDLHlYxFNwZ8gbprwIuxZCZM3tn5tQBeJRKjS/j/03v5LDqr\r\n2TI3+cJh/MVm+JmVq6bciuFJftvnWhglzAfzfsEVRuNrAyvDANFPdMpaF3js\r\n5VvTHtYOer4esctf6I71JQh7+BmOet5AT6kth04Xpmv08MEBv5cfiHYa/inL\r\nFs3+Yp2S3RPu8K24/heY8aUALESm9w5C5vNorITcU6feBYNtYTDOAni9o7fq\r\nj2ycReGtJdEI4cEsMUM5Rday9ScouS+/RB4eoBN5DLRnwV4dR996d3Ikppwj\r\noGo42L1FB57Hi+vjJ3hk9XzKWN3U9vLrBFo=\r\n=xkuL\r\n-----END PGP SIGNATURE-----\r\n"},"main":"index.js","gitHead":"54f08c8baf47c92b62d5710a33974adb59d75eb3","scripts":{"test":"hardhat test"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.5.1","description":"JavaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"18.16.0","dependencies":{"bigi":"^1.4.2","crypto":"^1.0.1","ecurve":"^1.0.6","ethers":"^5.7","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"hardhat":"^2.13.0","@nomicfoundation/hardhat-toolbox":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_1.0.2_1682664797633_0.6595004978758696","host":"s3://npm-registry-packages"}},"1.1.0":{"name":"@borislav.itskov/schnorrkel.js","version":"1.1.0","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@1.1.0","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"a32ff3260c7f0c85bfd9141bcddcab81f3a29c22","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-1.1.0.tgz","fileCount":10,"integrity":"sha512-KIbxxA5ScvHNQq5n1IPMW+DyE+NNhsV0GzkWBN8rWJ11LNMtWfBkBbYwOhfdgRUDqdVxZbOlY2B92q7vL9fHeQ==","signatures":[{"sig":"MEUCIQDrSxZR3RiFTwycwNlRfg/DHaj9b8KqcM0n8nFaLunPYAIgNs7eIiqqqqW3ZH8cjcWJ/SEB7B02XOpSGXAEhLr2apQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37003},"main":"index.ts","gitHead":"909f490619cb8dc2b0317feb4b2f93bc04ad15eb","scripts":{"test":"hardhat test"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"JavaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","hardhat":"^2.13.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/chai":"^4.3.5","@types/node":"^20.2.0","@types/mocha":"^10.0.1","chai-assertions-count":"^1.0.2","@nomicfoundation/hardhat-toolbox":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_1.1.0_1684489141232_0.7291562762897301","host":"s3://npm-registry-packages"}},"1.1.1":{"name":"@borislav.itskov/schnorrkel.js","version":"1.1.1","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@1.1.1","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"2973160efbac41a0482c9fb6ce8e30589a2e1839","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-1.1.1.tgz","fileCount":11,"integrity":"sha512-s0blEZGKulCrbgYLoWGETXBGYz5O8p55qLUfIahlGOZaH6R1v+HcaVkTGcbscLwiBcbq697vHtEdPgNoYizOFg==","signatures":[{"sig":"MEQCIAdxEmNwb+FJLdPlYrCtpiUsBpg8q9gX54RfdVt8+wkpAiAlwnxml6nW8L5nbEGBP/UOfYbQxndWArzjh8i0BeEvIA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38373},"main":"index.ts","gitHead":"b9d6f10331ea7c498068e2f90c98ecf60d5cf3a6","scripts":{"test":"hardhat test"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"JavaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.7","hardhat":"^2.13.0","ts-node":"^10.9.1","typescript":"^5.0.4","@types/chai":"^4.3.5","@types/node":"^20.2.0","@types/mocha":"^10.0.1","chai-assertions-count":"^1.0.2","@nomicfoundation/hardhat-toolbox":"^2.0.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_1.1.1_1684818817081_0.4076037772044814","host":"s3://npm-registry-packages"}},"2.0.0":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.0","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.0","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"3a414337bf3e155ad051d6740c818d0664c8ab6d","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.0.tgz","fileCount":43,"integrity":"sha512-qlX0/rOIeVW/eIi00fHZvBiexe3B3XR1Iw1tY9x8q9ImlwKm7pPoKWZMq+UWmqOazRFQjrUGFWieG89+kA4kJg==","signatures":[{"sig":"MEQCIC21WtsB1pjIOwCz/B1gkplexKw5h0pQ0qy7A3CFEwWOAiB+n4+Woy2d6p4Jou8a2nzghQSCaF1Bd/ARjsdii8WTtw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55653},"main":"dist/es5/index.js","type":"module","types":"./dist/es5/index.d.ts","module":"dist/es6/index.js","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"4d8b3051ca1527d378595a444274bd8e55230b41","scripts":{"test":"vitest","build":"tsc --declaration && tsc -p tsconfig.es5.json --declaration","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.0_1685425531929_0.5725821231216883","host":"s3://npm-registry-packages"}},"2.0.1":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.1","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.1","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"902882fa265712289a1e2e4fd3751da60d65ccab","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.1.tgz","fileCount":43,"integrity":"sha512-RO8nFDmInDXINDPv9UYnkvNZ7ANlkuwxcu0QpGS/0hC0fyvC58LXDTl3lHC2ggP4V5nrRKXgfEaJduZgOtDgtg==","signatures":[{"sig":"MEUCIAeLqIW23tkLmVjuf4Bqx50RjdJt0Z9s0cJVBFsLJnV9AiEA7zG0DFPGpXBhAkIuUV85Yj4RomRTIwe1n+01N7rPHzo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55655},"main":"dist/es5/index.js","type":"commonjs","types":"./dist/es5/index.d.ts","module":"dist/es6/index.js","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"72cbfdf769aaff51419d4dc247f2e4afb21be76c","scripts":{"test":"vitest","build":"tsc --declaration && tsc -p tsconfig.es5.json --declaration","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.1_1685437878674_0.3595435301264305","host":"s3://npm-registry-packages"}},"2.0.2":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.2","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.2","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"259aeb97b60b89a7086d4571cd105795d7e891cc","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.2.tgz","fileCount":43,"integrity":"sha512-FhDmuIworXQzYSNIA0B/oWClK3QUmmOrRNWuGlpuBtvlnraiNlGXJ0SDUsPGF6qhj9qg9zcfbtNeXxNqFjXhjQ==","signatures":[{"sig":"MEUCICdXBAH3NXEsL/d0T1pj25j1FIA8Ks7EkxrJLEAD97jhAiEAhJ5tByCsiRKgJ3LMMwXGWZ4P+pyIFkPK6tYAxDppEWk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55633},"main":"dist/es5/index.js","types":"./dist/es5/index.d.ts","module":"dist/es6/index.js","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"6f0dd252c1ee40d54d21cf97bf624239c03c561c","scripts":{"test":"vitest","build":"tsc --declaration && tsc -p tsconfig.es5.json --declaration","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.2_1686136479921_0.2748735920663168","host":"s3://npm-registry-packages"}},"2.0.3":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.3","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.3","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"8919944e2665b55042815dbb972bf18216788c13","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.3.tgz","fileCount":43,"integrity":"sha512-HmrBcc6lQ0SYKY1iEcB9h+jzIAVWxFl+8e5X2ju5UuezxnxwpyehnREvp+/0pbvcMXqjzo2NSVchJGlCuJS4Dw==","signatures":[{"sig":"MEUCIDRu6gGzG3FLtRdgoPlCgmw1nq6A0zwNDLbn5sKnwEFFAiEA+t0ORmwWcBIFMmMQuEKVEgs2SLShPrxgmKFuVCsimLM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":55570},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"7a61b01325e548571eed84049a1afc566e8a5233","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.5.1","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"18.16.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.3_1686297353665_0.2730100006839786","host":"s3://npm-registry-packages"}},"2.0.4":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.4","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.4","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"d1b77e9b0c93177f543338f7c58fcea89bbc6410","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.4.tgz","fileCount":23,"integrity":"sha512-5gSkErSl6WrWm5KsVAeeliZTM65SrzPLOD51z2fMYvGBX3iBDqsEMApz9J/OL5HZHtX3WkPNQXP9pKDYAH9JFw==","signatures":[{"sig":"MEYCIQCzs/LlZBjXJCl3axGsTY9+ffu4hMeT7ephJ1wmqySqdQIhAMORE88051eiD3AmVx8DefELLBhSg/Htwnkp45yz5bGq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36323},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"f1b93a669e38bda76ee6803cbe2aac25f8420a47","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.4_1686300174482_0.8770935092431491","host":"s3://npm-registry-packages"}},"2.0.5":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.5","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.5","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"d5b95bd6825540601a81bfc6f38e7cf9e9e67d3a","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.5.tgz","fileCount":23,"integrity":"sha512-X13R7OVuKY03WbX4Yi5o+p9sadixV68GJthQ0ws0fotBCs51iwYgzIPE3/qwKsLqE+sjQArJyhKkPi2zVV+g6g==","signatures":[{"sig":"MEQCIDg0n8CWC18wQZNJOkQQPaDjPrTC1OlKAYRfD+Aow8KKAiAR5UkVroah9cuGu4ksZwEhEmyZk3nU7myfqqoWnKZO1w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":36959},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"65834040557c97911bd9061c08ae90583e669d41","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.5_1686316168885_0.7763250756580933","host":"s3://npm-registry-packages"}},"2.0.6":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.6","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.6","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"9ed27fbc055eb565c8c02a8962c8140979820201","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.6.tgz","fileCount":23,"integrity":"sha512-04kiN+UMdXdrY4OiE3+U9ohxySl7gI11l/LkoZhXIOXEsQT2hs7Y1Gjnue0kO4CF8Cn+WZhWTVFzE5CPABtPlg==","signatures":[{"sig":"MEQCIBYOf3ODxgG5DoQ+pkj+QBFTkEFGaSZS/E1UAdXQoOYQAiBe7GSnenH4NheMcbA6dGxoO+Iq+w4j/zt6Z/RBNpP5bA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37297},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"3e934e382574c1cbcca1069d7cb501afd0407151","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.6_1686390627511_0.38113195212493545","host":"s3://npm-registry-packages"}},"2.0.7":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.7","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.7","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"a5472ae0782dc98dabfbf863386e897716e064f3","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.7.tgz","fileCount":23,"integrity":"sha512-TIhB87NxURCXPEjDhtq11ed7OlekRhWZISKnDyeZi0TOfiFCHCXYDJfnVg4cK4f4dPnmmlCUtPpZ88o9UZ44vA==","signatures":[{"sig":"MEYCIQCqn+lCiWhBVgpuSD13VGvzpAUk4H8FduKBlIuFHv9rSwIhAL1O2ZGvR3gAOPOUh/boAYq4f0wpDISyn3ZoYuHEwNmJ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37509},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"79504853b21c2bdfaaecfb1f54f0b590fc004930","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.7_1686398685032_0.2261159461707929","host":"s3://npm-registry-packages"}},"2.0.8":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.8","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.8","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"b50d68cccd70e4103a7e06ce1bf39474805dd124","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.8.tgz","fileCount":23,"integrity":"sha512-zvzfSRowjSnd9jMVvGifHJr0gMkx3s41FLrvFY9s9JCnR1VyvYoT8sj6ZNyBwcKeUzF7NKFGPvjgEQLVZI4GNw==","signatures":[{"sig":"MEUCIG3LipUTz9MBFuJU8M1Wvb0FS2OA6OP1kCOUfLJY8W7cAiEAuYfNg+XKTs+l2ctpeHQLwHjsFH3UG7vY4rXPi+cSHxw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":37509},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"175f8e39c6701d337fe3484c4c08b2338fdcd302","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.8_1688475040538_0.8351035908910058","host":"s3://npm-registry-packages"}},"2.0.81":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.81","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.81","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"a80a1d8f8ee9a39ac836e5f1dd87fd9de5e4ca52","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.81.tgz","fileCount":23,"integrity":"sha512-RqH6JjCDqvTUd0YqhmpAFf2Loj51jRWuOU+efjAWuhuYurIUcHKZrQalYP1GjEMQsbY7c6jLPKrBhqBt3mkKDQ==","signatures":[{"sig":"MEQCIAWJmQZRKg5t3Um+7gjKAwWnm5XsW4x0Xc3HmtWdld+SAiBG77c14GKfYBap/ah7i3otbTWMK9A/tozpmMjYovb5Uw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":38330},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"58ae1eacfc4c90f57533a6f56bbc1eb70d1c361f","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.81_1688475136976_0.8293067152408375","host":"s3://npm-registry-packages"}},"2.0.82":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.82","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.82","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"857f5e0fbb6e45d8e5ef5f0eb60e4fe71f96b645","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.82.tgz","fileCount":23,"integrity":"sha512-LPvjKEjrgCIrhPj3iENex9o3HK6W/st7+8muEG/4w2BqmGa7h3bEgTOcuD9xj3VoufHBM4dstsH+ZJz+vrDQZA==","signatures":[{"sig":"MEYCIQDFt1dqTycDBZlUSUdYVpa2z7x4HxZykJChGYIabo7XpwIhAIYpqxxm/pXk6fiY1pOjQ0aLu9NSnPALTM+6wyZSvtir","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39036},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"56ac902a74c41cebfb27982e41a21d1d02606e6c","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.82_1688535738763_0.44629044571490595","host":"s3://npm-registry-packages"}},"2.0.83":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.83","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.83","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"5b1ecd724be9b9b0da93b62dab42170184034bd3","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.83.tgz","fileCount":23,"integrity":"sha512-8ZV8kOxrz6gw91PiMFyQDoNXsraPscmKAh38olOUK0bWSPyAWSPPIB8knkNej0tDngZHb24n2VvmJz71Mw1Tog==","signatures":[{"sig":"MEUCIQDfR7FC9KJCZkslvk8o8ociRTG//iPEErGfyAOcZOhRLwIgeorBLDj5tpyMasy6prtlVASO2zdKNxwNBrURYgXfNow=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40979},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"d32b460fd378ddaf6caf6968c6acd5452e30fca7","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"9.6.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"20.0.0","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.83_1688613910376_0.2602064189480304","host":"s3://npm-registry-packages"}},"2.0.84":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.84","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.84","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"47a5a567d6fbd55bad8747e4a4bc35b87a42fc2c","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.84.tgz","fileCount":23,"integrity":"sha512-uI53zYD6urPMhJqY1lpeV3bwDDAy8CnvFAyxlm7s66nCP9RI5Nm+tNejlztRk8c0POkXSXP8HjkYh9X0imOtsw==","signatures":[{"sig":"MEQCICp0NzFFpPv9W3v6wz7Rv7Lh+db+pCKDnUZjiP7UdI5JAiAvU8noyp0zyEihzbyCNYZLTMgLhf4knSYMIxhxkvFl3Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":40993},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"a1a72d663df2fd2412dda0e6e27dc98245baa016","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"8.19.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"16.20.1","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.84_1693905166623_0.2610726678945883","host":"s3://npm-registry-packages"}},"2.0.85":{"name":"@borislav.itskov/schnorrkel.js","version":"2.0.85","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@2.0.85","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"10f0b84c212af6d1f63e22ceead4e637618fc7f0","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-2.0.85.tgz","fileCount":23,"integrity":"sha512-TLC/XOEK25Eo5UIvArnYmyol+lvjhsrrlpn37PVBzrKZMaUvu6mDdD5xnkr73AiYolTntEv52xD+IeEPZMTIGg==","signatures":[{"sig":"MEUCIQCNysC51uBEY2dU5yVtbiNyTPn2SQAUIu94x/nrPTNG6QIgPYbqlnGCqLzCqvdlsoEKCLIO82DCkoqAgIpOASWqZ/o=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":41019},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"d0abf6234712bb4a4e11a119cc79be6cf30de471","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"8.19.4","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"16.20.1","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/elliptic":"^6.4.14","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_2.0.85_1694432727109_0.2996025205756834","host":"s3://npm-registry-packages"}},"3.0.0":{"name":"@borislav.itskov/schnorrkel.js","version":"3.0.0","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@3.0.0","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"d4ac1179e256fa69dd13bf9ade3ff572412210c2","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-3.0.0.tgz","fileCount":23,"integrity":"sha512-6qumjxrey07QrPzxvO5ml6yte9MRlXLQSmRBOD8JK4pFMWysuReO8PdE1h0UNZ+pZq674tkntLAuZc6RoB/1Fg==","signatures":[{"sig":"MEYCIQCtS2KaqsmiGyh8F8a0A+1F8BFV+mB3hyAzNsSNwY+BrQIhANbxO+19ym9Rhsb9/yM3rbHgQK+UrGjxmhVdYlh2Dd39","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":39500},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"26d36fbe2f640bf875b829896af6cc9bfe4d5711","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"10.7.0","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"18.20.3","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_3.0.0_1728982757148_0.007068180203682495","host":"s3://npm-registry-packages"}},"3.1.0":{"name":"@borislav.itskov/schnorrkel.js","version":"3.1.0","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@3.1.0","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"5ec60daaf39475755cebb72ddce849ac9e10c867","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-3.1.0.tgz","fileCount":29,"integrity":"sha512-3W9goiGq6kV2UVqkWLwH0btJX2IS4v8NFgZiHT2JVdCJFcnEwZ7AhFTK06S2nvIDcGsJ/1OYsgiztbd2hUcU1w==","signatures":[{"sig":"MEUCIH4I/ITgRDl1rnsMXtEErkJojO26wr0CDorwTPQLpcG3AiEAzh4qSSAck7uxExMDI/l6tc7H4x5TkyKlm5rv09nGj1k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49021},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"f9b170c42f73804bd913b86aaa64c13a8c6e2e65","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"10.7.0","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"18.20.3","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_3.1.0_1729755208980_0.78215659070483","host":"s3://npm-registry-packages"}},"3.1.1":{"name":"@borislav.itskov/schnorrkel.js","version":"3.1.1","author":"","license":"ISC","_id":"@borislav.itskov/schnorrkel.js@3.1.1","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"dist":{"shasum":"9da4bcaf4304e1d13fa12d8d12a5aa9bf285a76b","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-3.1.1.tgz","fileCount":29,"integrity":"sha512-quYiQwSCRKPRSUdOjJrvzuqBFtsFpzFwD94QNxwXIJ2+1Q7Xox9PRuP+LhTdXByx8GHC80kx9uRxKpRAQe9J8A==","signatures":[{"sig":"MEQCICQI9F1msPk+DfK446G1GfQYp9BrnmJ1nqX/KYuxSF3cAiAQ89QZ9Mbq02ok/PigxGYAtqRvmjXPuTGZKUfbzrCj0Q==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":49089},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <20.0.0"},"gitHead":"29a882fdb4d2e0885dc84c7b0a7b15dbe4058a01","scripts":{"test":"vitest","build":"tsc","watch":"tsc -w","test:watch":"vitest watch","test:coverage":"vitest run --coverage"},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg"},"repository":{"url":"git+https://github.com/borislav-itskov/schnorrkel.js.git","type":"git"},"_npmVersion":"10.7.0","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","directories":{},"_nodeVersion":"18.20.3","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"_hasShrinkwrap":false,"devDependencies":{"solc":"0.8.19","vitest":"^0.29.2","hardhat":"^2.14.0","typescript":"^4.9.5","@types/ecurve":"^1.0.0","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2"},"_npmOperationalInternal":{"tmp":"tmp/schnorrkel.js_3.1.1_1729756311968_0.1899379207166645","host":"s3://npm-registry-packages"}},"3.1.2":{"name":"@borislav.itskov/schnorrkel.js","version":"3.1.2","description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=16.0.0, <=22.12.0"},"scripts":{"build":"tsc","watch":"tsc -w","test":"vitest","test:coverage":"vitest run --coverage","test:watch":"vitest watch"},"author":"","license":"ISC","dependencies":{"bigi":"^1.4.2","ecurve":"^1.0.6","ethers":"^5.7.2","secp256k1":"^5.0.0"},"devDependencies":{"solc":"0.8.19","@types/ecurve":"^1.0.0","@types/secp256k1":"^4.0.3","@vitest/coverage-c8":"^0.29.2","typescript":"^4.9.5","hardhat":"^2.14.0","vitest":"^0.29.2"},"repository":{"type":"git","url":"git+https://github.com/borislav-itskov/schnorrkel.js.git"},"_id":"@borislav.itskov/schnorrkel.js@3.1.2","gitHead":"1364dd7291aff4d837cf7c906b3a9604f9fd201a","bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","_nodeVersion":"22.13.1","_npmVersion":"10.9.2","dist":{"integrity":"sha512-s7w+rcs5kuMkeuppieCE65ttZ532Kei6jdmQccd8pemJRlBiv8GHmuHRukhMLYntXM0lkMEOlZCpmSay4u99dQ==","shasum":"0b82c4cc106bf3dad817c3b43bd130df301a2d46","tarball":"https://registry.npmjs.org/@borislav.itskov/schnorrkel.js/-/schnorrkel.js-3.1.2.tgz","fileCount":3,"unpackedSize":12468,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFYx3edRMLTGVPzoWh1wtR7Ehqiejx2Mzi8fjq7cT1ooAiA0xyk/oJjbcjkuS4kX5rtUpE/YxflAG0WDlMB2ByeaDg=="}]},"_npmUser":{"name":"borislav.itskov","email":"borislav@devlabs.bg","actor":{"name":"borislav.itskov","email":"borislav@devlabs.bg","type":"user"}},"directories":{},"maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/schnorrkel.js_3.1.2_1750942196840_0.20575140619930177"},"_hasShrinkwrap":false}},"time":{"created":"2023-03-31T06:54:18.025Z","modified":"2025-06-26T12:49:57.154Z","1.0.0":"2023-03-31T06:54:18.293Z","1.0.1":"2023-04-27T07:30:34.085Z","1.0.2":"2023-04-28T06:53:17.789Z","1.1.0":"2023-05-19T09:39:01.404Z","1.1.1":"2023-05-23T05:13:37.265Z","2.0.0":"2023-05-30T05:45:32.089Z","2.0.1":"2023-05-30T09:11:18.859Z","2.0.2":"2023-06-07T11:14:40.103Z","2.0.3":"2023-06-09T07:55:53.909Z","2.0.4":"2023-06-09T08:42:54.664Z","2.0.5":"2023-06-09T13:09:29.062Z","2.0.6":"2023-06-10T09:50:27.681Z","2.0.7":"2023-06-10T12:04:45.210Z","2.0.8":"2023-07-04T12:50:40.767Z","2.0.81":"2023-07-04T12:52:17.183Z","2.0.82":"2023-07-05T05:42:18.923Z","2.0.83":"2023-07-06T03:25:10.569Z","2.0.84":"2023-09-05T09:12:46.812Z","2.0.85":"2023-09-11T11:45:27.282Z","3.0.0":"2024-10-15T08:59:17.334Z","3.1.0":"2024-10-24T07:33:29.194Z","3.1.1":"2024-10-24T07:51:52.140Z","3.1.2":"2025-06-26T12:49:56.991Z"},"bugs":{"url":"https://github.com/borislav-itskov/schnorrkel.js/issues"},"license":"ISC","homepage":"https://github.com/borislav-itskov/schnorrkel.js#readme","repository":{"type":"git","url":"git+https://github.com/borislav-itskov/schnorrkel.js.git"},"description":"A javaScript library for signing and verifying Schnorr Signatures.   It can be used for single and multi signatures.   Blockchain validation via ecrecover is also supported.","maintainers":[{"name":"borislav.itskov","email":"borislav@devlabs.bg"}],"readme":"# Schnorr Signatures\n\nA javaScript library for signing and verifying Schnorr Signatures.  \nIt can be used for single and multi signatures.  \nBlockchain validation via ecrecover is also supported.\n\n# Typescript support\n\nSince version 2.0.0, we're moving entirely to Typescript.\n\n## Version 2.0 Breaking changes\n\n- `sign()` and `multiSigSign()` return an instance of `SignatureOutput`. Each element in it has a buffer property\n  - instead of `e` we return `challenge` for the Schnorr Challenge. To accces its value, use `challenge.buffer`\n  - instead of `s` we return `signature` for the Schnorr Signature. To accces its value, use `signature.buffer`\n  - instead of `R` we return `publicNonce` for the nonce. To accces its value, use `publicNonce.buffer`\n- `getCombinedPublicKey()` returns a `Key` class. To get the actual key, use `key.buffer`\n- a lot of method become static as they don't keep any state:\n  - `verify`\n  - `sign`\n  - `sumSigs`\n  - `getCombinedPublicKey`\n  - `getCombinedAddress`\n\n## Version 3.0 Breaking changes\n\n- `finalPublicNonce`, `FinalPublicNonce` is replaced everywhere with `publicNonce`, `PublicNonce`. The old name just didn't make sense.\n- `sign()` is the former `signHash()`. A sign function that accepts a plain-text message as an argument no longer exists.\n- `multiSigSign()` is the former `multiSigSignHash()`. A sign function that accepts a plain-text message as an argument no longer exists.\n- `verify()` is the former `verifyHash()`. A verification function that accepts a plain-text message as an argument no longer exists.\n\nIn version 2, we had plenty of ways to sign a message. This broad a lot of confusion as to what function was the correct one to use in various situations. This lead us to believe that making things simpler and forcing a hash to be passed to the methods is the way forward.\n\n## Requirements:\n\n- Node: >=16.0.0, <20.0.0\n- npm (Node.js package manager) v9.x.x\n\n## Installation\n\n```\ngit clone https://github.com/borislav-itskov/schnorrkel.js\ncd schnorrkel.js\nnpm i\n```\n\n## Testing\n\n```\nnpm run test\n```\n\n## Usage\n\n### Single Signatures\n\nWe refer to Single Signatures as ones that have a single signer.\n\nSign:\n\n```js\nimport { SchnorrSigner } from \"@borislav.itskov/schnorrkel.js\";\nimport { hexlify, randomBytes, hashMessage } from \"ethers/lib/utils\";\n\nconst privateKey = hexlify(randomBytes(32));\nconst signer = new SchnorrSigner(pk1);\nconst msg = \"test message\";\nconst commitment = hashMessage(msg);\nconst signature = signer.sign(commitment);\n```\n\nOffchain verification:\nWe take the `signature` and `hash` from the example above and do:\n\n```js\nconst result = signer.verify(hash, signature);\n```\n\nOnchain verification:\n\nFirst, you will need a contract that verifies schnorr. We have it in the repository and it is called `SchnorrAccountAbstraction`.  \nBut all in all, you need this onchain:\n\n```js\nfunction verifySchnorr(bytes32 hash, bytes memory sig) internal pure returns (bool) {\n    // px := public key x-coord\n    // e := schnorr signature challenge\n    // s := schnorr signature\n    // parity := public key y-coord parity (27 or 28)\n    (bytes32 px, bytes32 e, bytes32 s, uint8 parity) = abi.decode(sig, (bytes32, bytes32, bytes32, uint8));\n    // ecrecover = (m, v, r, s);\n    bytes32 sp = bytes32(Q - mulmod(uint256(s), uint256(px), Q));\n    bytes32 ep = bytes32(Q - mulmod(uint256(e), uint256(px), Q));\n\n    require(sp != Q);\n    // the ecrecover precompile implementation checks that the `r` and `s`\n    // inputs are non-zero (in this case, `px` and `ep`), thus we don't need to\n    // check if they're zero.\n    address R = ecrecover(sp, parity, px, ep);\n    require(R != address(0), \"ecrecover failed\");\n    return e == keccak256(abi.encodePacked(R, uint8(parity), px, hash));\n}\n```\n\nWe explain how ecrecover works and why it is needed later [in this document](#ecrecover).  \nLet's send a request to the local hardhat node. First run in the terminal:  \nnpx hardhat node  \nAfterwards, here is part of the code:\n\n```js\nimport { SchnorrSigner } from \"@borislav.itskov/schnorrkel.js\";\nimport { hexlify, randomBytes, hashMessage } from \"ethers/lib/utils\";\nimport { ContractFactory } from \"ethers\";\n\nconst privateKey = hexlify(randomBytes(32));\nconst signer = new SchnorrSigner(privateKey);\nconst factory = new ContractFactory(\n  SchnorrAccountAbstraction.abi,\n  SchnorrAccountAbstraction.bytecode,\n  wallet\n);\nconst contract: any = await factory.deploy([signer.getSchnorrAddress()]);\nconst msg = \"just a test message\";\nconst commitment = hashMessage(msg);\nconst sig = signer.sign(commitment);\nconst result = await contract.isValidSignature(\n  commitment,\n  signer.getEcrecoverSignature(sig)\n);\n```\n\nYou can see the full implementation in `tests/schnorrkel/onchainSingleSign.test.ts` in this repository.\n\n### Multisig\n\nSchnorr multisignatures work on the basis n/n - all of the signers need to sign in order for the signature to be valid.  \nBelow are all the steps needed to craft a successful multisig.\n\n### MultisigProvider\n\nTo make multisig easier, a `SchnorrMultisigProvider` class was created. It expects all `SchnorrProvider` objects that participate in the multisig. The `SchnorrProvider` can be passed by itself or one could use the `SchnorrSigner`. The meaninful point is that you don't need possession of the private keys to use the `SchnorrMultisigProvider`. It's goal is to provider helper functions for fetching the correct on-chain schnorr address, the combined public key of all the signers and provide a easy way to fetch the expected on-chain structure for validation\n\n```js\nimport {\n  SchnorrSigner,\n  SchnorrMultisigProvider,\n} from \"@borislav.itskov/schnorrkel.js\";\n\nconst signerOne = new SchnorrSigner(pk1);\nconst signerTwo = new SchnorrSigner(pk2);\nconst multisigProvider = new SchnorrMultisigProvider([signerOne, signerTwo]);\n```\n\n#### Public nonces\n\nPublic nonces need to be exchanged between signers before they sign. You can do this in two ways.  \nUsing the multisigProvider:\n\n```js\nconst publicNonces = multisigProvider.getPublicNonces();\n```\n\nOr manually by calling each signer individially:\n\n```js\nconst publicNonces = [signerOne.getPublicNonces(), signerOne.getPublicNonces()];\n```\n\nNonces need to be exchanged before signing can begin. Also, `getPublicNonces` should not be called again before all signers complete their signing process. Or at least one should be careful not to mixes the public nonces with newly generated ones. In the case of mixed nonces, signing will not work.\n\n#### sign\n\nHere is an example of a signing process. Public keys and public nonce can be retriever either manually by calling the signer or directly by calling the multisigProvider.\n\n```js\nimport { solidityKeccak256 } from \"ethers/lib/utils\";\n\nconst msg = \"just a test message\";\nconst msgHash = solidityKeccak256([\"string\"], [msg]);\nconst publicKeys = multisigProvider.getPublicKeys();\nconst publicNonces = multisigProvider.getPublicNonces();\nconst signature = signerOne.sign(msgHash, publicKeys, publicNonces);\nconst signatureTwo = signerTwo.sign(msgHash, publicKeys, publicNonces);\n```\n\n#### verify onchain\n\nGeneration of the encoded data for the on-chain verification is somewhat complex and therefore, it's hidden away in the `multisigProvider`.  \nHere's an example of how to perform an on-chain verification using the provider:\n\n```js\nconst ecRecoverSchnorr = multisigProvider.getEcrecoverSignature([\n  signature,\n  signatureTwo,\n]);\nconst result = await contract.isValidSignature(msgHash, ecRecoverSchnorr);\n```\n\nHere's also an example of how you can do it without the multisigProvider:\n\n```js\nimport Schnorrkel from \"@borislav.itskov/schnorrkel.js\";\nimport { defaultAbiCoder } from \"ethers/lib/utils\";\n\nconst publicKeys = [signerOne.publicKey, signerTwo.publicKey];\nconst publicKey = arrayify(Schnorrkel.getCombinedPublicKey(publicKeys).buffer);\nconst sigOutputs = [signature, signatureTwo];\nconst sSummed = Schnorrkel.sumSigs(\n  sigOutputs.map((output) => output.signature)\n);\nconst challenge = sigOutputs[0].challenge;\nconst px = publicKey.slice(1, 33);\nconst parity = publicKey[0] - 2 + 27;\nconst ecRecoverSchnorr = defaultAbiCoder.encode(\n  [\"bytes32\", \"bytes32\", \"bytes32\", \"uint8\"],\n  [px, challenge.buffer, sSummed.buffer, parity]\n);\nconst result = await contract.isValidSignature(msgHash, ecRecoverSchnorr);\n```\n\n#### verify offchain\n\nWith the multisig provider:\n\n```js\nconst result = multisigProvider.verify(msgHash, [signature, signatureTwo]);\n```\n\nWithout it:\n\n```js\nimport Schnorrkel from \"@borislav.itskov/schnorrkel.js\";\n\nconst publicKeys = [signerOne.publicKey, signerTwo.publicKey];\nconst sigOutputs = [signature, signatureTwo];\nconst sSummed = Schnorrkel.sumSigs(\n  sigOutputs.map((output) => output.signature)\n);\n\nreturn _verify(\n  sSummed.buffer,\n  msgHash,\n  sigOutputs[0].publicNonce.buffer,\n  Schnorrkel.getCombinedPublicKey(publicKeys).buffer\n);\n```\n\nYou can find reference to this in `tests/schnorrkel/onchainMultiSign.test.ts` in this repository.\n\n## ecrecover\n\nFor the schnorr on-chain verification, we were inspired by the work of [noot](https://github.com/noot). Without his work, it would've required a lot more time for RnD to reach this point. You can take a look at his repository [here](https://github.com/noot/schnorr-verify)\n\nWe utilize Ethereum ecrecover to verify the signature. This is how it works:  \nEthereum ecrecover returns an address (hash of public key) given an ECDSA signature.\nGiven message m and ECDSA signature (v, r, s) where v denotes the parity of the y-coordinate for the point where x-coordinate r\n\n```\necrecover(m, v, r, s):\nR = point derived from r and v\na = -G*m\nb = R*s\nQr = a + b\nQ = Qr * (1/r)\nQ = (1/r) * (R*s - G*m) //recovered pubkey\n```\n\nEthereum’s ecrecover returns the last 20 bytes of the keccak256 hash of the 64-byte public key.\nGiven signature (R, s), message m and public key P we can feed values into ecrecover such that the returned address can be used in a comparison to the challenge.\n\n```\ncalculate e = H(address(R) || m) and P_x = x-coordinate of P\n```\n\npass:\n\n```\nm = -s*P_x\nv = parity of P\nr = x-coordinate of P\ns = -e*P_x\n```\n\nthen:\n\n```\necrecover(m=-s*P_x, v=0/1, r=P_x, s=-e*P_x):\nP = point derived from r and v (public key)\na = -G*(-s*P_x) = G*s*P_x\nb = P*(-m*P_x) = -P*e*P_x\nQ = (1/P_x) (a+b)\nQ = (1/P_x)(G*s*P_x - P*e*P_x)\nQ = G*s - P*e  // same as schnorr verify above\n```\n\nthe returned value is address(Q).\n\n- calculate e' = h(address(Q) || m)\n- check e' == e to verify the signature.\n","readmeFilename":"README.md"}