diff --git a/Borepin/Borepin/Model/CardConfig.cs b/Borepin/Borepin/Model/CardConfig.cs
index 51c9524..d55a89e 100644
--- a/Borepin/Borepin/Model/CardConfig.cs
+++ b/Borepin/Borepin/Model/CardConfig.cs
@@ -1,6 +1,7 @@
using NFC.Helper;
using System;
using System.Globalization;
+using System.Security.Cryptography;
namespace Borepin.Model
{
@@ -9,8 +10,8 @@ namespace Borepin.Model
#region Constructors
public CardConfig()
{
- PICCKey = ByteOperation.GenerateEmptyArray(16);
- APPKey = ByteOperation.GenerateEmptyArray(16);
+ PICCKey = GenerateEmptyKey();
+ APPKey = GenerateEmptyKey();
}
#endregion
@@ -53,11 +54,15 @@ namespace Borepin.Model
public byte[] GenerateRandomKey()
{
byte[] key = ByteOperation.GenerateEmptyArray(16);
- Random random= new Random();
-
- random.NextBytes(key);
+ RNGCryptoServiceProvider cryptoProvider = new RNGCryptoServiceProvider();
+ cryptoProvider.GetBytes(key);
return key;
}
+
+ public byte[] GenerateEmptyKey()
+ {
+ return ByteOperation.GenerateEmptyArray(16);
+ }
#endregion
}
}
diff --git a/Borepin/Borepin/Model/KeyScan.cs b/Borepin/Borepin/Model/KeyScan.cs
new file mode 100644
index 0000000..c590bb9
--- /dev/null
+++ b/Borepin/Borepin/Model/KeyScan.cs
@@ -0,0 +1,14 @@
+namespace Borepin.Model
+{
+ public class KeyScan
+ {
+ public KeyScan(CardConfig cardConfig, KeyTypes keyType)
+ {
+ CardConfig = cardConfig;
+ KeyType = keyType;
+ }
+
+ public CardConfig CardConfig;
+ public KeyTypes KeyType;
+ }
+}
diff --git a/Borepin/Borepin/Model/KeyTypes.cs b/Borepin/Borepin/Model/KeyTypes.cs
new file mode 100644
index 0000000..e2e6391
--- /dev/null
+++ b/Borepin/Borepin/Model/KeyTypes.cs
@@ -0,0 +1,9 @@
+namespace Borepin.Model
+{
+ public enum KeyTypes
+ {
+ NONE,
+ PICC,
+ APP
+ };
+}
diff --git a/Borepin/Borepin/Page/CreateCardPage.xaml b/Borepin/Borepin/Page/CreateCardPage.xaml
index 7e2df60..5bf96a5 100644
--- a/Borepin/Borepin/Page/CreateCardPage.xaml
+++ b/Borepin/Borepin/Page/CreateCardPage.xaml
@@ -37,7 +37,6 @@
-
diff --git a/Borepin/Borepin/PageModel/CreateCardPageModel.cs b/Borepin/Borepin/PageModel/CreateCardPageModel.cs
index 9df22f4..0ac1705 100644
--- a/Borepin/Borepin/PageModel/CreateCardPageModel.cs
+++ b/Borepin/Borepin/PageModel/CreateCardPageModel.cs
@@ -10,6 +10,8 @@ using Borepin.Base.Exceptions;
using NFC.Interfaces;
using System.Collections.Generic;
using Borepin.Model;
+using Xamarin.Forms;
+using System;
namespace Borepin.PageModel
{
@@ -19,6 +21,9 @@ namespace Borepin.PageModel
private CardConfig _CardConfig;
private User _User;
private INFCService _NFCService;
+
+ private KeyTypes _ScanKeyType = KeyTypes.NONE;
+ private KeyTypes _ScanedKeyType = KeyTypes.NONE;
#endregion
#region Contructors
@@ -30,8 +35,6 @@ namespace Borepin.PageModel
CreateCardCommand = new DelegateCommand(CreateCardCommandExecute);
ScanPICCKeyCommand = new DelegateCommand(ScanPICCKeyCommandExecute);
- RandomPICCKeyCommand = new DelegateCommand(RandomPICCKeyCommandExecute);
-
ScanAPPKeyCommand = new DelegateCommand(ScanAPPKeyCommandExecute);
RandomAPPKeyCommand = new DelegateCommand(RandomAPPKeyCommandExecute);
@@ -46,6 +49,17 @@ namespace Borepin.PageModel
{
_CardConfig.UserID = instance as string;
}
+ else if (instance is CardConfig)
+ {
+ _CardConfig = instance as CardConfig;
+ }
+ else if (instance is KeyScan)
+ {
+ KeyScan keyScan = instance as KeyScan;
+ _CardConfig = keyScan.CardConfig;
+ _ScanedKeyType = keyScan.KeyType;
+ _ScanKeyType = KeyTypes.NONE;
+ }
else
{
throw new InstanceIncorrectException();
@@ -54,15 +68,52 @@ namespace Borepin.PageModel
return Task.CompletedTask;
}
+ public override Task LoadFromParameters(INavigationParameters parameters)
+ {
+ if (parameters.ContainsKey("result") && string.Equals((string)parameters["result"], "scanned", StringComparison.Ordinal) && parameters.ContainsKey("value"))
+ {
+ switch(_ScanedKeyType)
+ {
+ case (KeyTypes.PICC):
+ try
+ {
+ _CardConfig.PICCKey = _CardConfig.ConvertFromString(PICCKey);
+ }
+ catch
+ {
+ _CardConfig.PICCKey = _CardConfig.GenerateEmptyKey();
+ }
+ _CardConfig.PICCKey = _CardConfig.ConvertFromString((string)parameters["value"]);
+ PICCKey = _CardConfig.ConvertToString(_CardConfig.PICCKey);
+ break;
+ case (KeyTypes.APP):
+ try
+ {
+ _CardConfig.APPKey = _CardConfig.ConvertFromString((string)parameters["value"]);
+ }
+ catch
+ {
+ _CardConfig.APPKey = _CardConfig.GenerateEmptyKey();
+ }
+ APPKey = _CardConfig.ConvertToString(_CardConfig.APPKey);
+ break;
+ }
+ }
+
+ return Task.CompletedTask;
+ }
+
public override async Task LoadAPIData()
{
_User = (await _API.Session.UserSystem.Search.GetUserByName(_CardConfig.UserID).ConfigureAwait(false)).Just;
- ReaderIDs = await Task.Run(() =>
+ ReaderIDs = await Task.Run(() =>
{
return _NFCService.GetReaderIDs();
}).ConfigureAwait(false);
+ // Delay to sync with XAML Picker Item Source
+ await Task.Delay(100).ConfigureAwait(false);
if (ReaderIDs.Count > 0)
{
ReaderID = ReaderIDs[0];
@@ -70,11 +121,41 @@ namespace Borepin.PageModel
PICCKey = _CardConfig.ConvertToString(_CardConfig.PICCKey);
APPKey = _CardConfig.ConvertToString(_CardConfig.APPKey);
+ FormatCard = _CardConfig.DoFormat;
}
public override Task