internal WPKH(PubKeyProvider pkProvider)
 {
     if (pkProvider == null)
     {
         throw new ArgumentNullException(nameof(pkProvider));
     }
     PkProvider = pkProvider;
 }
Ejemplo n.º 2
0
 internal Combo(PubKeyProvider pkProvider, Network network) : base(network)
 {
     if (pkProvider == null)
     {
         throw new ArgumentNullException(nameof(pkProvider));
     }
     PkProvider = pkProvider;
 }
Ejemplo n.º 3
0
 private static Parser <char, PubKeyProvider> PConstPubKeyProvider(ISigningRepository?repo, bool onlyCompressed)
 {
     if (onlyCompressed)
     {
         return(from pk in PPubKeyCompressed(repo).Or(PWIF(repo, onlyCompressed))
                select PubKeyProvider.NewConst(pk));
     }
     return(from pk in PPubKey(repo).Or(PWIF(repo, false))
            select PubKeyProvider.NewConst(pk));
 }
 internal Origin(RootedKeyPath keyOriginInfo, PubKeyProvider inner)
 {
     if (keyOriginInfo == null)
     {
         throw new ArgumentNullException(nameof(keyOriginInfo));
     }
     if (inner == null)
     {
         throw new ArgumentNullException(nameof(inner));
     }
     if (inner is Origin)
     {
         throw new ArgumentException($"Origin can not have {inner} as inner value");
     }
     KeyOriginInfo = keyOriginInfo;
     Inner         = inner;
 }
            (DerivationStrategyBase, RootedKeyPath[]) ExtractFromPkProvider(PubKeyProvider pubKeyProvider,
                                                                            string suffix = "")
            {
                switch (pubKeyProvider)
                {
                case PubKeyProvider.Const _:
                    throw new FormatException("Only HD output descriptors are supported.");

                case PubKeyProvider.HD hd:
                    if (hd.Path != null && hd.Path.ToString() != "0")
                    {
                        throw new FormatException("Custom change paths are not supported.");
                    }

                    return(Parse($"{hd.Extkey}{suffix}"), null);

                case PubKeyProvider.Origin origin:
                    var innerResult = ExtractFromPkProvider(origin.Inner, suffix);
                    return(innerResult.Item1, new[] { origin.KeyOriginInfo });

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
Ejemplo n.º 6
0
 public static OutputDescriptor NewCombo(PubKeyProvider pk, Network network) => new Combo(pk, network);
Ejemplo n.º 7
0
 private static Gen <PubKeyProvider> ConstPubKeyProviderGen() =>
 from pk in CryptoGenerator.PublicKey()
 select PubKeyProvider.NewConst(pk);
Ejemplo n.º 8
0
 private static Gen <PubKeyProvider> OriginPubKeyProviderGen(Network?n = null) =>
 from keyOrigin in CryptoGenerator.RootedKeyPath()
 from inner in Gen.OneOf(ConstPubKeyProviderGen(), HDPubKeyProviderGen(n))
 select PubKeyProvider.NewOrigin(keyOrigin, inner);
Ejemplo n.º 9
0
 private static Gen <PubKeyProvider> HDPubKeyProviderGen(Network?n = null) =>
 from extPk in n is null?CryptoGenerator.BitcoinExtPubKey() : CryptoGenerator.ExtPubKey().Select(e => new BitcoinExtPubKey(e, n))
     from kp in CryptoGenerator.KeyPath()
     from t in Arb.Generate <PubKeyProvider.DeriveType>()
     select PubKeyProvider.NewHD(extPk, kp, t);
Ejemplo n.º 10
0
 private static Parser <char, PubKeyProvider> POriginPubkeyProvider(ISigningRepository?repo) =>
 from rootedKeyPath in PRootedKeyPath(repo)
 from inner in PConstPubKeyProvider(repo, false).Or(PHDPubKeyProvider(repo))
 select PubKeyProvider.NewOrigin(rootedKeyPath, inner);
Ejemplo n.º 11
0
 private static Parser <char, PubKeyProvider> PStaticHDPubKeyProvider(ISigningRepository?repo) =>
 from items in PHDPkProviderCommon(repo)
 select PubKeyProvider.NewHD(items.Item1, items.Item2, DeriveType.NO);
Ejemplo n.º 12
0
 private static Parser <char, PubKeyProvider> PUnHardendedHDPubKeyProvider(ISigningRepository?repo) =>
 from items in PHDPkProviderCommon(repo)
 from prefix in Parse.Char('*')
 select PubKeyProvider.NewHD(items.Item1, items.Item2, DeriveType.UNHARDENED);
Ejemplo n.º 13
0
 private static Parser <char, PubKeyProvider> PHardendedHDPubKeyProvider(ISigningRepository?repo, Network n) =>
 from items in PHDPkProviderCommon(repo, n)
 from prefix in Parse.Char('*')
 from isHardened in Parse.Char('\'').Or(Parse.Char('h'))
 select PubKeyProvider.NewHD(items.Item1, items.Item2, DeriveType.HARDENED);