public V2DocumentHeaders(EncryptionParameters encryptionParameters, long keyWrapIterations)
        {
            if (encryptionParameters == null)
            {
                throw new ArgumentNullException("encryptionParameters");
            }

            _headers = new Headers();

            _headers.HeaderBlocks.Add(new PreambleHeaderBlock());
            _headers.HeaderBlocks.Add(new VersionHeaderBlock(_version));

            ICryptoFactory       cryptoFactory    = Resolve.CryptoFactory.Create(encryptionParameters.CryptoId);
            IDerivedKey          keyEncryptingKey = cryptoFactory.CreateDerivedKey(encryptionParameters.Passphrase);
            V2KeyWrapHeaderBlock keyWrap          = new V2KeyWrapHeaderBlock(cryptoFactory, keyEncryptingKey, keyWrapIterations);

            _headers.HeaderBlocks.Add(keyWrap);
            _keyStreamFactory = keyWrap;

            foreach (UserPublicKey publicKey in encryptionParameters.PublicKeys)
            {
                _headers.HeaderBlocks.Add(new V2AsymmetricKeyWrapHeaderBlock(publicKey, keyWrap.MasterKey, keyWrap.MasterIV));
            }
            _headers.HeaderBlocks.Add(new V2AsymmetricRecipientsEncryptedHeaderBlock(GetHeaderCrypto(HeaderBlockType.AsymmetricRecipients))
            {
                Recipients = new Recipients(encryptionParameters.PublicKeys)
            });
            _headers.HeaderBlocks.Add(new FileInfoEncryptedHeaderBlock(GetHeaderCrypto(HeaderBlockType.FileInfo)));
            _headers.HeaderBlocks.Add(new V2CompressionEncryptedHeaderBlock(GetHeaderCrypto(HeaderBlockType.Compression)));
            _headers.HeaderBlocks.Add(new V2UnicodeFileNameInfoEncryptedHeaderBlock(GetHeaderCrypto(HeaderBlockType.UnicodeFileNameInfo)));
            _headers.HeaderBlocks.Add(new V2AlgorithmVerifierEncryptedHeaderBlock(GetHeaderCrypto(HeaderBlockType.AlgorithmVerifier)));
            _headers.HeaderBlocks.Add(new DataHeaderBlock());

            SetDataEncryptingCryptoForEncryptedHeaderBlocks(_headers.HeaderBlocks);
        }
 /// <summary>
 /// Check if one instance is equivalent to another.
 /// </summary>
 /// <param name="other">The instance to compare to</param>
 /// <returns>true if the keys are equivalent</returns>
 public bool Equals(IDerivedKey other)
 {
     if (Object.ReferenceEquals(other, null))
     {
         return(false);
     }
     return(DerivedKey == other.DerivedKey);
 }
Exemple #3
0
        public V2KeyWrapHeaderBlock(ICryptoFactory cryptoFactory, IDerivedKey keyEncryptingKey, long keyWrapIterations)
            : this(Resolve.RandomGenerator.Generate(DATABLOCK_LENGTH))
        {
            _cryptoFactory    = cryptoFactory;
            _keyEncryptingKey = keyEncryptingKey;

            Initialize(keyWrapIterations);
        }
        public override bool Equals(object obj)
        {
            IDerivedKey other = obj as IDerivedKey;

            if (other == null)
            {
                return(false);
            }

            return(Equals(other));
        }
        public void RewrapMasterKey(IDerivedKey keyEncryptingKey, long keyWrapIterations)
        {
            if (keyEncryptingKey == null)
            {
                throw new ArgumentNullException("keyEncryptingKey");
            }

            V1KeyWrap1HeaderBlock keyHeaderBlock = _headers.FindHeaderBlock <V1KeyWrap1HeaderBlock>();

            keyHeaderBlock.RewrapMasterKey(GetMasterKey(), keyEncryptingKey.DerivedKey, keyWrapIterations);
            _keyEncryptingKey = keyEncryptingKey;
        }
        public V1DocumentHeaders(V1DocumentHeaders documentHeaders)
        {
            if (documentHeaders == null)
            {
                throw new ArgumentNullException("documentHeaders");
            }

            _keyEncryptingKey = documentHeaders._keyEncryptingKey;
            foreach (HeaderBlock headerBlock in documentHeaders._headers.HeaderBlocks)
            {
                _headers.HeaderBlocks.Add((HeaderBlock)headerBlock.Clone());
            }
        }
Exemple #7
0
        /// <summary>
        /// Loads an AxCrypt file from the specified reader. After this, the reader is positioned to
        /// read encrypted data.
        /// </summary>
        /// <param name="passphrase">The passphrase.</param>
        /// <param name="cryptoId">The crypto identifier.</param>
        /// <param name="reader">The reader.</param>
        /// <param name="headers">The headers.</param>
        /// <returns>
        /// True if the key was valid, false if it was wrong.
        /// </returns>
        private bool Load(Passphrase passphrase, Guid cryptoId, AxCryptReader reader, Headers headers)
        {
            ResetState();
            if (cryptoId == new V1Aes128CryptoFactory().CryptoId)
            {
                return(PassphraseIsValid);
            }

            _reader       = reader;
            CryptoFactory = Resolve.CryptoFactory.Create(cryptoId);
            V2KeyWrapHeaderBlock keyWrap = headers.FindHeaderBlock <V2KeyWrapHeaderBlock>();
            IDerivedKey          key     = CryptoFactory.RestoreDerivedKey(passphrase, keyWrap.DerivationSalt, keyWrap.DerivationIterations);

            keyWrap.SetDerivedKey(CryptoFactory, key);
            DocumentHeaders   = new V2DocumentHeaders(keyWrap);
            PassphraseIsValid = DocumentHeaders.Load(headers);
            Properties        = EncryptedProperties.Create(this);

            return(PassphraseIsValid);
        }
Exemple #8
0
 public void SetDerivedKey(ICryptoFactory cryptoFactory, IDerivedKey keyEncryptingKey)
 {
     _cryptoFactory    = cryptoFactory;
     _keyEncryptingKey = keyEncryptingKey;
     _unwrappedKeyData = null;
 }
 public V1DocumentHeaders(Passphrase passphrase)
 {
     _keyEncryptingKey = Resolve.CryptoFactory.Create(new V1Aes128CryptoFactory().CryptoId).CreateDerivedKey(passphrase);
 }