public Credential CreateAgentCredential(AgentCredentialViewModel request) { if (!String.IsNullOrEmpty(request.PasswordSecret)) { var encryptionKey = GetEncryptionKey(); //generate salt request.HashSalt = CredentialHasher.CreateSalt(32); //create 32 byte salt //generate hash request.PasswordHash = CredentialHasher.GenerateSaltedHash(request.PasswordSecret, request.HashSalt); // Encrypt and decrypt the sample text via the Aes256CbcEncrypter class. request.PasswordSecret = CredentialsEncrypter.Encrypt(request.PasswordSecret, encryptionKey); } Credential globalCredential = _repo.Find(null, a => a.Name == request.Name && a.AgentId == null).Items?.FirstOrDefault(); Credential agentCredential = request.Map(request); if (globalCredential == null) { throw new EntityDoesNotExistException("No global credential exists with the given name"); } CredentialNameAvailability(agentCredential); if (!ValidateStartAndEndDates(agentCredential)) { throw new EntityOperationException("Start and End Date are not valid"); } agentCredential.Provider = globalCredential.Provider; return(agentCredential); }