예제 #1
0
        public void SaveWithSignature(string fileName, string keyFileName)
        {
            EZRSA rsa = new EZRSA(1024);

            //rsa.MapHashAlgorithmOID(

            if (File.Exists(keyFileName))
            {
                StreamReader sr  = File.OpenText(keyFileName);
                string       str = sr.ReadToEnd();

                rsa.FromXmlString(str);

                sr.Close();

                XmlDocument doc = SaveWithSignature(rsa);

                doc.Save(fileName);
            }

            // TODO: exception

            /*else
             * {
             *  int poo;
             * }*/
        }
예제 #2
0
        public XmlDocument SaveWithSignature(string keyFileName)
        {
//            CspParameters cspParams = new CspParameters();
//            cspParams.Flags = CspProviderFlags.UseExistingKey;

//            RSA rsa = new RSACryptoServiceProvider(cspParams);
            EZRSA rsa = new EZRSA(1024);

            rsa.FromXmlString(File.ReadAllText(keyFileName));

            return(SaveWithSignature(rsa));
        }
예제 #3
0
        private static XmlDocument LoadLicenseXmlFromString(string encoded)
        {
            try
            {
                byte[] ar = Convert.FromBase64String(encoded);

                unchecked
                {
                    for (int i = 0; i < ar.Length; i++)
                    {
                        ar[i] = (byte)(ar[i] ^ XOR_VALS[i % XOR_VALS.Length]);
                    }
                }

                var mscmp = new MemoryStream(ar);
                using (var br = new BinaryReader(mscmp))
                {
                    int siglen = br.ReadInt32();
                    if (siglen <= 0 || siglen > 100000)
                    {
                        return(null);
                    }
                    byte[] signature = br.ReadBytes(siglen);
                    int    datalen   = br.ReadInt32();
                    if (datalen <= 0 || datalen > 100000)
                    {
                        return(null);
                    }
                    byte[] data = br.ReadBytes(datalen);

                    // check signature
                    var key = new EZRSA(1024);
                    key.FromXmlString(Framework.Instance.GetPublicKey());
                    if (!key.VerifyData(data, new SHA1CryptoServiceProvider(), signature))
                    {
                        return(null);
                    }

                    var ms  = new MemoryStream(data);
                    var doc = new XmlDocument();
                    doc.Load(ms);
                    return(doc);
                }
            }
            catch
            {
                return(null);
            }
        }
예제 #4
0
        private static byte[] CreateLicenseBytes(string name, string email, string productattr, string productval, string licid, LicenseData licdata)
        {
            var doc = CreateNotSignedLicenseDoc(name, email, productattr, productval, licid);
            var ms  = new MemoryStream();

            using (var xw = XmlWriter.Create(ms))
            {
                doc.Save(xw);
            }
            if (licdata != null)
            {
                var sw = new StringWriter();
                doc.Save(sw);
                licdata.LicenseXml = sw.ToString();
            }
            byte[] data = ms.ToArray();

            // sign binary representation of license
            var key = new EZRSA(1024);

            key.FromXmlString(Resources.privatekey);
            byte[] signature = key.SignData(data, new SHA1CryptoServiceProvider());

            var mscmp = new MemoryStream();

            using (var bw = new BinaryWriter(mscmp))
            {
                bw.Write((int)signature.Length);
                bw.Write(signature);
                bw.Write((int)data.Length);
                bw.Write(data);
            }

            byte[] ar = mscmp.ToArray();

            unchecked
            {
                for (int i = 0; i < ar.Length; i++)
                {
                    ar[i] = (byte)(ar[i] ^ XOR_VALS[i % XOR_VALS.Length]);
                }
            }
            return(ar);
        }