/**
* Copyright 2014 Kosta Korenkov
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.matthewmitchell.nubitsj.testing;
import com.matthewmitchell.nubitsj.core.Sha256Hash;
import com.matthewmitchell.nubitsj.crypto.ChildNumber;
import com.matthewmitchell.nubitsj.crypto.DeterministicKey;
import com.matthewmitchell.nubitsj.signers.CustomTransactionSigner;
import com.matthewmitchell.nubitsj.wallet.DeterministicKeyChain;
import com.google.common.collect.ImmutableList;
import java.util.List;
/**
* <p>Transaction signer which uses provided keychain to get signing keys from. It relies on previous signer to provide
* derivation path to be used to get signing key and, once gets the key, just signs given transaction immediately.</p>
* It should not be used in test scenarios involving serialization as it doesn't have proper serialize/deserialize
* implementation.
*/
public class KeyChainTransactionSigner extends CustomTransactionSigner {
private DeterministicKeyChain keyChain;
public KeyChainTransactionSigner() {
}
public KeyChainTransactionSigner(DeterministicKeyChain keyChain) {
this.keyChain = keyChain;
}
@Override
protected SignatureAndKey getSignature(Sha256Hash sighash, List<ChildNumber> derivationPath) {
ImmutableList<ChildNumber> keyPath = ImmutableList.copyOf(derivationPath);
DeterministicKey key = keyChain.getKeyByPath(keyPath, true);
return new SignatureAndKey(key.sign(sighash), key.dropPrivateBytes().dropParent());
}
}