// static bool OTKeyring::IOS_StoreSecret(const OTString& strUser, const OTPassword& thePassword, const std::string& str_display) { OT_ASSERT(strUser.Exists()); OT_ASSERT(thePassword.getMemorySize() > 0); CFStringRef service_name = CFSTR("opentxs"); CFStringRef account_name = CFStringCreateWithCString(nullptr, strUser.Get(), kCFStringEncodingUTF8); CFDataRef vData = CFDataCreateWithBytesNoCopy( nullptr, thePassword.getMemory_uint8(), thePassword.getMemorySize(), kCFAllocatorNull); const void* keys[] = {kSecClass, kSecAttrService, kSecAttrAccount, kSecValueData}; const void* values[] = {kSecClassGenericPassword, service_name, account_name, vData}; CFDictionaryRef item = CFDictionaryCreate(nullptr, keys, values, 4, nullptr, nullptr); OSStatus theError = SecItemAdd(item, nullptr); CFRelease(item); CFRelease(vData); CFRelease(account_name); if (theError != noErr) { otErr << "OTKeyring::IOS_StoreSecret: Error in SecItemAdd.\n"; return false; } return true; }
OTPassword::OTPassword(const OTPassword& rhs) : size_(0) , isText_(rhs.isPassword()) , isBinary_(rhs.isMemory()) , isPageLocked_(false) , blockSize_( rhs.blockSize_) // The buffer has this size+1 as its static size. { if (isText_) { data_[0] = '\0'; setPassword_uint8(rhs.getPassword_uint8(), rhs.getPasswordSize()); } else if (isBinary_) { setMemory(rhs.getMemory_uint8(), rhs.getMemorySize()); } }
OTPassword::OTPassword(const OTPassword & rhs) : m_nPasswordSize(0), m_bIsText(rhs.isPassword()), m_bIsBinary(rhs.isMemory()), m_bIsPageLocked(false), m_theBlockSize(rhs.m_theBlockSize) // The buffer has this size+1 as its static size. { if (m_bIsText) { m_szPassword[0] = '\0'; setPassword_uint8(rhs.getPassword_uint8(), rhs.getPasswordSize()); } else if (m_bIsBinary) { setMemory(rhs.getMemory_uint8(), rhs.getMemorySize()); } }
bool OTPassword::Compare(OTPassword& rhs) const { OT_ASSERT(isPassword() || isMemory()); OT_ASSERT(rhs.isPassword() || rhs.isMemory()); if (isPassword() && !rhs.isPassword()) return false; if (isMemory() && !rhs.isMemory()) return false; const uint32_t nThisSize = isPassword() ? getPasswordSize() : getMemorySize(); const uint32_t nRhsSize = rhs.isPassword() ? rhs.getPasswordSize() : rhs.getMemorySize(); if (nThisSize != nRhsSize) return false; if (0 == memcmp(isPassword() ? getPassword_uint8() : getMemory_uint8(), rhs.isPassword() ? rhs.getPassword_uint8() : rhs.getMemory_uint8(), rhs.isPassword() ? rhs.getPasswordSize() : rhs.getMemorySize())) return true; return false; }