protected void BuildSSO() { try { xmlPublicKey = GetPublicKey(); xmlPrivateKey = GetPrivateKey(); if (xmlPublicKey == null) { LogError("Unable to retrieve Public Key"); return; } if (xmlPrivateKey == null) { LogError("Unable to retrieve Private Key"); return; } CspParameters Sendercp = new CspParameters(); RSACryptoServiceProvider SenderRSA = null; try { Sendercp.Flags = CspProviderFlags.UseMachineKeyStore; SenderRSA = new RSACryptoServiceProvider(Sendercp); SenderRSA.FromXmlString(xmlPrivateKey.OuterXml); } catch (Exception ex) { SenderRSA.Clear(); LogError("Error while constructing the PrivateKey: " + ex.Message); return; } CspParameters Receivercp = new CspParameters(); RSACryptoServiceProvider ReceiverRSA = null; try { Receivercp.Flags = CspProviderFlags.UseMachineKeyStore; ReceiverRSA = new RSACryptoServiceProvider(Receivercp); ReceiverRSA.FromXmlString(xmlPublicKey.OuterXml); } catch (Exception ex) { ReceiverRSA.Clear(); LogError("Error while constructing the PublicKey: " + ex.Message); return; } string tpayload = AssemblePayload(); byte[] TripleDESKey = null; byte[] encryptedData = SSOEncryption.TripleDESEncrypt(Encoding.ASCII.GetBytes(tpayload), out TripleDESKey); string base64enc = Convert.ToBase64String(encryptedData); string plainsig = base64enc + _clientID + _serverID; MD5 md = null; byte[] buffer = null; byte[] hash = null; try { md = MD5CryptoServiceProvider.Create(); //Convert the string into an array of bytes. buffer = Encoding.ASCII.GetBytes(plainsig); //Create the hash value from the array of bytes. hash = md.ComputeHash(buffer); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Computing Hash: " + ex.Message); return; } byte[] signed; byte[] cipher; try { signed = SenderRSA.SignHash(hash, CryptoConfig.MapNameToOID("MD5")); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Signing Hash: " + ex.Message); return; } try { cipher = ReceiverRSA.Encrypt(TripleDESKey, false); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Encrypting Symmetric Key: " + ex.Message); return; } string base64sign = Convert.ToBase64String(signed); string base64cipher = Convert.ToBase64String(cipher); _payload = webcode(base64enc); _signature = webcode(base64sign); //byte[] EncBinarySig = Convert.FromBase64String(webDecode(_signature)); _cipher = webcode(base64cipher); ReceiverRSA.Clear(); SenderRSA.Clear(); } catch (Exception ex) { throw new Exception("Error while Building the SSO Package: \n" + ex.Message); } }
protected void BuildSSO() { try { xmlPublicKey = GetPublicKey(); xmlPrivateKey = GetPrivateKey(); if (xmlPublicKey == null) { LogError("Unable to retrieve Public Key"); return; } if (xmlPrivateKey == null) { LogError("Unable to retrieve Private Key"); return; } CspParameters Sendercp = new CspParameters(); RSACryptoServiceProvider SenderRSA = null; try { Sendercp.Flags = CspProviderFlags.UseMachineKeyStore; SenderRSA = new RSACryptoServiceProvider(Sendercp); SenderRSA.FromXmlString(xmlPrivateKey.OuterXml); } catch (Exception ex) { SenderRSA.Clear(); LogError("Error while constructing the PrivateKey: " + ex.Message); return; } CspParameters Receivercp = new CspParameters(); RSACryptoServiceProvider ReceiverRSA = null; try { Receivercp.Flags = CspProviderFlags.UseMachineKeyStore; ReceiverRSA = new RSACryptoServiceProvider(Receivercp); ReceiverRSA.FromXmlString(xmlPublicKey.OuterXml); } catch (Exception ex) { ReceiverRSA.Clear(); LogError("Error while constructing the PublicKey: " + ex.Message); return; } string tpayload = AssemblePayload(); byte[] TripleDESKey = null; byte[] encryptedData = SSOEncryption.TripleDESEncrypt(Encoding.ASCII.GetBytes(tpayload), out TripleDESKey); string base64enc = Convert.ToBase64String(encryptedData); string plainsig = base64enc + _clientID + _serverID; MD5 md = null; byte[] buffer = null; byte[] hash = null; try { md = MD5CryptoServiceProvider.Create(); //Convert the string into an array of bytes. buffer = Encoding.ASCII.GetBytes(plainsig); //Create the hash value from the array of bytes. hash = md.ComputeHash(buffer); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Computing Hash: " + ex.Message); return; } byte[] signed; byte[] cipher; try { signed = SenderRSA.SignHash(hash, CryptoConfig.MapNameToOID("MD5")); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Signing Hash: " + ex.Message); return; } try { cipher = ReceiverRSA.Encrypt(TripleDESKey, false); } catch (Exception ex) { ReceiverRSA.Clear(); SenderRSA.Clear(); LogError("Error Encrypting Symmetric Key: " + ex.Message); return; } string base64sign = Convert.ToBase64String(signed); string base64cipher = Convert.ToBase64String(cipher); _payload = webcode(base64enc); _signature = webcode(base64sign); //byte[] EncBinarySig = Convert.FromBase64String(webDecode(_signature)); _cipher = webcode(base64cipher); WebClient wc = new WebClient(); NameValueCollection vars = new NameValueCollection(); vars.Add("Payload", webcode(base64enc)); vars.Add("Signature", webcode(base64sign)); vars.Add("Cipher", webcode(base64cipher)); vars.Add("ClientID", _clientID); vars.Add("ServerID", _serverID); vars.Add("SenderKeyVersion", _senderKeyVersion); vars.Add("ReceiverKeyVersion", _receiverKeyVersion); ShellWindows shWin = new ShellWindows(); object o = null; object v = (object)vars; SHDocVw.InternetExplorer IE = new InternetExplorerClass(); //IWebBrowserApp wb = (IWebBrowserApp)IE; ////wb.FullName = "AnswerKey"; //wb.Visible = true; //wb.Navigate("http://www.c-sharpcorner.com/", ref o, ref o, ref o, ref o); //IE.Name bool b = false; foreach (InternetExplorer ies in shWin) { if (ies.HWND == IE.HWND) { IE.Visible = true; IE.Navigate("http://www.c-sharpcorner.com/", ref o, ref o, ref o, ref o); } else { IE = new InternetExplorerClass(); IE.Visible = true; IE.Navigate("http://www.codeproject.com/", ref o, ref o, ref o, ref o); } } //IE.Visible = true; //IE.Navigate("https://sso.ehr.com/Destination.aspx", ref o, ref o, ref v, ref o); ////MessageBox.Show(IE.Name.ToString()); //int hndl = IE.HWND; //byte[] retBytes = wc.UploadValues("https://sso.ehr.com/Destination.aspx", vars); //string retASCII = Encoding.ASCII.GetString(retBytes); ReceiverRSA.Clear(); SenderRSA.Clear(); } catch (Exception ex) { throw new Exception("Error while Building the SSO Package: \n" + ex.Message); } }