From 61f6fc1d4b1bf28cfb8d6631a17c700b479309ea Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 30 Jun 2010 09:02:21 +0000 Subject: [PATCH] --- cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj | 2 +- cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs | 43 +- cs/bmx_0200scr/BMX2/BMXNet/IHSPrivateKey.pfx | Bin 1756 -> 0 bytes .../BMX2/BMXNet/bin/Release/BMXNet20.dll | Bin 90112 -> 98304 bytes .../BMX2/BMXNetTest/BMXNetTest.csproj | 10 +- .../BMX2/BMXNetTest/IHSPrivateKey.pfx | Bin 1756 -> 0 bytes .../BMX2/BMXNetTest/frmBMXNetTest.cs | 3 +- cs/bmx_0200scr/BMXNetLib.cs | 1312 ----------------- 8 files changed, 30 insertions(+), 1340 deletions(-) delete mode 100644 cs/bmx_0200scr/BMX2/BMXNet/IHSPrivateKey.pfx delete mode 100644 cs/bmx_0200scr/BMX2/BMXNetTest/IHSPrivateKey.pfx delete mode 100644 cs/bmx_0200scr/BMXNetLib.cs diff --git a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj index cdc07dc..a71cdb0 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj +++ b/cs/bmx_0200scr/BMX2/BMXNet/BMXNet.csproj @@ -25,7 +25,7 @@ - true + false 2.0 v3.5 publish\ diff --git a/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs b/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs index b8bd10f..b96b779 100644 --- a/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs +++ b/cs/bmx_0200scr/BMX2/BMXNet/BMXNetLib.cs @@ -144,28 +144,29 @@ namespace IndianHealthService.BMXNet #region Encryption Keys private string[] m_sKey = new string[] { - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", + @"wkEo-ZJt!dG)49K{nX1BS$vH<&:Myf*>Ae0jQW=;|#PsO`'%+rmb[gpqN,l6/hFC@DcUa ]z~R}""V\iIxu?872.(TYL5_3", + @"rKv`R;M/9BqAF%&tSs#Vh)dO1DZP> *fX'u[.4lY=-mg_ci802N7LTG<]!CWo:3?{+,5Q}(@jaExn$~p\IyHwzU""|k6Jeb", + @"\pV(ZJk""WQmCn!Y,y@1d+~8s?[lNMxgHEt=uw|X:qSLjAI*}6zoF{T3#;ca)/h5%`P4$r]G'9e2if_>UDKb7H=CT8S!", + @"NZW:1}K$byP;jk)7'`x90B|cq@iSsEnu,(l-hf.&Y_?J#R]+voQXU8mrV[!p4tg~OMez CAaGFD6H53%L/dT2<*>""{\wI=", + @"vCiJ[D_0xR32c*4.P""G{r7}E8wUgyudF+6-:B=$(sY,LkbHa#'@Q", + @"hvMX,'4Ty;[a8/{6l~F_V""}qLI\!@x(D7bRmUH]W15J%N0BYPkrs&9:$)Zj>u|zwQ=ieC-oGA.#?tfdcO3gp`S+En K2*<", + @"jd!W5[];4'?ghBzIFN}fAK""#`p_TqtD*1E37XGVs@0nmSe+Y6Qyo-aUu%i8c=H2vJ\) R:MLb.9,wlO~P", + @"2ThtjEM+!=xXb)7,ZV{*ci3""8@_l-HS69L>]\AUF/Q%:qD?1~m(yvO0e'<#o$p4dnIzKP|`NrkaGg.ufCRB[; sJYwW}5&", + @"vB\5/zl-9y:Pj|=(R'7QJI *&CTX""p0]_3.idcuOefVU#omwNZ`$Fs?L+1Sk<,b)hM4A6[Y%aDrg@~KqEW8t>H};n!2xG{", + @"sFz0Bo@_HfnK>LR}qWXV+D6`Y28=4Cm~G/7-5A\b9!a#rP.l&M$hc3ijQk;),TvUd<[:I""u1'NZSOw]*gxtE{eJp|y (?%", + @"M@,D}|LJyGO8`$*ZqH .j>c~hanG", + @"xVa1']_GU#zm+:5b@06O3Ap8=*7ZFY!H-uEQk; .q)i&rhd", + @"I]Jz7AG@QX.""%3Lq>METUo{Pp_ |a6<0dYVSv8:b)~W9NK`(r'4fs&wim\kReC2hg=HOj$1B*/nxt,;c#y+![?lFuZ-5D}", + @"Rr(Ge6F Hx>q$m&C%M~Tn,:""o'tX/*yP.{lZ!YkiVhuw_y|m};d)-7DZ""Fe/Y9 WidFN,1KsmwQ)GJM{I4:C%}#Ep(?HB/r;t.&U8o|l['Lg""2hRDyZ5`nbf]qjc0!zS-TkYO<_=76a\X@$Pe3+xVvu", + @"yYgjf""5VdHc#uA,W1i+v'6|@pr{n;DJ!8(btPGaQM.LT3oe?NB/&9>Z`-}02*%x<7lsqz4OS ~E$\R]KI[:UwC_=h)kXmF", + @"5:iar.{YU7mBZR@-K|2 ""+~`M%8sq4JhPo<_X\Sg3WC;Tuxz,fvEQ1p9=w}FAI&j/keD0c?)LN6OHV]lGy'$*>nd[(tb!#", }; - #endregion Encryption Keys + + #endregion Encryption Keys #region RPX Functions diff --git a/cs/bmx_0200scr/BMX2/BMXNet/IHSPrivateKey.pfx b/cs/bmx_0200scr/BMX2/BMXNet/IHSPrivateKey.pfx deleted file mode 100644 index 3b77e906ce3dd9ca8301b3266df7b20d34ce4799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1756 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%0A$6)m7=)XB8-rMc>@Y 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 - - False - ..\Dotfuscator\Dotfuscated\BMXNet20.dll - System @@ -163,6 +159,12 @@ true + + + {DE8E4CC9-4F3A-4E32-8DFE-EE5692E8FC45} + BMXNet + + diff --git a/cs/bmx_0200scr/BMX2/BMXNetTest/IHSPrivateKey.pfx b/cs/bmx_0200scr/BMX2/BMXNetTest/IHSPrivateKey.pfx deleted file mode 100644 index 3b77e906ce3dd9ca8301b3266df7b20d34ce4799..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1756 zcmY*Yc|4SP9DZl!^=d|jb*!r-MXqUQGNW8M(-KmWTXNK}j59|Vyo^%2xd%l?8ONq+ zSjQ}KRFuRbM^>1fWji!TjxB2Tt$kC&Fq zn{c9hoE*bHD(>Qj?72w&?kK$)%;{MT4A1DPKe@C(X<2QMr(i=B>ol|oIof;Hl@m(4 z+MLE;P~J^HC^(Z{n%?={Z4mE4lWZGPi|LVV8pta29eCXT{mij0BYJPORv0I#;fI7< zjEiE&=Q<@<&qgL~nqMB-xuEJ$$7C)on%>J`YNJCd%)xqmAGlf7o*n*LftRx9We%>w ziGJ;}RBLXdh09W&ph0(=-sUM`)fw}*9DFL=r%>J3y;0n}U<)6xXH_55o$5A|u(=}^ z@9e~8{anr(UQ~H?{W$-T8{s*-)-EfVDNQtxeUol?x64P8yk1Z z@3Jt%OM2<%IlTHG{c5GWH4Bxz3`80^gy3^UyiDe&k>}pQ^NT@Bzy4_u)BO8H8fV5T z`QX#}1p&SE(TE>YHRbuj()0u>1Le&;`2M_Vc2ieY{}EY#ldQ^Av7R;cS2;Tmt^e}j zg2|e#N6cQDty%)x*e;gWCi7VJWIUSn6Xg%bfhXqQ9ZtKM;EXe^Us>3K<`?bu95u`A zEIRrkXi+k;oSCU|-=g~xIo$_-*=(X?*l}RLfoA^rwue$_Cn)DMlE@Ouqr!wjdYyV} zNJa&@<|p6Ty@Zenf7qcQfr5>?7hcyZ)Eu6024|YhAA<~ z7qM#5C;&Ow|8-FRi!1awu0?CT)Eu+Pmd|lbfzfd$x1!gQUzz$l=pDcRYGzL{pYey5 zjvQ~Y@_w7y)`7c$?uE(r+(f&19k&lcpo>&)7dB@f@&Ky#GNotjqy>MgnnU3@f-(!r z#qOiwx2uIqA07JGv_)z$=dgaGD^B39c;yBaH}sk?y}Yq~*Bj1k!Q{is4PL8!+mr)t zibvkh^;DKk(R&4<5+OjXH5JtP! zJi|j}M>3dxw z4m&Sfu1<%$rCUZ6>P~8G2x()Kl?=(n2W;9%I!6pvj=Xcv3hft`>vs?dI`9tw}fjvEx#fF(uC ztC9E)-Rr-)wrw>I5B%ENerRO4RX#viQ(zf3q4>?Ry5|l9=jZ0(g=;pB1N5Nn7Uvx% zFTx%oYc9FzB+=~X15YH|Q){8r>0>R-;?|P9v*>Dr7iIW}OHJ>x+^*w{uG^n#FqDY!&8$Mw$VA^mwWBlGAB3Mh5k>QRpNK`$M`5Tp#}pl}kDrwTJzFjN_>UMpV6l zBjih>%dUvrli#_t>z9cF)N1%kT4A~DD%#kfB|vk!Dj9L6Wp<6q&&{-%&nIJ7Zxa%i znbOLVGlJwiZNE3JSd+IOh)}6Vx1!Hi=jrjSbH9ntm2rLSJ@MY-Z>})1eo(S{A3>>J z0Wn@0Ol>#Io{ORrgxa#kR0ofnwoUrOrm`&S3TRJk%?Z)26{0b52T>dn)5T-Z%Anlq v>{6EUK5PuVvjt*L@)R~&`+`8ZzNVb - /// BMXNetLib implements low-level socket connectivity to RPMS databases. - /// The VA RPC Broker must be running on the RPMS server in order for - /// BMXNetLib to connect. - /// - [DnsPermission(SecurityAction.Assert, Unrestricted = true)] - public class BMXNetLib - { - public BMXNetLib() - { - m_sWKID = "BMX"; - m_sWINH = ""; - m_sPRCH = ""; - m_sWISH = ""; - m_cHDR = ADEBHDR(m_sWKID,m_sWINH,m_sPRCH,m_sWISH); - - } - - #region Piece Functions - - /// - /// Corresponds to M's $L(STRING,DELIMITER) - /// - /// - /// - /// - public static int PieceLength(string sInput, string sDelim) - { - char[] cDelim = sDelim.ToCharArray(); - string [] cSplit = sInput.Split(cDelim); - return cSplit.GetLength(0); - } - - /// - /// Corresponds to M's $$Piece function - /// - /// - /// - /// - /// - public static string Piece(string sInput, string sDelim, int nNumber) - { - try - { - char[] cDelim = sDelim.ToCharArray(); - string [] cSplit = sInput.Split(cDelim); - int nLength = cSplit.GetLength(0); - if ((nLength < nNumber)||(nNumber < 1)) - return ""; - return cSplit[nNumber-1]; - } - catch (Exception bmxEx) - { - string sMessage = bmxEx.Message + bmxEx.StackTrace; - throw new BMXNetException(sMessage); - } - - } - - public static string Piece(string sInput, string sDelim, int nNumber, int nEnd) - { - try - { - if (nNumber < 0) - nNumber = 1; - - if (nEnd < nNumber) - return ""; - - if (nEnd == nNumber) - return Piece(sInput, sDelim, nNumber); - - char[] cDelim = sDelim.ToCharArray(); - string [] cSplit = sInput.Split(cDelim); - int nLength = cSplit.GetLength(0); - if ((nLength < nNumber)||(nNumber < 1)) - return ""; - - //nNumber = 1-based index of the starting element to return - //nLength = count of elements - //nEnd = 1-based index of last element to return - //nCount = number of elements past nNumber to return - - //convert nNumber to 0-based index: - nNumber--; - - //convert nEnd to 0-based index; - nEnd--; - - //Calculate nCount; - int nCount = nEnd - nNumber + 1; - - //Adjust nCount for number of elements - if (nCount + nNumber >= nLength) - { - nCount = nLength - nNumber; - } - - string sRet = string.Join(sDelim, cSplit, nNumber, nCount ); - return sRet; - } - catch (Exception bmxEx) - { - string sMessage = bmxEx.Message + bmxEx.StackTrace; - throw new BMXNetException(sMessage); - } - } - - #endregion Piece Functions - - #region RPX Fields - - private string m_sWKID; - private string m_sWISH; - private string m_sPRCH; - private string m_sWINH; - private string m_cHDR; - private string m_cAppContext; - private bool m_bConnected; - private int m_nMServerPort; - private string m_cServerAddress; - private string m_cDUZ; - private string m_cLoginFacility; - private TcpClient m_pCommSocket; - private string m_sNameSpace = ""; - private int m_nReceiveTimeout = 30000; - - #endregion RPX Fields - - #region Encryption Keys - private string[] m_sKey = new string[] - { - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - @"MUST PROVIDE A VALID KEY", - }; - #endregion Encryption Keys - - #region RPX Functions - - /// - /// Given strInput = "13" builds "013" if nLength = 3. Default for nLength is 3. - /// - /// - /// - private string ADEBLDPadString(string strInput) - { - return ADEBLDPadString(strInput, 3); - } - - /// - /// Given strInput = "13" builds "013" if nLength = 3 Default for nLength is 3. - /// - /// - /// Default = 3 - /// - private string ADEBLDPadString(string strInput, int nLength /*=3*/) - { - return strInput.PadLeft(nLength, '0'); - } - - /// - /// Concatenates zero-padded length of sInput to sInput - /// Given "Hello" returns "004Hello" - /// If nSize = 5, returns "00004Hello" - /// Default for nSize is 3. - /// - /// - /// - private string ADEBLDB(string sInput) - { - return ADEBLDB(sInput, 3); - } - - /// - /// Concatenates zero-padded length of sInput to sInput - /// Given "Hello" returns "004Hello" - /// If nSize = 5, returns "00004Hello" - /// Default for nSize is 3. - /// - /// - /// - /// - private string ADEBLDB(string sInput, int nSize /*=3*/) - { - int nLen = sInput.Length; - string sLen = this.ADEBLDPadString(nLen.ToString(), nSize); - return sLen + sInput; - } - - /// - /// Build protocol header - /// - /// - /// - /// - /// - /// - private string ADEBHDR(string sWKID, string sWINH, string sPRCH, string sWISH) - { - string strResult; - strResult = sWKID+";"+sWINH+";"+sPRCH+";"+sWISH+";"; - strResult = ADEBLDB(strResult); - return strResult; - } - private string ADEBLDMsg(string cHDR, string cRPC, string cParam) - { - string sMult = ""; - return ADEBLDMsg(cHDR, cRPC, cParam, ref sMult); - } - private string ADEBLDMsg(string cHDR, string cRPC, string cParam, ref string cMult) - { - //Builds RPC message - //Automatically splits parameters longer than 200 into subscripted array - string cMSG; - string sBuild = ""; - string sPiece = ""; - string sBig = ""; - int l; - int nLength; - - if (cParam == "") - { - cMSG = "0" + cRPC ; - } - else - { - l = PieceLength(cParam, "^"); - for (int j=1; j <= l; j++) - { - sPiece = Piece(cParam, "^", j); - if ((j == l) && (sPiece.Length > 200)) - { - //Split up long param into array pieces - sBig = sPiece; - sPiece = ".x"; - nLength = sPiece.Length + 1; - sPiece = ADEBLDPadString(nLength.ToString()) + "2" + sPiece; - sBuild = sBuild + sPiece; - int nSubscript = 1; - string sSubscript =""; - int nSubLen = 0; - string sSubLen =""; - int nBigLen = sBig.Length; - string sHunk =""; - int nHunkLen = 0; - string sHunkLen =""; - int nChunk = 0; - do - { - nChunk = (sBig.Length > 200)?200:sBig.Length ; - sHunk = sBig.Substring(0, nChunk); - sBig = sBig.Remove(0, nChunk); - nBigLen = sBig.Length; - sSubscript = nSubscript.ToString(); - nSubLen = sSubscript.Length; - sSubLen = nSubLen.ToString(); - sSubLen = ADEBLDPadString(sSubLen); - nHunkLen = sHunk.Length; - sHunkLen = nHunkLen.ToString(); - sHunkLen = ADEBLDPadString(sHunkLen); - cMult = cMult + sSubLen + sSubscript + sHunkLen + sHunk; - nSubscript++; - } while (nBigLen > 0); - } - else - { - nLength = sPiece.Length +1; - sPiece = ADEBLDPadString(nLength.ToString()) + "0" + sPiece; - sBuild = sBuild + sPiece; - } - } - nLength = sBuild.Length; - string sTotLen = ADEBLDPadString(nLength.ToString(),5); - if (cMult.Length > 0) - { - cMSG = "1"+ cRPC + "^" +sTotLen + sBuild; - } - else - { - cMSG = "0"+ cRPC + "^" +sTotLen + sBuild; - } - } - cMSG = ADEBLDB(cMSG, 5); - cMSG = cHDR + cMSG; - return cMSG; - } - - internal string ADEEncryp(string sInput) - { - //Encrypt a string - string strResult; - string strPercent; - string strAssoc; - string strIdix; - int nPercent; - int nAssocix; - int nIdix; - Debug.Assert(sInput != ""); - System.Random rRand = new Random(DateTime.Now.Second); - - nPercent = rRand.Next(0,10000); - nPercent += 72439; - nAssocix = nPercent % 20; - nAssocix++; - Debug.Assert(nAssocix < 21); - strPercent = nPercent.ToString(); - strPercent = strPercent.Substring(1,2); - nIdix = Convert.ToInt32(strPercent); - nIdix = nIdix % 20; - nIdix++; - Debug.Assert(nIdix < 21); - - const int nEncryptBase = 101; - strAssoc = LoadKey(nEncryptBase + nAssocix); - Debug.Assert(strAssoc.Length == 94); - strIdix = LoadKey(nEncryptBase + nIdix); - Debug.Assert(strIdix.Length == 94); - string sEncrypted = ""; - - foreach (char c in sInput) - { - string d = c.ToString(); - int nFindChar = strIdix.IndexOf(c); - if (nFindChar > -1) - { - d = strAssoc.Substring(nFindChar,1); - } - sEncrypted += d; - } - - strResult = (char) (nIdix + 31) + sEncrypted + (char) (nAssocix + 31); - - return strResult; - } - - internal string ADEDecryp(string sInput) - { - //Encrypt a string - string strAssoc; - string strIdix; - int nAssocix; - int nIdix; - Debug.Assert(sInput != ""); - - //get associator string index - char cAssocix = sInput[sInput.Length-1]; - nAssocix =(int) cAssocix; - nAssocix -= 31; - Debug.Assert(nAssocix < 21); - - //get identifier string index - char cIdix = sInput[0]; - nIdix = (int) cIdix; - nIdix -= 31; - Debug.Assert(nIdix < 21); - - //get associator string - const int nEncryptBase = 101; - strAssoc = LoadKey(nEncryptBase + nAssocix); - Debug.Assert(strAssoc.Length == 94); - - //get identifier string - strIdix = LoadKey(nEncryptBase + nIdix); - Debug.Assert(strIdix.Length == 94); - - //translated result - string sDecrypted = ""; - sInput = sInput.Substring(1, sInput.Length - 2); - foreach (char c in sInput) - { - string d = c.ToString(); - int nFindChar = strAssoc.IndexOf(c); - if (nFindChar > -1) - { - d = strIdix.Substring(nFindChar,1); - } - sDecrypted += d; - } - - return sDecrypted; - } - - internal string BMXEncrypt(string sInput) - { - - ASCIIEncoding textConverter = new ASCIIEncoding(); - RijndaelManaged myRijndael = new RijndaelManaged(); - byte[] encrypted; - byte[] toEncrypt; - byte[] key; - byte[] IV; - - string sKey="pouphfoz sfdbqjuvmbwft qizmphfoz"; - string sIV = "Gichin Funakoshi"; - key = textConverter.GetBytes(sKey); - IV = textConverter.GetBytes(sIV); - - //Get an encryptor. - ICryptoTransform encryptor = myRijndael.CreateEncryptor(key, IV); - - //Encrypt the data. - MemoryStream msEncrypt = new MemoryStream(); - CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write); - - //Convert the input data to a byte array. - toEncrypt = textConverter.GetBytes(sInput); - - //Write all data to the crypto stream and flush it. - csEncrypt.Write(toEncrypt, 0, toEncrypt.Length); - csEncrypt.FlushFinalBlock(); - - //Get encrypted array of bytes. - encrypted = msEncrypt.ToArray(); - - //Convert to string to send to RPMS - string sEncrypted = "" ; - byte bTmp; - string sTmp; - for (int j =0; j < encrypted.Length; j++) - { - bTmp = encrypted[j]; - sTmp = bTmp.ToString(); - sEncrypted += sTmp; - if (j < (encrypted.Length -1)) - sEncrypted += "~"; - } - return sEncrypted; - } - - internal string BMXDecrypt(string sInput) - { - try - { - byte[] fromEncrypt; - ASCIIEncoding textConverter = new ASCIIEncoding(); - RijndaelManaged myRijndael = new RijndaelManaged(); - string sRPMSEncrypted = sInput; - string sBar = "~"; - char[] cBar = sBar.ToCharArray(); - string[] sArray; - sArray = sRPMSEncrypted.Split(cBar); - byte[] bRPMSEncrypted = new byte[sArray.GetLength(0)]; - byte[] key; - byte[] IV; - - //Convert the RPMS-stored string to a byte array - for (int j = 0; j < sArray.GetLength(0); j++) - { - bRPMSEncrypted[j] = Byte.Parse(sArray[j]); - } - - //Get a decryptor that uses the same key and IV as the encryptor. - string sKey="pouphfoz sfdbqjuvmbwft qizmphfoz"; - string sIV = "Gichin Funakoshi"; - key = textConverter.GetBytes(sKey); - IV = textConverter.GetBytes(sIV); - ICryptoTransform decryptor = myRijndael.CreateDecryptor(key, IV); - - MemoryStream msDecrypt = new MemoryStream(bRPMSEncrypted); - CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read); - - fromEncrypt = new byte[bRPMSEncrypted.Length - 2]; - - //Read the data out of the crypto stream. - csDecrypt.Read(fromEncrypt, 0, fromEncrypt.Length); - - int nZ = FindChar(fromEncrypt, (char) 0); - - //Convert the byte array back into a string. - string sResult; - if (nZ < 0) - { - sResult = textConverter.GetString(fromEncrypt); - } - else - { - sResult = textConverter.GetString(fromEncrypt, 0, nZ); - } - return sResult; - } - catch (Exception ex) - { - Debug.Write(ex.Message); - return ""; - } - } - - public static int FindChar(byte[] c, char y) - { - int n = 0; - int nRet = -1; - for (n=0; n < c.Length; n++) - { - if (y == (char) c[n]) - { - nRet = n; - break; - } - } - - return nRet; - } - - public static int FindChar(string s, char y) - { - int n = 0; - int nRet = -1; - foreach (char c in s) - { - if (y == c) - { - nRet = n; - break; - } - n++; - } - return nRet; - } - - - /// - /// Returns index of first instance of sSubString in sString. - /// If sSubString not found, returns -1. - /// - /// - /// - /// - public static int FindSubString(string sString, string sSubString) - { - int nFound = -1; - int nLimit = sString.Length - sSubString.Length + 1; - if (nLimit < 0) - return -1; - - int nSubLength = sSubString.Length; - for (int j=0; j < nLimit; j++) - { - if (sString.Substring(j, nSubLength) == sSubString) - { - nFound = j; - break; - } - } - return nFound; - } - - private string LoadKey(int nID) - { - nID -= 102; - Debug.Assert( nID < 20); - return m_sKey[nID]; - } - - private void OpenConnectionCommon(string sServerAddress) - { - try - { - m_cServerAddress = sServerAddress; - - //Connect with the server - TcpClient connector = new TcpClient(); - - try - { - connector = new TcpClient(); - connector.Connect(m_cServerAddress, m_nMServerPort); - } - catch (SocketException exSocket) - { - string s = exSocket.Message + exSocket.StackTrace; - throw new BMXNetException(s); - } - - //Prepare & send the connect message - string cSend = "TCPconnect^" + m_sNameSpace + "^^"; - int nLen = cSend.Length; - string sLen = nLen.ToString(); - sLen = sLen.PadLeft(5, '0'); - cSend = "{BMX}" + sLen + cSend; - - NetworkStream ns = connector.GetStream(); - byte[] sendBytes = Encoding.ASCII.GetBytes(cSend); - ns.Write(sendBytes,0,sendBytes.Length); - - m_pCommSocket = connector; - return; - - } - catch (BMXNetException bmxEx) - { - throw bmxEx; - } - catch (Exception ex) - { - string s = ex.Message + ex.StackTrace; - throw new BMXNetException(s); - } - }//End OpenConnectionCommon - - [SocketPermissionAttribute(SecurityAction.Assert, - Access="Connect", - Host="All", - Port="All", - Transport="All")] - public bool OpenConnection(string sServerAddress, WindowsIdentity winIdentity) - { - try - { - OpenConnectionCommon(sServerAddress); - bool bSecurity; - try - { - bSecurity = SendSecurityRequest(winIdentity); - - } - catch (Exception ex) - { - //Close the connection - SendString(m_pCommSocket, "#BYE#"); - m_pCommSocket.Close(); - m_bConnected = false; - m_cServerAddress = ""; - throw ex; - } - - m_bConnected = bSecurity; - return m_bConnected; - } - catch (BMXNetException bmxEx) - { - throw bmxEx; - } - catch (Exception ex) - { - string s = ex.Message + ex.StackTrace; - throw new BMXNetException(s); - } - } - - StreamWriter m_LogWriter; - bool m_bLogging = false; - - public void StartLog() - { - try - { - if (m_bLogging) - { - throw new Exception("Already logging."); - } - string sFile = "BMXLog " + DateTime.Now.DayOfYear.ToString() + " " + - DateTime.Now.Hour.ToString() + " " + DateTime.Now.Minute.ToString() - + " " + DateTime.Now.Second.ToString() + ".log"; - StartLog(sFile); - return; - } - catch (Exception ex) - { - throw ex; - } - } - - public void StartLog(string LogFileName) - { - try - { - if (m_bLogging) - { - throw new Exception("Already logging."); - } - m_LogWriter = File.AppendText(LogFileName); - m_bLogging = true; - return; - } - catch (Exception ex) - { - throw ex; - } - } - - public void StopLog() - { - try - { - //Close the writer and underlying file. - if (m_bLogging == false) - { - return; - } - m_LogWriter.Close(); - m_bLogging = false; - return; - } - catch (Exception ex) - { - throw ex; - } - } - - private static void Log(String logMessage, TextWriter w) - { - w.WriteLine("{0} {1}", DateTime.Now.ToLongTimeString(), - DateTime.Now.ToLongDateString()); - w.WriteLine(" :"); - w.WriteLine(" :{0}", logMessage); - w.WriteLine("-------------------------------"); - // Update the underlying file. - w.Flush(); - } - - [SocketPermissionAttribute(SecurityAction.Assert, - Access="Connect", - Host="All", - Port="All", - Transport="All")] - public bool OpenConnection(string sServerAddress, string sAccess, string sVerify) - { - try - { - this.OpenConnectionCommon(sServerAddress); - - try - { - bool bSecurity = SendSecurityRequest(sAccess, sVerify); - } - catch (Exception ex) - { - //Close the connection - SendString(m_pCommSocket, "#BYE#"); - m_pCommSocket.Close(); - m_bConnected = false; - m_cServerAddress = ""; - throw ex; - } - - m_bConnected = true; - return m_bConnected; - } - catch (BMXNetException bmxEx) - { - throw bmxEx; - } - catch (Exception ex) - { - string s = ex.Message + ex.StackTrace; - throw new BMXNetException(s); - } - } - - private void SendString(TcpClient tcpClient, string cSendString) - { - string sMult = ""; - SendString(tcpClient, cSendString, sMult); - } - - private void SendString(TcpClient tcpClient, string cSendString, string cMult) - { - int nLen = cSendString.Length; - string sLen = nLen.ToString(); - sLen = sLen.PadLeft(5, '0'); - cSendString = sLen + cSendString; - - nLen += 15; - sLen = nLen.ToString(); - sLen = sLen.PadLeft(5, '0'); - - cSendString = "{BMX}" + sLen + cSendString; - cSendString = cSendString + cMult; - - NetworkStream ns = tcpClient.GetStream(); - byte[] sendBytes = Encoding.ASCII.GetBytes(cSendString); - ns.Write(sendBytes,0,sendBytes.Length); - if (this.m_bLogging == true) - { - Log("Sent: " + cSendString, this.m_LogWriter); - } - return; - } - - private string ReceiveString(TcpClient tcpClient) - { - NetworkStream ns = tcpClient.GetStream(); - - int nTimeOut = this.m_nReceiveTimeout; - int nCnt = 0; - int nTimeElapsed = 0; - while (ns.DataAvailable == false) - { - if (nCnt > 9999) - break; - if (nTimeElapsed > nTimeOut) - break; - nCnt++; - nTimeElapsed += 50; - Thread.Sleep(50); - } - - Debug.Assert(ns.DataAvailable == true); - if (ns.DataAvailable == false) - { - this.CloseConnection(); - throw new Exception("BMXNetLib.ReceiveString timeout. Connection Closed."); - //return ""; - } - - byte[] bReadBuffer = new byte[1024]; - string sReadBuffer = ""; - StringBuilder sbAll = new StringBuilder("", 1024); - int numberOfBytesRead = 0; - - // Incoming message may be larger than the buffer size. - - bool bFinished = false; - int nFind = -1; - bool bStarted = false; - int lpBuf = 0; - string sError = ""; - string sAppError = ""; - do - { - - numberOfBytesRead = ns.Read(bReadBuffer, 0, bReadBuffer.Length); - if ((numberOfBytesRead == 1)&&(bStarted == false)) - { - Thread.Sleep(15); - numberOfBytesRead += ns.Read(bReadBuffer,1, bReadBuffer.Length-1); - //Debug.Write("ReceiveString waiting for data...\n"); - } - if (bStarted == false) - { - //Process error info at beginning of returned string - int nErrLen = bReadBuffer[0]; - int nAppLen = bReadBuffer[bReadBuffer[0]+1]; - if ((bReadBuffer[2] == 0)&&(bReadBuffer[3] == 0)) - { //special case: M error trap invoked in SND^XWBTCPC - lpBuf += 2; - } - sError = Encoding.ASCII.GetString(bReadBuffer, lpBuf + 1, nErrLen); - if (sError != "") - { - throw new BMXNetException(sError); - } - sAppError = Encoding.ASCII.GetString(bReadBuffer, lpBuf+1+nErrLen+1, nAppLen); - lpBuf += (nErrLen + nAppLen + 2); - numberOfBytesRead -= (nErrLen + nAppLen + 2); - bStarted = true; - } - - nFind = FindChar(bReadBuffer, (char) 4); - if (nFind > -1) - bFinished = true; - Debug.Assert(numberOfBytesRead > -1); - sReadBuffer = Encoding.ASCII.GetString(bReadBuffer, lpBuf, numberOfBytesRead); - lpBuf = 0; - if (nFind > -1) - { - sbAll.Append(sReadBuffer, 0, numberOfBytesRead -1); - } - else - { - sbAll.Append(sReadBuffer); - } - } - while(bFinished == false); - if (this.m_bLogging == true) - { - Log("Received: " + sbAll.ToString(), this.m_LogWriter); - } - return sbAll.ToString(); - - } - private bool SendSecurityRequest(WindowsIdentity winIdentity) - { - string strReceive = ""; - string cMSG; - string sTest; - - //Build AV Call - cMSG = ADEBLDMsg(m_cHDR, "BMX AV CODE", winIdentity.Name); - SendString(m_pCommSocket, cMSG); - - strReceive = ReceiveString(m_pCommSocket); - sTest = strReceive.Substring(0,3); - - - char[] cDelim = {(char) 13,(char) 10,(char) 0}; - string sDelim = new string(cDelim); - int nPiece = 1; - m_cDUZ = Piece(strReceive, sDelim , nPiece); - if ((m_cDUZ == "0")||(m_cDUZ == "")) - { - nPiece = 7; - string sReason = Piece(strReceive, sDelim, nPiece); - throw new Exception(sReason); - } - - return true; - } - - private bool SendSecurityRequest(string sAccess, string sVerify) - { - string strReceive = ""; - string cMSG; - sAccess = sAccess.ToUpper(); - sVerify = sVerify.ToUpper(); - - //Build AV Call - string strAV = sAccess + ";" + sVerify; - strAV = ADEEncryp(strAV); - cMSG = ADEBLDMsg(m_cHDR, "XUS AV CODE", strAV); - SendString(m_pCommSocket, cMSG); - - strReceive = ReceiveString(m_pCommSocket); - - char[] cDelim = {(char) 13,(char) 10,(char) 0}; - string sDelim = new string(cDelim); - int nPiece = 1; - m_cDUZ = Piece(strReceive, sDelim , nPiece); - if ((m_cDUZ == "0")||(m_cDUZ == "")) - { - nPiece = 7; - string sReason = Piece(strReceive, sDelim, nPiece); - throw new Exception(sReason); - } - - return true; - } - - public void CloseConnection() - { - if (!m_bConnected) - { - return; - } - SendString(m_pCommSocket, "#BYE#"); - m_pCommSocket.Close(); - m_bConnected = false; - m_cServerAddress = ""; - // m_cDUZ2 = ""; - m_cDUZ = ""; - } - - public bool Lock(string Variable) - { - return Lock(Variable, "", ""); - } - - public bool Lock(string Variable, string Increment) - { - return Lock(Variable, Increment, ""); - } - - /// - /// Lock a local or global M variable - /// Returns true if lock is obtained during TimeOut seconds - /// Use + to increment, - to decrement lock. - /// - /// - /// - /// - /// - public bool Lock(string Variable, string Increment, string TimeOut) - { - try - { - string sContext = this.AppContext; - this.AppContext = "BMXRPC"; - Variable = Variable.Replace("^","~"); - string sRet = "0"; - bool bRet = false; - string sParam = Variable + "^" + Increment + "^" + TimeOut; - sRet = TransmitRPC("BMX LOCK", sParam); - bRet = (sRet == "1")?true:false; - this.AppContext = sContext; - return bRet; - } - catch (Exception ex) - { - string sMsg = ex.Message; - return false; - } - } - - static ReaderWriterLock m_rwl = new ReaderWriterLock(); - private int m_nRWLTimeout = 30000; //30-second default timeout - - /// - /// Returns a reference to the internal ReaderWriterLock member. - /// - public ReaderWriterLock BMXRWL - { - get - { - return m_rwl; - } - } - - /// - /// Sets and returns the timeout in milliseconds for locking the transmit port. - /// If the transmit port is unavailable an ApplicationException will be thrown. - /// - public int RWLTimeout - { - get - { - return m_nRWLTimeout; - } - set - { - m_nRWLTimeout = value; - } - } - - public string TransmitRPC(string sRPC, string sParam, int nLockTimeOut) - { - try - { - try - { - if (m_bConnected == false) - { - throw new BMXNetException("BMXNetLib.TransmitRPC failed because BMXNetLib is not connected to RPMS."); - } - Debug.Assert(m_cDUZ != ""); - Debug.Assert(m_pCommSocket != null); - - string sOldAppContext = ""; - if (sRPC.StartsWith("BMX")&&(this.m_cAppContext != "BMXRPC")) - { - sOldAppContext = this.m_cAppContext; - this.AppContext = "BMXRPC"; - } - string sMult = ""; - string sSend = ADEBLDMsg(m_cHDR, sRPC, sParam, ref sMult); - SendString(m_pCommSocket, sSend, sMult); - // Debug.Write("TransmitRPC Sent: " + sSend + "\n"); - string strResult = ReceiveString(m_pCommSocket); - // Debug.Write("TransmitRPC Received: " + strResult + "\n"); - - if (sOldAppContext != "") - { - this.AppContext = sOldAppContext; - } - return strResult; - } - catch (Exception ex) - { - if (ex.Message == "Unable to write data to the transport connection.") - { - m_bConnected = false; - } - throw ex; - } - finally - { - } - } - catch (ApplicationException aex) - { - // The writer lock request timed out. - Debug.Write("TransmitRPC writer lock request timed out.\n"); - throw aex; - } - catch (Exception OuterEx) - { - throw OuterEx; - } - } - - public string TransmitRPC(string sRPC, string sParam) - { - try - { - return TransmitRPC(sRPC, sParam, m_nRWLTimeout); - } - catch (ApplicationException aex) - { - throw aex; - } - catch (Exception ex) - { - throw ex; - } - } - - public string GetLoginFacility() - { - try - { - if (m_bConnected == false) - { - throw new BMXNetException("BMXNetLib is not connected to RPMS"); - } - - if (m_cLoginFacility != "") - { - return m_cLoginFacility; - } - - Debug.Assert(m_pCommSocket != null); - Debug.Assert(m_cDUZ != ""); - SendString(m_pCommSocket, ADEBLDMsg(m_cHDR, "BMXGetFac", m_cDUZ)); - string sFac = ReceiveString(m_pCommSocket); - m_cLoginFacility = sFac; - return sFac; - } - catch (BMXNetException bmxEx) - { - string sMessage = bmxEx.Message + bmxEx.StackTrace; - throw new BMXNetException(sMessage); - } - catch (Exception ex) - { - throw ex; - } - } - - #endregion RPX Functions - - #region RPX Properties - - /// - /// Set and retrieve the timeout, in milliseconds, to receive a response from the RPMS server. - /// If the retrieve time exceeds the timeout, an exception will be thrown and the connection will be closed. - /// The default is 30 seconds. - /// - public int ReceiveTimeout - { - get { return m_nReceiveTimeout; } - set { m_nReceiveTimeout = value; } - } - - public string WKID - { - get - { - return m_sWKID; - } - set - { - m_sWKID = value; - } - } - - public string PRCH - { - get - { - return m_sPRCH; - } - set - { - m_sPRCH = value; - } - } - - public string WINH - { - get - { - return m_sWINH; - } - set - { - m_sWINH = value; - } - } - - public string WISH - { - get - { - return m_sWISH; - } - set - { - m_sWISH = value; - } - } - - /// - /// Gets/sets the Kernel Application context - /// Throws an exception if unable to set the context. - /// - public string AppContext - { - get - { - return m_cAppContext; - } - set - { - //Send the changed context to RPMS - if ((m_bConnected == true) && (value != "")) - { - try - { - string sRPC = ADEEncryp(value); - string sAuthentication = TransmitRPC("XWB CREATE CONTEXT", sRPC); - - if (BMXNetLib.FindSubString(sAuthentication, "does not have access to option") > -1) - { - throw new BMXNetException(sAuthentication); - } - - } - catch (Exception ex) - { - Debug.Write(ex.Message); - throw ex; - } - } - m_cAppContext = value; - } - } - - public bool Connected - { - get - { - return m_bConnected; - } - } - - public string DUZ - { - get - { - return m_cDUZ; - } - } - - public string MServerAddress - { - get - { - return m_cServerAddress; - } - } - - public string MServerNamespace - { - get - { - return m_sNameSpace; - } - set - { - m_sNameSpace = value; - } - } - - public int MServerPort - { - get - { - return m_nMServerPort; - } - set - { - m_nMServerPort = value; - } - } - - public string NameSpace - { - get - { - return m_sNameSpace; - } - set - { - m_sNameSpace = value; - } - } - - #endregion RPX Properties - - } -}