react / wstein / node_modules / browserify / node_modules / crypto-browserify / node_modules / browserify-sign / test / index.js
80552 viewsvar asn1 = require('parse-asn1/asn1')1var crt = require('browserify-rsa')2var crypto = require('crypto')3var fixtures = require('./fixtures')4var myCrypto = require('../browser')5var nodeCrypto = require('crypto')6var parseKeys = require('parse-asn1')7var test = require('tape')89function isNode10 () {10return process.version && process.version.split('.').length === 3 && parseInt(process.version.split('.')[0].slice(1), 10) < 1 && parseInt(process.version.split('.')[1], 10) <= 1011}1213fixtures.valid.rsa.forEach(function (f) {14var message = new Buffer(f.message)15var pub = new Buffer(f.public, 'base64')16var priv1718if (f.passphrase) {19priv = {20key: new Buffer(f.private, 'base64'),21passphrase: f.passphrase22}23} else {24priv = new Buffer(f.private, 'base64')25}2627// skip passphrase tests in node 1028if (f.passphrase && isNode10()) return2930test(f.message, function (t) {31t.plan(7)3233var mySign = myCrypto.createSign(f.scheme)34var nodeSign = nodeCrypto.createSign(f.scheme)35var mySig = mySign.update(message).sign(priv)36var nodeSig = nodeSign.update(message).sign(priv)3738t.equals(mySig.length, nodeSig.length, 'correct length')39t.equals(mySig.toString('hex'), nodeSig.toString('hex'), 'equal sigs')40t.equals(mySig.toString('hex'), f.signature, 'compare to known')4142var myVer = myCrypto.createVerify(f.scheme)43var nodeVer = nodeCrypto.createVerify(f.scheme)44t.ok(nodeVer.update(message).verify(pub, mySig), 'node validate my sig')45t.ok(myVer.update(message).verify(pub, nodeSig), 'me validate node sig')46myVer = myCrypto.createVerify(f.scheme)47nodeVer = nodeCrypto.createVerify(f.scheme)48t.ok(nodeVer.update(message).verify(pub, nodeSig), 'node validate node sig')49t.ok(myVer.update(message).verify(pub, mySig), 'me validate my sig')50})51})5253fixtures.valid.ec.forEach(function (f) {54var message = new Buffer(f.message)55var pub = new Buffer(f.public, 'base64')56var priv5758if (f.passphrase) {59priv = {60key: new Buffer(f.private, 'base64'),61passphrase: f.passphrase62}63} else {64priv = new Buffer(f.private, 'base64')65}6667// skip passphrase tests in node 1068if (f.passphrase && isNode10()) return6970test(f.message, function (t) {71t.plan(4)7273var nodeSign = nodeCrypto.createSign(f.scheme)74var mySign = myCrypto.createSign(f.scheme)7576var mySig = mySign.update(message).sign(priv)77var nodeSig = nodeSign.update(message).sign(priv)78t.notEqual(mySig.toString('hex'), nodeSig.toString('hex'), 'not equal sigs')79t.equals(mySig.toString('hex'), f.signature)8081var myVer = myCrypto.createVerify(f.scheme)82var nodeVer = nodeCrypto.createVerify(f.scheme)83t.ok(nodeVer.update(message).verify(pub, mySig), 'node validate my sig')84t.ok(myVer.update(message).verify(pub, nodeSig), 'me validate node sig')85})86})8788fixtures.valid.kvectors.forEach(function (f) {89test('kvector algo: ' + f.algo + ' key len: ' + f.key.length + ' msg: ' + f.msg, function (t) {90var key = new Buffer(f.key, 'base64')9192t.plan(2)93var sig = myCrypto.createSign(f.algo).update(f.msg).sign(key)94var rs = asn1.signature.decode(sig, 'der')95t.equals(rs.r.toString(16), f.r.toLowerCase(), 'r')96t.equals(rs.s.toString(16), f.s.toLowerCase(), 's')97})98})99100fixtures.invalid.verify.forEach(function (f) {101test(f.description, function (t) {102t.plan(2)103104var sign = new Buffer(f.signature, 'hex')105var pub = new Buffer(f.public, 'base64')106var message = new Buffer(f.message)107108t.notOk(nodeCrypto.createVerify(f.scheme)109.update(message)110.verify(pub, sign), 'node rejects it')111112t.notOk(myCrypto.createVerify(f.scheme)113.update(message)114.verify(pub, sign), 'We reject it')115})116})117118119