internal byte[] GenerateKeyExchangeData(byte[] pms)
        {
            byte[] finalKeyExchangeData = null;

            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();

            try
            {
                rsa.ImportParameters(X509PublicKeyParser.GetRSAPublicKeyParameters(m_Session.Certificate));
            }
            catch (Exception)
            {
                throw new SslAlertException(AlertLevel.Fatal, AlertDescription.BadCertificate);
            }

            RSAPKCS1KeyExchangeFormatter fmt = new RSAPKCS1KeyExchangeFormatter(rsa);

            byte[] keyExchangeData = fmt.CreateKeyExchange(pms);

            byte[] len = BitConverter.GetBytes((ushort)keyExchangeData.Length);
            if (BitConverter.IsLittleEndian)
            {
                Array.Reverse(len);
            }

            finalKeyExchangeData = ByteArray.Concat(len, keyExchangeData);
            return(finalKeyExchangeData);
        }
Example #2
0
 private System.Security.Cryptography.RSAParameters ConvertPublicKeyToRsaInfo()
 {
     System.Security.Cryptography.RSAParameters RSAKeyInfo;
     using (var cerStream = Application.GetResourceStream(new Uri("/RSAEncryptDemo;component/Files/DemoPublicKey.cer", UriKind.RelativeOrAbsolute)).Stream)
     {
         byte[] cerBuffer = new byte[cerStream.Length];
         cerStream.Read(cerBuffer, 0, cerBuffer.Length);
         System.Security.Cryptography.X509Certificates.X509Certificate cer = new System.Security.Cryptography.X509Certificates.X509Certificate(cerBuffer);
         RSAKeyInfo = X509PublicKeyParser.GetRSAPublicKeyParameters(cer.GetPublicKey());
     }
     return(RSAKeyInfo);
 }