Skip to content

Commit c0b9c68

Browse files
authored
Merge pull request #81 from nventive/dev/cama/RefactorKey
refactor: refactor KeyName and KeyValue
2 parents 31acf7e + f079c7a commit c0b9c68

8 files changed

Lines changed: 102 additions & 101 deletions

File tree

BREAKING_CHANGES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,5 @@
33
## 2.0.0
44

55
* Added support .net 7
6-
* Dropped support for .net 6
6+
* Dropped support for .net 6
7+
* Refactored IBiometryService KeyName to Key and KeyValue to Value

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ await biometryService.ScanBiometry(CancellationToken.None);
169169
This method encrypts a value and stores it into the platform secure storage with the given key name.
170170

171171
``` cs
172-
await biometryService.Encrypt(CancellationToken.None, "KeyName", "KeyValue");
172+
await biometryService.Encrypt(CancellationToken.None, "Key", "Value");
173173
```
174174

175175
On Android, a new `CryptoObject` from `AndroidX.Biometric` is created with a key as a parameter. Then the data is encrypted and presented to the `BiometricPrompt` manager.
@@ -182,7 +182,7 @@ On iOS, the `SecKeyChain` is used to store a string linked to a key. The OS is i
182182
This method decrypts and gets the data associated to the given key.
183183

184184
``` cs
185-
await biometryService.Decrypt(CancellationToken.None, "KeyName");
185+
await biometryService.Decrypt(CancellationToken.None, "Key");
186186
```
187187

188188
On Android, the method retrieves the shared preference encrypted data, then decrypts it with the secret as a parameter by presenting it to the `BiometricPrompt` manager.
@@ -194,7 +194,7 @@ On iOS, the method retrieves the encrypted data from the `SecKeyChain` with the
194194
This method removes the ecrypted value from the platform secure storage.
195195

196196
``` cs
197-
biometryService.Remove("KeyName");
197+
biometryService.Remove("Key");
198198
```
199199

200200
On Android, the method removes the encrypted data from the shared preferences.

src/BiometryService.Abstractions/IBiometryService.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -34,32 +34,32 @@ public interface IBiometryService
3434
Task ScanBiometry(CancellationToken ct);
3535

3636
/// <summary>
37-
/// Encrypts the value and stores it into the platform secure storage with the given <paramref name="keyName"/>.
37+
/// Encrypts the value and stores it into the platform secure storage with the given <paramref name="key"/>.
3838
/// </summary>
3939
/// <remarks>
4040
/// Catch and throw <see cref="BiometryException"/> for general biometry errors.
4141
/// </remarks>
4242
/// <param name="ct"><see cref="CancellationToken" />.</param>
43-
/// <param name="keyName">The name of the key.</param>
44-
/// <param name="keyValue">The value to be encrypt.</param>
45-
Task Encrypt(CancellationToken ct, string keyName, string keyValue);
43+
/// <param name="key">The name of the key.</param>
44+
/// <param name="value">The value to be encrypted.</param>
45+
Task Encrypt(CancellationToken ct, string key, string value);
4646

4747
/// <summary>
48-
/// Decrypts and gets the data associated to the given <paramref name="keyName"/>.
48+
/// Decrypts and gets the data associated to the given <paramref name="key"/>.
4949
/// </summary>
5050
/// <remarks>
5151
/// Catch and throw <see cref="BiometryException"/> for general biometry errors.
5252
/// Catch and throw <see cref="OperationCanceledException"/> if the user cancelled the operation.
5353
/// </remarks>
5454
/// <param name="ct"><see cref="CancellationToken" />.</param>
55-
/// <param name="keyName">The name of the Key.</param>
55+
/// <param name="key">The name of the Key.</param>
5656
/// <returns>The decrypted data associated to the key.</returns>
57-
Task<string> Decrypt(CancellationToken ct, string keyName);
57+
Task<string> Decrypt(CancellationToken ct, string key);
5858

5959
/// <summary>
6060
/// Removes the ecrypted value in the platform secure storage.
6161
/// </summary>
62-
/// <param name="keyName">The name of the Key.</param>
62+
/// <param name="key">The name of the Key.</param>
6363
/// <exception cref="BiometryException">Thrown for general biometry errors.</exception>
64-
void Remove(string keyName);
64+
void Remove(string key);
6565
}

src/BiometryService/BaseBiometryService.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,16 +25,16 @@ public BaseBiometryService(ILoggerFactory loggerFactory = null)
2525
}
2626

2727
/// <inheritdoc/>
28-
public abstract Task<string> Decrypt(CancellationToken ct, string keyName);
28+
public abstract Task<string> Decrypt(CancellationToken ct, string key);
2929

3030
/// <inheritdoc/>
31-
public abstract Task Encrypt(CancellationToken ct, string keyName, string keyValue);
31+
public abstract Task Encrypt(CancellationToken ct, string key, string value);
3232

3333
/// <inheritdoc/>
3434
public abstract Task<BiometryCapabilities> GetCapabilities(CancellationToken ct);
3535

3636
/// <inheritdoc/>
37-
public abstract void Remove(string keyName);
37+
public abstract void Remove(string key);
3838

3939
/// <inheritdoc/>
4040
public abstract Task ScanBiometry(CancellationToken ct);

src/BiometryService/BiometryService.Android.cs

Lines changed: 30 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -87,16 +87,16 @@ public override async Task ScanBiometry(CancellationToken ct)
8787
}
8888

8989
/// <inheritdoc/>
90-
public override async Task Encrypt(CancellationToken ct, string keyName, string value)
90+
public override async Task Encrypt(CancellationToken ct, string key, string value)
9191
{
9292
if (Logger.IsEnabled(LogLevel.Debug))
9393
{
94-
Logger.LogDebug($"Encrypting the fingerprint for the key '{keyName}'.");
94+
Logger.LogDebug($"Encrypting the fingerprint for the key '{key}'.");
9595
}
9696

9797
await ValidateBiometryCapabilities(ct);
9898

99-
var crypto = CreateCryptoObject(keyName);
99+
var crypto = CreateCryptoObject(key);
100100
var result = await AuthenticateBiometry(ct, crypto);
101101
var valueToEncrypt = Encoding.UTF8.GetBytes(value);
102102
var encryptedData = result.CryptoObject.Cipher.DoFinal(valueToEncrypt);
@@ -108,26 +108,26 @@ public override async Task Encrypt(CancellationToken ct, string keyName, string
108108

109109
if (Logger.IsEnabled(LogLevel.Information))
110110
{
111-
Logger.LogInformation($"Succcessfully encrypted the fingerprint for the key'{keyName}'.");
111+
Logger.LogInformation($"Succcessfully encrypted the fingerprint for the key '{key}'.");
112112
}
113113

114114
var encodedData = Base64.EncodeToString(bytes, Base64Flags.NoWrap);
115115
var sharedpref = _applicationContext.GetSharedPreferences(PREFERENCE_NAME, FileCreationMode.Private);
116-
sharedpref.Edit().PutString(keyName, encodedData).Apply();
116+
sharedpref.Edit().PutString(key, encodedData).Apply();
117117
}
118118

119119
/// <inheritdoc/>
120-
public override async Task<string> Decrypt(CancellationToken ct, string keyName)
120+
public override async Task<string> Decrypt(CancellationToken ct, string key)
121121
{
122122
if (Logger.IsEnabled(LogLevel.Debug))
123123
{
124-
Logger.LogDebug($"Decrypting the fingerprint for the key '{keyName}'.");
124+
Logger.LogDebug($"Decrypting the fingerprint for the key '{key}'.");
125125
}
126126

127127
await ValidateBiometryCapabilities(ct);
128128

129129
var sharedpref = _applicationContext.GetSharedPreferences(PREFERENCE_NAME, FileCreationMode.Private);
130-
var storedData = sharedpref.GetString(keyName, null);
130+
var storedData = sharedpref.GetString(key, null);
131131

132132
if (storedData == null)
133133
{
@@ -154,38 +154,38 @@ public override async Task<string> Decrypt(CancellationToken ct, string keyName)
154154
data.Length - 16
155155
);
156156

157-
var crypto = GetCryptoObject(keyName, iv);
157+
var crypto = GetCryptoObject(key, iv);
158158
var result = await AuthenticateBiometry(ct, crypto);
159159
var decryptedData = result.CryptoObject.Cipher.DoFinal(buffer);
160160

161161
if (Logger.IsEnabled(LogLevel.Information))
162162
{
163-
Logger.LogInformation($"Succcessfully decrypted the fingerprint for the key '{keyName}'.");
163+
Logger.LogInformation($"Succcessfully decrypted the fingerprint for the key '{key}'.");
164164
}
165165

166166
return Encoding.ASCII.GetString(decryptedData);
167167
}
168168

169169
/// <inheritdoc/>
170-
public override void Remove(string keyName)
170+
public override void Remove(string key)
171171
{
172172
try
173173
{
174174
var sharedpref = _applicationContext.GetSharedPreferences(PREFERENCE_NAME, FileCreationMode.Private);
175-
sharedpref.Edit().Remove(keyName).Apply();
175+
sharedpref.Edit().Remove(key).Apply();
176176

177177
if (Logger.IsEnabled(LogLevel.Debug))
178178
{
179-
Logger.LogDebug("The key '{keyName}' has been successfully removed.", keyName);
179+
Logger.LogDebug("The key '{key}' has been successfully removed.", key);
180180
}
181181
}
182182
catch (System.Exception)
183183
{
184184
if (Logger.IsEnabled(LogLevel.Debug))
185185
{
186-
Logger.LogDebug("The key '{keyName}' has not been successfully removed.", keyName);
186+
Logger.LogDebug("The key '{key}' has not been successfully removed.", key);
187187
}
188-
throw new BiometryException(BiometryExceptionReason.Failed, $"Something went wrong while removing the key '{keyName}'.");
188+
throw new BiometryException(BiometryExceptionReason.Failed, $"Something went wrong while removing the key '{key}'.");
189189
}
190190
}
191191

@@ -296,23 +296,23 @@ public override void Remove(string keyName)
296296
}
297297
}
298298

299-
private BiometricPrompt.CryptoObject CreateCryptoObject(string keyName)
299+
private BiometricPrompt.CryptoObject CreateCryptoObject(string key)
300300
{
301301
var cipher = Cipher.GetInstance(CIPHER_NAME);
302302

303-
if (_keyStore.IsKeyEntry(keyName))
303+
if (_keyStore.IsKeyEntry(key))
304304
{
305-
_keyStore.DeleteEntry(keyName);
305+
_keyStore.DeleteEntry(key);
306306
}
307307

308308
if (Logger.IsEnabled(LogLevel.Debug))
309309
{
310-
Logger.LogDebug($"Generating a symmetric pair (key name: '{keyName}').");
310+
Logger.LogDebug($"Generating a symmetric pair (key name: '{key}').");
311311
}
312312

313313
var keygen = KeyGenerator.GetInstance(KeyProperties.KeyAlgorithmAes, ANDROID_KEYSTORE);
314314

315-
keygen.Init(new KeyGenParameterSpec.Builder(keyName, KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
315+
keygen.Init(new KeyGenParameterSpec.Builder(key, KeyStorePurpose.Encrypt | KeyStorePurpose.Decrypt)
316316
.SetBlockModes(KeyProperties.BlockModeCbc)
317317
.SetEncryptionPaddings(KeyProperties.EncryptionPaddingPkcs7)
318318
.SetUserAuthenticationRequired(true)
@@ -324,38 +324,38 @@ private BiometricPrompt.CryptoObject CreateCryptoObject(string keyName)
324324

325325
if (Logger.IsEnabled(LogLevel.Information))
326326
{
327-
Logger.LogInformation($"Successfully generated a symmetric pair (key name: '{keyName}').");
327+
Logger.LogInformation($"Successfully generated a symmetric pair (key name: '{key}').");
328328
}
329329

330-
cipher.Init(CipherMode.EncryptMode, _keyStore.GetKey(keyName, null));
330+
cipher.Init(CipherMode.EncryptMode, _keyStore.GetKey(key, null));
331331

332332
return new BiometricPrompt.CryptoObject(cipher);
333333
}
334334

335-
private BiometricPrompt.CryptoObject GetCryptoObject(string keyName, byte[] iv = null)
335+
private BiometricPrompt.CryptoObject GetCryptoObject(string key, byte[] iv = null)
336336
{
337337
var cipher = Cipher.GetInstance(CIPHER_NAME);
338338

339-
if (_keyStore.IsKeyEntry(keyName))
339+
if (_keyStore.IsKeyEntry(key))
340340
{
341341
try
342342
{
343-
cipher.Init(CipherMode.DecryptMode, _keyStore.GetKey(keyName, null), new IvParameterSpec(iv));
343+
cipher.Init(CipherMode.DecryptMode, _keyStore.GetKey(key, null), new IvParameterSpec(iv));
344344

345345
return new BiometricPrompt.CryptoObject(cipher);
346346
}
347347
catch (KeyPermanentlyInvalidatedException)
348348
{
349349
if (Logger.IsEnabled(LogLevel.Error))
350350
{
351-
Logger.LogError($"Key '{keyName}' has been permanently invalidated.");
351+
Logger.LogError($"Key '{key}' has been permanently invalidated.");
352352
}
353353

354-
_keyStore.DeleteEntry(keyName);
354+
_keyStore.DeleteEntry(key);
355355

356356
if (Logger.IsEnabled(LogLevel.Information))
357357
{
358-
Logger.LogInformation($"Permanently invalidated key '{keyName}' has been removed successfully.");
358+
Logger.LogInformation($"Permanently invalidated key '{key}' has been removed successfully.");
359359
}
360360

361361
throw new BiometryException(BiometryExceptionReason.KeyInvalidated, "Something went wrong while generating the CryptoObject used to decrypt.");
@@ -365,9 +365,9 @@ private BiometricPrompt.CryptoObject GetCryptoObject(string keyName, byte[] iv =
365365
{
366366
if (Logger.IsEnabled(LogLevel.Error))
367367
{
368-
Logger.LogError($"Key '{keyName}' not found.");
368+
Logger.LogError($"Key '{key}' not found.");
369369
}
370-
throw new BiometryException(BiometryExceptionReason.KeyInvalidated, $"Key '{keyName}' not found.");
370+
throw new BiometryException(BiometryExceptionReason.KeyInvalidated, $"Key '{key}' not found.");
371371
}
372372
}
373373

0 commit comments

Comments
 (0)