You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
64 lines
2.2 KiB
64 lines
2.2 KiB
// Copyright (c) 2012 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 CRYPTO_APPLE_KEYCHAIN_H_
|
|
#define CRYPTO_APPLE_KEYCHAIN_H_
|
|
|
|
#include <Security/Security.h>
|
|
|
|
#include "base/macros.h"
|
|
#include "build/build_config.h"
|
|
#include "crypto/crypto_export.h"
|
|
|
|
namespace crypto {
|
|
|
|
#if defined(OS_IOS)
|
|
using AppleSecKeychainItemRef = void*;
|
|
#else
|
|
using AppleSecKeychainItemRef = SecKeychainItemRef;
|
|
#endif
|
|
|
|
// Wraps the KeychainServices API in a very thin layer, to allow it to be
|
|
// mocked out for testing.
|
|
|
|
// See Keychain Services documentation for function documentation, as these call
|
|
// through directly to their Keychain Services equivalents (Foo ->
|
|
// SecKeychainFoo). The only exception is Free, which should be used for
|
|
// anything returned from this class that would normally be freed with
|
|
// CFRelease (to aid in testing).
|
|
class CRYPTO_EXPORT AppleKeychain {
|
|
public:
|
|
AppleKeychain();
|
|
virtual ~AppleKeychain();
|
|
|
|
virtual OSStatus FindGenericPassword(UInt32 serviceNameLength,
|
|
const char* serviceName,
|
|
UInt32 accountNameLength,
|
|
const char* accountName,
|
|
UInt32* passwordLength,
|
|
void** passwordData,
|
|
AppleSecKeychainItemRef* itemRef) const;
|
|
|
|
virtual OSStatus ItemFreeContent(void* data) const;
|
|
|
|
virtual OSStatus AddGenericPassword(UInt32 serviceNameLength,
|
|
const char* serviceName,
|
|
UInt32 accountNameLength,
|
|
const char* accountName,
|
|
UInt32 passwordLength,
|
|
const void* passwordData,
|
|
AppleSecKeychainItemRef* itemRef) const;
|
|
|
|
#if !defined(OS_IOS)
|
|
virtual OSStatus ItemDelete(AppleSecKeychainItemRef itemRef) const;
|
|
#endif // !defined(OS_IOS)
|
|
|
|
private:
|
|
DISALLOW_COPY_AND_ASSIGN(AppleKeychain);
|
|
};
|
|
|
|
} // namespace crypto
|
|
|
|
#endif // CRYPTO_APPLE_KEYCHAIN_H_
|