blob: e0bee05003e2b96f7630caa6e1c5c8c3a26a97de [file] [log] [blame]
// Copyright 2016 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.
#include "net/cert/cert_verify_proc_ios.h"
#include <CoreFoundation/CoreFoundation.h>
#include <Security/Security.h>
#include "base/mac/scoped_cftyperef.h"
#include "base/memory/ref_counted.h"
#include "net/cert/x509_certificate.h"
#include "net/cert/x509_util_ios_and_mac.h"
#include "net/test/cert_test_util.h"
#include "net/test/test_data_directory.h"
#include "starboard/types.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
namespace {
// Creates new SecTrustRef object backed up by cert from |cert_file|.
base::ScopedCFTypeRef<SecTrustRef> CreateSecTrust(
const std::string& cert_file) {
base::ScopedCFTypeRef<SecTrustRef> scoped_result;
scoped_refptr<net::X509Certificate> cert =
net::ImportCertFromFile(net::GetTestCertsDirectory(), cert_file);
if (!cert) {
ADD_FAILURE();
return scoped_result;
}
base::ScopedCFTypeRef<CFMutableArrayRef> certs(
net::x509_util::CreateSecCertificateArrayForX509Certificate(cert.get()));
if (!certs) {
ADD_FAILURE();
return scoped_result;
}
base::ScopedCFTypeRef<SecPolicyRef> policy(
SecPolicyCreateSSL(TRUE, CFSTR("chromium.org")));
SecTrustRef result = nullptr;
if (SecTrustCreateWithCertificates(certs.get(), policy, &result) ==
errSecSuccess) {
scoped_result.reset(result);
}
return scoped_result;
}
} // namespace
namespace net {
using CertVerifyProcIOSTest = PlatformTest;
// Tests |GetCertFailureStatusFromTrust| with null trust object.
TEST_F(CertVerifyProcIOSTest, StatusForNullTrust) {
EXPECT_EQ(CERT_STATUS_INVALID,
CertVerifyProcIOS::GetCertFailureStatusFromTrust(nullptr));
}
// Tests |GetCertFailureStatusFromTrust| with trust object that has not been
// evaluated backed by ok_cert.pem cert.
TEST_F(CertVerifyProcIOSTest, StatusForNotEvaluatedTrust) {
CertStatus status = CertVerifyProcIOS::GetCertFailureStatusFromTrust(
CreateSecTrust("ok_cert.pem"));
EXPECT_TRUE(status & CERT_STATUS_COMMON_NAME_INVALID);
EXPECT_TRUE(status & CERT_STATUS_AUTHORITY_INVALID);
EXPECT_FALSE(status & CERT_STATUS_DATE_INVALID);
}
// Tests |GetCertFailureStatusFromTrust| with evaluated trust object backed by
// expired_cert.pem cert.
TEST_F(CertVerifyProcIOSTest, StatusForEvaluatedTrust) {
base::ScopedCFTypeRef<SecTrustRef> trust(CreateSecTrust("expired_cert.pem"));
ASSERT_TRUE(trust);
SecTrustResultType result = kSecTrustResultInvalid;
SecTrustEvaluate(trust, &result);
CertStatus status = CertVerifyProcIOS::GetCertFailureStatusFromTrust(trust);
EXPECT_TRUE(status & CERT_STATUS_COMMON_NAME_INVALID);
EXPECT_TRUE(status & CERT_STATUS_AUTHORITY_INVALID);
EXPECT_TRUE(status & CERT_STATUS_DATE_INVALID);
}
} // namespace net