Ejemplo n.º 1
0
        private static List <byte[]> FindKeys(List <HashSet <byte> > keySet, int keyLength)
        {
            var keys      = new List <byte[]>();
            var keysStack = new Stack <ByteContainer>();

            keysStack.Push(new ByteContainer {
                Bytes = new byte[keyLength], Length = 0
            });

            while (keysStack.Count != 0)
            {
                ByteContainer data = keysStack.Pop();
                if (data.Length == keyLength)
                {
                    keys.Add(data.Bytes);
                }
                else
                {
                    foreach (byte possibleShift in keySet[data.Length])
                    {
                        byte[] key = new byte[keyLength];
                        Array.Copy(data.Bytes, key, keyLength);
                        key[data.Length] = possibleShift;
                        keysStack.Push(new ByteContainer {
                            Bytes = key, Length = data.Length + 1
                        });
                    }
                }
            }

            return(keys);
        }
Ejemplo n.º 2
0
        public static string ToLegibleString(ByteContainer b)
        {
            byte[]        temp    = b.ConvertToArray();
            StringBuilder legible = new StringBuilder();

            for (int i = 0; i < temp.Length; i++)
            {
                legible.AppendFormat("{0:x2}", temp[i]);
            }
            return(legible.ToString());
        }
Ejemplo n.º 3
0
        public static string ToLegibleString(ByteContainer b, int off, int len)
        {
            byte[] temp = b.ConvertToArray();
            system.Assert(len + off <= temp.Length);
            StringBuilder legible = new StringBuilder();

            for (int i = off; i < off + len; i++)
            {
                legible.AppendFormat("{0:x2}", temp[i]);
            }
            return(legible.ToString());
        }
Ejemplo n.º 4
0
        public int Read(ByteContainer buffer, int offset, int count)
        {
            Tracing.Log(Tracing.Debug, "Entered");

            long currentLength = (long)_info.size;

            // just touch the file
            if (count == 0 || _pos >= currentLength)
            {
                return(0);
            }

            long bytesLeft;

            if (currentLength - _pos > (long)count)
            {
                bytesLeft = (long)count;
            }
            else
            {
                bytesLeft = currentLength - _pos;
            }

            ////
            //Console.WriteLine("ReadArgs: count = " + args.count +
            //                " offset = " + args.offset +
            //                " bytes to be read " + bytesLeft);
            //

            if (buffer == null)
            {
                //Console.WriteLine("ReadNFS: user buffer was null!");
                throw new ArgumentNullException("Buffer given to Read was null");
            }
            else if ((long)buffer.Length < bytesLeft)
            {
                throw new ArgumentException("Not enough room in buffer");
            }

            long uBufOff    = (long)offset; // offset into user's buffer;
            long curFileOff = _pos;
            long blockno    = -1;

            while (bytesLeft > 0)
            {
                long curBlk     = _info.BlockFromByte(curFileOff);
                long curBlkSize = Iso9660FileInfo.BlockSize(curBlk);
                long curBlkOff  = curFileOff % curBlkSize;

                ////
                //Console.WriteLine("ReadArgs: curBlockNum " + curBlk +
                //                " curBlkSize = " + curBlkSize +
                //                " cur offset into blk " + curBlkOff);
                //
                if (blockno < curBlk)
                {
                    blockno = curBlk;

                    //
                    //  1. fetch data from media's block
                    //

                    Iso9660.Stdio.RawDevice.ReadBlock(_info.buf, (ulong)blockno);
                }
                long dist;
                if (curBlkSize - curBlkOff > bytesLeft)
                {
                    dist = bytesLeft;
                }
                else
                {
                    dist = curBlkSize - curBlkOff;
                }

                //
                //  2. store data into user's buffer
                //

                buffer.CopyTo(_info.buf, (int)curBlkOff, (int)uBufOff, (int)dist);

                uBufOff    += dist;
                curFileOff += dist;
                bytesLeft  -= dist;
            }

            _pos += uBufOff;
            return((int)uBufOff);

            Tracing.Log(Tracing.Debug, "Exit");
        }