Example #1
0
        public DocumentHeaders(AesKey keyEncryptingKey)
        {
            _keyEncryptingKey = keyEncryptingKey;

            _headerBlocks = new List <HeaderBlock>();
            _headerBlocks.Add(new PreambleHeaderBlock());
            _headerBlocks.Add(new VersionHeaderBlock());
            _headerBlocks.Add(new KeyWrap1HeaderBlock(keyEncryptingKey));
            _headerBlocks.Add(new EncryptionInfoHeaderBlock());
            _headerBlocks.Add(new CompressionHeaderBlock());
            _headerBlocks.Add(new FileInfoHeaderBlock());
            _headerBlocks.Add(new UnicodeFileNameInfoHeaderBlock());
            _headerBlocks.Add(new FileNameInfoHeaderBlock());
            _headerBlocks.Add(new DataHeaderBlock());

            SetMasterKeyForEncryptedHeaderBlocks(_headerBlocks);

            EncryptionInfoHeaderBlock encryptionInfoHeaderBlock = FindHeaderBlock <EncryptionInfoHeaderBlock>();

            encryptionInfoHeaderBlock.IV = new AesIV();
            encryptionInfoHeaderBlock.PlaintextLength = 0;
        }
 public override object Clone()
 {
     EncryptionInfoHeaderBlock block = new EncryptionInfoHeaderBlock((byte[])GetDataBlockBytesReference().Clone());
     return block;
 }
Example #3
0
        private void ParseHeaderBlock(HeaderBlockType headerBlockType, byte[] dataBlock)
        {
            bool isFirst = CurrentItemType == AxCryptItemType.MagicGuid;

            CurrentItemType = AxCryptItemType.HeaderBlock;

            if (headerBlockType == HeaderBlockType.Preamble)
            {
                if (!isFirst)
                {
                    throw new FileFormatException("Preamble can only be first.", ErrorStatus.FileFormatError);
                }
                CurrentHeaderBlock    = new PreambleHeaderBlock(dataBlock);
                _sendDataToHmacStream = true;
                return;
            }
            else
            {
                if (isFirst)
                {
                    throw new FileFormatException("Preamble must be first.", ErrorStatus.FileFormatError);
                }
            }

            switch (headerBlockType)
            {
            case HeaderBlockType.Version:
                CurrentHeaderBlock = new VersionHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.KeyWrap1:
                CurrentHeaderBlock = new KeyWrap1HeaderBlock(dataBlock);
                break;

            case HeaderBlockType.KeyWrap2:
                CurrentHeaderBlock = new KeyWrap2HeaderBlock(dataBlock);
                break;

            case HeaderBlockType.IdTag:
                CurrentHeaderBlock = new IdTagHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.Data:
                CurrentHeaderBlock = new DataHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.FileNameInfo:
                CurrentHeaderBlock = new FileNameInfoHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.EncryptionInfo:
                CurrentHeaderBlock = new EncryptionInfoHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.CompressionInfo:
                CurrentHeaderBlock = new CompressionInfoHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.FileInfo:
                CurrentHeaderBlock = new FileInfoHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.Compression:
                CurrentHeaderBlock = new CompressionHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.UnicodeFileNameInfo:
                CurrentHeaderBlock = new UnicodeFileNameInfoHeaderBlock(dataBlock);
                break;

            case HeaderBlockType.Encrypted:
            case HeaderBlockType.None:
            case HeaderBlockType.Any:
                throw new FileFormatException("Illegal header block type.", ErrorStatus.FileFormatError);

            default:
                CurrentHeaderBlock = new UnrecognizedHeaderBlock(headerBlockType, dataBlock);
                break;
            }

            if (_sendDataToHmacStream)
            {
                CurrentHeaderBlock.Write(_hmacBufferStream);
            }

            return;
        }
Example #4
0
        private void ParseHeaderBlock(HeaderBlockType headerBlockType, byte[] dataBlock)
        {
            bool isFirst = CurrentItemType == AxCryptItemType.MagicGuid;
            CurrentItemType = AxCryptItemType.HeaderBlock;

            if (headerBlockType == HeaderBlockType.Preamble)
            {
                if (!isFirst)
                {
                    throw new FileFormatException("Preamble can only be first.", ErrorStatus.FileFormatError);
                }
                CurrentHeaderBlock = new PreambleHeaderBlock(dataBlock);
                _sendDataToHmacStream = true;
                return;
            }
            else
            {
                if (isFirst)
                {
                    throw new FileFormatException("Preamble must be first.", ErrorStatus.FileFormatError);
                }
            }

            switch (headerBlockType)
            {
                case HeaderBlockType.Version:
                    CurrentHeaderBlock = new VersionHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.KeyWrap1:
                    CurrentHeaderBlock = new KeyWrap1HeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.KeyWrap2:
                    CurrentHeaderBlock = new KeyWrap2HeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.IdTag:
                    CurrentHeaderBlock = new IdTagHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.Data:
                    CurrentHeaderBlock = new DataHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.FileNameInfo:
                    CurrentHeaderBlock = new FileNameInfoHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.EncryptionInfo:
                    CurrentHeaderBlock = new EncryptionInfoHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.CompressionInfo:
                    CurrentHeaderBlock = new CompressionInfoHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.FileInfo:
                    CurrentHeaderBlock = new FileInfoHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.Compression:
                    CurrentHeaderBlock = new CompressionHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.UnicodeFileNameInfo:
                    CurrentHeaderBlock = new UnicodeFileNameInfoHeaderBlock(dataBlock);
                    break;

                case HeaderBlockType.Encrypted:
                case HeaderBlockType.None:
                case HeaderBlockType.Any:
                    throw new FileFormatException("Illegal header block type.", ErrorStatus.FileFormatError);
                default:
                    CurrentHeaderBlock = new UnrecognizedHeaderBlock(headerBlockType, dataBlock);
                    break;
            }

            if (_sendDataToHmacStream)
            {
                CurrentHeaderBlock.Write(_hmacBufferStream);
            }

            return;
        }
Example #5
0
        public override object Clone()
        {
            EncryptionInfoHeaderBlock block = new EncryptionInfoHeaderBlock((byte[])GetDataBlockBytesReference().Clone());

            return(block);
        }