HdKey build() { return new HdKey(this); } }
@Override public int depth() { return hdKey.depth(); }
@Override public int childNumber() { return hdKey.getChildNumber(); } }
writer.concat(hdKey.getKey(), 32); } else { writer.concat(hdKey.getPoint()); final byte[] I = hmacSha512(hdKey.getChainCode(), data); Arrays.fill(data, (byte) 0); final byte[] Ir = tail32(I); final byte[] key = hdKey.getKey(); final BigInteger parse256_Il = parse256(Il); final BigInteger ki = parse256_Il.add(parse256(key)).mod(n()); .network(hdKey.getNetwork()) .neutered(false) .key(Il) .chainCode(Ir) .depth(hdKey.depth() + 1) .childNumber(index) .parentFingerprint(hdKey.calculateFingerPrint()) .build());
static ExtendedPublicKey from(final HdKey hdKey) { return new ExtendedPublicKey(new HdKey.Builder() .network(hdKey.getNetwork()) .neutered(true) .key(hdKey.getPoint()) .parentFingerprint(hdKey.getParentFingerprint()) .depth(hdKey.depth()) .childNumber(hdKey.getChildNumber()) .chainCode(hdKey.getChainCode()) .build()); }
public String p2pkhAddress() { return encodeAddress(hdKey.getNetwork().p2pkhVersion(), hdKey.getKey()); }
@Override public Network network() { return hdKey.getNetwork(); }
public byte[] getKey() { return hdKey.getKey(); }
private byte[] getPublicBuffer() { return neutered ? key : getPoint(); }
int calculateFingerPrint() { final byte[] point = getPublicBuffer(); final byte[] o = hash160(point); return ((o[0] & 0xFF) << 24) | ((o[1] & 0xFF) << 16) | ((o[2] & 0xFF) << 8) | (o[3] & 0xFF); }
@Override public ExtendedPublicKey cKDpub(final int index) { if (isHardened(index)) throw new IllegalCKDCall("Cannot derive a hardened key from a public key"); final HdKey parent = this.hdKey; final byte[] kPar = parent.getKey(); final byte[] data = new byte[37]; final ByteArrayWriter writer = new ByteArrayWriter(data); writer.concat(kPar, 33); writer.concatSer32(index); final byte[] I = hmacSha512(parent.getChainCode(), data); final byte[] Il = head32(I); final byte[] Ir = tail32(I); final BigInteger parse256_Il = parse256(Il); final ECPoint ki = gMultiplyAndAddPoint(parse256_Il, kPar); if (parse256_Il.compareTo(n()) >= 0 || ki.isInfinity()) { return cKDpub(index + 1); } final byte[] key = pointSerP(ki); return new ExtendedPublicKey(new HdKey.Builder() .network(parent.getNetwork()) .neutered(true) .depth(parent.depth() + 1) .parentFingerprint(parent.calculateFingerPrint()) .key(key) .chainCode(Ir) .childNumber(index) .build()); }
public String p2shAddress() { final byte[] script = new byte[22]; script[1] = (byte) 20; hash160into(script, 2, hdKey.getKey()); return encodeAddress(hdKey.getNetwork().p2shVersion(), script); }
@Override public Network network() { return hdKey.getNetwork(); }
public byte[] getKey() { return hdKey.getKey(); }
@Override public int childNumber() { return hdKey.getChildNumber(); }
@Override public int depth() { return hdKey.depth(); }