Exemple #1
0
        public void GetTargetSecret()
        {
            var responseContent = new StringBuilder();

            responseContent.AppendLine("<html>");
            responseContent.AppendLine("<body>");
            responseContent.AppendLine("<div class=\"panel-heading\">   MySecret   </div>");
            responseContent.AppendLine("<div class=\"panel-body\">  TEST1234   </div>");
            responseContent.AppendLine("</body>");
            responseContent.AppendLine("</html>");

            var response = new HttpClientProxyResponse
            {
                StatusCode = HttpStatusCode.OK,
                Contents   = responseContent.ToString()
            };

            var client = new Mock <IHttpClientProxy>();

            client.Setup(x => x.SendAsync(It.IsAny <HttpClientProxyRequest>()))
            .Returns(Task.FromResult(response));

            var sut    = new SecretShare(client.Object, 1);
            var result = sut.GetTargetSecret("MySecret");

            Assert.Equal("TEST1234", result);
        }
Exemple #2
0
        private static void Combine()
        {
            if (!Arguments.QuietMode)
            {
                Console.WriteLine("Enter {0} shares separated by newlines:", Arguments.Threshold);
            }

            int polynomialDegree = -1;

            var totalShares = new List <string>();

            for (int i = 0; i < Arguments.Threshold; i++)
            {
                if (!Arguments.QuietMode)
                {
                    Console.Write("Share [{0}/{1}]: ", i + 1, Arguments.Threshold);
                }

                string currentShare = String.Empty;

                try {
                    currentShare = Console.ReadLine();
                }
                catch {
                    Fatal("I/O error while reading shares");
                }

                SecretShare share;

                if (!SecretShare.TryParse(currentShare, out share))
                {
                    Fatal("invalid syntax");
                }

                if (polynomialDegree < 0)
                {
                    polynomialDegree = share.Point.Y.PrimePolynomial.Degree;
                    if (!IrreduciblePolynomial.IsValidDegree(polynomialDegree))
                    {
                        Fatal("share has illegal length");
                    }
                }
                else if (polynomialDegree != share.Point.Y.PrimePolynomial.Degree)
                {
                    Fatal("shares have different security levels");
                }

                totalShares.Add(currentShare);
            }

            Diffuser diffuser = new NullDiffuser();

            if (Arguments.EnableDiffusion)
            {
                if (polynomialDegree >= 64)
                {
                    diffuser = new XteaDiffuser();
                }
                else
                {
                    Warning("security level too small for the diffusion layer");
                }
            }

            var recoveredSecret = SecretCombiner.Combine(totalShares, diffuser);

            if (!Arguments.QuietMode)
            {
                Console.Error.Write("Resulting secret: ");
            }

            Console.Error.WriteLine(Arguments.HexMode ? recoveredSecret.RecoveredHexString : recoveredSecret.RecoveredTextString);
        }