/// <summary> /// Encrypts finger data captured for best finger detection. /// </summary> /// <param name="data">The data to encrypt.</param> /// <param name="key">The key to encrypt data.</param> public override void Encrypt(BestFingerInfo data, SessionKey key) { ValidateNull(data, nameof(data)); ValidateNull(key, nameof(key)); // Create Rbd bytes. var rbdBytes = data.ToXml().ToString(SaveOptions.DisableFormatting).GetBytes(); using (var sha = SHA256.Create()) { var rbdHash = sha.ComputeHash(rbdBytes); // Encrypt data. var encryptedRbd = key.Encrypt(rbdBytes); var encryptedHash = key.Encrypt(rbdHash); KeyInfo = key.KeyInfo; // Set related properties. AadhaarNumber = data.AadhaarNumber; Data = new EncryptedData { Data = Convert.ToBase64String(encryptedRbd) }; Hmac = Convert.ToBase64String(encryptedHash); Timestamp = data.Timestamp; if (DeviceInfo != null) { DeviceInfo.IrisDeviceCode = Metadata.DeviceNotApplicable; } } Array.Clear(rbdBytes, 0, rbdBytes.Length); }
/// <summary> /// Encrypts data captured for authentication. /// </summary> /// <param name="data">The data to encrypt.</param> /// <param name="key">The key to encrypt data.</param> public override void Encrypt(PersonalInfo data, SessionKey key) { ValidateNull(data, nameof(data)); ValidateNull(key, nameof(key)); // Create Pid bytes. var pidXml = data.ToXml().ToString(SaveOptions.DisableFormatting); var pidBytes = pidXml.GetBytes(); using (var sha = SHA256.Create()) { // Encrypt data. var encryptedPid = key.Encrypt(pidBytes); var encryptedPidHash = key.Encrypt(sha.ComputeHash(pidBytes)); KeyInfo = key.KeyInfo; // Set related properties. AadhaarNumber = data.AadhaarNumber; Uses = data.Uses; Data = new EncryptedData { Data = Convert.ToBase64String(encryptedPid) }; Hmac = Convert.ToBase64String(encryptedPidHash); Timestamp = data.Timestamp; if (DeviceInfo != null) { if (data.Biometrics.All(b => b.Type != BiometricType.Iris)) { DeviceInfo.IrisDeviceCode = Metadata.DeviceNotApplicable; } if (!data.Biometrics.Any(b => b.Type == BiometricType.Fingerprint || b.Type == BiometricType.Minutiae)) { DeviceInfo.FingerprintDeviceCode = Metadata.DeviceNotApplicable; } } // Set meta information. if (Info != null) { Info.AadhaarNumberHash = sha.ComputeHash(AadhaarNumber.GetBytes()).ToHex(); Info.Timestamp = data.Timestamp; Info.TerminalHash = sha.ComputeHash(Terminal.GetBytes()).ToHex(); const string demoStart = "<Demo", demoEnd = "</Demo"; var startOfDemoStart = pidXml.LastIndexOf(demoStart, StringComparison.Ordinal); if (startOfDemoStart >= 0) { var startOfDemoEnd = pidXml.IndexOf(demoEnd, startOfDemoStart + demoStart.Length, StringComparison.Ordinal); var realEnd = pidXml.IndexOf(">", startOfDemoEnd + demoEnd.Length, StringComparison.Ordinal); var demoXml = pidXml.Substring(startOfDemoStart, realEnd - startOfDemoStart + 1); var demoBytes = demoXml.GetBytes(); var demoHash = sha.ComputeHash(demoBytes); Info.DemographicHash = demoHash.ToHex(); Array.Clear(demoBytes, 0, demoBytes.Length); } Info.Encode(); } } Array.Clear(pidBytes, 0, pidBytes.Length); }