ReadByte() public method

public ReadByte ( ) : byte
return byte
Example #1
0
        private bool ReadHeaderField(BinaryReaderEx brSource)
        {
            Debug.Assert(brSource != null);
            if (brSource == null)
            {
                throw new ArgumentNullException("brSource");
            }

            byte btFieldID = brSource.ReadByte();

            int cbSize;

            Debug.Assert(m_uFileVersion > 0);
            if (m_uFileVersion < FileVersion32_4)
            {
                cbSize = (int)MemUtil.BytesToUInt16(brSource.ReadBytes(2));
            }
            else
            {
                cbSize = MemUtil.BytesToInt32(brSource.ReadBytes(4));
            }
            if (cbSize < 0)
            {
                throw new FormatException(KLRes.FileCorrupted);
            }

            byte[] pbData = MemUtil.EmptyByteArray;
            if (cbSize > 0)
            {
                pbData = brSource.ReadBytes(cbSize);
            }

            bool bResult            = true;
            KdbxHeaderFieldID kdbID = (KdbxHeaderFieldID)btFieldID;

            switch (kdbID)
            {
            case KdbxHeaderFieldID.EndOfHeader:
                bResult = false;                         // Returning false indicates end of header
                break;

            case KdbxHeaderFieldID.CipherID:
                SetCipher(pbData);
                break;

            case KdbxHeaderFieldID.CompressionFlags:
                SetCompressionFlags(pbData);
                break;

            case KdbxHeaderFieldID.MasterSeed:
                m_pbMasterSeed = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            // Obsolete; for backward compatibility only
            case KdbxHeaderFieldID.TransformSeed:
                Debug.Assert(m_uFileVersion < FileVersion32_4);

                AesKdf kdfS = new AesKdf();
                if (!m_pwDatabase.KdfParameters.KdfUuid.Equals(kdfS.Uuid))
                {
                    m_pwDatabase.KdfParameters = kdfS.GetDefaultParameters();
                }

                // m_pbTransformSeed = pbData;
                m_pwDatabase.KdfParameters.SetByteArray(AesKdf.ParamSeed, pbData);

                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            // Obsolete; for backward compatibility only
            case KdbxHeaderFieldID.TransformRounds:
                Debug.Assert(m_uFileVersion < FileVersion32_4);

                AesKdf kdfR = new AesKdf();
                if (!m_pwDatabase.KdfParameters.KdfUuid.Equals(kdfR.Uuid))
                {
                    m_pwDatabase.KdfParameters = kdfR.GetDefaultParameters();
                }

                // m_pwDatabase.KeyEncryptionRounds = MemUtil.BytesToUInt64(pbData);
                m_pwDatabase.KdfParameters.SetUInt64(AesKdf.ParamRounds,
                                                     MemUtil.BytesToUInt64(pbData));
                break;

            case KdbxHeaderFieldID.EncryptionIV:
                m_pbEncryptionIV = pbData;
                break;

            case KdbxHeaderFieldID.InnerRandomStreamKey:
                Debug.Assert(m_uFileVersion < FileVersion32_4);
                Debug.Assert(m_pbInnerRandomStreamKey == null);
                m_pbInnerRandomStreamKey = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            case KdbxHeaderFieldID.StreamStartBytes:
                Debug.Assert(m_uFileVersion < FileVersion32_4);
                m_pbStreamStartBytes = pbData;
                break;

            case KdbxHeaderFieldID.InnerRandomStreamID:
                Debug.Assert(m_uFileVersion < FileVersion32_4);
                SetInnerRandomStreamID(pbData);
                break;

            case KdbxHeaderFieldID.KdfParameters:
                m_pwDatabase.KdfParameters = KdfParameters.DeserializeExt(pbData);
                break;

            case KdbxHeaderFieldID.PublicCustomData:
                Debug.Assert(m_pwDatabase.PublicCustomData.Count == 0);
                m_pwDatabase.PublicCustomData = VariantDictionary.Deserialize(pbData);
                break;

            default:
                Debug.Assert(false);
                if (m_slLogger != null)
                {
                    m_slLogger.SetText(KLRes.UnknownHeaderId + ": " +
                                       kdbID.ToString() + "!", LogStatusType.Warning);
                }
                break;
            }

            return(bResult);
        }
Example #2
0
        private bool ReadInnerHeaderField(BinaryReaderEx br)
        {
            Debug.Assert(br != null);
            if (br == null)
            {
                throw new ArgumentNullException("br");
            }

            byte btFieldID = br.ReadByte();

            int cbSize = MemUtil.BytesToInt32(br.ReadBytes(4));

            if (cbSize < 0)
            {
                throw new FormatException(KLRes.FileCorrupted);
            }

            byte[] pbData = MemUtil.EmptyByteArray;
            if (cbSize > 0)
            {
                pbData = br.ReadBytes(cbSize);
            }

            bool bResult = true;
            KdbxInnerHeaderFieldID kdbID = (KdbxInnerHeaderFieldID)btFieldID;

            switch (kdbID)
            {
            case KdbxInnerHeaderFieldID.EndOfHeader:
                bResult = false;                         // Returning false indicates end of header
                break;

            case KdbxInnerHeaderFieldID.InnerRandomStreamID:
                SetInnerRandomStreamID(pbData);
                break;

            case KdbxInnerHeaderFieldID.InnerRandomStreamKey:
                Debug.Assert(m_pbInnerRandomStreamKey == null);
                m_pbInnerRandomStreamKey = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            case KdbxInnerHeaderFieldID.Binary:
                if (pbData.Length < 1)
                {
                    throw new FormatException();
                }
                KdbxBinaryFlags f     = (KdbxBinaryFlags)pbData[0];
                bool            bProt = ((f & KdbxBinaryFlags.Protected) != KdbxBinaryFlags.None);

                ProtectedBinary pb = new ProtectedBinary(bProt, pbData,
                                                         1, pbData.Length - 1);
                Debug.Assert(m_pbsBinaries.Find(pb) < 0);                         // No deduplication?
                m_pbsBinaries.Add(pb);

                if (bProt)
                {
                    MemUtil.ZeroByteArray(pbData);
                }
                break;

            default:
                Debug.Assert(false);
                break;
            }

            return(bResult);
        }
Example #3
0
        private bool ReadHeaderField(BinaryReaderEx brSource)
        {
            Debug.Assert(brSource != null);
            if (brSource == null)
            {
                throw new ArgumentNullException("brSource");
            }

            byte   btFieldID = brSource.ReadByte();
            ushort uSize     = MemUtil.BytesToUInt16(brSource.ReadBytes(2));

            byte[] pbData = null;
            if (uSize > 0)
            {
                string strPrevExcpText = brSource.ReadExceptionText;
                brSource.ReadExceptionText = KLRes.FileHeaderEndEarly;

                pbData = brSource.ReadBytes(uSize);

                brSource.ReadExceptionText = strPrevExcpText;
            }

            bool bResult            = true;
            Kdb4HeaderFieldID kdbID = (Kdb4HeaderFieldID)btFieldID;

            switch (kdbID)
            {
            case Kdb4HeaderFieldID.EndOfHeader:
                bResult = false;                         // Returning false indicates end of header
                break;

            case Kdb4HeaderFieldID.CipherID:
                SetCipher(pbData);
                break;

            case Kdb4HeaderFieldID.CompressionFlags:
                SetCompressionFlags(pbData);
                break;

            case Kdb4HeaderFieldID.MasterSeed:
                m_pbMasterSeed = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            case Kdb4HeaderFieldID.TransformSeed:
                m_pbTransformSeed = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            case Kdb4HeaderFieldID.TransformRounds:
                m_pwDatabase.KeyEncryptionRounds = MemUtil.BytesToUInt64(pbData);
                break;

            case Kdb4HeaderFieldID.EncryptionIV:
                m_pbEncryptionIV = pbData;
                break;

            case Kdb4HeaderFieldID.ProtectedStreamKey:
                m_pbProtectedStreamKey = pbData;
                CryptoRandom.Instance.AddEntropy(pbData);
                break;

            case Kdb4HeaderFieldID.StreamStartBytes:
                m_pbStreamStartBytes = pbData;
                break;

            case Kdb4HeaderFieldID.InnerRandomStreamID:
                SetInnerRandomStreamID(pbData);
                break;

            default:
                Debug.Assert(false);
                if (m_slLogger != null)
                {
                    m_slLogger.SetText(KLRes.UnknownHeaderId + @": " +
                                       kdbID.ToString() + "!", LogStatusType.Warning);
                }
                break;
            }

            return(bResult);
        }