Home | History | Annotate | Download | only in crypto
      1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #ifndef CRYPTO_APPLE_KEYCHAIN_H_
      6 #define CRYPTO_APPLE_KEYCHAIN_H_
      7 
      8 #include <Security/Security.h>
      9 
     10 #include "base/macros.h"
     11 #include "build/build_config.h"
     12 #include "crypto/crypto_export.h"
     13 
     14 namespace crypto {
     15 
     16 #if defined(OS_IOS)
     17 using AppleSecKeychainItemRef = void*;
     18 #else
     19 using AppleSecKeychainItemRef = SecKeychainItemRef;
     20 #endif
     21 
     22 // Wraps the KeychainServices API in a very thin layer, to allow it to be
     23 // mocked out for testing.
     24 
     25 // See Keychain Services documentation for function documentation, as these call
     26 // through directly to their Keychain Services equivalents (Foo ->
     27 // SecKeychainFoo). The only exception is Free, which should be used for
     28 // anything returned from this class that would normally be freed with
     29 // CFRelease (to aid in testing).
     30 class CRYPTO_EXPORT AppleKeychain {
     31  public:
     32   AppleKeychain();
     33   virtual ~AppleKeychain();
     34 
     35   virtual OSStatus FindGenericPassword(UInt32 serviceNameLength,
     36                                        const char* serviceName,
     37                                        UInt32 accountNameLength,
     38                                        const char* accountName,
     39                                        UInt32* passwordLength,
     40                                        void** passwordData,
     41                                        AppleSecKeychainItemRef* itemRef) const;
     42 
     43   virtual OSStatus ItemFreeContent(void* data) const;
     44 
     45   virtual OSStatus AddGenericPassword(UInt32 serviceNameLength,
     46                                       const char* serviceName,
     47                                       UInt32 accountNameLength,
     48                                       const char* accountName,
     49                                       UInt32 passwordLength,
     50                                       const void* passwordData,
     51                                       AppleSecKeychainItemRef* itemRef) const;
     52 
     53 #if !defined(OS_IOS)
     54   virtual OSStatus ItemDelete(AppleSecKeychainItemRef itemRef) const;
     55 #endif  // !defined(OS_IOS)
     56 
     57  private:
     58   DISALLOW_COPY_AND_ASSIGN(AppleKeychain);
     59 };
     60 
     61 }  // namespace crypto
     62 
     63 #endif  // CRYPTO_APPLE_KEYCHAIN_H_
     64