Beispiel #1
0
        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());
        }
Beispiel #2
0
        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();
        }