public IEnumerator <IFileInfo> GetEnumerator()
        {
            Dictionary <string, IFileInfo> keyNameFiles = new Dictionary <string, IFileInfo>();
            List <IFileInfo> encryptedFiles             = new List <IFileInfo>();

            foreach (IFileInfo fileInfo in _innerDirectoryContents)
            {
                if (fileInfo.IsDirectory)
                {
                    yield return(fileInfo);
                }
                else
                {
                    string extension = Path.GetExtension(fileInfo.Name);
                    switch (extension)
                    {
                    case ".encrypted":
                        encryptedFiles.Add(fileInfo);
                        break;

                    case ".keyName":
                        keyNameFiles[fileInfo.Name] = fileInfo;
                        break;
                    }
                }
            }

            foreach (IFileInfo fileInfo in encryptedFiles)
            {
                IFileInfo keyNameFile = keyNameFiles.GetValueOrDefault(
                    Path.ChangeExtension(fileInfo.Name, ".keyName"));
                if (keyNameFile != null)
                {
                    yield return(EncryptedFileInfo.FromFileInfo(_kms, fileInfo,
                                                                keyNameFile));
                }
            }
        }
 public IFileInfo GetFileInfo(string subPath)
 {
     return(EncryptedFileInfo.FromFileInfo(_kms,
                                           _innerProvider.GetFileInfo(subPath),
                                           _innerProvider.GetFileInfo(Path.ChangeExtension(subPath, ".keyName"))));
 }