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 = { 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', () => {