mirror of
https://github.com/Xahau/xahau.js.git
synced 2025-11-21 12:45:50 +00:00
[FIX] Fail if PRNG has not been seeded with at least 256 bits of entropy before generating ECDSA signatures
This commit is contained in:
@@ -92,8 +92,9 @@ KeyPair.prototype.get_address = function() {
|
|||||||
};
|
};
|
||||||
|
|
||||||
KeyPair.prototype.sign = function(hash) {
|
KeyPair.prototype.sign = function(hash) {
|
||||||
|
var PARANOIA_256_BITS = 6; // sjcl constant for ensuring 256 bits of entropy
|
||||||
hash = UInt256.from_json(hash);
|
hash = UInt256.from_json(hash);
|
||||||
var sig = this._secret.sign(hash.to_bits(), 0);
|
var sig = this._secret.sign(hash.to_bits(), PARANOIA_256_BITS);
|
||||||
sig = this._secret.canonicalizeSignature(sig);
|
sig = this._secret.canonicalizeSignature(sig);
|
||||||
return this._secret.encodeDER(sig);
|
return this._secret.encodeDER(sig);
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -466,7 +466,7 @@ Transaction.prototype.sign = function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var key = seed.get_key(this.tx_json.Account);
|
var key = seed.get_key(this.tx_json.Account);
|
||||||
var sig = key.sign(hash, 0);
|
var sig = key.sign(hash);
|
||||||
var hex = sjcl.codec.hex.fromBits(sig).toUpperCase();
|
var hex = sjcl.codec.hex.fromBits(sig).toUpperCase();
|
||||||
|
|
||||||
this.tx_json.TxnSignature = hex;
|
this.tx_json.TxnSignature = hex;
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
var ws = require('ws');
|
var ws = require('ws');
|
||||||
var lodash = require('lodash');
|
var lodash = require('lodash');
|
||||||
var assert = require('assert-diff');
|
var assert = require('assert-diff');
|
||||||
|
var sjcl = require('ripple-lib').sjcl;
|
||||||
var Remote = require('ripple-lib').Remote;
|
var Remote = require('ripple-lib').Remote;
|
||||||
var SerializedObject = require('ripple-lib').SerializedObject;
|
var SerializedObject = require('ripple-lib').SerializedObject;
|
||||||
var Transaction = require('ripple-lib').Transaction;
|
var Transaction = require('ripple-lib').Transaction;
|
||||||
@@ -42,6 +43,11 @@ describe('TransactionManager', function() {
|
|||||||
var account;
|
var account;
|
||||||
var transactionManager;
|
var transactionManager;
|
||||||
|
|
||||||
|
before(function() {
|
||||||
|
sjcl.random.addEntropy(
|
||||||
|
'3045022100A58B0460BC5092CB4F96155C19125A4E079C870663F1D5E8BBC9BD', 256);
|
||||||
|
});
|
||||||
|
|
||||||
beforeEach(function(done) {
|
beforeEach(function(done) {
|
||||||
rippled = new ws.Server({port: 5763});
|
rippled = new ws.Server({port: 5763});
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ var Transaction = require('ripple-lib').Transaction;
|
|||||||
var TransactionQueue = require('ripple-lib').TransactionQueue;
|
var TransactionQueue = require('ripple-lib').TransactionQueue;
|
||||||
var Remote = require('ripple-lib').Remote;
|
var Remote = require('ripple-lib').Remote;
|
||||||
var Server = require('ripple-lib').Server;
|
var Server = require('ripple-lib').Server;
|
||||||
|
var sjcl = require('ripple-lib').sjcl;
|
||||||
|
|
||||||
var transactionResult = {
|
var transactionResult = {
|
||||||
engine_result: 'tesSUCCESS',
|
engine_result: 'tesSUCCESS',
|
||||||
@@ -35,6 +36,11 @@ var transactionResult = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
describe('Transaction', function() {
|
describe('Transaction', function() {
|
||||||
|
before(function() {
|
||||||
|
sjcl.random.addEntropy(
|
||||||
|
'3045022100A58B0460BC5092CB4F96155C19125A4E079C870663F1D5E8BBC9BD', 256);
|
||||||
|
});
|
||||||
|
|
||||||
it('Success listener', function(done) {
|
it('Success listener', function(done) {
|
||||||
var transaction = new Transaction();
|
var transaction = new Transaction();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user