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); }
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); }