From 2323d1d934c846f9319f20d11b8988dbd3fd302f Mon Sep 17 00:00:00 2001 From: MishaPetrov Date: Sun, 5 Jan 2020 15:50:34 +0300 Subject: [PATCH 1/2] fix `verify()` function for digital signature --- src/main.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/main.js b/src/main.js index 1780802..971cb1d 100644 --- a/src/main.js +++ b/src/main.js @@ -351,8 +351,10 @@ crypto = { sbytes: sbytes, } }, - verify: function (bytes, sig, pk) { - return library.sodium.crypto_sign_verify_detached(sig, utility.hex2buf(bytes), utility.b58cdecode(pk, prefix.edpk)); + verify: function (bytes, sig, pk, wm) { + var bb = utility.hex2buf(bytes); + if (typeof wm != 'undefined') bb = utility.mergebuf(wm, bb); + return library.sodium.crypto_sign_verify_detached(sig, library.sodium.crypto_generichash(32, bb), utility.b58cdecode(pk, prefix.edpk)); }, }; node = { From 22dade67cbd5e7ec3ec45e3ec9f490011bb2989d Mon Sep 17 00:00:00 2001 From: MishaPetrov Date: Sun, 5 Jan 2020 15:51:31 +0300 Subject: [PATCH 2/2] add tests for `verify()` and `sign()` functions --- test/test.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/test/test.js b/test/test.js index ad01583..d9b5c00 100644 --- a/test/test.js +++ b/test/test.js @@ -61,6 +61,7 @@ describe('main', () => { describe('crypto', () => { const main = require('../src/main'); const crypto = main.eztz.crypto; + const watermark = main.eztz.watermark; test('generateMnemonic', () => { const string = crypto.generateMnemonic(); @@ -124,6 +125,20 @@ describe('main', () => { // expect(typeof keys.edsig).toBe('string'); // expect(typeof keys.sbytes).toBe('string'); }); + + test('sign and verify', () => { + const keys = crypto.generateKeys('', ''); + const bytes = "20aa4d05fecad06b193f909564d4fcfd90e4cd01a6e13298329d802420dff96a9be42bcbe4739a783c117fa13fb42cf007cb67054a12fb977aca95c442745805"; + let sign = crypto.sign(bytes, keys.sk); + expect(crypto.verify(bytes, sign.sig, keys.pk)).toBe(true); + }); + + test('sign and verify with watermark', () => { + const keys = crypto.generateKeys('', ''); + const bytes = "20aa4d05fecad06b193f909564d4fcfd90e4cd01a6e13298329d802420dff96a9be42bcbe4739a783c117fa13fb42cf007cb67054a12fb977aca95c442745805"; + let sign = crypto.sign(bytes, keys.sk, watermark.generic); + expect(crypto.verify(bytes, sign.sig, keys.pk, watermark.generic)).toBe(true); + }); }); describe('node', () => {