2015-02-23 00:36:57 +01:00
|
|
|
/* global describe, it */
|
|
|
|
|
2014-03-28 19:52:15 +01:00
|
|
|
var assert = require('assert')
|
2014-10-18 12:54:13 +02:00
|
|
|
var message = require('../src/message')
|
2014-05-13 09:55:53 +02:00
|
|
|
var networks = require('../src/networks')
|
2014-05-13 08:35:07 +02:00
|
|
|
|
2014-06-14 02:21:38 +02:00
|
|
|
var Address = require('../src/address')
|
2014-05-16 07:39:17 +02:00
|
|
|
var BigInteger = require('bigi')
|
2015-03-02 06:48:36 +01:00
|
|
|
var ECPair = require('../src/ecpair')
|
2013-03-02 18:28:13 +01:00
|
|
|
|
2014-05-18 11:47:39 +02:00
|
|
|
var fixtures = require('./fixtures/message.json')
|
2014-04-21 13:24:58 +02:00
|
|
|
|
2014-10-18 12:54:13 +02:00
|
|
|
describe('message', function () {
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('magicHash', function () {
|
|
|
|
fixtures.valid.magicHash.forEach(function (f) {
|
2014-09-15 07:00:13 +02:00
|
|
|
it('produces the correct magicHash for "' + f.message + '" (' + f.network + ')', function () {
|
2014-05-16 07:39:17 +02:00
|
|
|
var network = networks[f.network]
|
2014-10-18 12:54:13 +02:00
|
|
|
var actual = message.magicHash(f.message, network)
|
2014-04-21 13:24:58 +02:00
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(actual.toString('hex'), f.magicHash)
|
2014-04-21 13:24:58 +02:00
|
|
|
})
|
|
|
|
})
|
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('verify', function () {
|
|
|
|
it('accepts an Address object', function () {
|
2014-06-14 02:21:38 +02:00
|
|
|
var f = fixtures.valid.verify[0]
|
|
|
|
var network = networks[f.network]
|
|
|
|
|
|
|
|
var address = Address.fromBase58Check(f.address)
|
2014-10-18 12:54:13 +02:00
|
|
|
assert(message.verify(address, f.signature, f.message, network))
|
2014-06-14 02:21:38 +02:00
|
|
|
})
|
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
fixtures.valid.verify.forEach(function (f) {
|
|
|
|
it('verifies a valid signature for "' + f.message + '" (' + f.network + ')', function () {
|
2014-05-22 05:22:59 +02:00
|
|
|
var network = networks[f.network]
|
2013-03-02 18:28:13 +01:00
|
|
|
|
2014-10-18 12:54:13 +02:00
|
|
|
assert(message.verify(f.address, f.signature, f.message, network))
|
2014-01-11 07:57:43 +01:00
|
|
|
|
2014-05-22 05:22:59 +02:00
|
|
|
if (f.compressed) {
|
2014-10-18 12:54:13 +02:00
|
|
|
assert(message.verify(f.compressed.address, f.compressed.signature, f.message, network))
|
2014-05-22 05:22:59 +02:00
|
|
|
}
|
|
|
|
})
|
2014-03-28 19:52:15 +01:00
|
|
|
})
|
2014-05-16 07:39:17 +02:00
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
fixtures.invalid.verify.forEach(function (f) {
|
|
|
|
it(f.description, function () {
|
2014-10-18 12:54:13 +02:00
|
|
|
assert(!message.verify(f.address, f.signature, f.message))
|
2014-05-22 05:22:59 +02:00
|
|
|
})
|
2014-05-16 07:39:17 +02:00
|
|
|
})
|
2014-03-28 09:32:51 +01:00
|
|
|
})
|
2014-03-11 18:25:36 +01:00
|
|
|
|
2015-02-23 00:36:57 +01:00
|
|
|
describe('signing', function () {
|
|
|
|
fixtures.valid.signing.forEach(function (f) {
|
|
|
|
it(f.description, function () {
|
2014-05-22 05:22:59 +02:00
|
|
|
var network = networks[f.network]
|
2014-03-28 06:42:39 +01:00
|
|
|
|
2015-03-02 06:48:36 +01:00
|
|
|
var keyPair = new ECPair(new BigInteger(f.d), null, {
|
|
|
|
compressed: false
|
|
|
|
})
|
|
|
|
var signature = message.sign(keyPair, f.message, network)
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(signature.toString('base64'), f.signature)
|
2014-05-16 07:39:17 +02:00
|
|
|
|
2014-05-22 05:22:59 +02:00
|
|
|
if (f.compressed) {
|
2015-03-02 06:48:36 +01:00
|
|
|
var compressedPrivKey = new ECPair(new BigInteger(f.d))
|
2014-10-18 12:54:13 +02:00
|
|
|
var compressedSignature = message.sign(compressedPrivKey, f.message)
|
2014-05-16 07:39:17 +02:00
|
|
|
|
2015-05-07 03:29:20 +02:00
|
|
|
assert.strictEqual(compressedSignature.toString('base64'), f.compressed.signature)
|
2014-05-22 05:22:59 +02:00
|
|
|
}
|
|
|
|
})
|
2014-05-16 07:39:17 +02:00
|
|
|
})
|
2014-03-28 09:32:51 +01:00
|
|
|
})
|
2014-01-11 07:57:43 +01:00
|
|
|
})
|