Exemple #1
0
        public void Constructor_DuplicateParts_ArgumentExceptionExpected()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var partA = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "datadatadata"
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "datadatadata"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    partA, partB
                });
            });
        }
Exemple #2
0
        public void Constructor_ValidPartsWithDuplicates_ExpectedTrueQuantity()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var partA = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657"
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea"
            };

            var partC = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea"
            };

            var wallet = new Wallet(new List <WalletPart>()
            {
                partA, partB, partC
            });

            Assert.That(wallet.Parts.Count, Is.Not.EqualTo(3));
            Assert.That(wallet.Parts.Count, Is.EqualTo(2));
        }
Exemple #3
0
        public void Constructor_ValidSignature_NoExceptionExpected()
        {
            Assert.DoesNotThrow(() =>
            {
                var signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 4
                };

                var part1 = new WalletPart()
                {
                    Signature = signature,
                    Data      = "0e1-1-5ca6e43983ccf56aa90fd6b66ea844a7c22a92dd92343888"
                };

                var part2 = new WalletPart()
                {
                    Signature = signature,
                    Data      = "5d1-5-c67046150ecd502cdbc15f7a67e990a646febd88c229d3ea"
                };

                var wallet1 = new Wallet(signature, "ExampleOfPrivateKey");
                var wallet2 = new Wallet(new List <IWalletPart> {
                    part1, part2
                });
            });
        }
Exemple #4
0
        public void Constructor_InvalidParts_ArgumentExceptionExpected()
        {
            var partA = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 1
                },
                Data = "datadatadata"
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 1
                },
                Data = "datadatadata22222"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    partA, partB
                });
            });
        }
Exemple #5
0
        public void Constructor_EnoughValidParts_NoExceptionExpected()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var partA = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "0e1-1-5ca6e43983ccf56aa90fd6b66ea844a7c22a92dd92343888"
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657"
            };

            Assert.DoesNotThrow(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    partA, partB
                });
            });
        }
Exemple #6
0
        public void Constructor_EnoughPartsWithDifferentSignatures_ArgumentExceptionExpected()
        {
            var partA = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 2,
                    PartsThreshold = 2,
                    PartsTotal     = 4
                },

                Data = "datadatadata"
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 4
                },
                Data = "datadatadata"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    partA, partB
                });
            }, Strings.SharesHaveDifferentSignatures);
        }
Exemple #7
0
        public void Constructor_DifferentParts_RecoveredValidPrivateKey()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var partA = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "0e1-1-5ca6e43983cff56aa90fd6b66ea844a7c22a92dd92343888" // Corrupt data
            };

            var partB = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "631-7-8b1b1703484d828fe2a61b9c63497aa68494aa226a272657"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    partA, partB
                });
            }, Strings.ChecksumExceptionSharesCorrupt);
        }
Exemple #8
0
        public void InterpretShortNotation_NullShortNotation_InvalidWalletPart()
        {
            var walletPart = new WalletPart();

            var result = walletPart.InterpretShortNotation(null);

            Assert.IsFalse(result);
        }
Exemple #9
0
        public void IsValid_NullSignatureValidData_False()
        {
            var part = new WalletPart()
            {
                Signature = null,
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            Assert.That(part.IsValid(), Is.False);
        }
Exemple #10
0
        public void IsValid_EmptyDataValidSignature_False()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|5|10"),
                Data      = " "
            };

            Assert.That(part.IsValid(), Is.False);
        }
Exemple #11
0
        public void InterpretShortNotation_TruncatedInvalidShortNotation_InvalidWalletPart()
        {
            var validShortNotation = "1|4|5edb71e0-ac40-40a3-a22d-70220058eba5";

            var walletPart = new WalletPart();

            var result = walletPart.InterpretShortNotation(validShortNotation);

            Assert.IsFalse(result);
        }
Exemple #12
0
        public void InterpretShortNotation_TooLongShortNotation_InvalidWalletPart()
        {
            var invalidShortNotation = "1|4|5edb71e0-ac40-40a3-a22d-70220058eba5|1111|2222|3333";

            var walletPart = new WalletPart();

            var result = walletPart.InterpretShortNotation(invalidShortNotation);

            Assert.IsFalse(result);
        }
Exemple #13
0
        public void IsValid_ValidWalletPart_True()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|2|3"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            Assert.That(part.IsValid());
        }
Exemple #14
0
        public void IsValid_NullDataInvalidSignature_False()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|10|5"),
                Data      = null
            };

            Assert.That(part.IsValid(), Is.False);
        }
Exemple #15
0
        public void IsValid_ValidDataInvalidSignature_False()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|10|5"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            Assert.That(part.IsValid(), Is.False);
        }
Exemple #16
0
        public void InterpretShortNotation_ValidShortNotationWithExtraDelimiters_ValidWalletPart()
        {
            var validShortNotation = "|1|2|4|5edb71e0-ac40-40a3-a22d-70220058eba5|";

            var walletPart = new WalletPart(validShortNotation);

            Assert.That(walletPart.Signature.Version, Is.EqualTo(1));
            Assert.That(walletPart.Signature.PartsThreshold, Is.EqualTo(2));
            Assert.That(walletPart.Signature.PartsTotal, Is.EqualTo(4));
            Assert.That(walletPart.Data, Is.EqualTo("5edb71e0-ac40-40a3-a22d-70220058eba5"));
        }
Exemple #17
0
        public void IsValid_InvalidSignatureValidData_InvalidSignatureMessage()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|10|5"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            var expectedMessage = Strings.SharesThresholdCannotBeLessThanSharesTotal;

            part.IsValid(out string message);

            Assert.That(message, Is.EqualTo(expectedMessage));
        }
Exemple #18
0
        public void IsValid_ValidSignatureBlankData_BlankDataMessage()
        {
            var part = new WalletPart()
            {
                Signature = new WalletSignature("1|5|10"),
                Data      = ""
            };

            var expectedMessage = Strings.DataIsNullOrEmpty;

            part.IsValid(out string message);

            Assert.That(message, Is.EqualTo(expectedMessage));
        }
Exemple #19
0
        public void IsValid_NullSignatureValidData_EmptySignatureMessage()
        {
            var part = new WalletPart()
            {
                Signature = null,
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            var expectedMessage = Strings.SignatureIsNull;

            part.IsValid(out string message);

            Assert.That(message, Is.EqualTo(expectedMessage));
        }
Exemple #20
0
        static void RecoverPrivateKey(IEnumerable <string> rawParts)
        {
            var deserializedParts = new List <WalletPart>();

            foreach (var rawPart in rawParts)
            {
                var part = new WalletPart(rawPart);
                deserializedParts.Add(part);
            }

            var wallet = new Wallet(deserializedParts);

            Console.WriteLine("Recovered Private Key:\n  " + wallet.PrivateKey);
        }
Exemple #21
0
        public void InterpretShortNotation_ValidShortNotation_ValidWalletPart()
        {
            var validShortNotation = "1|2|4|5edb71e0-ac40-40a3-a22d-70220058eba5";

            var walletPart = new WalletPart();

            var result = walletPart.InterpretShortNotation(validShortNotation);

            Assert.IsTrue(result);
            Assert.That(walletPart.Signature.Version, Is.EqualTo(1));
            Assert.That(walletPart.Signature.PartsThreshold, Is.EqualTo(2));
            Assert.That(walletPart.Signature.PartsTotal, Is.EqualTo(4));
            Assert.That(walletPart.Data, Is.EqualTo("5edb71e0-ac40-40a3-a22d-70220058eba5"));
        }
Exemple #22
0
        public void GetShortNotation_InvalidSignature_NullShortNotation()
        {
            var walletPart = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 22,
                    PartsTotal     = 4
                },

                Data = "5edb71e0-ac40-40a3-a22d-70220058eba5"
            };

            Assert.IsNull(walletPart.GetShortNotation());
        }
Exemple #23
0
        public void GetShortNotation_InvalidData_NullShortNotation()
        {
            var walletPart = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 4
                },

                Data = null
            };

            Assert.IsNull(walletPart.GetShortNotation());
        }
Exemple #24
0
        public void Equals_SameDataDifferentSignature_False()
        {
            var walletPartA = new WalletPart()
            {
                Signature = new WalletSignature("1|5|20"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            var walletPartB = new WalletPart()
            {
                Signature = new WalletSignature("1|2|4"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            Assert.That(walletPartA, Is.Not.EqualTo(walletPartB));
        }
Exemple #25
0
        public void Equals_DifferentDataSameSignature_False()
        {
            var walletPartA = new WalletPart()
            {
                Signature = new WalletSignature("1|2|4"),
                Data      = "0aac471a-813f-49f8-9f87-1559bd462e93"
            };

            var walletPartB = new WalletPart()
            {
                Signature = new WalletSignature("1|2|4"),
                Data      = "11baa341-49a7-48c7-b390-9b2f38d855d0"
            };

            Assert.That(walletPartA, Is.Not.EqualTo(walletPartB));
        }
Exemple #26
0
        public void GetShortNotation_ValidWalletPart_ValidShortNotation()
        {
            var walletPart = new WalletPart()
            {
                Signature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 2,
                    PartsTotal     = 4
                },

                Data = "5edb71e0-ac40-40a3-a22d-70220058eba5"
            };

            var expectedShortNotation = "1|2|4|5edb71e0-ac40-40a3-a22d-70220058eba5";

            Assert.That(walletPart.GetShortNotation(), Is.EqualTo(expectedShortNotation));
        }
Exemple #27
0
        public void Constructor_NotEnoughParts_ArgumentExceptionExpected()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var part = new WalletPart()
            {
                Signature = new WalletSignature(signature.GetShortNotation()),
                Data      = "datadatadata"
            };

            Assert.Throws <ArgumentException>(() =>
            {
                var wallet = new Wallet(new List <WalletPart>()
                {
                    part
                });
            }, Strings.NotEnoughShares);
        }