· 9 years ago · Feb 10, 2017, 12:42 PM
1using Org.BouncyCastle.Bcpg;
2using Org.BouncyCastle.Bcpg.OpenPgp;
3using Org.BouncyCastle.Crypto;
4using Org.BouncyCastle.Security;
5using Portal.Models;
6using System;
7using System.Collections.Generic;
8using System.IO;
9using System.Linq;
10using System.Text;
11using System.Web;
12using System.Web.Mvc;
13
14namespace Portal.Controllers
15{
16 //[Authorize]
17 public class PagoController : Controller
18 {
19 // GET: Pago
20 public ActionResult Index(string year = "")
21 {
22
23
24 //String acquirerID = "144";
25 //String idCommerce = "8022";
26 String acquirerID = "29";
27 String idCommerce = "7154";
28
29 //Parametros de configuracion para VPOS
30 String purchaseAmount = System.Web.HttpUtility.UrlEncode(Encrypt("5000")).Replace("%5cn", "%0A");
31 String purchaseCurrencyCode = System.Web.HttpUtility.UrlEncode(Encrypt("604")).Replace("%5cn", "%0A"); //Codigo para nuevos soles
32 String operationNumber = System.Web.HttpUtility.UrlEncode(Encrypt("999964")).Replace("%5cn", "%0A"); // numero de operacion debe ser unico x transacc
33
34 //Parametros de configuracion para Wallet
35
36 //String commerce = "262";
37 String commerce = "262";
38 String cardHolderCommerce = EncryptWallet("48126179");
39 String names = EncryptWallet("Gerardo");
40 String lastnames = EncryptWallet("Davila Garcia");
41 String mail = EncryptWallet("a20101616@pucp.pe");
42
43 //Inicialización del Servicio Web y de parámetros de envÃo
44 ServiceReference2.WalletCommerceClient walletCommerce = new ServiceReference2.WalletCommerceClient();
45 String ansDescription = "";
46 String codAsoCardHolderWallet = "";
47 String registerVerification = "";
48 String date = "";
49 String hour = "";
50
51 //Consumo del método RegisterCardHolder y recepción del resultado encriptado
52 String result1 = walletCommerce.RegisterCardHolder(commerce, cardHolderCommerce, mail, names, lastnames, mail, mail, mail, registerVerification, out ansDescription, out codAsoCardHolderWallet, out date, out hour);
53 String txtMensajeEncriptado = result1;
54
55 ViewBag.txtMensajeEncriptado = txtMensajeEncriptado;
56 ViewBag.cardHolderCommerce = cardHolderCommerce;
57
58
59 //Llave Publica de ALIGNET para Wallet
60 String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
61 "Version: BCPG v1.43" + "\n" + "\n" +
62
63 "mQENBFiBPNIBCACiss1r+qQlc6+hn9gGEvp0/ba1XoVYJP30cOoQSgXwE21NmHNt" + "\n" +
64 "sjFmGqdZUs/9+Q+BKwt3BjZQZU2Fv3jWWbME40AWgN2cL+K/NWFF7uYp/ljBepT0" + "\n" +
65 "UkQm2dUV0mKrgBb8H3E59HXM4rofOLmxNGf+f7vzv7mmitSBLoOB36nLNk6z91lU" + "\n" +
66 "MWNjivRC6UJExQbtm2MI7RvXYnG7hocagZYpoITlW52pP9rv/Ce0OFdFiDgPnE9E" + "\n" +
67 "qyIdyVwwyQQM7Qfj0S9fqmcxwyE/ww9jQJMbhxi7NPOBc3dlPGnVw+VLFiKtN9kD" + "\n" +
68 "drJVH9mSOTrWmfETwqlhOpzOlmn0QYuefz/tABEBAAG0IEFnalJEVE5FZ3JtdVVG" + "\n" +
69 "TnN4V0YtNTY0MzMzNzQzNjgyiQEcBBABAgAGBQJYgTzSAAoJEI2j3PozlD+vmPUI" + "\n" +
70 "AJ/YIM7QMzPOfoA1eeciQE+oi9n+bc4/BBggSFfxhEbh4QKeyUI+ZLjnNO35I/3r" + "\n" +
71 "+2EQ8TMwx23aHqUpEUYs/MCn4C4F3+n4lcBeEFFWdN05VrTkXnDcO+8pbu2+ep68" + "\n" +
72 "J7CGR8KcxWrqeQC9kIu5iO5Voxm7hCRc0lDgSzTtBbw9Llyj3McPoSFuSU8FobEQ" + "\n" +
73 "NJowKih7zln6JxT1fy1fRL7ZV4bChQre56B08fCcb3qTLSvnWDEEXH3ppuqf18dK" + "\n" +
74 "uhMi5JDV1fepCS9GzueFTWjnt67wXnOmORG41VI6jzYzoknBYfHEGEA0zTfHsGgW" + "\n" +
75 "OdDTX4IUe5yu/G6SSjk00HU=" + "\n" +
76 "=gi3I" + "\n" +
77 "-----END PGP PUBLIC KEY BLOCK-----";
78
79 String txtLlavePublica = publicKey;
80
81 //Llave Privada del Comercio para Wallet
82 String privateKey = "-----BEGIN PGP PRIVATE KEY BLOCK-----" + "\n" +
83 "Version: BCPG v1.43" + "\n" + "\n" +
84
85 "lQPGBFiBPNIBCACyVUq/WwrDEENbvX7s+swBTlwJ486/g+k3q+qiY+gdH22VDTsg" + "\n" +
86 "8KDPET37O+IlFIQUAx+Z/2sZxjNQyUFr3kUxZTx/4w+v3r31YApXzV64qUe4Nzcq" + "\n" +
87 "0MznWNGekzuAhMAxPVZESQYO1x2VD07+GCOMPQxy1tQK4dsv2/wJsajKll55hoGC" + "\n" +
88 "s0uCGqHzOrKra3hMTl+2DDwm0AH65wCy1qSeZ3QVZXF0W6sC/hj9rmrBwRPGRkSE" + "\n" +
89 "1uooA0c8/OzUD0/cKGUgQj+SYyLtsO8ukUhpmo/1O6quN3y3prunadt3/dUguzH4" + "\n" +
90 "iqkID1BAynh3BiaPbcZ+O+jFoP696WlfCqk3ABEBAAH+CQMCO4Rw76nnC4dgMz2c" + "\n" +
91 "eDXLXgdjzHFKW6wbrvwTG8yudqeSltu45lWC2tZGKNhrMjmnOV7jX6d6vCHw4r0o" + "\n" +
92 "bXl48i3dC6hu1Zs+B5H8t0xwP2ihaQpIITVwN/Mmq5qjqrIjPgsFZc9o1r5CD2rY" + "\n" +
93 "Z400SX05YkKfoLsEdEPEzBT0KsS+RLSneIfRs2fGa6DAg9akrZIVDRuRaZzYGjVn" + "\n" +
94 "JSuDJ6dQ8NGLyJha3pc80YuA1MrjW+aEaO62Hppf7w5y+uocs8u9cfGLyaLwBO1A" + "\n" +
95 "SX2D+XkktozzmcjqrdpHWWXqxRq7q9dZSraJW61qFLWoFdNCx5UX6XO5t/WWCP1D" + "\n" +
96 "5myLNoNlLjDXo1IMlgWuECKVhW6MiGscwf3YmZEgIrsCz73oYCcZzN8D/4J90B5H" + "\n" +
97 "FZ1jBJtIpACPWJiNFQfOrfNwdfe8M3xNHhipWj+NvL1Ap21UpSpuDoKm0B1koqqw" + "\n" +
98 "oDd87Ze7RaVgyQh0KtQSDM9KiTqSAdkEW9GDaR0i88DB3vT8vmFTyIKGERd3A3Oa" + "\n" +
99 "NS6Qoou+/4c/XYCw8Do8waYMBpFRZKvmFwggF7/6x/8rj01LuhuYLrCXTJW9WaK5" + "\n" +
100 "mgnJNkV69/AlPDDUrFHqQxJz81px7vdYzBXm8E6qaDl0RFhrdrrMCLUjoj1k3Hmi" + "\n" +
101 "JkbRDgeYepWi1ryDSzbB3S4HsGUHIgQnvIiIstmtir8G6uW6HDfqQPH91fdqByHE" + "\n" +
102 "aUVNHGEysmjNre7m4EOTVBaq4gAH4b9xMyKdNNW/tkx/KytPSXMEmyYXxbZa/0je" + "\n" +
103 "/ciTrMc2kQQc/7L14eOlv5ChbyNTmKS83rieu76upr1GemFY/ZM/kEhv7X+rZZEY" + "\n" +
104 "RpqO1NheHfbFL9F+Su5aGpWVYlYEMnV2NDfGMb0v7Qvtet8x7iLS2hy4Ps6u6yDo" + "\n" +
105 "P9WKExH8S4u7tAhBZWx1MTIzNIkBHAQQAQIABgUCWIE80gAKCRBQQMoWQOtcmYJe" + "\n" +
106 "B/96nsXKhigZLbBZ7iLHwp905FaQvE5d/GHaYU+F4G4HiVuEcfX6IPGwIrTM7c6W" + "\n" +
107 "/XMnnsOB6lgLj/V0KyNRF8AMy+RD2N0Z0vOCIS9LwT6yhcfjXwUR4iPdPw8q3SKV" + "\n" +
108 "RywukWveXjjMQZeLGiQfR2ij8hvC4KFizr+ImzUtBqLeHeG8DdRqDqPCPmFQWVW5" + "\n" +
109 "KvHpyMnjWBVVwkLNXFzyJpAb+/Pb7MD9p/ymGVJZxGlvq1tV1F2AxXN5x1xsSEaO" + "\n" +
110 "lAU4rJvYC6a/CATqWqx+4KyRYZfFHefb5RLuDGiWRWVqHkaYAbvy0EBGHx2T8v64" + "\n" +
111 "DwY1TrBTSEJkCryNb+DYVcRg" + "\n" +
112 "=Jcqf" + "\n" +
113 "-----END PGP PRIVATE KEY BLOCK-----";
114
115 String txtLlavePrivada = privateKey;
116
117 //Clave Wallet (Verificar)
118
119 //String password = "RPBtNrgQKruEBwEcNd*36689974424";
120
121 String password = "Aelu1234";
122
123 //Recepción, desencriptación e interpretación de los parámetros de respuesta
124
125 Stream messageCryptoStream;
126 Byte[] messageCryptoByteArray = Encoding.UTF8.GetBytes(result1);
127 messageCryptoStream = new MemoryStream(messageCryptoByteArray);
128 Stream privateKeyStream;
129 Byte[] privateKeyByteArray = Encoding.UTF8.GetBytes(privateKey);
130 privateKeyStream = new MemoryStream(privateKeyByteArray);
131 String result = Decrypt(messageCryptoStream, password, privateKeyStream);
132 String txtMensajeDesencriptado = result;
133
134 ViewBag.txtMensajeDesencriptado = txtMensajeDesencriptado;
135
136 //Asignacion a la pagina principal
137
138 ViewBag.acquirerID = acquirerID;
139 ViewBag.idCommerce = idCommerce;
140 ViewBag.purchaseAmount = purchaseAmount;
141 ViewBag.purchaseCurrencyCode = purchaseCurrencyCode;
142
143 ViewBag.operationNumber = operationNumber;
144
145 #region pago item
146 decimal montoMensualSocio = 200;
147
148 List<PagoItem> pagosGrabados = new List<PagoItem>();
149
150 pagosGrabados.Add(new PagoItem
151 {
152 mesAPagar = "201701",
153 mesAPagarShow = "01/2017",
154 montoMensual = 180,
155 estadoPago = 1
156 });
157
158 year = string.IsNullOrEmpty(year) ? DateTime.Now.Year.ToString() : year;
159
160
161 Pago pago = new Pago();
162
163 List<PagoItem> pagos = new List<PagoItem>();
164
165 PagoItem item;
166 for (var i = 1; i <= 12; i++)
167 {
168 string dia = i.ToString();
169
170 if (i < 10)
171 {
172 dia = string.Format("0{0}", dia);
173 }
174 string mesApagar = string.Format("{0}{1}", year, dia);
175
176 var grabado = pagosGrabados.Where(n => n.mesAPagar == mesApagar).ToList();
177
178 if (grabado.Count > 0)
179 {
180 var pagado = grabado.FirstOrDefault();
181 item = new PagoItem();
182 item.mesAPagar = pagado.mesAPagar;
183 item.montoMensual = pagado.montoMensual;
184 item.estadoPago = 1;
185 }
186 else
187 {
188 item = new PagoItem();
189 item.mesAPagar = string.Format("{0}{1}", year, dia);
190 item.montoMensual = montoMensualSocio;
191 item.estadoPago = 0;
192 }
193 pagos.Add(item);
194 }
195 #endregion
196 pago.items = pagos;
197
198
199
200 return View(pago);
201
202 }
203
204 [HttpPost]
205 public ActionResult CreateCart(List<PagoItem> pagos)
206 {
207 try
208 {
209 SessionItem cart = new SessionItem();
210 cart.UserName = User.Identity.Name;
211 cart.UserSID = Guid.NewGuid();
212 cart.items = pagos;
213
214 HttpContext.Session["cart"] = cart;
215
216 // TODO: Add insert logic here
217 //var directorLN = new DirectorLN();
218 //directorLN.Insertar(director);
219 return RedirectToAction("DetallePago");
220 }
221 catch (Exception ex)
222 {
223 return View("Error");
224 }
225 }
226
227 // GET: Director/Details/5
228 public ActionResult DetallePago()
229 {
230 try
231 {
232 return View();
233 }
234 catch (Exception ex)
235 {
236 return View("Error");
237 }
238 }
239
240 #region Funciones
241 private String EncryptWallet(string input)
242 {
243
244 String publicKeyFile;
245 PgpPublicKey pubkey;
246 Stream keyIn;
247 Byte[] encrypted;
248 Byte[] original;
249
250 //Llave Publica de ALIGNET para Wallet
251 //Llave Publica de ALIGNET para Wallet
252 String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
253 "Version: BCPG v1.43" + "\n" + "\n" +
254
255 "mQENBFiBPNIBCACiss1r+qQlc6+hn9gGEvp0/ba1XoVYJP30cOoQSgXwE21NmHNt" + "\n" +
256 "sjFmGqdZUs/9+Q+BKwt3BjZQZU2Fv3jWWbME40AWgN2cL+K/NWFF7uYp/ljBepT0" + "\n" +
257 "UkQm2dUV0mKrgBb8H3E59HXM4rofOLmxNGf+f7vzv7mmitSBLoOB36nLNk6z91lU" + "\n" +
258 "MWNjivRC6UJExQbtm2MI7RvXYnG7hocagZYpoITlW52pP9rv/Ce0OFdFiDgPnE9E" + "\n" +
259 "qyIdyVwwyQQM7Qfj0S9fqmcxwyE/ww9jQJMbhxi7NPOBc3dlPGnVw+VLFiKtN9kD" + "\n" +
260 "drJVH9mSOTrWmfETwqlhOpzOlmn0QYuefz/tABEBAAG0IEFnalJEVE5FZ3JtdVVG" + "\n" +
261 "TnN4V0YtNTY0MzMzNzQzNjgyiQEcBBABAgAGBQJYgTzSAAoJEI2j3PozlD+vmPUI" + "\n" +
262 "AJ/YIM7QMzPOfoA1eeciQE+oi9n+bc4/BBggSFfxhEbh4QKeyUI+ZLjnNO35I/3r" + "\n" +
263 "+2EQ8TMwx23aHqUpEUYs/MCn4C4F3+n4lcBeEFFWdN05VrTkXnDcO+8pbu2+ep68" + "\n" +
264 "J7CGR8KcxWrqeQC9kIu5iO5Voxm7hCRc0lDgSzTtBbw9Llyj3McPoSFuSU8FobEQ" + "\n" +
265 "NJowKih7zln6JxT1fy1fRL7ZV4bChQre56B08fCcb3qTLSvnWDEEXH3ppuqf18dK" + "\n" +
266 "uhMi5JDV1fepCS9GzueFTWjnt67wXnOmORG41VI6jzYzoknBYfHEGEA0zTfHsGgW" + "\n" +
267 "OdDTX4IUe5yu/G6SSjk00HU=" + "\n" +
268 "=gi3I" + "\n" +
269 "-----END PGP PUBLIC KEY BLOCK-----";
270
271 Byte[] byteArray = Encoding.UTF8.GetBytes(publicKey);
272 keyIn = new MemoryStream(byteArray);
273 pubkey = ReadPublicKey(keyIn);
274 original = Encoding.ASCII.GetBytes(input);
275 encrypted = Encrypt(original, pubkey);
276 return Encoding.ASCII.GetString(encrypted);
277 }
278
279 public String Decrypt(Stream input, String password, Stream privateKeyPath)
280 {
281
282 input = PgpUtilities.GetDecoderStream(input);
283
284
285 PgpObjectFactory pgpObjF = new PgpObjectFactory(input);
286 PgpEncryptedDataList enc;
287 PgpObject obj = pgpObjF.NextPgpObject();
288 if (obj is PgpEncryptedDataList)
289 enc = (PgpEncryptedDataList)obj;
290 else
291 enc = (PgpEncryptedDataList)pgpObjF.NextPgpObject();
292
293 //AsymmetricKeyParameter akp = new AsymmetricKeyParameter(true);
294
295 PgpPrivateKey privKey = GetPrivateKey(privateKeyPath, password); // esto esta bien
296 PgpPublicKeyEncryptedData pbe = enc.GetEncryptedDataObjects().Cast<PgpPublicKeyEncryptedData>().First();
297 Stream clear;
298
299 clear = pbe.GetDataStream(privKey);
300 PgpObjectFactory plainFact = new PgpObjectFactory(clear);
301 PgpObject message = plainFact.NextPgpObject();
302 if ((message is PgpCompressedData))
303 {
304 PgpCompressedData cData = (PgpCompressedData)message;
305 Stream compDataIn = cData.GetDataStream();
306 PgpObjectFactory o = new PgpObjectFactory(compDataIn);
307 message = o.NextPgpObject();
308 if ((message is PgpOnePassSignatureList))
309 {
310 message = o.NextPgpObject();
311 PgpLiteralData Ld = null;
312 Ld = (PgpLiteralData)message;
313 Stream unc = Ld.GetInputStream();
314 StreamReader reader = new StreamReader(unc);
315 return reader.ReadToEnd();
316 }
317 else
318 {
319 PgpLiteralData Ld = null;
320 Ld = (PgpLiteralData)message;
321 Stream unc = Ld.GetInputStream();
322 StreamReader reader = new StreamReader(unc);
323 return reader.ReadToEnd();
324 }
325 }
326
327
328
329
330 return null;
331
332 }
333
334 //Función para obtener la llave privada del comercio
335
336
337 private static PgpPrivateKey GetPrivateKey(Stream privateKeyPath, String password)
338 {
339 using (Stream inputStream = PgpUtilities.GetDecoderStream(privateKeyPath))
340 {
341 PgpSecretKeyRingBundle secretKeyRingBundle = new PgpSecretKeyRingBundle(inputStream);
342 foreach (PgpSecretKeyRing kRing in secretKeyRingBundle.GetKeyRings())
343 {
344 foreach (PgpSecretKey secretKey in kRing.GetSecretKeys())
345 {
346 PgpPrivateKey privKey = secretKey.ExtractPrivateKey(password.ToCharArray());
347 if (object.ReferenceEquals(privKey.Key.GetType(), typeof(Org.BouncyCastle.Crypto.Parameters.RsaPrivateCrtKeyParameters)))
348 {
349 return privKey;
350 }
351 }
352 }
353 }
354 return null;
355 }
356
357
358
359
360
361 private String Encrypt(string input)
362 {
363
364 String publicKeyFile;
365 PgpPublicKey pubKey;
366 Stream keyIn;
367 Byte[] encrypted;
368 Byte[] original;
369
370 //llave publica alignet pasarela
371
372 String publicKey = "-----BEGIN PGP PUBLIC KEY BLOCK-----" + "\n" +
373 "Version: BCPG v1.43" + "\n" + "\n" +
374
375 "mQENBFiBPNIBCACrfI9WOFybUhQt7SmXT/XzeP16Lhat1nMCw1zS4g4vuYUKQLPg" + "\n" +
376 "bv/DngXDa0+PD3RKpqs5Dv/8bIBMSrqQcpAC2BomD0/S1HrVWEwsZ5gpXhwfXUAF" + "\n" +
377 "M8vHx7m7YZpnmIPKZ9DHrniZFabXHuc6GUsUL6MY1+0W41C5XtC4gViFDKTSM2Xb" + "\n" +
378 "ewnsFqy7l7we+r3ikhGWhdVoO6sRrn7ULa/BPx37DThAQ5y6gL66kcoRJGIbKgtg" + "\n" +
379 "moUXhTWACYMT45aonnk4/SRkMNgODByd9x8dCbe0nuprs27/dI+FcAg1LM0h20Cv" + "\n" +
380 "e9ClNhDn1lTKN1sJlwTzlMtL79/sv4LhCYrvABEBAAG0GG1kRmJ0amNqWmNyRUdz" + "\n" +
381 "eUA1OTQ1NTQ4NYkBHAQQAQIABgUCWIE80gAKCRBwMNEclo7Y0zfPCACi9KFg2wf3" + "\n" +
382 "TgH2rrkHyJD4Bz6wTH4Ybm624yOf/A0lEiaApqvE98+Dlb7MTjTPVZQKZ2KrK4Xu" + "\n" +
383 "u0s6TGipDEvA5PNtnZl1rsol+0Ayt6G5tvT6x7PEJmb8GKEZhmsu/XO1qlqlF2S3" + "\n" +
384 "/TJJ4Lvv0eMaBZFAs4mjDm6FWaStWCrH9i+fRY0QEqVn1dt48apcMuFyAMgn+DVW" + "\n" +
385 "nmkYPNa9+EWfBR9rfQXN8uMI56zBUVZd7POLCzdJ25Y1mHucqBx7TapfqGyexHHa" + "\n" +
386 "06khpupLNehw5QsRdM+p61Xn6BCxk2R7cosXl65+yqOfNJHr0Be5kHnQDgaAoZO2" + "\n" +
387 "7RF9uzzE6onL" + "\n" +
388 "=SzQd" + "\n" +
389 "-----END PGP PUBLIC KEY BLOCK-----";
390
391 // System.Diagnostics.Debug.WriteLine(publicKey);
392
393
394 Byte[] byteArray = Encoding.UTF8.GetBytes(publicKey);
395 keyIn = new MemoryStream(byteArray);
396 pubKey = ReadPublicKey(keyIn);
397 System.Diagnostics.Debug.WriteLine("BABY COMEBAAAAAAAAAACK");
398 if (pubKey == null) System.Diagnostics.Debug.WriteLine("NUULL CARAJOO");
399 else System.Diagnostics.Debug.WriteLine("NO SOY NULL NO SOY NULL ZI");
400
401
402
403 original = Encoding.ASCII.GetBytes(input);
404 encrypted = Encrypt(original, pubKey);
405 return Encoding.ASCII.GetString(encrypted);
406
407
408 }
409
410 private byte[] Encrypt(byte[] clearData, PgpPublicKey encKey)
411 {
412
413 Boolean armor = true;
414 String filename = PgpLiteralData.Console;
415 MemoryStream bOut = new MemoryStream();
416 Byte[] bytes; //= new byte[16 * 1024];// mi variable
417
418 PgpCompressedDataGenerator comData = new PgpCompressedDataGenerator(Org.BouncyCastle.Bcpg.CompressionAlgorithmTag.Zip);
419 Stream cos = comData.Open(bOut);
420 PgpLiteralDataGenerator lData = new PgpLiteralDataGenerator();
421 Stream pOut = lData.Open(cos, PgpLiteralData.Binary, filename, clearData.Length, DateTime.UtcNow);
422
423 pOut.Write(clearData, 0, clearData.Length);
424 lData.Close();
425 comData.Close();
426
427 PgpEncryptedDataGenerator cPk = new PgpEncryptedDataGenerator(SymmetricKeyAlgorithmTag.Cast5, new SecureRandom());
428 cPk.AddMethod(encKey);
429 bytes = bOut.ToArray();
430 MemoryStream encOut = new MemoryStream();
431 Stream os = encOut;
432
433 if (armor)
434 {
435 os = new ArmoredOutputStream(os);
436 }
437
438 Stream cOut = cPk.Open(os, bytes.Length);
439 cOut.Write(bytes, 0, bytes.Length);
440 cOut.Close();
441
442 if (armor)
443 {
444 os.Close();
445 }
446 encOut.Close();
447 return encOut.ToArray();
448 }
449
450 private PgpPublicKey ReadPublicKey(Stream inputStream)
451 {
452 inputStream = PgpUtilities.GetDecoderStream(inputStream);
453 PgpPublicKeyRingBundle pgpPub = new PgpPublicKeyRingBundle(inputStream);
454
455 foreach (PgpPublicKeyRing kRing in pgpPub.GetKeyRings())
456 {
457 foreach (PgpPublicKey k in kRing.GetPublicKeys())
458 {
459 if (k.IsEncryptionKey) return k;
460 }
461 }
462
463 //return null;
464 throw new ArgumentException("No se puede encontrar la llave encriptada en key ring amix");
465
466 }
467
468
469 #endregion Funciones
470
471 }
472}