コード例 #1
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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));
        }
コード例 #2
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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);
        }
コード例 #3
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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
                });
            });
        }
コード例 #4
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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
                });
            });
        }
コード例 #5
0
        public void InterpretShortNotation_Null_InvalidSignature()
        {
            var signature = new WalletSignature();
            var result    = signature.InterpretShortNotation(null);

            Assert.IsFalse(result);
        }
コード例 #6
0
        public void Equals_EqualSignaturesInDifferentObjects_True()
        {
            var signature1 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 5
            };

            var signature2 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 5
            };

            // Different objects with the same values
            Assert.That(signature1, Is.EqualTo(signature2));
            Assert.IsFalse(signature1 == signature2);

            // Compare to deserialized object
            var json         = JsonConvert.SerializeObject(signature1);
            var deserialized = JsonConvert.DeserializeObject <WalletSignature>(json);

            Assert.That(deserialized, Is.EqualTo(signature1));
            Assert.That(deserialized, Is.EqualTo(signature2));
        }
コード例 #7
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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
                });
            });
        }
コード例 #8
0
        public void InterpretShortNotationByConstructor_ValidNotationInvalidData_InvalidSignature()
        {
            var shortNotation = "1|10|3";

            var signature = new WalletSignature(shortNotation);

            Assert.IsFalse(signature.IsValid());
        }
コード例 #9
0
        public void InterpretShortNotation_ValidNotationInvalidData_InvalidSignature()
        {
            var shortNotation = "1|10|3";

            var signature = new WalletSignature();
            var result    = signature.InterpretShortNotation(shortNotation);

            Assert.IsFalse(result);
        }
コード例 #10
0
        public void InterpretShortNotation_IncompleteNotation_InvalidSignature()
        {
            var shortNotation = "1|10";

            var signature = new WalletSignature();
            var result    = signature.InterpretShortNotation(shortNotation);

            Assert.IsFalse(result);
        }
コード例 #11
0
        public void InterpretShortNotationByConstructor_ValidNotationAndData_ValidSignature()
        {
            var shortNotation = "1|3|10";

            var signature = new WalletSignature(shortNotation);

            Assert.That(signature.Version, Is.EqualTo(1));
            Assert.That(signature.PartsThreshold, Is.EqualTo(3));
            Assert.That(signature.PartsTotal, Is.EqualTo(10));
        }
コード例 #12
0
        public void IsValid_ValidSignature_True()
        {
            var signature = new WalletSignature()
            {
                PartsThreshold = 3,
                PartsTotal     = 6
            };

            var result = signature.IsValid();

            Assert.IsTrue(result);
        }
コード例 #13
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_NullParts_ArgumentNullException()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            Assert.Throws <ArgumentNullException>(() => {
                var wallet = new Wallet(default(List <WalletPart>));
            });
        }
コード例 #14
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_ValidInitialization_ValidPartsQuantity()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var wallet = new Wallet(signature, "ExampleOfPrivateKey");

            // Validate quantity of parts
            Assert.That(wallet.Parts.Count, Is.EqualTo(signature.PartsTotal));
        }
コード例 #15
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_InvalidSignature_ArgumentExceptionExpected()
        {
            Assert.Throws <ArgumentException>(() =>
            {
                var invalidSignature = new WalletSignature()
                {
                    Version        = 1,
                    PartsThreshold = 8,
                    PartsTotal     = 4
                };

                var wallet1 = new Wallet(invalidSignature, "ExampleOfPrivateKey");
            });
        }
コード例 #16
0
        public void IsValid_NegativeSharesTotal_False()
        {
            var expectedMessage = Strings.SharesTotalCannotBeLessThanOne;
            var signature       = new WalletSignature()
            {
                PartsThreshold = 3,
                PartsTotal     = -8
            };

            string message;
            var    result = signature.IsValid(out message);

            Assert.IsFalse(result);
            Assert.That(message, Is.EqualTo(expectedMessage));
        }
コード例 #17
0
        public void GetShortNotation_ValidSignature_ValidShortNotation()
        {
            var expectedShortNotation = "12|5|10";

            var signature = new WalletSignature()
            {
                Version        = 12,
                PartsThreshold = 5,
                PartsTotal     = 10
            };

            var shortNotation = signature.GetShortNotation();

            Assert.That(shortNotation, Is.EqualTo(expectedShortNotation));
        }
コード例 #18
0
ファイル: Program.cs プロジェクト: llenroc/CoolWallet
        static void GenerateSharedWallet(string thresholdStr, string totalStr, string privateKey)
        {
            // Validate and convert values
            var valid = !string.IsNullOrWhiteSpace(thresholdStr) &&
                        !string.IsNullOrWhiteSpace(totalStr) &&
                        !string.IsNullOrWhiteSpace(privateKey);

            int threshold = -1;

            valid = valid && int.TryParse(thresholdStr, out threshold);

            int total = -1;

            valid = valid && int.TryParse(totalStr, out total);

            var signature = new WalletSignature()
            {
                PartsThreshold = threshold,
                PartsTotal     = total
            };

            if (!valid || !signature.IsValid())
            {
                // Show instructions if parametes are invalid.
                PrintUsage();
            }
            else
            {
                // Generate wallet
                var wallet = new Wallet(signature, privateKey);

                if (!wallet.IsValid())
                {
                    PrintUsage();
                    return;
                }

                // Print parts
                Console.WriteLine("Parts generated: ");
                foreach (var part in wallet.Parts)
                {
                    Console.WriteLine(" - " + part.GetShortNotation());
                }
            }
        }
コード例 #19
0
        public void Equals_DifferentSignaturesInDifferentObjects_False()
        {
            var signature1 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 5
            };

            var signature2 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 7
            };

            // Different objects with the different values
            Assert.That(signature1, Is.Not.EqualTo(signature2));
            Assert.IsFalse(signature1 == signature2);
        }
コード例 #20
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_ValidInitialization_ValidPartsContent()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var wallet = new Wallet(signature, "constant forest adore false green weave stop guy fur freeze giggle clock");

            // Validate parts's content
            Console.WriteLine("Signature: " + signature.GetShortNotation());
            foreach (var part in wallet.Parts)
            {
                Assert.That(part.Signature.Equals(signature));
                Assert.That(part.Data, Is.Not.Null.Or.Empty);

                Console.WriteLine("Data:      " + part.Data);
            }
        }
コード例 #21
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_ValidParts_ValidPrivateKey()
        {
            var signature = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var privateKey = "ExampleOfPrivateKey";
            var wallet     = new Wallet(signature, privateKey);

            var recoveredWallet = new Wallet(
                new List <IWalletPart>()
            {
                new WalletPart(wallet.Parts.First().GetShortNotation()),
                new WalletPart(wallet.Parts.Last().GetShortNotation()),
            });

            Assert.That(recoveredWallet.PrivateKey, Is.EqualTo(privateKey));
            Assert.That(recoveredWallet.PrivateKey, Is.EqualTo(wallet.PrivateKey));
        }
コード例 #22
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        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);
        }
コード例 #23
0
ファイル: WalletTests.cs プロジェクト: llenroc/CoolWallet
        public void Constructor_ValidSignatureAndPrivateKey_ValidReconstructedWallet()
        {
            var signature1 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var signature2 = new WalletSignature()
            {
                Version        = 1,
                PartsThreshold = 2,
                PartsTotal     = 4
            };

            var privateKey = "A private key";

            var originalWallet = new Wallet(signature1, privateKey);

            var reconstructedWallet = new Wallet(originalWallet.Parts);

            Assert.That(reconstructedWallet.PrivateKey, Is.EqualTo(reconstructedWallet.PrivateKey));
        }