Ejemplo n.º 1
0
        private static String encryptPinBlock(String clearPinBlock, byte[] pinKey)
        {
            Debug.Assert(clearPinBlock != null, "Pin block cannot be null");
            Debug.Assert(clearPinBlock.Length <= 16, "Pin block cannot be more than 16 xters");
            byte[] randomBytes       = new byte[1];
            RandomNumberGenerator sr = RNGCryptoServiceProvider.Create();

            sr.GetBytes(randomBytes);
            int randomDigit = (int)((randomBytes[0] * 10) / 128);

            randomDigit = Math.Abs(randomDigit);
            int pinpadlen = 16 - clearPinBlock.Length;

            for (int i = 0; i < pinpadlen; i++)
            {
                clearPinBlock = clearPinBlock + randomDigit;
            }

            byte[] encodedEncryptedPINBlockBytes = DESUtils.encrypt(clearPinBlock, pinKey);
            String encryptedPinBlock             = Encoding.Default.GetString(encodedEncryptedPINBlockBytes);

            clearPinBlock = "0000000000000000";
            AppUtils.zeroise(encodedEncryptedPINBlockBytes);
            return(encryptedPinBlock);
        }
Ejemplo n.º 2
0
        public static Dictionary <string, string> generateSecureData(Dictionary <string, string> options, Dictionary <string, string> pinData)
        {
            string pin    = "0000";
            string cvv    = "000";
            string expiry = "0000";
            Random rand   = new Random();
            string ttId   = rand.Next(999).ToString();
            string pan    = "0000000000000000";
            string amt    = "";
            string msisdn = "";
            string pubMod = publicKeyModulus;
            string pubExp = publicKeyExponent;

            if (options.ContainsKey("pan"))
            {
                options.TryGetValue("pan", out pan);
                pan = (pan == null || pan.Equals("")) ? "0000000000000000" : pan;
            }
            if (options.ContainsKey("ttId"))
            {
                options.TryGetValue("ttId", out ttId);
                ttId = (ttId == null || ttId.Equals("")) ? rand.Next(999).ToString() : ttId;
            }
            if (options.ContainsKey("amount"))
            {
                options.TryGetValue("amount", out amt);
                amt = (amt == null) ? "" : amt;
            }
            if (options.ContainsKey("mobile"))
            {
                options.TryGetValue("mobile", out msisdn);
                msisdn = (msisdn == null) ? "" : msisdn;
            }

            if (pinData.ContainsKey("pin"))
            {
                pinData.TryGetValue("pin", out pin);
                pin = (pin == null || pin.Equals("")) ? "0000" : pin;
            }
            if (pinData.ContainsKey("cvv"))
            {
                pinData.TryGetValue("cvv", out cvv);
                cvv = (cvv == null || cvv.Equals("")) ? "000" : cvv;
            }
            if (pinData.ContainsKey("expiry"))
            {
                pinData.TryGetValue("expiry", out expiry);
                expiry = (expiry == null || expiry.Equals("")) ? "0000" : expiry;
            }

            byte[] pinKey = DESUtils.generateKey();

            /*
             * if(options.ContainsKey("publicKeyModulus"))
             * {
             *  options.TryGetValue("publicKeyModulus", out pubMod);
             *  pubMod = (pubMod == null || pubMod.Equals("")) ? publicKeyModulus : pubMod;
             * }
             * if(options.ContainsKey("publicKeyExponent"))
             * {
             *  options.TryGetValue("publicKeyExponent", out pubExp);
             *  pubExp = (pubExp == null || pubExp.Equals("")) ? publicKeyExponent : pubExp;
             * }
             */

            string secureData = getGenericSecure(pan, msisdn, ttId, amt, pinKey, pinKey);
            string pinBlock   = getEncryptedPinCvv2ExpiryDateBlock(pin, cvv, expiry, pinKey);
            string macData    = getMacCipherText(msisdn, ttId, amt);
            string mac        = MACUtils.getMacValueUsingHMAC(macData, pinKey);

            Dictionary <string, string> secure = new Dictionary <string, string>();

            secure.Add("secureData", secureData);
            secure.Add("pinBlock", pinBlock);
            secure.Add("mac", mac);

            return(secure);
        }