1 import { decryptKey} from '../key/keystore';
2 import {XPrv} from '../key/chainkd';
5 function signTransaction(transaction, password, keyJSON) {
6 if (!(transaction) || !(password) || !(keyJSON) ){
7 throw('Input args are empty', 'BTM3100');
12 for(let k = 0; k<tx.signingInstructions.length; k++){
13 const v = tx.signingInstructions[k];
15 for(let i = 0; i< v.derivationPath.length; i++ ){
16 path[i] = Buffer.from(v.derivationPath[i],"hex");
18 for(let d of v.signData ){
20 const h = Buffer.from(d, 'hex');
21 const signData = SignData(keyJSON, path, h, password);
22 if(signRet[k] == undefined) {
25 signRet[k] = signRet[k].concat( (new Buffer(signData)).toString('hex'));
29 ret.raw_transaction = tx.rawTransaction;
30 ret.signatures = signRet;
34 function SignData(keyJSON, path, data, password){
35 const key = decryptKey(keyJSON, password);
36 let _xprv = new XPrv(key.xPrv);
37 if (path && path.length > 0) {
38 _xprv = _xprv.Derive(path);
40 return _xprv.Sign(data);