Exemplo n.º 1
0
        private bool CheckSignature(ISource source, string cellFileName, string cellPath, string signaturePath)
        {
            S63SignatureFile sig = new S63SignatureFile(source.OpenRead(signaturePath));

            var certSig = sig.DataServerCertSignedBySA;

            var publicKeyFromFile = sig.PublicKeyOfDSCert();// the whole second half the of the signature file  --  Encoding.ASCII.GetBytes(LineRange(8, 8));

            var pkHash = SHA1.ComputeHash(publicKeyFromFile);

            if (!SA.VerifySignature(pkHash, certSig))
            {
                WriteVerbose($"Cell certificate not signed {cellFileName}");
                return(false);
            }

            var cellHash = SHA1.ComputeHash(source.OpenRead(cellPath));

            using (var dsaCell = new DSACryptoServiceProvider())
            {
                dsaCell.ImportParameters(new DSAParameters()
                {
                    P = sig.BigP,
                    Q = sig.BigQ,
                    G = sig.BigG,
                    Y = sig.BigY,
                });

                return(dsaCell.VerifySignature(cellHash, sig.CellSignature));
            }
        }
Exemplo n.º 2
0
        public XmlSignature(XElement fileSignature)
        {
            var ns = S63SignaturesXmlFile.Namespace;

            DataServerID = (string)fileSignature.Attribute("dataServerID");
            FileLocation = (string)fileSignature.Element(ns + "fileLocation");
            FileName     = (string)fileSignature.Element(ns + "fileName");
            string r = (string)fileSignature.Element(ns + "Signature").Element(ns + "R");
            string s = (string)fileSignature.Element(ns + "Signature").Element(ns + "S");

            SignatureR = S63SignatureFile.StringToByteArray(r);
            SignatureS = S63SignatureFile.StringToByteArray(s);
        }
Exemplo n.º 3
0
        public XmlDataServer(XElement dataServerElement)
        {
            var ns = S63SignaturesXmlFile.Namespace;

            ID = (string)dataServerElement.Attribute("dataServerID");

            string parameterP = (string)dataServerElement.Element(ns + "Parameters").Element(ns + "P");
            string parameterQ = (string)dataServerElement.Element(ns + "Parameters").Element(ns + "Q");
            string parameterG = (string)dataServerElement.Element(ns + "Parameters").Element(ns + "G");
            string publicKeyY = (string)dataServerElement.Element(ns + "PublicKey").Element(ns + "Y");

            string certR = (string)dataServerElement.Element(ns + "dataserverCertificate").Element(ns + "R");
            string certS = (string)dataServerElement.Element(ns + "dataserverCertificate").Element(ns + "S");

            BigP  = S63SignatureFile.StringToByteArray(parameterP);
            BigQ  = S63SignatureFile.StringToByteArray(parameterQ);
            BigG  = S63SignatureFile.StringToByteArray(parameterG);
            BigY  = S63SignatureFile.StringToByteArray(publicKeyY);
            CertR = S63SignatureFile.StringToByteArray(certR);
            CertS = S63SignatureFile.StringToByteArray(certS);

            // I found this bit fairly troubling to program. Formatting something in a very specific way and then taking the bytes!
            StringBuilder sb = new StringBuilder();

            sb.Append("// BIG p");
            sb.Append("\r\n");
            sb.Append(parameterP);
            sb.Append(".\r\n");

            sb.Append("// BIG q");
            sb.Append("\r\n");
            sb.Append(parameterQ);
            sb.Append(".\r\n");

            sb.Append("// BIG g");
            sb.Append("\r\n");
            sb.Append(parameterG);
            sb.Append(".\r\n");

            sb.Append("// BIG y");
            sb.Append("\r\n");
            sb.Append(publicKeyY);
            sb.Append(".\r\n");

            PublicKeyOfDSCert = Encoding.ASCII.GetBytes(sb.ToString());
        }