public static ServiceResult Validate(
CertificateValidator validator,
byte[] signedCertificate,
out SoftwareCertificate softwareCertificate)
{
softwareCertificate = null;
// validate the certificate.
X509Certificate2 certificate = null;
try
{
certificate = CertificateFactory.Create(signedCertificate, true);
validator.Validate(certificate);
}
catch (Exception e)
{
return ServiceResult.Create(e, StatusCodes.BadDecodingError, "Could not decode software certificate body.");
}
// find the software certficate.
byte[] encodedData = null;
if (encodedData == null)
{
return ServiceResult.Create(StatusCodes.BadCertificateInvalid, "Could not find extension containing the software certficate.");
}
try
{
MemoryStream istrm = new MemoryStream(encodedData, false);
DataContractSerializer serializer = new DataContractSerializer(typeof(SoftwareCertificate));
softwareCertificate = (SoftwareCertificate)serializer.ReadObject(istrm);
softwareCertificate.SignedCertificate = certificate;
}
catch (Exception e)
{
return ServiceResult.Create(e, StatusCodes.BadCertificateInvalid, "Certificate does not contain a valid SoftwareCertificate body.");
}
// certificate is valid.
return ServiceResult.Good;
}
}