From 9941402e713a0b90e79c9f54391c19a4ce4f7bb0 Mon Sep 17 00:00:00 2001 From: littleskunk Date: Sat, 10 Mar 2018 16:15:56 +0100 Subject: [PATCH 1/2] sign contracts with secp256k1 --- lib/contract/index.js | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) diff --git a/lib/contract/index.js b/lib/contract/index.js index 7af43d62..da7faacc 100644 --- a/lib/contract/index.js +++ b/lib/contract/index.js @@ -1,14 +1,15 @@ 'use strict'; -var assert = require('assert'); -var crypto = require('crypto'); -var merge = require('merge'); -var JSONSchema = require('jsen'); -var stringify = require('json-stable-stringify'); -var bitcore = require('bitcore-lib'); -var constants = require('../constants'); -var Message = require('bitcore-message'); -var ms = require('ms'); +const assert = require('assert'); +const crypto = require('crypto'); +const merge = require('merge'); +const JSONSchema = require('jsen'); +const stringify = require('json-stable-stringify'); +const bitcore = require('bitcore-lib'); +const constants = require('../constants'); +const secp256k1 = require('secp256k1'); +const Message = require('bitcore-message'); +const ms = require('ms'); /** * Represents a storage contract between a renter and a farmer @@ -258,8 +259,17 @@ Contract.prototype.verify = function(actor, pubkeyhash) { * @returns {String} externalSignature */ Contract.prototype.signExternal = function(secret) { - var message = Message(this.getSigningData()); - return message.sign(bitcore.PrivateKey.fromString(secret)); + var keypair = bitcore.PrivateKey.fromString(secret); + var hash = Message(this.getSigningData()).magicHash(); + var signobj = secp256k1.sign(hash, + keypair.toBuffer()); + var sign = bitcore.crypto.Signature.fromDER( + secp256k1.signatureExport(signobj.signature) + ).toCompact( + signobj.recovery, + keypair.toPublicKey().compressed + ).toString('base64'); + return sign; }; /** From fa942c40dca058ab828e617ad6a6e54ef804c04e Mon Sep 17 00:00:00 2001 From: littleskunk Date: Sat, 10 Mar 2018 16:45:55 +0100 Subject: [PATCH 2/2] benchmark test sign contract --- bench/index.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bench/index.js b/bench/index.js index 83979dad..abc9ad19 100644 --- a/bench/index.js +++ b/bench/index.js @@ -116,6 +116,11 @@ function signMessage(deferred) { }); } +function signContract(deferred) { + contract1.sign('renter', renterPrivateKey); + deferred.resolve(); +} + suite.add('new hd contract', newHDContract, {maxTime: maxTime}); suite.add('new contract', newContract, {maxTime: maxTime}); suite.add('verify message with hd contact', verifyHDContact, { @@ -130,6 +135,10 @@ suite.add('sign message', signMessage, { maxTime: maxTime, defer: true }); +suite.add('sign contract', signContract, { + maxTime: maxTime, + defer: true +}); suite.on('cycle', function(event) { console.log(String(event.target));