|
|
@ -1,22 +1,41 @@ |
|
|
|
'use strict'; |
|
|
|
|
|
|
|
var inherits = require('inherits'); |
|
|
|
var Input = require('./input'); |
|
|
|
|
|
|
|
var $ = require('../../util/preconditions'); |
|
|
|
var BufferUtil = require('../../util/buffer'); |
|
|
|
|
|
|
|
var Hash = require('../../crypto/hash'); |
|
|
|
var Signature = require('../../crypto/signature'); |
|
|
|
var Input = require('./input'); |
|
|
|
var Output = require('../output'); |
|
|
|
var Sighash = require('../sighash'); |
|
|
|
var BufferUtil = require('../../util/buffer'); |
|
|
|
var Script = require('../../script'); |
|
|
|
var Signature = require('../../crypto/signature'); |
|
|
|
|
|
|
|
/** |
|
|
|
* Represents a special kind of input of PayToPublicKeyHash kind. |
|
|
|
*/ |
|
|
|
function PublicKeyHashInput() { |
|
|
|
Input.apply(this, arguments); |
|
|
|
} |
|
|
|
inherits(PublicKeyHashInput, Input); |
|
|
|
|
|
|
|
/* jshint maxparams: 5 */ |
|
|
|
/** |
|
|
|
* @param {Transaction} transaction - the transaction to be signed |
|
|
|
* @param {PrivateKey} privateKey - the private key with which to sign the transaction |
|
|
|
* @param {number} index - the index of the input in the transaction input vector |
|
|
|
* @param {number=Singature.SIGHASH_ALL} sigtype - the type of signature |
|
|
|
* @param {Buffer=} hashData - the precalculated hash of the public key associated with the privateKey provided |
|
|
|
* @return {Array} of objects that can be |
|
|
|
*/ |
|
|
|
PublicKeyHashInput.prototype.getSignatures = function(transaction, privateKey, index, sigtype, hashData) { |
|
|
|
$.checkState(this.output instanceof Output); |
|
|
|
hashData = hashData || Hash.sha256ripemd160(privateKey.publicKey.toBuffer()); |
|
|
|
sigtype = sigtype || Signature.SIGHASH_ALL; |
|
|
|
if (BufferUtil.equals(hashData, this.output.script.address.hashData)) { |
|
|
|
|
|
|
|
if (BufferUtil.equals(hashData, this.output.script.getPublicKeyHash())) { |
|
|
|
return [{ |
|
|
|
address: this.output.script.address, |
|
|
|
publicKey: privateKey.publicKey, |
|
|
|
prevTxId: this.txId, |
|
|
|
outputIndex: this.outputIndex, |
|
|
@ -27,5 +46,41 @@ PublicKeyHashInput.prototype.getSignatures = function(transaction, privateKey, i |
|
|
|
} |
|
|
|
return []; |
|
|
|
}; |
|
|
|
/* jshint maxparams: 3 */ |
|
|
|
|
|
|
|
/** |
|
|
|
* Add the provided signature |
|
|
|
* |
|
|
|
* @param {Object} signature |
|
|
|
* @param {PublicKey} signature.publicKey |
|
|
|
* @param {Signature} signature.signature |
|
|
|
* @param {number=Signature.SIGHASH_ALL} signature.sigtype |
|
|
|
* @return {PublicKeyHashInput} this, for chaining |
|
|
|
*/ |
|
|
|
PublicKeyHashInput.prototype.addSignature = function(signature) { |
|
|
|
this.setScript(Script.buildPublicKeyHashIn( |
|
|
|
signature.publicKey, |
|
|
|
signature.signature.toDER(), |
|
|
|
signature.sigtype |
|
|
|
)); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Clear the input's signature |
|
|
|
* @return {PublicKeyHashInput} this, for chaining |
|
|
|
*/ |
|
|
|
PublicKeyHashInput.prototype.clearSignature = function() { |
|
|
|
this.setScript(Script.empty()); |
|
|
|
return this; |
|
|
|
}; |
|
|
|
|
|
|
|
/** |
|
|
|
* Query whether the input is signed |
|
|
|
* @return {boolean} |
|
|
|
*/ |
|
|
|
PublicKeyHashInput.prototype.isFullySigned = function() { |
|
|
|
return this.script.isPublicKeyHashIn(); |
|
|
|
}; |
|
|
|
|
|
|
|
module.exports = PublicKeyHashInput; |
|
|
|