@Override public <Path> Node derive(final Path derivationPath, final Derivation<Path> derivation) { return derivation.derive(rootNode, derivationPath, standardCkdFunction); } }
@Override public <Node> Node derive(final Node rootKey, final int[] path, final CkdFunction<Node> ckdFunction) { Node currentKey = rootKey; for (final int childIndex : path) { currentKey = ckdFunction.deriveChildKey(currentKey, childIndex); } return currentKey; } }
@Override public Node derive(final CharSequence derivationPath) { return derive(derivationPath, CharSequenceDerivation.INSTANCE); }
@Override public ExtendedPrivateKey derive(final CharSequence derivationPath) { return derive().derive(derivationPath); }
private Derive<ExtendedPrivateKey> derive(final CkdFunction<ExtendedPrivateKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public Key deriveChildKey(final Key parent, final int childIndex) { final Map<Integer, Key> mapForParent = getMapOf(parent); Key child = mapForParent.get(childIndex); if (child == null) { child = decoratedCkdFunction.deriveChildKey(parent, childIndex); mapForParent.put(childIndex, child); } return child; }
public static <Key> CkdFunction<Key> newCacheOf(final CkdFunction<Key> decorated) { return new CkdFunctionResultCacheDecorator<>(decorated); }
@Override public ExtendedPublicKey derive(final CharSequence derivationPath) { return derive().derive(derivationPath); }
private Derive<ExtendedPublicKey> derive(final CkdFunction<ExtendedPublicKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public <Path> ExtendedPublicKey derive(final Path derivationPath, final Derivation<Path> derivation) { return derive().derive(derivationPath, derivation); }
private Derive<ExtendedPublicKey> derive(final CkdFunction<ExtendedPublicKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public ExtendedPrivateKey derive(final CharSequence derivationPath) { return derive().derive(derivationPath); }
private Derive<ExtendedPrivateKey> derive(final CkdFunction<ExtendedPrivateKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public ExtendedPublicKey derive(final CharSequence derivationPath) { return derive().derive(derivationPath); }
private Derive<ExtendedPublicKey> derive(final CkdFunction<ExtendedPublicKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public ExtendedPublicKey derive(final CharSequence derivationPath) { return derive().derive(derivationPath); }
private Derive<ExtendedPrivateKey> derive(final CkdFunction<ExtendedPrivateKey> ckdFunction) { return new CkdFunctionDerive<>(ckdFunction, this); }
@Override public <Path> ExtendedPublicKey derive(final Path derivationPath, final Derivation<Path> derivation) { return derive().derive(derivationPath, derivation); }
@Override public <Path> ExtendedPublicKey derive(final Path derivationPath, final Derivation<Path> derivation) { return derive().derive(derivationPath, derivation); }
@Override public <Path> ExtendedPrivateKey derive(final Path derivationPath, final Derivation<Path> derivation) { return derive().derive(derivationPath, derivation); }