public byte[] EncodeMythicRSAPacket(byte[] inMessage) { if (inMessage.Length == 0) { return(null); } int curInPtr = 2; //Input starts at byte 3 int curOutPtr = 2; //Output starts at byte 3 too RSAWriter writer = new RSAWriter(); writer.WriteByte(0); writer.WriteByte(0); //add length at end int blockLen = BLOCKLEN; byte[] paddedBlock = new byte[200]; //normaly it s 189 byte.... int cryptedBlockLen; while (curInPtr < inMessage.Length) { blockLen = BLOCKLEN; if (curInPtr + blockLen > inMessage.Length) { blockLen = inMessage.Length - curInPtr; } //Pad a block of data MemoryStream stream = new MemoryStream(); stream.Write(inMessage, curInPtr, blockLen); paddedBlock = RSAPad(stream.GetBuffer()); curInPtr += blockLen; cryptedBlockLen = paddedBlock.Length - curOutPtr - 2; byte[] packet = RSAExptmod(paddedBlock, eRSAKeyFormat.PK_PUBLIC); writer.WriteShort((ushort)cryptedBlockLen); writer.Write(packet, 0, cryptedBlockLen); curOutPtr += cryptedBlockLen + 2; } writer.Seek(0, SeekOrigin.Begin); writer.WriteShort((ushort)curOutPtr); return(writer.GetBuffer()); }
public byte[] DecodeMythicRSAPacket(byte[] inMessage) { if (inMessage == null) { return(null); } int curInPtr = 2; byte[] decryptedBlock = new byte[500]; byte[] depaddedBlock = new byte[500]; RSAWriter writer = new RSAWriter(); writer.WriteByte(0); writer.WriteByte(0); //add length at end while (curInPtr < inMessage.Length) { if (curInPtr + 2 > inMessage.Length) { return(null); } int curBlockLen = (inMessage[curInPtr] << 8) + inMessage[curInPtr + 1]; curInPtr += 2; if (curBlockLen > 0) { MemoryStream stream = new MemoryStream(); stream.Write(inMessage, curInPtr, curBlockLen); decryptedBlock = RSAExptmod(stream.GetBuffer(), eRSAKeyFormat.PK_PRIVATE); depaddedBlock = RSADepad(decryptedBlock); writer.Write(depaddedBlock, 0, depaddedBlock.Length); } curInPtr += curBlockLen; } writer.Seek(0, SeekOrigin.Begin); writer.WriteShort((ushort)writer.Length); return(writer.GetBuffer()); }
public byte[] DecodeMythicRSAPacket(byte[]inMessage) { if(inMessage==null) return null; int curInPtr = 2; byte[]decryptedBlock = new byte[500]; byte[]depaddedBlock = new byte[500]; RSAWriter writer = new RSAWriter(); writer.WriteByte(0); writer.WriteByte(0);//add length at end while(curInPtr < inMessage.Length) { if(curInPtr+2 > inMessage.Length) return null; int curBlockLen = (inMessage[curInPtr]<<8)+inMessage[curInPtr+1]; curInPtr+=2; if(curBlockLen>0) { MemoryStream stream = new MemoryStream(); stream.Write(inMessage,curInPtr,curBlockLen); decryptedBlock = RSAExptmod( stream.GetBuffer(),eRSAKeyFormat.PK_PRIVATE); depaddedBlock = RSADepad(decryptedBlock); writer.Write(depaddedBlock,0,depaddedBlock.Length); } curInPtr+=curBlockLen; } writer.Seek(0, SeekOrigin.Begin); writer.WriteShort((ushort)writer.Length); return writer.GetBuffer(); }
public byte[] EncodeMythicRSAPacket(byte[] inMessage) { if(inMessage.Length==0) return null; int curInPtr = 2; //Input starts at byte 3 int curOutPtr = 2; //Output starts at byte 3 too RSAWriter writer = new RSAWriter(); writer.WriteByte(0); writer.WriteByte(0);//add length at end int blockLen = BLOCKLEN; byte[] paddedBlock = new byte[200];//normaly it s 189 byte.... int cryptedBlockLen; while(curInPtr < inMessage.Length) { blockLen = BLOCKLEN; if(curInPtr+blockLen > inMessage.Length) blockLen = inMessage.Length - curInPtr; //Pad a block of data MemoryStream stream = new MemoryStream(); stream.Write(inMessage,curInPtr,blockLen); paddedBlock =RSAPad(stream.GetBuffer()); curInPtr += blockLen; cryptedBlockLen = paddedBlock.Length - curOutPtr - 2; byte[] packet = RSAExptmod( paddedBlock,eRSAKeyFormat.PK_PUBLIC); writer.WriteShort((ushort)cryptedBlockLen); writer.Write( packet,0,cryptedBlockLen); curOutPtr += cryptedBlockLen + 2; } writer.Seek(0, SeekOrigin.Begin); writer.WriteShort((ushort)curOutPtr); return writer.GetBuffer(); }