public object ReadObject()
{
string line;
while ((line = reader.ReadLine()) != null)
{
int startPos = line.IndexOf(BeginString);
if (startPos == -1)
continue;
startPos += BeginString.Length;
int endPos = line.IndexOf('-', startPos);
if (endPos == -1)
endPos = line.Length;
string headerName = line.Substring(startPos, endPos - startPos).Trim();
//Console.WriteLine("[" + headerName + "]");
string endMarker = "-----END " + headerName;
switch (headerName)
{
case "PUBLIC KEY":
return ReadPublicKey(endMarker);
case "RSA PUBLIC KEY":
return ReadRsaPublicKey(endMarker);
case "CERTIFICATE REQUEST":
case "NEW CERTIFICATE REQUEST":
return ReadCertificateRequest(endMarker);
case "CERTIFICATE":
case "X509 CERTIFICATE":
return ReadCertificate(endMarker);
case "PKCS7":
return ReadPkcs7(endMarker);
case "X509 CRL":
return ReadCrl(endMarker);
case "ATTRIBUTE CERTIFICATE":
return ReadAttributeCertificate(endMarker);
case "RSA PRIVATE KEY":
return ReadKeyPair("RSA", endMarker);
case "DSA PRIVATE KEY":
return ReadKeyPair("DSA", endMarker);
// TODO Add back in when tests done, and return type issue resolved
//case "EC PARAMETERS":
// return ReadECParameters(endMarker);
case "EC PRIVATE KEY":
return ReadECPrivateKey(endMarker);
default:
// TODO Throw an exception for an unknown header?
// Ignore contents
ReadBytes(endMarker);
break;
}
}
return null;
}