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)); }
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); } }
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); }