Ejemplo n.º 1
0
        static void Main(string[] args)
        {
            byte[] privKey;
            if (File.Exists("privkey.hex"))
            {
                privKey = File.ReadAllBytes("privkey.hex");
            }
            else
            {
                privKey = Oracle.GenerateOneTimeSigningKey();
                File.WriteAllBytes("privkey.hex", privKey);
            }

            byte[] pubKey = Oracle.PublicKeyFromPrivateKey(privKey);
            Console.WriteLine("Oracle Public Key: {0}", BitConverter.ToString(pubKey).Replace("-", ""));

            while (true)
            {
                byte[] privPoint = Oracle.GenerateOneTimeSigningKey();
                Console.WriteLine("PrivPoint for next publication: {0}", BitConverter.ToString(privPoint).Replace("-", ""));
                byte[] rPoint = Oracle.PublicKeyFromPrivateKey(privPoint);
                Console.WriteLine("R-Point for next publication: {0}", BitConverter.ToString(rPoint).Replace("-", ""));
                Console.Write("Enter number to publish (-1 to exit):");

                var  input = Console.ReadLine();
                long value = 0;
                if (!long.TryParse(input, out value))
                {
                    Console.WriteLine("Couldn't parse input.");
                    continue;
                }

                if (value == -1)
                {
                    break;
                }

                byte[] message = Oracle.GenerateNumericMessage(value);
                Console.WriteLine("Message: {0}", BitConverter.ToString(message).Replace("-", ""));

                byte[] signature = Oracle.ComputeSignature(privKey, privPoint, message);
                byte[] sGFromSig = Oracle.PublicKeyFromPrivateKey(signature);
                byte[] sGFromPubKeysAndMessage = Oracle.ComputeSignaturePubKey(pubKey, rPoint, message);

                Console.WriteLine("Signature: {0}", BitConverter.ToString(signature).Replace("-", ""));
                Console.WriteLine("sG from signature: {0}", BitConverter.ToString(sGFromSig).Replace("-", ""));
                Console.WriteLine("sG from pubkeys  : {0}", BitConverter.ToString(sGFromPubKeysAndMessage).Replace("-", ""));
            }
        }
Ejemplo n.º 2
0
        static void Main(string[] args)
        {
            byte[] privKey = StringToByteArray(File.ReadAllText("testdata/privkey.hex").Trim());
            byte[] pubKey  = Oracle.PublicKeyFromPrivateKey(privKey);

            string[] otsKeysHex    = File.ReadAllLines("testdata/one-time-signing-keys.hex");
            string[] messagesHex   = File.ReadAllLines("testdata/messages.hex");
            string[] sigsHex       = File.ReadAllLines("testdata/signatures.hex");
            string[] sGsFromSigHex = File.ReadAllLines("testdata/signature-pubkeys-from-sig.hex");
            string[] sGsFromMsgHex = File.ReadAllLines("testdata/signature-pubkeys-from-message.hex");

            for (int i = 0; i < otsKeysHex.Length; i++)
            {
                byte[] privPoint   = StringToByteArray(otsKeysHex[i]);
                byte[] rPoint      = Oracle.PublicKeyFromPrivateKey(privPoint);
                byte[] message     = StringToByteArray(messagesHex[i]);
                byte[] expectedSig = StringToByteArray(sigsHex[i]);
                byte[] expectedsG1 = StringToByteArray(sGsFromSigHex[i]);
                byte[] expectedsG2 = StringToByteArray(sGsFromMsgHex[i]);

                byte[] calculatedSig = Oracle.ComputeSignature(privKey, privPoint, message);
                byte[] calculatedsG1 = Oracle.PublicKeyFromPrivateKey(calculatedSig);
                byte[] calculatedsG2 = Oracle.ComputeSignaturePubKey(pubKey, rPoint, message);

                Debug.Assert(expectedsG1.SequenceEqual(expectedsG2), "sGs are not equal. This is an issue in the Go code that generated the testset.", string.Format("Failure in record {0}", i));
                Debug.Assert(calculatedSig.SequenceEqual(expectedSig), "Signature mismatch", string.Format("Failure in record {0} - Expected {1} - Got {2}", i, ByteArrayToString(expectedSig), ByteArrayToString(calculatedSig)));
                Debug.Assert(calculatedsG1.SequenceEqual(expectedsG1), "sG from signature is incorrect", string.Format("Failure in record {0} - Expected {1} - Got {2}", i, ByteArrayToString(expectedsG1), ByteArrayToString(calculatedsG1)));
                Debug.Assert(calculatedsG2.SequenceEqual(expectedsG2), "sG from pubkeys is incorrect", string.Format("Failure in record {0} - Expected {1} - Got {2}", i, ByteArrayToString(expectedsG2), ByteArrayToString(calculatedsG2)));

                if (i % 100 == 0)
                {
                    Console.Write("\rChecking signatures: {0}", i);
                }
            }

            Console.WriteLine("\rSuccesfully completed signature checking.");
        }