private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey) { RSACryptoServiceProvider rSACryptoServiceProvider; BinaryReader binaryReader = new BinaryReader(new MemoryStream(privkey)); ushort num = 0; try { try { num = binaryReader.ReadUInt16(); if (num == 33072) { binaryReader.ReadByte(); } else if (num != 33328) { rSACryptoServiceProvider = null; return(rSACryptoServiceProvider); } else { binaryReader.ReadInt16(); } num = binaryReader.ReadUInt16(); if (num != 258) { rSACryptoServiceProvider = null; } else if (binaryReader.ReadByte() == 0) { byte[] numArray = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray1 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray2 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray3 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray4 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray5 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray6 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); byte[] numArray7 = binaryReader.ReadBytes(RSAFromPkcs8.GetIntegerSize(binaryReader)); RSACryptoServiceProvider rSACryptoServiceProvider1 = new RSACryptoServiceProvider(); RSAParameters rSAParameter = new RSAParameters() { Modulus = numArray, Exponent = numArray1, D = numArray2, P = numArray3, Q = numArray4, DP = numArray5, DQ = numArray6, InverseQ = numArray7 }; rSACryptoServiceProvider1.ImportParameters(rSAParameter); rSACryptoServiceProvider = rSACryptoServiceProvider1; } else { rSACryptoServiceProvider = null; } } catch (Exception exception) { rSACryptoServiceProvider = null; } } finally { binaryReader.Close(); } return(rSACryptoServiceProvider); }
private static RSACryptoServiceProvider DecodeRSAPrivateKey(byte[] privkey) { MemoryStream input = new MemoryStream(privkey); BinaryReader binaryReader = new BinaryReader(input); RSACryptoServiceProvider result; try { ushort num = binaryReader.ReadUInt16(); if (num == 33072) { binaryReader.ReadByte(); } else { if (num != 33328) { result = null; return(result); } binaryReader.ReadInt16(); } num = binaryReader.ReadUInt16(); if (num != 258) { result = null; } else { byte b = binaryReader.ReadByte(); if (b != 0) { result = null; } else { int integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] modulus = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] exponent = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] d = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] p = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] q = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] dP = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] dQ = binaryReader.ReadBytes(integerSize); integerSize = RSAFromPkcs8.GetIntegerSize(binaryReader); byte[] inverseQ = binaryReader.ReadBytes(integerSize); RSACryptoServiceProvider rSACryptoServiceProvider = new RSACryptoServiceProvider(); rSACryptoServiceProvider.ImportParameters(new RSAParameters { Modulus = modulus, Exponent = exponent, D = d, P = p, Q = q, DP = dP, DQ = dQ, InverseQ = inverseQ }); result = rSACryptoServiceProvider; } } } catch (Exception) { result = null; } finally { binaryReader.Close(); } return(result); }