/// <summary> /// Perform OCSP, which checks whether the certificate is revoked or not. /// </summary> /// <since_tizen> 3 </since_tizen> /// <param name="certificateChain"> /// Valid certificate chain to perform the OCSP check. /// </param> /// <returns>A status result of the OCSP check.</returns> /// <exception cref="ArgumentNullException"> /// The certificateChain argument is null. /// </exception> /// <exception cref="ArgumentException"> /// The certificateChain is not valid chain or certificate. /// </exception> /// <exception cref="InvalidOperationException"> /// Some of the certificates in chain are expired or not valid yet. /// </exception> static public OcspStatus CheckOcsp(IEnumerable <Certificate> certificateChain) { if (certificateChain == null) { throw new ArgumentNullException("Certificate chain is null"); } IntPtr ptr = IntPtr.Zero; try { int ocspStatus = (int)OcspStatus.Good; var certChain = new SafeCertificateListHandle(certificateChain); ptr = certChain.GetHandle(); Interop.CheckNThrowException( Interop.CkmcManager.OcspCheck(ptr, ref ocspStatus), "Failed to get certificate chain with trusted certificates"); return((OcspStatus)ocspStatus); } finally { if (ptr != IntPtr.Zero) { Interop.CkmcTypes.CertListAllFree(ptr); } } }
/// <summary> /// Verifies a certificate chain and returns that chain using user entered /// trusted and untrusted CA certificates. /// </summary> /// <since_tizen> 3 </since_tizen> /// <param name="certificate">The certificate to be verified.</param> /// <param name="untrustedCertificates"> /// The untrusted CA certificates to be used in verifying a certificate chain. /// </param> /// <param name="trustedCertificates"> /// The trusted CA certificates to be used in verifying a certificate chain. /// </param> /// <param name="useTrustedSystemCertificates"> /// The flag indicating the use of the trusted root certificates in the /// system's certificate storage. /// </param> /// <returns>A newly created certificate chain.</returns> /// <exception cref="ArgumentNullException"> /// The certificate argument is null. /// </exception> /// <exception cref="ArgumentException"> /// Some of the certificates in arguments are invalid. /// </exception> /// <exception cref="InvalidOperationException"> /// Some of the certificates in arguments are expired or not valid yet. /// Certificate cannot build chain. /// The root certificate is not in the trusted system certificate store. /// </exception> /// <remarks> /// The trusted root certificate of the chain in the system's certificate storage /// is added to the certificate chain. /// </remarks> static public IEnumerable <Certificate> GetCertificateChain( Certificate certificate, IEnumerable <Certificate> untrustedCertificates, IEnumerable <Certificate> trustedCertificates, bool useTrustedSystemCertificates) { if (certificate == null) { throw new ArgumentNullException("Certificate is null"); } IntPtr certPtr = IntPtr.Zero; IntPtr untrustedPtr = IntPtr.Zero; IntPtr trustedPtr = IntPtr.Zero; IntPtr ptrCertChain = IntPtr.Zero; try { var untrusted = new SafeCertificateListHandle(untrustedCertificates); var trusted = new SafeCertificateListHandle(trustedCertificates); certPtr = certificate.GetHandle(); untrustedPtr = untrusted.GetHandle(); trustedPtr = trusted.GetHandle(); Interop.CheckNThrowException( Interop.CkmcManager.GetCertChainWithTrustedCerts( certPtr, untrustedPtr, trustedPtr, useTrustedSystemCertificates, out ptrCertChain), "Failed to get certificate chain with trusted certificates"); return(new SafeCertificateListHandle(ptrCertChain).Certificates); } finally { if (certPtr != IntPtr.Zero) { Interop.CkmcTypes.CertFree(certPtr); } if (untrustedPtr != IntPtr.Zero) { Interop.CkmcTypes.CertListAllFree(untrustedPtr); } if (trustedPtr != IntPtr.Zero) { Interop.CkmcTypes.CertListAllFree(trustedPtr); } } }