Beispiel #1
0
        public void Bls_priv_to_pub()
        {
            string[] smallDir = Directory.GetDirectories(Path.Combine("priv_to_pub", "small"));
            foreach (string testCase in smallDir)
            {
                Console.WriteLine(testCase);
                (YamlNode node, YamlNodeType nodeType) = LoadValue(Path.Combine(testCase, "data.yaml"));
                string?inputHex = node.Prop <string>("input");
                if (inputHex is null)
                {
                    throw new InvalidDataException("Input missing");
                }

                byte[] privateKeyBytes = Bytes.FromHexString(inputHex);
                BlsProxy.GetPublicKey(privateKeyBytes, out Span <byte> publicKey);

                string?outputHex = node.Prop <string>("output");
                if (outputHex is null)
                {
                    throw new InvalidDataException("Expected output missing");
                }

                byte[] expectedPublicKey = Bytes.FromHexString(outputHex);
                Assert.AreEqual(expectedPublicKey, publicKey.ToArray());
            }
        }
Beispiel #2
0
        public void Bls_sign_msg()
        {
            string[] smallDir = Directory.GetDirectories(Path.Combine("sign_msg", "small"));
            foreach (string caseDir in smallDir)
            {
                (YamlNode node, YamlNodeType nodeType) = LoadValue(Path.Combine(caseDir, "data.yaml"));

                var input = new { PrivateKey = node["input"].Prop <string>("privkey"), Message = node["input"].Prop <string>("message"), Domain = node["input"].Prop <string>("domain") };
                if (input.PrivateKey is null)
                {
                    throw new InvalidDataException("Test input -> private key is null");
                }

                if (input.Message is null)
                {
                    throw new InvalidDataException("Test input -> message is null");
                }

                if (input.Domain is null)
                {
                    throw new InvalidDataException("Test input -> domain is null");
                }

                string?outputHex = node.Prop <string>("output");

                BlsProxy.Sign(out Span <byte> signatureBytes, Bytes.FromHexString(input.PrivateKey), Bytes.FromHexString(input.Message), Bytes.FromHexString(input.Domain));
                Assert.AreEqual(outputHex, signatureBytes.ToHexString(true));
            }
        }
Beispiel #3
0
        public void TestPrivateKeyToPublic()
        {
            var privateKeyBytes = Bytes.FromHexString("47b8192d77bf871b62e87859d653922725724a5c031afeabc60bcef5ff665138");

            TestContext.Out.WriteLine("Serialized private key: {0}", privateKeyBytes.ToHexString());

            BlsProxy.GetPublicKey(privateKeyBytes, out var publicKeySpan);
            var publicKeyBytes = publicKeySpan.ToArray();

            Assert.AreEqual("b301803f8b5ac4a1133581fc676dfedc60d891dd5fa99028805e5ea5b08d3491af75d0707adab3b70c6a6a580217bf81", publicKeyBytes.ToHexString());
        }
Beispiel #4
0
        public void Bls_aggregate_sigs()
        {
            string[] smallDir = Directory.GetDirectories(Path.Combine("aggregate_sigs", "small"));
            bool     allFine  = true;

            foreach (string testCase in smallDir)
            {
                (YamlNode node, YamlNodeType nodeType) = LoadValue(Path.Combine(testCase, "data.yaml"));

                string?[]? inputHex = node.ArrayProp <string>("input");
                if (inputHex is null)
                {
                    throw new InvalidDataException("Test input missing");
                }

                string?outputHex = node.Prop <string>("output");
                if (outputHex is null)
                {
                    throw new InvalidDataException("Test expected output missing");
                }

                string?firstCase = inputHex[0];
                if (firstCase is null)
                {
                    throw new InvalidDataException("Test case input missing");
                }

                Span <byte> aggregated = Bytes.FromHexString(firstCase);
                for (int i = 1; i < inputHex.Length; i++)
                {
                    string?currentInput = inputHex[i];
                    if (currentInput is null)
                    {
                        throw new InvalidDataException("Test case input missing");
                    }

                    byte[] next = Bytes.FromHexString(currentInput);
                    BlsProxy.AddSignature(aggregated, next);
                }

                bool thisOneOk = string.Equals(outputHex, aggregated.ToHexString(true));
                Console.WriteLine(testCase + (thisOneOk ? " OK" : " FAIL"));
                allFine &= thisOneOk;
            }

            Assert.True(allFine);
        }