public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { mStream = input; mLimit = limit; // The 7z AES encoder/decoder classes do not perform padding, instead they require the input stream to provide a multiple of 16 bytes. // If the exception below is thrown this means the 7z file is either corrupt or a newer 7z version has been published and we haven't updated yet. if (((uint)input.Length & 15) != 0) throw new NotSupportedException("7z requires AES streams to be properly padded."); int numCyclesPower; byte[] salt, seed; Init(info, out numCyclesPower, out salt, out seed); byte[] password = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[] key = InitKey(numCyclesPower, salt, password); using (var aes = Aes.Create()) { aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; mDecoder = aes.CreateDecryptor(key, seed); } mBuffer = new byte[4 << 10]; }
/// <summary> /// Public ctor /// </summary> /// <param name="m">The model to operate on</param> /// <param name="passProvider">Pass provider</param> /// <param name="usersPerPage">Number of visible user records per page</param> public MainWindowController(MainWindowModel m, IPasswordProvider passProvider, int usersPerPage) { model = m; passwordProvider = passProvider; cts = new CancellationTokenSource(); MaxVisibleUsers = usersPerPage; }
public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { if (pass.CryptoGetTextPassword() == null) { throw new SharpCompress.Common.CryptographicException("Encrypted 7Zip archive has no password specified."); } mStream = input; mLimit = limit; if (((uint)input.Length & 15) != 0) { throw new NotSupportedException("AES decoder does not support padding."); } Init(info, out int numCyclesPower, out byte[] salt, out byte[] seed); byte[] password = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[]? key = InitKey(numCyclesPower, salt, password); if (key == null) { throw new InvalidOperationException("Initialized with null key"); } using (var aes = Aes.Create()) { aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; mDecoder = aes.CreateDecryptor(key, seed); } mBuffer = new byte[4 << 10]; }
internal static Stream CreateDecoderStream(Stream inStream, long startPos, long[] packSizes, CFolder folderInfo, IPasswordProvider pass) { if (!folderInfo.CheckStructure()) { throw new NotSupportedException("Unsupported stream binding structure."); } // We have multiple views into the same stream which will be used by several threads - need to sync those. object sync = new object(); Stream[] inStreams = new Stream[folderInfo.PackStreams.Count]; for (int j = 0; j < folderInfo.PackStreams.Count; j++) { inStreams[j] = new SyncStreamView(sync, inStream, startPos, packSizes[j]); startPos += packSizes[j]; } Stream[] outStreams = new Stream[folderInfo.UnpackSizes.Count]; int primaryCoderIndex, primaryOutStreamIndex; FindPrimaryOutStreamIndex(folderInfo, out primaryCoderIndex, out primaryOutStreamIndex); return(CreateDecoderStream(inStreams, packSizes, outStreams, folderInfo, primaryCoderIndex, pass)); }
internal static Stream CreateDecoderStream(CMethodId id, Stream[] inStreams, byte[] info, IPasswordProvider pass, long limit) { switch (id.Id) { case 0L: if (info != null) { throw new NotSupportedException(); } return Enumerable.Single<Stream>(inStreams); case 0x21L: case 0x30101L: return new LzmaStream(info, Enumerable.Single<Stream>(inStreams), -1L, limit); case 0x3030103L: return new BCJFilter(false, Enumerable.Single<Stream>(inStreams)); case 0x303011bL: return new Bcj2DecoderStream(inStreams, info, limit); case 0x30401L: return new PpmdStream(new PpmdProperties(info), Enumerable.Single<Stream>(inStreams), false); case 0x40202L: return new BZip2Stream(Enumerable.Single<Stream>(inStreams), CompressionMode.Decompress, true, false); } throw new NotSupportedException(); }
public SingleSignOnSessionRepository(IClientFactory clientFactory, ISettingsLoadService settingsLoadService, IPasswordProvider passwordProvider) { _clientFactory = clientFactory; _settingsLoadService = settingsLoadService; _passwordProvider = passwordProvider; }
public PasswordCracker(IPasswordProvider passwordProvider, Dictionary <string, bool> passwordsToCrack, SyncQueue <HashedPassword> crackedPasswords, Mutex mutex) { _passwordProvider = passwordProvider; _passwordsToCrack = passwordsToCrack; _crackedPasswords = crackedPasswords; _mutex = mutex; }
public void LogInButton(IPasswordProvider passwordProvider, string idInput) { if (UserVerification == "Signatur") { EmployeeModel loggedInEmployee = Employee.GetLoggedInEmployee(idInput, passwordProvider.Password, Services); if (loggedInEmployee != null) { manager.ShowWindow(new LoggedInEmployeeViewModel(Services, loggedInEmployee), null, null); TryClose(); } else { MessageBox.Show("Signatur eller lösenord stämmer inte"); } } else if (UserVerification == "Email") { AlumnModel loggedInAlumn = Alumn.GetLoggedInAlumn(idInput, passwordProvider.Password, Services); if (loggedInAlumn != null) { manager.ShowWindow(new LoggedInAlumnViewModel(Services, loggedInAlumn), null, null); TryClose(); } else { MessageBox.Show("Email eller lösenord stämmer inte"); } } else { MessageBox.Show("Du har inte valt alumn eller personal"); } }
internal static Stream CreateDecoderStream(CMethodId id, Stream[] inStreams, byte[] info, IPasswordProvider pass, long limit) { switch (id.Id) { case k_Copy: if (info != null) throw new NotSupportedException(); return inStreams.Single(); case k_LZMA: case k_LZMA2: return new LzmaStream(info, inStreams.Single(), -1, limit); #if !NO_CRYPTO case CMethodId.kAESId: return new AesDecoderStream(inStreams.Single(), info, pass, limit); #endif case k_BCJ: return new BCJFilter(false, inStreams.Single()); case k_BCJ2: return new Bcj2DecoderStream(inStreams, info, limit); case k_BZip2: return new BZip2Stream(inStreams.Single(), CompressionMode.Decompress, true); case k_PPMD: return new PpmdStream(new PpmdProperties(info), inStreams.Single(), false); default: throw new NotSupportedException(); } }
public UserModule(IUserStore userStore, IUserValidator userValidator, IPasswordProvider passwordProvider) : base() { _userStore = userStore; _userValidator = userValidator; _passwordProvider = passwordProvider; Get[Actions.User.Default] = (x) => { AddScript(Scripts.UserView); return(Default()); }; Get[Actions.User.List] = (x) => { this.RequiresClaims(new[] { Claims.UserList }); return(List()); }; Post[Actions.User.ChangePassword] = (x) => { return(ChangePassword()); }; Post[Actions.User.Save] = (x) => { this.RequiresClaims(new[] { Claims.UserAdd }); return(Save()); }; }
public AccountUnlocker(IKeyStoreConfig config, IWallet wallet, ILogManager logManager, IPasswordProvider passwordProvider) { _config = config ?? throw new ArgumentNullException(nameof(config)); _wallet = wallet ?? throw new ArgumentNullException(nameof(wallet)); _logger = logManager?.GetClassLogger <AccountUnlocker>() ?? throw new ArgumentNullException(nameof(logManager)); _passwordProvider = passwordProvider ?? throw new ArgumentNullException(nameof(passwordProvider)); }
public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { mStream = input; mLimit = limit; if (((uint)input.Length & 15) != 0) { throw new NotSupportedException("AES decoder does not support padding."); } int numCyclesPower; byte[] salt, seed; Init(info, out numCyclesPower, out salt, out seed); byte[] password = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[] key = InitKey(numCyclesPower, salt, password); using (var aes = Aes.Create()) { aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; mDecoder = aes.CreateDecryptor(key, seed); } mBuffer = new byte[4 << 10]; }
public LoginModule(IUserStore userStore, IPasswordProvider passwordProvider) { _userStore = userStore; _passwordProvider = passwordProvider; Get["/"] = x => { return(this.Response.AsRedirect(Actions.Login.Default)); }; Get[Actions.Login.Default] = x => { AddScript(Scripts.LoginView); return(this.LoginGet()); }; Post[Actions.Login.Default] = x => { return(LoginPost()); }; Get[Actions.Login.Logout] = x => { return(this.Logout(Actions.Login.Default)); }; }
public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { mStream = input; mLimit = limit; // The 7z AES encoder/decoder classes do not perform padding, instead they require the input stream to provide a multiple of 16 bytes. // If the exception below is thrown this means the 7z file is either corrupt or a newer 7z version has been published and we haven't updated yet. if (((uint)input.Length & 15) != 0) { throw new NotSupportedException("7z requires AES streams to be properly padded."); } int numCyclesPower; byte[] salt, seed; Init(info, out numCyclesPower, out salt, out seed); byte[] password = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[] key = InitKey(numCyclesPower, salt, password); using (var aes = Aes.Create()) { aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; mDecoder = aes.CreateDecryptor(key, seed); } mBuffer = new byte[4 << 10]; }
public BasePasswordProvider OrReadFromFile(string fileName) { AlternativeProvider = new FilePasswordProvider() { FileName = fileName }; return(this); }
public void UserStoreTest_SetUp() { _fileWrap = Substitute.For <IFileWrap>(); _dirWrap = Substitute.For <IDirectoryWrap>(); _passwordProvider = Substitute.For <IPasswordProvider>(); _userStore = new UserStore(_path, _fileWrap, _dirWrap, _passwordProvider); }
public void CreateUserCommandTest_SetUp() { _dbContext = Substitute.For <IDbContext>(); _userValidator = Substitute.For <IUserValidator>(); _passwordProvider = Substitute.For <IPasswordProvider>(); _createUserCommand = new CreateUserCommand(_dbContext, _userValidator, _passwordProvider); }
/// <summary> /// Initializes a new instance of the <see cref="WsseRequestInterceptor"/> class. /// </summary> /// <param name="provider">The provider.</param> /// <param name="realm">The realm.</param> /// <param name="timestampRangevalidator">The timestamp rangevalidator.</param> /// <param name="nonceStore">The nonce store.</param> public WsseRequestInterceptor(IPasswordProvider provider, string realm, ITimestampRangeValidator timestampRangevalidator, INonceStore nonceStore) : base(false) { TimestampRangeValidator = timestampRangevalidator; NonceStore = nonceStore; Provider = provider; Realm = realm; }
public void UpdateUserPasswordCommandTest_SetUp() { _dbContext = Substitute.For <IDbContext>(); _userRepo = Substitute.For <IUserRepository>(); _passwordProvider = Substitute.For <IPasswordProvider>(); _updateUserPasswordCommand = new UpdateUserPasswordCommand(_dbContext, _userRepo, _passwordProvider); }
public TokenValidationServiceTests() { _handler = new JwtSecurityTokenHandler(); _tokenGenerator = new TokenGenerator(); _passwordProvider = new PasswordProvider(); _ttl = new TimeSpan(0, 0, TtlSeconds); _clockSkew = new TimeSpan(0, 0, 30); _fixture = new Fixture(); }
public static string Decrypt(IPasswordProvider psw, string path) { var data = VocabularyProviderFactory.CreateProvider(psw.RawPassword); using (var reader = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.Read)) { return(Decrypt(data, reader)); } }
internal CryptoManager( SymmetricAlgorithm symmetricAlgorithm, HashAlgorithm hashAlgorithm, IPasswordProvider passwordProvider) { _symmetricAlgorithm = symmetricAlgorithm; _hashAlgorithm = hashAlgorithm; _passwordProvider = passwordProvider; }
public static void Encrypt(IPasswordProvider psw, string what, string where) { var data = VocabularyProviderFactory.CreateProvider(psw.RawPassword); using (var writer = new FileStream(where, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None)) { Encrypt(data, what, writer); } }
public UserStore(string filePath, IFileWrap fileWrap, IDirectoryWrap dirWrap, IPasswordProvider passwordProvider) { this.FilePath = filePath; _fileWrap = fileWrap; _dirWrap = dirWrap; _passwordProvider = passwordProvider; this.Users = new List <UserModel>(); this.Connections = new List <ConnectionModel>(); }
internal Stream GetFolderStream(Stream stream, CFolder folder, IPasswordProvider pw) { int packStreamIndex = folder.FirstPackStreamId; long folderStartPackPos = GetFolderStreamPos(folder, 0); List<long> packSizes = new List<long>(); for (int j = 0; j < folder.PackStreams.Count; j++) packSizes.Add(PackSizes[packStreamIndex + j]); return DecoderStreamHelper.CreateDecoderStream(stream, folderStartPackPos, packSizes.ToArray(), folder, pw); }
public AuthService(IRoDataProvider dataProvider, IAsyncHelpers asyncHelpers, ITokenProvider tokenProvider, IPasswordProvider passwordProvider) { _dataProvider = dataProvider ?? throw new ArgumentNullException(nameof(dataProvider)); _asyncHelpers = asyncHelpers ?? throw new ArgumentNullException(nameof(asyncHelpers)); _tokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider)); _passwordProvider = passwordProvider ?? throw new ArgumentNullException(nameof(passwordProvider)); }
public BasePasswordProvider OrReadFromConsole(string message) { var consoleUtils = new ConsoleUtils(new ConsoleWrapper()); AlternativeProvider = new ConsolePasswordProvider(consoleUtils) { Message = message }; return(this); }
public void UserModuleTest_SetUp() { _userStore = Substitute.For <IUserStore>(); _userValidator = Substitute.For <IUserValidator>(); _passwordProvider = Substitute.For <IPasswordProvider>(); Mapper.Initialize((cfg) => { cfg.CreateMap <UserViewModel, UserModel>(); }); }
public AuthService(IRepositoryFactory repositoryFactory, IUnitOfWork unitOfWork, IMapper mapper, ITokenProvider tokenProvider, IPasswordProvider passwordProvider, IConfiguration configuration) { _repositoryFactory = repositoryFactory ?? throw new ArgumentNullException(nameof(repositoryFactory)); _unitOfWork = unitOfWork ?? throw new ArgumentNullException(nameof(unitOfWork)); _mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); _tokenProvider = tokenProvider ?? throw new ArgumentNullException(nameof(tokenProvider)); _passwordProvider = passwordProvider ?? throw new ArgumentNullException(nameof(passwordProvider)); _configuration = configuration ?? throw new ArgumentNullException(nameof(configuration)); }
private static Stream CreateDecoderStream(Stream[] packStreams, long[] packSizes, Stream[] outStreams, CFolder folderInfo, int coderIndex, IPasswordProvider pass) { int num2; CCoderInfo info = folderInfo.Coders[coderIndex]; if (info.NumOutStreams != 1) { throw new NotSupportedException("Multiple output streams are not supported."); } int inStreamIndex = 0; for (num2 = 0; num2 < coderIndex; num2++) { inStreamIndex += folderInfo.Coders[num2].NumInStreams; } int num3 = 0; for (num2 = 0; num2 < coderIndex; num2++) { num3 += folderInfo.Coders[num2].NumOutStreams; } Stream[] inStreams = new Stream[info.NumInStreams]; num2 = 0; while (num2 < inStreams.Length) { int num4 = folderInfo.FindBindPairForInStream(inStreamIndex); if (num4 >= 0) { int outIndex = folderInfo.BindPairs[num4].OutIndex; if (outStreams[outIndex] != null) { throw new NotSupportedException("Overlapping stream bindings are not supported."); } int num6 = FindCoderIndexForOutStreamIndex(folderInfo, outIndex); inStreams[num2] = CreateDecoderStream(packStreams, packSizes, outStreams, folderInfo, num6, pass); if (outStreams[outIndex] != null) { throw new NotSupportedException("Overlapping stream bindings are not supported."); } outStreams[outIndex] = inStreams[num2]; } else { int index = folderInfo.FindPackStreamArrayIndex(inStreamIndex); if (index < 0) { throw new NotSupportedException("Could not find input stream binding."); } inStreams[num2] = packStreams[index]; } num2++; inStreamIndex++; } long limit = folderInfo.UnpackSizes[num3]; return DecoderRegistry.CreateDecoderStream(info.MethodId, inStreams, info.Props, pass, limit); }
public void ConstructorShouldFailWhenPasswordProviderIsNull() { // Arrange var userFinder = new Mock <IUserFinder>().Object; IPasswordProvider passwordProvider = null; // Act Action ctor = () => { new LoginQueryHandler(userFinder, passwordProvider); }; // Assert ctor.Should().Throw <ArgumentNullException>(); }
public SessionController(ILogger <SessionController> logger, IUserRepository userRepository, IJwtAuth jwtAuth, IPasswordProvider passwordProvider, IOAuth oauth) { _logger = logger; _userRepository = userRepository; _jwtAuth = jwtAuth; _passwordProvider = passwordProvider; _oauth = oauth; }
public CreateCommandHandler(IUserRepository userRepository, IIdentifierProvider identifierProvider, IVersionProvider versionProvider, IPasswordProvider passwordProvider, IPublishIntegrationEventsService publishIntegrationEventsService) { _userRepository = userRepository ?? throw Error.ArgumentNull(nameof(userRepository)); _identifierProvider = identifierProvider ?? throw Error.ArgumentNull(nameof(identifierProvider)); _versionProvider = versionProvider ?? throw Error.ArgumentNull(nameof(versionProvider)); _passwordProvider = passwordProvider ?? throw Error.ArgumentNull(nameof(passwordProvider)); _publishIntegrationEventsService = publishIntegrationEventsService; }
internal Stream GetFolderStream(Stream stream, CFolder folder, IPasswordProvider pw) { int firstPackStreamId = folder.FirstPackStreamId; long folderStreamPos = this.GetFolderStreamPos(folder, 0); List <long> list = new List <long>(); for (int i = 0; i < folder.PackStreams.Count; i++) { list.Add(this.PackSizes[firstPackStreamId + i]); } return(DecoderStreamHelper.CreateDecoderStream(stream, folderStreamPos, list.ToArray(), folder, pw)); }
public void UserModuleTest_SetUp() { _userStore = Substitute.For <IUserStore>(); _userValidator = Substitute.For <IUserValidator>(); _passwordProvider = Substitute.For <IPasswordProvider>(); var config = new MapperConfiguration(cfg => { cfg.CreateMap <UserViewModel, UserModel>(); }); _mapper = config.CreateMapper(); }
public ComputerController(IAuthorizationService authorizationService, ILogger <ComputerController> logger, IDirectory directory, IAuditEventProcessor reporting, IRateLimiter rateLimiter, IOptionsSnapshot <UserInterfaceOptions> userInterfaceSettings, IAuthenticationProvider authenticationProvider, IPasswordProvider passwordProvider, IJitAccessProvider jitAccessProvider) { this.authorizationService = authorizationService; this.logger = logger; this.directory = directory; this.reporting = reporting; this.rateLimiter = rateLimiter; this.userInterfaceSettings = userInterfaceSettings.Value; this.authenticationProvider = authenticationProvider; this.passwordProvider = passwordProvider; this.jitAccessProvider = jitAccessProvider; }
private void getPasswordProvider() { string pp = (string)Registry.GetValue(CONNECTION_MANAGER_REGSITRY_KEY, PASSWORD_PROVIDER, ""); if (pp.Length == 0) { passwordProvider = new DefaultRegistryReadPasswordProvider(); return; } Assembly a = Assembly.Load(new AssemblyName("SpineTools")); passwordProvider = (IPasswordProvider)a.CreateInstance(pp); }
public SingleSignOnSessionRepository( IClientFactory clientFactory, ISettingsLoadService settingsLoadService, IPasswordProvider passwordProvider, ITrustInvalidSslQuestion invalidSslQuestion, IServerCertificateValidator serverCertificateValidator) { _clientFactory = clientFactory; _settingsLoadService = settingsLoadService; _passwordProvider = passwordProvider; _invalidSslQuestion = invalidSslQuestion; _serverCertificateValidator = serverCertificateValidator; }
internal static Stream CreateDecoderStream(Stream inStream, long startPos, long[] packSizes, CFolder folderInfo, IPasswordProvider pass) { int num2; int num3; if (!folderInfo.CheckStructure()) { throw new NotSupportedException("Unsupported stream binding structure."); } Stream[] packStreams = new Stream[folderInfo.PackStreams.Count]; for (int i = 0; i < folderInfo.PackStreams.Count; i++) { packStreams[i] = new ReadOnlySubStream(inStream, new long?(startPos), packSizes[i]); startPos += packSizes[i]; } Stream[] outStreams = new Stream[folderInfo.UnpackSizes.Count]; FindPrimaryOutStreamIndex(folderInfo, out num2, out num3); return CreateDecoderStream(packStreams, packSizes, outStreams, folderInfo, num2, pass); }
internal static Stream CreateDecoderStream(Stream inStream, long startPos, long[] packSizes, CFolder folderInfo, IPasswordProvider pass) { if (!folderInfo.CheckStructure()) throw new NotSupportedException("Unsupported stream binding structure."); Stream[] inStreams = new Stream[folderInfo.PackStreams.Count]; for (int j = 0; j < folderInfo.PackStreams.Count; j++) { inStreams[j] = new ReadOnlySubStream(inStream, startPos, packSizes[j]); startPos += packSizes[j]; } Stream[] outStreams = new Stream[folderInfo.UnpackSizes.Count]; int primaryCoderIndex, primaryOutStreamIndex; FindPrimaryOutStreamIndex(folderInfo, out primaryCoderIndex, out primaryOutStreamIndex); return CreateDecoderStream(inStreams, packSizes, outStreams, folderInfo, primaryCoderIndex, pass); }
internal static Stream CreateDecoderStream(Stream inStream, long startPos, long[] packSizes, CFolder folderInfo, IPasswordProvider pass) { if (!folderInfo.CheckStructure()) throw new NotSupportedException("Unsupported stream binding structure."); // We have multiple views into the same stream which will be used by several threads - need to sync those. object sync = new object(); Stream[] inStreams = new Stream[folderInfo.PackStreams.Count]; for (int j = 0; j < folderInfo.PackStreams.Count; j++) { inStreams[j] = new SyncStreamView(sync, inStream, startPos, packSizes[j]); startPos += packSizes[j]; } Stream[] outStreams = new Stream[folderInfo.UnpackSizes.Count]; int primaryCoderIndex, primaryOutStreamIndex; FindPrimaryOutStreamIndex(folderInfo, out primaryCoderIndex, out primaryOutStreamIndex); return CreateDecoderStream(inStreams, packSizes, outStreams, folderInfo, primaryCoderIndex, pass); }
internal static Stream CreateDecoderStream(CMethodId id, Stream[] inStreams, byte[] info, IPasswordProvider pass, long limit) { switch (id.Id) { case k_Copy: if (info != null) throw new NotSupportedException(); return inStreams.Single(); case k_LZMA: return new LzmaDecoderStream(inStreams.Single(), info, limit); case k_LZMA2: return new Lzma2DecoderStream(inStreams.Single(), info.Single(), limit); case CMethodId.kAESId: return new AesDecoderStream(inStreams.Single(), info, pass, limit); case k_BCJ: return new BcjDecoderStream(inStreams.Single(), info, limit); case k_BCJ2: return new Bcj2DecoderStream(inStreams, info, limit); default: throw new NotSupportedException(); } }
public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { int num; byte[] buffer; byte[] buffer2; this.mStream = input; this.mLimit = limit; if ((((uint) input.Length) & 15) != 0) { throw new NotSupportedException("AES decoder does not support padding."); } this.Init(info, out num, out buffer, out buffer2); byte[] bytes = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[] rgbKey = this.InitKey(num, buffer, bytes); using (Rijndael rijndael = Rijndael.Create()) { rijndael.Mode = CipherMode.CBC; rijndael.Padding = PaddingMode.None; this.mDecoder = rijndael.CreateDecryptor(rgbKey, buffer2); } this.mBuffer = new byte[0x1000]; }
public AesDecoderStream(Stream input, byte[] info, IPasswordProvider pass, long limit) { mStream = input; mLimit = limit; if (((uint) input.Length & 15) != 0) throw new NotSupportedException("AES decoder does not support padding."); int numCyclesPower; byte[] salt, seed; Init(info, out numCyclesPower, out salt, out seed); byte[] password = Encoding.Unicode.GetBytes(pass.CryptoGetTextPassword()); byte[] key = InitKey(numCyclesPower, salt, password); using (var aes = Aes.Create()) { aes.Mode = CipherMode.CBC; aes.Padding = PaddingMode.None; mDecoder = aes.CreateDecryptor(key, seed); } mBuffer = new byte[4 << 10]; }
public ArchiveDatabase ReadDatabase(IPasswordProvider pass) { var db = new ArchiveDatabase(); db.Clear(); db.MajorVersion = _header[6]; db.MinorVersion = _header[7]; if (db.MajorVersion != 0) throw new InvalidOperationException(); uint crcFromArchive = DataReader.Get32(_header, 8); long nextHeaderOffset = (long)DataReader.Get64(_header, 0xC); long nextHeaderSize = (long)DataReader.Get64(_header, 0x14); uint nextHeaderCrc = DataReader.Get32(_header, 0x1C); uint crc = CRC.kInitCRC; crc = CRC.Update(crc, nextHeaderOffset); crc = CRC.Update(crc, nextHeaderSize); crc = CRC.Update(crc, nextHeaderCrc); crc = CRC.Finish(crc); if (crc != crcFromArchive) throw new InvalidOperationException(); db.StartPositionAfterHeader = _streamOrigin + 0x20; // empty header is ok if (nextHeaderSize == 0) { db.Fill(); return db; } if (nextHeaderOffset < 0 || nextHeaderSize < 0 || nextHeaderSize > Int32.MaxValue) throw new InvalidOperationException(); if (nextHeaderOffset > _streamEnding - db.StartPositionAfterHeader) throw new IndexOutOfRangeException(); _stream.Seek(nextHeaderOffset, SeekOrigin.Current); byte[] header = new byte[nextHeaderSize]; _stream.ReadExact(header, 0, header.Length); if (CRC.Finish(CRC.Update(CRC.kInitCRC, header, 0, header.Length)) != nextHeaderCrc) throw new InvalidOperationException(); using (CStreamSwitch streamSwitch = new CStreamSwitch()) { streamSwitch.Set(this, header); BlockType? type = ReadId(); if (type != BlockType.Header) { if (type != BlockType.EncodedHeader) throw new InvalidOperationException(); var dataVector = ReadAndDecodePackedStreams(db.StartPositionAfterHeader, pass); // compressed header without content is odd but ok if (dataVector.Count == 0) { db.Fill(); return db; } if (dataVector.Count != 1) throw new InvalidOperationException(); streamSwitch.Set(this, dataVector[0]); if (ReadId() != BlockType.Header) throw new InvalidOperationException(); } ReadHeader(db, pass); } db.Fill(); return db; }
public Stream OpenStream(ArchiveDatabase _db, int fileIndex, IPasswordProvider pw) { int folderIndex = _db.FileIndexToFolderIndexMap[fileIndex]; int numFilesInFolder = _db.NumUnpackStreamsVector[folderIndex]; int firstFileIndex = _db.FolderStartFileIndex[folderIndex]; if (firstFileIndex > fileIndex || fileIndex - firstFileIndex >= numFilesInFolder) throw new InvalidOperationException(); int skipCount = fileIndex - firstFileIndex; long skipSize = 0; for (int i = 0; i < skipCount; i++) skipSize += _db.Files[firstFileIndex + i].Size; Stream s = GetCachedDecoderStream(_db, folderIndex, pw); s.Position = skipSize; return new ReadOnlySubStream(s, _db.Files[fileIndex].Size); }
private static Stream CreateDecoderStream(Stream[] packStreams, long[] packSizes, Stream[] outStreams, CFolder folderInfo, int coderIndex, IPasswordProvider pass) { var coderInfo = folderInfo.Coders[coderIndex]; if (coderInfo.NumOutStreams != 1) throw new NotSupportedException("Multiple output streams are not supported."); int inStreamId = 0; for (int i = 0; i < coderIndex; i++) inStreamId += folderInfo.Coders[i].NumInStreams; int outStreamId = 0; for (int i = 0; i < coderIndex; i++) outStreamId += folderInfo.Coders[i].NumOutStreams; Stream[] inStreams = new Stream[coderInfo.NumInStreams]; for (int i = 0; i < inStreams.Length; i++, inStreamId++) { int bindPairIndex = folderInfo.FindBindPairForInStream(inStreamId); if (bindPairIndex >= 0) { int pairedOutIndex = folderInfo.BindPairs[bindPairIndex].OutIndex; if (outStreams[pairedOutIndex] != null) throw new NotSupportedException("Overlapping stream bindings are not supported."); int otherCoderIndex = FindCoderIndexForOutStreamIndex(folderInfo, pairedOutIndex); inStreams[i] = CreateDecoderStream(packStreams, packSizes, outStreams, folderInfo, otherCoderIndex, pass); //inStreamSizes[i] = folderInfo.UnpackSizes[pairedOutIndex]; if (outStreams[pairedOutIndex] != null) throw new NotSupportedException("Overlapping stream bindings are not supported."); outStreams[pairedOutIndex] = inStreams[i]; } else { int index = folderInfo.FindPackStreamArrayIndex(inStreamId); if (index < 0) throw new NotSupportedException("Could not find input stream binding."); inStreams[i] = packStreams[index]; //inStreamSizes[i] = packSizes[index]; } } long unpackSize = folderInfo.UnpackSizes[outStreamId]; return DecoderRegistry.CreateDecoderStream(coderInfo.MethodId, inStreams, coderInfo.Props, pass, unpackSize); }
/// <summary> /// Initializes a new instance of the <see cref="WsseRequestInterceptor"/> class. /// </summary> /// <param name="provider">The provider.</param> /// <param name="realm">The realm.</param> public WsseRequestInterceptor(IPasswordProvider provider, string realm) : this(provider, realm, new DefaultTimestampRangeValidator(), new InMemoryNonceStore()) { }
private List<byte[]> ReadAndDecodePackedStreams(long baseOffset, IPasswordProvider pass) { #if DEBUG Log.WriteLine("-- ReadAndDecodePackedStreams --"); Log.PushIndent(); #endif try { long dataStartPos; List<long> packSizes; List<uint?> packCRCs; List<CFolder> folders; List<int> numUnpackStreamsInFolders; List<long> unpackSizes; List<uint?> digests; ReadStreamsInfo(null, out dataStartPos, out packSizes, out packCRCs, out folders, out numUnpackStreamsInFolders, out unpackSizes, out digests); dataStartPos += baseOffset; var dataVector = new List<byte[]>(folders.Count); int packIndex = 0; foreach (var folder in folders) { long oldDataStartPos = dataStartPos; long[] myPackSizes = new long[folder.PackStreams.Count]; for (int i = 0; i < myPackSizes.Length; i++) { long packSize = packSizes[packIndex + i]; myPackSizes[i] = packSize; dataStartPos += packSize; } var outStream = DecoderStreamHelper.CreateDecoderStream(_stream, oldDataStartPos, myPackSizes, folder, pass); int unpackSize = checked((int)folder.GetUnpackSize()); byte[] data = new byte[unpackSize]; outStream.ReadExact(data, 0, data.Length); if (outStream.ReadByte() >= 0) throw new InvalidOperationException("Decoded stream is longer than expected."); dataVector.Add(data); if (folder.UnpackCRCDefined) if (CRC.Finish(CRC.Update(CRC.kInitCRC, data, 0, unpackSize)) != folder.UnpackCRC) throw new InvalidOperationException("Decoded stream does not match expected CRC."); } return dataVector; } finally { #if DEBUG Log.PopIndent(); #endif } }
private List<byte[]> ReadAndDecodePackedStreams(long baseOffset, IPasswordProvider pass) { List<byte[]> list8; SharpCompress.Compressor.LZMA.Log.WriteLine("-- ReadAndDecodePackedStreams --"); SharpCompress.Compressor.LZMA.Log.PushIndent(" "); try { long num; List<long> list; List<uint?> list2; List<CFolder> list3; List<int> list4; List<long> list5; List<uint?> list6; this.ReadStreamsInfo(null, out num, out list, out list2, out list3, out list4, out list5, out list6); num += baseOffset; List<byte[]> list7 = new List<byte[]>(list3.Count); int num2 = 0; foreach (CFolder folder in list3) { long startPos = num; long[] packSizes = new long[folder.PackStreams.Count]; for (int i = 0; i < packSizes.Length; i++) { long num5 = list[num2 + i]; packSizes[i] = num5; num += num5; } Stream stream = DecoderStreamHelper.CreateDecoderStream(this._stream, startPos, packSizes, folder, pass); int unpackSize = (int) folder.GetUnpackSize(); byte[] buffer = new byte[unpackSize]; Utils.ReadExact(stream, buffer, 0, buffer.Length); if (stream.ReadByte() >= 0) { throw new InvalidOperationException("Decoded stream is longer than expected."); } list7.Add(buffer); if (folder.UnpackCRCDefined) { uint num7 = CRC.Finish(CRC.Update(uint.MaxValue, buffer, 0, unpackSize)); if (num7 != folder.UnpackCRC) { throw new InvalidOperationException("Decoded stream does not match expected CRC."); } } } list8 = list7; } finally { SharpCompress.Compressor.LZMA.Log.PopIndent(); } return list8; }
public void Extract(ArchiveDatabase _db, int[] indices, IPasswordProvider pw) { int count; bool flag = indices == null; if (flag) { count = _db.Files.Count; } else { count = indices.Length; } if (count != 0) { int folderIndex; int num5; List<CExtractFolderInfo> source = new List<CExtractFolderInfo>(); for (int i = 0; i < count; i++) { int fileIndex = flag ? i : indices[i]; folderIndex = _db.FileIndexToFolderIndexMap[fileIndex]; if (folderIndex == -1) { source.Add(new CExtractFolderInfo(fileIndex, -1)); } else { if ((source.Count == 0) || (folderIndex != Enumerable.Last<CExtractFolderInfo>(source).FolderIndex)) { source.Add(new CExtractFolderInfo(-1, folderIndex)); } CExtractFolderInfo info = Enumerable.Last<CExtractFolderInfo>(source); num5 = _db.FolderStartFileIndex[folderIndex]; for (int j = info.ExtractStatuses.Count; j <= (fileIndex - num5); j++) { info.ExtractStatuses.Add(j == (fileIndex - num5)); } } } foreach (CExtractFolderInfo info in source) { int num10; bool flag2; if (info.FileIndex != -1) { num5 = info.FileIndex; } else { num5 = _db.FolderStartFileIndex[info.FolderIndex]; } FolderUnpackStream stream = new FolderUnpackStream(_db, 0, num5, info.ExtractStatuses); if (info.FileIndex != -1) { continue; } folderIndex = info.FolderIndex; CFolder folder = _db.Folders[folderIndex]; int firstPackStreamId = _db.Folders[folderIndex].FirstPackStreamId; long folderStreamPos = _db.GetFolderStreamPos(folder, 0); List<long> list2 = new List<long>(); for (int k = 0; k < folder.PackStreams.Count; k++) { list2.Add(_db.PackSizes[firstPackStreamId + k]); } Stream stream2 = DecoderStreamHelper.CreateDecoderStream(this._stream, folderStreamPos, list2.ToArray(), folder, pw); byte[] buffer = new byte[0x1000]; goto Label_0252; Label_0223: num10 = stream2.Read(buffer, 0, buffer.Length); if (num10 == 0) { continue; } stream.Write(buffer, 0, num10); Label_0252: flag2 = true; goto Label_0223; } } }
private void ReadHeader(ArchiveDatabase db, IPasswordProvider getTextPassword) { Action<int, uint?> action = null; Action<int, long?> action2 = null; Action<int, DateTime?> action3 = null; Action<int, DateTime?> action4 = null; Action<int, DateTime?> action5 = null; SharpCompress.Compressor.LZMA.Log.WriteLine("-- ReadHeader --"); SharpCompress.Compressor.LZMA.Log.PushIndent(" "); try { List<long> list2; List<uint?> list3; int num; long num6; int num7; bool flag2; BlockType? nullable = this.ReadId(); if (((BlockType) nullable) == BlockType.ArchiveProperties) { this.ReadArchiveProperties(); nullable = this.ReadId(); } List<byte[]> dataVector = null; if (((BlockType) nullable) == BlockType.AdditionalStreamsInfo) { dataVector = this.ReadAndDecodePackedStreams(db.StartPositionAfterHeader, getTextPassword); nullable = this.ReadId(); } if (((BlockType) nullable) == BlockType.MainStreamsInfo) { this.ReadStreamsInfo(dataVector, out db.DataStartPosition, out db.PackSizes, out db.PackCRCs, out db.Folders, out db.NumUnpackStreamsVector, out list2, out list3); db.DataStartPosition += db.StartPositionAfterHeader; nullable = this.ReadId(); } else { list2 = new List<long>(db.Folders.Count); list3 = new List<uint?>(db.Folders.Count); db.NumUnpackStreamsVector = new List<int>(db.Folders.Count); for (num = 0; num < db.Folders.Count; num++) { CFolder folder = db.Folders[num]; list2.Add(folder.GetUnpackSize()); list3.Add(folder.UnpackCRC); db.NumUnpackStreamsVector.Add(1); } } db.Files.Clear(); if (((BlockType) nullable) == BlockType.End) { return; } if (((BlockType) nullable) != BlockType.FilesInfo) { throw new InvalidOperationException(); } int capacity = this.ReadNum(); SharpCompress.Compressor.LZMA.Log.WriteLine("NumFiles: " + capacity); db.Files = new List<CFileItem>(capacity); num = 0; while (num < capacity) { db.Files.Add(new CFileItem()); num++; } BitVector vector = new BitVector(capacity); BitVector vector2 = null; BitVector vector3 = null; int length = 0; goto Label_06FC; Label_02DA: nullable = this.ReadId(); if (((BlockType) nullable) == BlockType.End) { goto Label_0704; } long size = (long) this.ReadNumber(); int offset = this._currentReader.Offset; BlockType valueOrDefault = nullable.GetValueOrDefault(); if (nullable.HasValue) { switch (valueOrDefault) { case BlockType.EmptyStream: vector = this.ReadBitVector(capacity); SharpCompress.Compressor.LZMA.Log.Write("EmptyStream: "); num = 0; goto Label_04AD; case BlockType.EmptyFile: vector2 = this.ReadBitVector(length); SharpCompress.Compressor.LZMA.Log.Write("EmptyFile: "); num = 0; goto Label_0519; case BlockType.Anti: vector3 = this.ReadBitVector(length); SharpCompress.Compressor.LZMA.Log.Write("Anti: "); num = 0; goto Label_056E; case BlockType.Name: goto Label_0370; case BlockType.CTime: goto Label_05BC; case BlockType.ATime: goto Label_05F3; case BlockType.MTime: goto Label_062A; case BlockType.WinAttributes: goto Label_0420; case BlockType.StartPos: goto Label_0585; case BlockType.Dummy: SharpCompress.Compressor.LZMA.Log.Write("Dummy: " + size); num6 = 0L; goto Label_0697; } } goto Label_06A5; Label_0370: using (CStreamSwitch switch2 = new CStreamSwitch()) { switch2.Set(this, dataVector); SharpCompress.Compressor.LZMA.Log.Write("FileNames:"); num = 0; while (num < db.Files.Count) { db.Files[num].Name = this._currentReader.ReadString(); SharpCompress.Compressor.LZMA.Log.Write(" " + db.Files[num].Name); num++; } SharpCompress.Compressor.LZMA.Log.WriteLine(); } goto Label_06B0; Label_0420: SharpCompress.Compressor.LZMA.Log.Write("WinAttributes:"); if (action == null) { action = delegate (int i, uint? attr) { db.Files[i].Attrib = attr; SharpCompress.Compressor.LZMA.Log.Write(" " + (attr.HasValue ? attr.Value.ToString("x8") : "n/a")); }; } this.ReadAttributeVector(dataVector, capacity, action); SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_0471: if (vector[num]) { SharpCompress.Compressor.LZMA.Log.Write("x"); length++; } else { SharpCompress.Compressor.LZMA.Log.Write("."); } num++; Label_04AD: if (num < vector.Length) { goto Label_0471; } SharpCompress.Compressor.LZMA.Log.WriteLine(); vector2 = new BitVector(length); vector3 = new BitVector(length); goto Label_06B0; Label_04F5: SharpCompress.Compressor.LZMA.Log.Write(vector2[num] ? "x" : "."); num++; Label_0519: if (num < length) { goto Label_04F5; } SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_054A: SharpCompress.Compressor.LZMA.Log.Write(vector3[num] ? "x" : "."); num++; Label_056E: if (num < length) { goto Label_054A; } SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_0585: SharpCompress.Compressor.LZMA.Log.Write("StartPos:"); if (action2 == null) { action2 = delegate (int i, long? startPos) { db.Files[i].StartPos = startPos; SharpCompress.Compressor.LZMA.Log.Write(" " + (startPos.HasValue ? startPos.Value.ToString() : "n/a")); }; } this.ReadNumberVector(dataVector, capacity, action2); SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_05BC: SharpCompress.Compressor.LZMA.Log.Write("CTime:"); if (action3 == null) { action3 = delegate (int i, DateTime? time) { db.Files[i].CTime = time; SharpCompress.Compressor.LZMA.Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); }; } this.ReadDateTimeVector(dataVector, capacity, action3); SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_05F3: SharpCompress.Compressor.LZMA.Log.Write("ATime:"); if (action4 == null) { action4 = delegate (int i, DateTime? time) { db.Files[i].ATime = time; SharpCompress.Compressor.LZMA.Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); }; } this.ReadDateTimeVector(dataVector, capacity, action4); SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_062A: SharpCompress.Compressor.LZMA.Log.Write("MTime:"); if (action5 == null) { action5 = delegate (int i, DateTime? time) { db.Files[i].MTime = time; SharpCompress.Compressor.LZMA.Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); }; } this.ReadDateTimeVector(dataVector, capacity, action5); SharpCompress.Compressor.LZMA.Log.WriteLine(); goto Label_06B0; Label_067B: if (this.ReadByte() != 0) { throw new InvalidOperationException(); } num6 += 1L; Label_0697: if (num6 < size) { goto Label_067B; } goto Label_06B0; Label_06A5: this.SkipData(size); Label_06B0: if (((db.MajorVersion > 0) || (db.MinorVersion > 2)) && ((this._currentReader.Offset - offset) != size)) { throw new InvalidOperationException(); } Label_06FC: flag2 = true; goto Label_02DA; Label_0704: num7 = 0; int num8 = 0; for (num = 0; num < capacity; num++) { CFileItem item = db.Files[num]; item.HasStream = !vector[num]; if (item.HasStream) { item.IsDir = false; item.IsAnti = false; item.Size = list2[num8]; item.Crc = list3[num8]; num8++; } else { item.IsDir = !vector2[num7]; item.IsAnti = vector3[num7]; num7++; item.Size = 0L; item.Crc = null; } } } finally { SharpCompress.Compressor.LZMA.Log.PopIndent(); } }
public static ICryptoManager Create(SymmetricAlgorithm symmetricAlgorithm, HashAlgorithm hashAlgorithm, IPasswordProvider passwordProvider) { return new CryptoManager(symmetricAlgorithm, hashAlgorithm, passwordProvider); }
private Stream GetCachedDecoderStream(ArchiveDatabase _db, int folderIndex, IPasswordProvider pw) { Stream s; if (!_cachedStreams.TryGetValue(folderIndex, out s)) { CFolder folderInfo = _db.Folders[folderIndex]; int packStreamIndex = _db.Folders[folderIndex].FirstPackStreamId; long folderStartPackPos = _db.GetFolderStreamPos(folderInfo, 0); List<long> packSizes = new List<long>(); for (int j = 0; j < folderInfo.PackStreams.Count; j++) packSizes.Add(_db.PackSizes[packStreamIndex + j]); s = DecoderStreamHelper.CreateDecoderStream(_stream, folderStartPackPos, packSizes.ToArray(), folderInfo, pw); _cachedStreams.Add(folderIndex, s); } return s; }
public void Extract(ArchiveDatabase _db, int[] indices, IPasswordProvider pw) { int numItems; bool allFilesMode = (indices == null); if (allFilesMode) numItems = _db.Files.Count; else numItems = indices.Length; if (numItems == 0) return; List<CExtractFolderInfo> extractFolderInfoVector = new List<CExtractFolderInfo>(); for (int i = 0; i < numItems; i++) { int fileIndex = allFilesMode ? i : indices[i]; int folderIndex = _db.FileIndexToFolderIndexMap[fileIndex]; if (folderIndex == -1) { extractFolderInfoVector.Add(new CExtractFolderInfo(fileIndex, -1)); continue; } if (extractFolderInfoVector.Count == 0 || folderIndex != extractFolderInfoVector.Last().FolderIndex) extractFolderInfoVector.Add(new CExtractFolderInfo(-1, folderIndex)); CExtractFolderInfo efi = extractFolderInfoVector.Last(); int startIndex = _db.FolderStartFileIndex[folderIndex]; for (int index = efi.ExtractStatuses.Count; index <= fileIndex - startIndex; index++) efi.ExtractStatuses.Add(index == fileIndex - startIndex); } foreach (CExtractFolderInfo efi in extractFolderInfoVector) { int startIndex; if (efi.FileIndex != -1) startIndex = efi.FileIndex; else startIndex = _db.FolderStartFileIndex[efi.FolderIndex]; var outStream = new FolderUnpackStream(_db, 0, startIndex, efi.ExtractStatuses); if (efi.FileIndex != -1) continue; int folderIndex = efi.FolderIndex; CFolder folderInfo = _db.Folders[folderIndex]; int packStreamIndex = _db.Folders[folderIndex].FirstPackStreamId; long folderStartPackPos = _db.GetFolderStreamPos(folderInfo, 0); List<long> packSizes = new List<long>(); for (int j = 0; j < folderInfo.PackStreams.Count; j++) packSizes.Add(_db.PackSizes[packStreamIndex + j]); // TODO: If the decoding fails the last file may be extracted incompletely. Delete it? Stream s = DecoderStreamHelper.CreateDecoderStream(_stream, folderStartPackPos, packSizes.ToArray(), folderInfo, pw); byte[] buffer = new byte[4 << 10]; for (; ; ) { int processed = s.Read(buffer, 0, buffer.Length); if (processed == 0) break; outStream.Write(buffer, 0, processed); } } }
private Stream GetCachedDecoderStream(ArchiveDatabase _db, int folderIndex, IPasswordProvider pw) { Stream stream; if (!this._cachedStreams.TryGetValue(folderIndex, out stream)) { CFolder folder = _db.Folders[folderIndex]; int firstPackStreamId = _db.Folders[folderIndex].FirstPackStreamId; long folderStreamPos = _db.GetFolderStreamPos(folder, 0); List<long> list = new List<long>(); for (int i = 0; i < folder.PackStreams.Count; i++) { list.Add(_db.PackSizes[firstPackStreamId + i]); } stream = DecoderStreamHelper.CreateDecoderStream(this._stream, folderStreamPos, list.ToArray(), folder, pw); this._cachedStreams.Add(folderIndex, stream); } return stream; }
private void ReadHeader(ArchiveDatabase db, IPasswordProvider getTextPassword) { #if DEBUG Log.WriteLine("-- ReadHeader --"); Log.PushIndent(); #endif try { BlockType? type = ReadId(); if (type == BlockType.ArchiveProperties) { ReadArchiveProperties(); type = ReadId(); } List<byte[]> dataVector = null; if (type == BlockType.AdditionalStreamsInfo) { dataVector = ReadAndDecodePackedStreams(db.StartPositionAfterHeader, getTextPassword); type = ReadId(); } List<long> unpackSizes; List<uint?> digests; if (type == BlockType.MainStreamsInfo) { ReadStreamsInfo(dataVector, out db.DataStartPosition, out db.PackSizes, out db.PackCRCs, out db.Folders, out db.NumUnpackStreamsVector, out unpackSizes, out digests); db.DataStartPosition += db.StartPositionAfterHeader; type = ReadId(); } else { unpackSizes = new List<long>(db.Folders.Count); digests = new List<uint?>(db.Folders.Count); db.NumUnpackStreamsVector = new List<int>(db.Folders.Count); for (int i = 0; i < db.Folders.Count; i++) { var folder = db.Folders[i]; unpackSizes.Add(folder.GetUnpackSize()); digests.Add(folder.UnpackCRC); db.NumUnpackStreamsVector.Add(1); } } db.Files.Clear(); if (type == BlockType.End) return; if (type != BlockType.FilesInfo) throw new InvalidOperationException(); int numFiles = ReadNum(); #if DEBUG Log.WriteLine("NumFiles: " + numFiles); #endif db.Files = new List<CFileItem>(numFiles); for (int i = 0; i < numFiles; i++) db.Files.Add(new CFileItem()); BitVector emptyStreamVector = new BitVector(numFiles); BitVector emptyFileVector = null; BitVector antiFileVector = null; int numEmptyStreams = 0; for (; ; ) { type = ReadId(); if (type == BlockType.End) break; long size = checked((long)ReadNumber()); // TODO: throw invalid data on negative int oldPos = _currentReader.Offset; switch (type) { case BlockType.Name: using (var streamSwitch = new CStreamSwitch()) { streamSwitch.Set(this, dataVector); #if DEBUG Log.Write("FileNames:"); #endif for (int i = 0; i < db.Files.Count; i++) { db.Files[i].Name = _currentReader.ReadString(); #if DEBUG Log.Write(" " + db.Files[i].Name); #endif } #if DEBUG Log.WriteLine(); #endif } break; case BlockType.WinAttributes: #if DEBUG Log.Write("WinAttributes:"); #endif ReadAttributeVector(dataVector, numFiles, delegate(int i, uint? attr) { db.Files[i].Attrib = attr; #if DEBUG Log.Write(" " + (attr.HasValue ? attr.Value.ToString("x8") : "n/a")); #endif }); #if DEBUG Log.WriteLine(); #endif break; case BlockType.EmptyStream: emptyStreamVector = ReadBitVector(numFiles); #if DEBUG Log.Write("EmptyStream: "); #endif for (int i = 0; i < emptyStreamVector.Length; i++) { if (emptyStreamVector[i]) { #if DEBUG Log.Write("x"); #endif numEmptyStreams++; } else { #if DEBUG Log.Write("."); #endif } } #if DEBUG Log.WriteLine(); #endif emptyFileVector = new BitVector(numEmptyStreams); antiFileVector = new BitVector(numEmptyStreams); break; case BlockType.EmptyFile: emptyFileVector = ReadBitVector(numEmptyStreams); #if DEBUG Log.Write("EmptyFile: "); for (int i = 0; i < numEmptyStreams; i++) Log.Write(emptyFileVector[i] ? "x" : "."); Log.WriteLine(); #endif break; case BlockType.Anti: antiFileVector = ReadBitVector(numEmptyStreams); #if DEBUG Log.Write("Anti: "); for (int i = 0; i < numEmptyStreams; i++) Log.Write(antiFileVector[i] ? "x" : "."); Log.WriteLine(); #endif break; case BlockType.StartPos: #if DEBUG Log.Write("StartPos:"); #endif ReadNumberVector(dataVector, numFiles, delegate(int i, long? startPos) { db.Files[i].StartPos = startPos; #if DEBUG Log.Write(" " + (startPos.HasValue ? startPos.Value.ToString() : "n/a")); #endif }); #if DEBUG Log.WriteLine(); #endif break; case BlockType.CTime: #if DEBUG Log.Write("CTime:"); #endif ReadDateTimeVector(dataVector, numFiles, delegate(int i, DateTime? time) { db.Files[i].CTime = time; #if DEBUG Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); #endif }); #if DEBUG Log.WriteLine(); #endif break; case BlockType.ATime: #if DEBUG Log.Write("ATime:"); #endif ReadDateTimeVector(dataVector, numFiles, delegate(int i, DateTime? time) { db.Files[i].ATime = time; #if DEBUG Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); #endif }); #if DEBUG Log.WriteLine(); #endif break; case BlockType.MTime: #if DEBUG Log.Write("MTime:"); #endif ReadDateTimeVector(dataVector, numFiles, delegate(int i, DateTime? time) { db.Files[i].MTime = time; #if DEBUG Log.Write(" " + (time.HasValue ? time.Value.ToString() : "n/a")); #endif }); #if DEBUG Log.WriteLine(); #endif break; case BlockType.Dummy: #if DEBUG Log.Write("Dummy: " + size); #endif for (long j = 0; j < size; j++) if (ReadByte() != 0) throw new InvalidOperationException(); break; default: SkipData(size); break; } // since 0.3 record sizes must be correct bool checkRecordsSize = (db.MajorVersion > 0 || db.MinorVersion > 2); if (checkRecordsSize && _currentReader.Offset - oldPos != size) throw new InvalidOperationException(); } int emptyFileIndex = 0; int sizeIndex = 0; for (int i = 0; i < numFiles; i++) { CFileItem file = db.Files[i]; file.HasStream = !emptyStreamVector[i]; if (file.HasStream) { file.IsDir = false; file.IsAnti = false; file.Size = unpackSizes[sizeIndex]; file.Crc = digests[sizeIndex]; sizeIndex++; } else { file.IsDir = !emptyFileVector[emptyFileIndex]; file.IsAnti = antiFileVector[emptyFileIndex]; emptyFileIndex++; file.Size = 0; file.Crc = null; } } } finally { #if DEBUG Log.PopIndent(); #endif } }
public ArchiveDatabase ReadDatabase(IPasswordProvider pass) { ArchiveDatabase db = new ArchiveDatabase(); db.Clear(); db.MajorVersion = this._header[6]; db.MinorVersion = this._header[7]; if (db.MajorVersion != 0) { throw new InvalidOperationException(); } uint num = DataReader.Get32(this._header, 8); long num2 = (long) DataReader.Get64(this._header, 12); long num3 = (long) DataReader.Get64(this._header, 20); uint num4 = DataReader.Get32(this._header, 0x1c); uint maxValue = uint.MaxValue; if (CRC.Finish(CRC.Update(CRC.Update(CRC.Update(maxValue, num2), num3), num4)) != num) { throw new InvalidOperationException(); } db.StartPositionAfterHeader = this._streamOrigin + 0x20L; if (num3 == 0L) { db.Fill(); return db; } if (((num2 < 0L) || (num3 < 0L)) || (num3 > 0x7fffffffL)) { throw new InvalidOperationException(); } if (num2 > (this._streamEnding - db.StartPositionAfterHeader)) { throw new IndexOutOfRangeException(); } this._stream.Seek(num2, SeekOrigin.Current); byte[] buffer = new byte[num3]; Utils.ReadExact(this._stream, buffer, 0, buffer.Length); if (CRC.Finish(CRC.Update(uint.MaxValue, buffer, 0, buffer.Length)) != num4) { throw new InvalidOperationException(); } using (CStreamSwitch switch2 = new CStreamSwitch()) { switch2.Set(this, buffer); BlockType? nullable = this.ReadId(); if (((BlockType) nullable) != BlockType.Header) { if (((BlockType) nullable) != BlockType.EncodedHeader) { throw new InvalidOperationException(); } List<byte[]> list = this.ReadAndDecodePackedStreams(db.StartPositionAfterHeader, pass); if (list.Count == 0) { db.Fill(); return db; } if (list.Count != 1) { throw new InvalidOperationException(); } switch2.Set(this, list[0]); if (((BlockType) this.ReadId()) != BlockType.Header) { throw new InvalidOperationException(); } } this.ReadHeader(db, pass); } db.Fill(); return db; }
public Stream OpenStream(ArchiveDatabase _db, int fileIndex, IPasswordProvider pw) { int folderIndex = _db.FileIndexToFolderIndexMap[fileIndex]; int num2 = _db.NumUnpackStreamsVector[folderIndex]; int num3 = _db.FolderStartFileIndex[folderIndex]; if ((num3 > fileIndex) || ((fileIndex - num3) >= num2)) { throw new InvalidOperationException(); } int num4 = fileIndex - num3; long num5 = 0L; for (int i = 0; i < num4; i++) { num5 += _db.Files[num3 + i].Size; } Stream stream = this.GetCachedDecoderStream(_db, folderIndex, pw); stream.Position = num5; return new ReadOnlySubStream(stream, _db.Files[fileIndex].Size); }
public SecureHashingManager(HMAC secureHashAlgorithm, IPasswordProvider passwordProvider) { _passwordProvider = passwordProvider; _secureHashAlgorithm = secureHashAlgorithm; }