private RSAParameters GetParametersOriginal() { using (ASNPrivateKeyParser parser = new ASNPrivateKeyParser(this.rawParameters)) { RSAParameters result = new RSAParameters(); if (!parser.IsNextTag(0x30)) { throw new InvalidKeyFileException(); } parser.EnterNextContent(); var versionBytes = parser.GetNext(3); if (versionBytes.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false) { throw new InvalidKeyFileException(); } result.Modulus = parser.GetNextContent(); result.Exponent = parser.GetNextContent(); result.D = parser.GetNextContent(); result.P = parser.GetNextContent(); result.Q = parser.GetNextContent(); result.DP = parser.GetNextContent(); result.DQ = parser.GetNextContent(); result.InverseQ = parser.GetNextContent(); return(result); } }
private RSAParameters GetParametersAlt() { using (ASNPrivateKeyParser parser = new ASNPrivateKeyParser(this.rawParameters)) { RSAParameters result = new RSAParameters(); // check for wrap sequence if (!parser.IsNextTag(0x30)) { throw new InvalidKeyFileException(); } // enter sequence parser.EnterNextContent(); // get version bytes var versionBytes = parser.GetNext(3); if (versionBytes.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false) { throw new InvalidKeyFileException(); } // sequence with objectId if (!parser.IsNextTag(0x30)) { throw new InvalidKeyFileException(); } parser.EnterNextContent(); // check for objectId if (!parser.IsNextTag(0x06)) { throw new InvalidKeyFileException(); } var objectIdentifier = parser.GetNextContent(); if (objectIdentifier.SequenceEqual(new byte[] { 0x2a, 0x86, 0x48, 0x86, 0xf7, 0x0d, 0x01, 0x01, 0x01 }) == false) { throw new InvalidKeyFileException(); } var nullBytes = parser.GetNext(2); if (nullBytes[0] != 0x05 || nullBytes[1] != 0x0) { throw new InvalidKeyFileException(); } if (!parser.IsNextTag(0x04)) { throw new InvalidKeyFileException(); } parser.EnterNextContent(); // check for wrap sequence if (!parser.IsNextTag(0x30)) { throw new InvalidKeyFileException(); } // enter sequence parser.EnterNextContent(); var versionBytes2 = parser.GetNext(3); if (versionBytes2.SequenceEqual(new byte[] { 0x02, 0x01, 0x00 }) == false) { throw new InvalidKeyFileException(); } result.Modulus = parser.GetNextContent(); result.Exponent = parser.GetNextContent(); result.D = parser.GetNextContent(); result.P = parser.GetNextContent(); result.Q = parser.GetNextContent(); result.DP = parser.GetNextContent(); result.DQ = parser.GetNextContent(); result.InverseQ = parser.GetNextContent(); return(result); } }