Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        /// <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);
        }