public string GenerateLicenseParameters(string password)
{
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(1024);
string rsaParam = rsa.ToXmlString(false);
byte[] designKey = GetEncryptionKey(password);
byte[] designSignature = rsa.SignData(designKey, new SHA1CryptoServiceProvider());
// encrypt the design key to produce the runtime key
//
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
des.Key = _desKey;
des.IV = designKey;
byte[] encKey = des.CreateEncryptor().TransformFinalBlock(designKey, 0, designKey.Length);
byte[] runtimeKey = new byte[ArraySize(8)];
Array.Copy(encKey, 0, runtimeKey, 0, keyLength);
// sign the runtime key
//
byte[] runtimeSignature = rsa.SignData(runtimeKey, new SHA1CryptoServiceProvider());
// write the license parameters out to an XML string
//
MemoryStream stream = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(stream, Encoding.ASCII);
writer.WriteStartElement("LicenseParameters");
writer.WriteRaw(rsaParam);
writer.WriteElementString("DesignSignature", Convert.ToBase64String(designSignature));
writer.WriteElementString("RuntimeSignature", Convert.ToBase64String(runtimeSignature));
writer.WriteEndElement();
writer.Close();
string xml = ASCIIEncoding.ASCII.GetString(stream.ToArray());
stream.Close();
return xml;
}