private SymmetricKey GetMasterKey()
        {
            V1KeyWrap1HeaderBlock keyHeaderBlock     = _headers.FindHeaderBlock <V1KeyWrap1HeaderBlock>();
            VersionHeaderBlock    versionHeaderBlock = _headers.FindHeaderBlock <VersionHeaderBlock>();

            byte[] unwrappedKeyData = keyHeaderBlock.UnwrapMasterKey(_keyEncryptingKey.DerivedKey, versionHeaderBlock.FileVersionMajor);
            if (unwrappedKeyData.Length == 0)
            {
                return(null);
            }
            return(new SymmetricKey(unwrappedKeyData));
        }
Exemple #2
0
        public void EnsureFileFormatVersion(int lowestMajorVersion, int highestMajorVersion)
        {
            VersionHeaderBlock versionHeaderBlock = FindHeaderBlock <VersionHeaderBlock>();

            if (versionHeaderBlock.FileVersionMajor > highestMajorVersion)
            {
                throw new FileFormatException("Too new file format.", ErrorStatus.TooNewFileFormatVersion);
            }
            if (versionHeaderBlock.FileVersionMajor < lowestMajorVersion)
            {
                throw new FileFormatException("Too old file format.", ErrorStatus.TooOldFileFormatVersion);
            }
        }
Exemple #3
0
        private static AxCryptReader CreateVersionedReader(LookAheadStream inputStream, IList <HeaderBlock> headers)
        {
            AxCryptReader      reader;
            VersionHeaderBlock versionHeaderBlock = FindHeaderBlock <VersionHeaderBlock>(headers);

            switch (versionHeaderBlock.FileVersionMajor)
            {
            case 1:
            case 2:
            case 3:
                reader = new V1AxCryptReader(inputStream);
                break;

            case 4:
                reader = new V2AxCryptReader(inputStream);
                break;

            default:
                throw new FileFormatException("Too new file format. You need a more recent version.");
            }
            return(reader);
        }
        public override object Clone()
        {
            VersionHeaderBlock block = new VersionHeaderBlock((byte[])GetDataBlockBytesReference().Clone());

            return(block);
        }