1
0
mirror of https://github.com/bitwarden/mobile synced 2025-12-27 05:33:23 +00:00
Files
mobile/src/Core/Services/UserPinService.cs
2023-09-29 11:02:19 -03:00

39 lines
1.4 KiB
C#

using System.Threading.Tasks;
using Bit.Core.Abstractions;
namespace Bit.App.Services
{
public class UserPinService : IUserPinService
{
private readonly IStateService _stateService;
private readonly ICryptoService _cryptoService;
public UserPinService(IStateService stateService, ICryptoService cryptoService)
{
_stateService = stateService;
_cryptoService = cryptoService;
}
public async Task SetupPinAsync(string pin, bool requireMasterPasswordOnRestart)
{
var kdfConfig = await _stateService.GetActiveUserCustomDataAsync(a => new KdfConfig(a?.Profile));
var email = await _stateService.GetEmailAsync();
var pinKey = await _cryptoService.MakePinKeyAsync(pin, email, kdfConfig);
var userKey = await _cryptoService.GetUserKeyAsync();
var protectedPinKey = await _cryptoService.EncryptAsync(userKey.Key, pinKey);
var encPin = await _cryptoService.EncryptAsync(pin);
await _stateService.SetProtectedPinAsync(encPin.EncryptedString);
if (requireMasterPasswordOnRestart)
{
await _stateService.SetPinKeyEncryptedUserKeyEphemeralAsync(protectedPinKey);
}
else
{
await _stateService.SetPinKeyEncryptedUserKeyAsync(protectedPinKey);
}
}
}
}