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()); } }
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)); } }
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()); }
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); }