12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef NET_CERT_X509_UTIL_APPLE_H_
- #define NET_CERT_X509_UTIL_APPLE_H_
- #include <CoreFoundation/CFArray.h>
- #include <Security/Security.h>
- #include "base/mac/scoped_cftyperef.h"
- #include "base/memory/ref_counted.h"
- #include "net/base/hash_value.h"
- #include "net/base/net_export.h"
- #include "net/cert/x509_certificate.h"
- namespace net {
- namespace x509_util {
- // Creates a SecCertificate handle from the DER-encoded representation.
- // Returns NULL on failure.
- NET_EXPORT base::ScopedCFTypeRef<SecCertificateRef>
- CreateSecCertificateFromBytes(const uint8_t* data, size_t length);
- // Returns a SecCertificate representing |cert|, or NULL on failure.
- NET_EXPORT base::ScopedCFTypeRef<SecCertificateRef>
- CreateSecCertificateFromX509Certificate(const X509Certificate* cert);
- // Returns a new CFMutableArrayRef containing this certificate and its
- // intermediate certificates in the form expected by Security.framework
- // and Keychain Services, or NULL on failure.
- // The first item in the array will be this certificate, followed by its
- // intermediates, if any.
- NET_EXPORT base::ScopedCFTypeRef<CFMutableArrayRef>
- CreateSecCertificateArrayForX509Certificate(X509Certificate* cert);
- // Specify behavior if an intermediate certificate fails SecCertificate
- // parsing. kFail means the function should return a failure result
- // immediately. kIgnore means the invalid intermediate is not added to the
- // output container.
- enum class InvalidIntermediateBehavior { kFail, kIgnore };
- // Returns a new CFMutableArrayRef containing this certificate and its
- // intermediate certificates in the form expected by Security.framework
- // and Keychain Services. Returns NULL if the certificate could not be
- // converted. |invalid_intermediate_behavior| specifies behavior if
- // intermediates of |cert| could not be converted.
- NET_EXPORT base::ScopedCFTypeRef<CFMutableArrayRef>
- CreateSecCertificateArrayForX509Certificate(
- X509Certificate* cert,
- InvalidIntermediateBehavior invalid_intermediate_behavior);
- // Creates an X509Certificate representing |sec_cert| with intermediates
- // |sec_chain|.
- NET_EXPORT scoped_refptr<X509Certificate>
- CreateX509CertificateFromSecCertificate(
- base::ScopedCFTypeRef<SecCertificateRef> sec_cert,
- const std::vector<base::ScopedCFTypeRef<SecCertificateRef>>& sec_chain);
- // Creates an X509Certificate with non-standard parsing options.
- // Do not use without consulting //net owners.
- NET_EXPORT scoped_refptr<X509Certificate>
- CreateX509CertificateFromSecCertificate(
- base::ScopedCFTypeRef<SecCertificateRef> sec_cert,
- const std::vector<base::ScopedCFTypeRef<SecCertificateRef>>& sec_chain,
- X509Certificate::UnsafeCreateOptions options);
- // Calculates the SHA-256 fingerprint of the certificate. Returns an empty
- // (all zero) fingerprint on failure.
- NET_EXPORT SHA256HashValue CalculateFingerprint256(SecCertificateRef cert);
- // Returns a new CFArrayRef containing the certificate chain built in |trust|.
- base::ScopedCFTypeRef<CFArrayRef> CertificateChainFromSecTrust(
- SecTrustRef trust);
- } // namespace x509_util
- } // namespace net
- #endif // NET_CERT_X509_UTIL_APPLE_H_
|