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 #include "base/logging.h"
      6 #include "base/time/time.h"
      7 #include "crypto/mock_apple_keychain.h"
      8 
      9 namespace crypto {
     10 
     11 OSStatus MockAppleKeychain::FindGenericPassword(
     12     CFTypeRef keychainOrArray,
     13     UInt32 serviceNameLength,
     14     const char* serviceName,
     15     UInt32 accountNameLength,
     16     const char* accountName,
     17     UInt32* passwordLength,
     18     void** passwordData,
     19     SecKeychainItemRef* itemRef) const {
     20   // When simulating |noErr|, return canned |passwordData| and
     21   // |passwordLength|.  Otherwise, just return given code.
     22   if (find_generic_result_ == noErr) {
     23     static const char kPassword[] = "my_password";
     24     DCHECK(passwordData);
     25     // The function to free this data is mocked so the cast is fine.
     26     *passwordData = const_cast<char*>(kPassword);
     27     DCHECK(passwordLength);
     28     *passwordLength = arraysize(kPassword);
     29     password_data_count_++;
     30   }
     31 
     32   return find_generic_result_;
     33 }
     34 
     35 OSStatus MockAppleKeychain::ItemFreeContent(SecKeychainAttributeList* attrList,
     36                                             void* data) const {
     37   // No-op.
     38   password_data_count_--;
     39   return noErr;
     40 }
     41 
     42 OSStatus MockAppleKeychain::AddGenericPassword(
     43     SecKeychainRef keychain,
     44     UInt32 serviceNameLength,
     45     const char* serviceName,
     46     UInt32 accountNameLength,
     47     const char* accountName,
     48     UInt32 passwordLength,
     49     const void* passwordData,
     50     SecKeychainItemRef* itemRef) const {
     51   called_add_generic_ = true;
     52 
     53   DCHECK_GT(passwordLength, 0U);
     54   DCHECK(passwordData);
     55   add_generic_password_ =
     56       std::string(const_cast<char*>(static_cast<const char*>(passwordData)),
     57                   passwordLength);
     58   return noErr;
     59 }
     60 
     61 }  // namespace crypto
     62