国产无遮挡裸体免费直播视频,久久精品国产蜜臀av,动漫在线视频一区二区,欧亚日韩一区二区三区,久艹在线 免费视频,国产精品美女网站免费,正在播放 97超级视频在线观看,斗破苍穹年番在线观看免费,51最新乱码中文字幕

詳解iOS使用Keychain中的kSecClassGenericPassword存儲數(shù)據(jù)

 更新時間:2016年11月23日 16:02:55   作者:陳劍-月亮說話  
iOS設(shè)備中的Keychain是一個安全的存儲容器,本篇文章主要介紹了iOS使用Keychain中的kSecClassGenericPassword存儲數(shù)據(jù),有興趣的可以了解一下。

iOS設(shè)備中的Keychain是一個安全的存儲容器,可以用來為不同應(yīng)用保存敏感信息比如用戶名,密碼,網(wǎng)絡(luò)密碼,認(rèn)證令牌。蘋果自己用keychain來保存Wi-Fi網(wǎng)絡(luò)密碼,VPN憑證等等。它是一個sqlite數(shù)據(jù)庫,位于/private/var/Keychains/keychain-2.db,其保存的所有數(shù)據(jù)都是加密過的。模擬器下keychain文件路徑:~/Library/Application Support/iPhone Simulator/4.3/Library/Keychains

keychain里保存的信息不會因App被刪除而丟失,在用戶重新安裝App后依然有效,數(shù)據(jù)還在。

關(guān)于備份,只會備份數(shù)據(jù),到那時不會備份設(shè)備的密鑰,換句話說,即使拿到數(shù)據(jù),也沒有辦法解密里面的內(nèi)容。

比較復(fù)雜的數(shù)據(jù),使用蘋果官方發(fā)布的KeychainItemWrapper或者SFHFKeychainUtils會很方便。如果是比較簡單的,就不用蘋果提供的類了,自己寫個簡單的類來實(shí)現(xiàn)就好了。

兩種方法都需要在”Build Phases“中導(dǎo)入庫"Security.framework"

一、自己封裝的類

(1)實(shí)現(xiàn)代碼(思路是將數(shù)據(jù)封裝進(jìn)NSDictionary,通過NSKeyedArchiver歸檔后保存)

a)MyKeychain.h

// 
// MyKeychainh 
// UUIDdemo 
// 
// Created by 555chy on 6/10/ 
// Copyright © 2016 555chy All rights reserved 
// 
 
#import <Foundation/Foundationh> 
#import <Security/Securityh> 
 
@interface MyKeychain : NSObject 
 
+ (BOOL)save:(NSString*)service data:(id)data; 
+ (id)load:(NSString*)service; 
+ (void)delete:(NSString*)service; 
 
@end 
b)MyKeychainm
// 
// MyKeychainm 
// UUIDdemo 
// 
// Created by 555chy on 6/10/ 
// Copyright © 2016 555chy All rights reserved 
// 
 
#import "MyKeychainh" 
 
@implementation MyKeychain 
 
+ (NSMutableDictionary*) getKeychainQuery: (NSString*)service { 
  return [NSMutableDictionary dictionaryWithObjectsAndKeys: 
    (id)kSecClassGenericPassword, (id)kSecClass, 
    service, (id)kSecAttrService, 
    service, (id)kSecAttrAccount, 
    (id)kSecAttrAccessibleAfterFirstUnlock, (id)kSecAttrAccessible, 
   nil nil]; 
} 
 
+ (BOOL) save:(NSString*)service data:(id)data { 
  NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; 
  SecItemDelete((CFDictionaryRef)keychainQuery); 
  [keychainQuery setObject:[NSKeyedArchiver archivedDataWithRootObject:data] forKey:(id)kSecValueData]; 
  return SecItemAdd((CFDictionaryRef)keychainQuery, NULL) == noErr; 
} 
 
+ (id) load:(NSString*)service { 
  id ret = NULL; 
  NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; 
  [keychainQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; 
  [keychainQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; 
  NSData *keyData = NULL; 
  if(SecItemCopyMatching((CFDictionaryRef)keychainQuery, (CFTypeRef*)(void*)&keyData) == noErr) { 
    @try { 
      ret = [NSKeyedUnarchiver unarchiveObjectWithData:keyData]; 
    } 
    @catch (NSException *exception) { 
      NSLog(@"Unarchive of %@ failed: %@", service, exception); 
    } 
    @finally { 
    } 
  } 
  return ret; 
} 
 
+ (void) delete:(NSString*)service { 
  NSMutableDictionary *keychainQuery = [self getKeychainQuery:service]; 
  SecItemDelete((CFDictionaryRef)keychainQuery); 
} 
 
@end 

c)ViewController.m

// 
// ViewControllerm 
// UUIDdemo 
// 
// Created by 555chy on 6/10/ 
// Copyright © 2016 555chy All rights reserved 
// 
 
#import "ViewControllerh" 
#import "MyKeychainh" 
 
@interface ViewController () 
 
@end 
 
@implementation ViewController 
 
NSString *KEY_PACKAGE_NAME = @"comchyuuiddemouuid"; 
NSString *KEY_UUID = @"uuid"; 
 
-(void) saveIdfv { 
  NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString]; 
  NSLog(@"get from UIDevice, idfv is %@", idfv); 
   
  NSMutableDictionary *dataDict = [NSMutableDictionary dictionary]; 
  [dataDict setObject:idfv forKey:KEY_UUID]; 
  BOOL ret = [MyKeychain save:KEY_PACKAGE_NAME data:dataDict]; 
  NSLog(@"save %@ %@", idfv, ret?@"succ":@"fail"); 
} 
 
-(void) reloadIdfv { 
  NSMutableDictionary *loadData = [MyKeychain load:KEY_PACKAGE_NAME]; 
  NSString *loadIdfv = [loadData objectForKey:KEY_UUID]; 
  if(loadIdfv) { 
    NSLog(@"load idfv is %@", loadIdfv); 
  } else { 
    NSLog(@"load idfv, but it not exist"); 
  } 
} 
 
- (void)viewDidLoad { 
  [super viewDidLoad]; 
  // Do any additional setup after loading the view, typically from a nib 
   
  [self reloadIdfv]; 
   
  [self saveIdfv]; 
   
  [self reloadIdfv]; 
 
  [MyKeychain delete:KEY_PACKAGE_NAME]; 
  NSLog(@"delete idfv from keychain"); 
   
  [self reloadIdfv]; 
   
  [self saveIdfv]; 
} 
 
- (void)didReceiveMemoryWarning { 
  [super didReceiveMemoryWarning]; 
  // Dispose of any resources that can be recreated 
} 
 
@end 

(2)運(yùn)行結(jié)果

第一次運(yùn)行

第二次運(yùn)行
在模擬器上每次運(yùn)行實(shí)際上都是卸載前一個APP,然后再安裝新的APP。而保存在keychain中的IDFV標(biāo)識符依然還在。

(3)基本語法

SecItemAdd 增
SecItemUpdate 改
SecItemDelete 刪
SecItemCopyMatching 查

(4)SecItem.h(變量的介紹基本都在頭文件中了,看下頭文件中的注釋就能明白其中的含義)

/* 
 * Copyright (c) 2006-2014 Apple Inc All Rights Reserved 
 * 
 * @APPLE_LICENSE_HEADER_START@ 
 * 
 * This file contains Original Code and/or Modifications of Original Code 
 * as defined in and that are subject to the Apple Public Source License 
 * Version 0 (the 'License') You may not use this file except in 
 * compliance with the License Please obtain a copy of the License at 
 * http://wwwopensourceapplecom/apsl/ and read it before using this 
 * file 
 * 
 * The Original Code and all software distributed under the License are 
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 
 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT 
 * Please see the License for the specific language governing rights and 
 * limitations under the License 
 * 
 * @APPLE_LICENSE_HEADER_END@ 
 */ 
 
/*! 
  @header SecItem 
  SecItem defines CoreFoundation-based constants and functions for 
  access to Security items (certificates, keys, identities, and 
  passwords) 
*/ 
 
#ifndef _SECURITY_SECITEM_H_ 
#define _SECURITY_SECITEM_H_ 
 
#include <Security/SecBaseh> 
#include <CoreFoundation/CFArrayh> 
#include <CoreFoundation/CFDictionaryh> 
 
__BEGIN_DECLS 
 
CF_ASSUME_NONNULL_BEGIN 
CF_IMPLICIT_BRIDGING_ENABLED 
 
/*! 
  @enum Class Key Constant 
  @discussion Predefined key constant used to get or set item class values in 
    a dictionary Its value is one of the constants defined in the Value 
    Constants for kSecClass 
  @constant kSecClass Specifies a dictionary key whose value is the item's 
    class code You use this key to get or set a value of type CFTypeRef 
    that contains the item class code 
*/ 
extern const CFStringRef kSecClass 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @enum Class Value Constants 
  @discussion Predefined item class constants used to get or set values in 
    a dictionary The kSecClass constant is the key and its value is one 
    of the constants defined here 
  @constant kSecClassGenericPassword Specifies generic password items 
  @constant kSecClassInternetPassword Specifies Internet password items 
  @constant kSecClassCertificate Specifies certificate items 
  @constant kSecClassKey Specifies key items 
  @constant kSecClassIdentity Specifies identity items 
*/ 
extern const CFStringRef kSecClassGenericPassword 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecClassInternetPassword 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecClassCertificate 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecClassKey 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecClassIdentity 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
 
 
/*! 
  @enum Attribute Key Constants 
  @discussion Predefined item attribute keys used to get or set values in a 
    dictionary Not all attributes apply to each item class The table 
    below lists the currently defined attributes for each item class: 
 
  kSecClassGenericPassword item attributes: 
    kSecAttrAccessible 
    kSecAttrAccessControl 
    kSecAttrAccessGroup 
    kSecAttrCreationDate 
    kSecAttrModificationDate 
    kSecAttrDescription 
    kSecAttrComment 
    kSecAttrCreator 
    kSecAttrType 
    kSecAttrLabel 
    kSecAttrIsInvisible 
    kSecAttrIsNegative 
    kSecAttrAccount 
    kSecAttrService 
    kSecAttrGeneric 
    kSecAttrSynchronizable 
 
  kSecClassInternetPassword item attributes: 
    kSecAttrAccessible 
    kSecAttrAccessControl 
    kSecAttrAccessGroup 
    kSecAttrCreationDate 
    kSecAttrModificationDate 
    kSecAttrDescription 
    kSecAttrComment 
    kSecAttrCreator 
    kSecAttrType 
    kSecAttrLabel 
    kSecAttrIsInvisible 
    kSecAttrIsNegative 
    kSecAttrAccount 
    kSecAttrSecurityDomain 
    kSecAttrServer 
    kSecAttrProtocol 
    kSecAttrAuthenticationType 
    kSecAttrPort 
    kSecAttrPath 
    kSecAttrSynchronizable 
 
  kSecClassCertificate item attributes: 
    kSecAttrAccessible 
    kSecAttrAccessControl 
    kSecAttrAccessGroup 
    kSecAttrCertificateType 
    kSecAttrCertificateEncoding 
    kSecAttrLabel 
    kSecAttrSubject 
    kSecAttrIssuer 
    kSecAttrSerialNumber 
    kSecAttrSubjectKeyID 
    kSecAttrPublicKeyHash 
    kSecAttrSynchronizable 
 
  kSecClassKey item attributes: 
    kSecAttrAccessible 
    kSecAttrAccessControl 
    kSecAttrAccessGroup 
    kSecAttrKeyClass 
    kSecAttrLabel 
    kSecAttrApplicationLabel 
    kSecAttrIsPermanent 
    kSecAttrApplicationTag 
    kSecAttrKeyType 
    kSecAttrKeySizeInBits 
    kSecAttrEffectiveKeySize 
    kSecAttrCanEncrypt 
    kSecAttrCanDecrypt 
    kSecAttrCanDerive 
    kSecAttrCanSign 
    kSecAttrCanVerify 
    kSecAttrCanWrap 
    kSecAttrCanUnwrap 
    kSecAttrSynchronizable 
 
  kSecClassIdentity item attributes: 
    Since an identity is the combination of a private key and a 
    certificate, this class shares attributes of both kSecClassKey and 
    kSecClassCertificate 
 
   @constant kSecAttrAccessible Specifies a dictionary key whose value 
   indicates when your application needs access to an item's data You 
   should choose the most restrictive option that meets your application's 
   needs to allow the system to protect that item in the best way possible 
   See the "kSecAttrAccessible Value Constants" section for a list of 
   values which can be specified 
   IMPORTANT: This attribute is currently not supported for OS X keychain 
   items, unless the kSecAttrSynchronizable attribute is also present If 
   both attributes are specified on either OS X or iOS, the value for the 
   kSecAttrAccessible key may only be one whose name does not end with 
   "ThisDeviceOnly", as those cannot sync to another device 
 
   @constant kSecAttrAccessControl Specifies a dictionary key whose value 
   is SecAccessControl instance which contains access control conditions 
   for item 
 
   @constant kSecAttrAccessGroup Specifies a dictionary key whose value is 
   a CFStringRef indicating which access group a item is in The access 
   groups that a particular application has membership in are determined by 
   two entitlements for that application The application-identifier 
   entitlement contains the application's single access group, unless 
   there is a keychain-access-groups entitlement present The latter 
   has as its value a list of access groups; the first item in this list 
   is the default access group Unless a specific access group is provided 
   as the value of kSecAttrAccessGroup when SecItemAdd is called, new items 
   are created in the application's default access group Specifying this 
   attribute in SecItemCopyMatching, SecItemUpdate, or SecItemDelete calls 
   limits the search to the specified access group (of which the calling 
   application must be a member to obtain matching results) To share 
   keychain items between multiple applications, each application must have 
   a common group listed in its keychain-access-groups entitlement, and each 
   must specify this shared access group name as the value for the 
   kSecAttrAccessGroup key in the dictionary passed to SecItem functions 
 
   @constant kSecAttrSynchronizable Specifies a dictionary key whose value is 
   a CFBooleanRef indicating whether the item in question can be synchronized 
   To add a new item which can be synced to other devices, or to obtain 
   synchronizable results from a query, supply this key with a value of 
   kCFBooleanTrue If the key is not supplied, or has a value of 
   kCFBooleanFalse, then no synchronizable items will be added or returned 
   A predefined value, kSecAttrSynchronizableAny, may be provided instead of 
   kCFBooleanTrue if both synchronizable and non-synchronizable results are 
   desired 
 
   IMPORTANT: Specifying the kSecAttrSynchronizable key has several caveats: 
 
     - Updating or deleting items using the kSecAttrSynchronizable key will 
      affect all copies of the item, not just the one on your local device 
      Be sure that it makes sense to use the same password on all devices 
      before deciding to make a password synchronizable 
     - Only password items can currently be synchronized Keychain syncing 
      is not supported for certificates or cryptographic keys 
     - Items stored or obtained using the kSecAttrSynchronizable key cannot 
      specify SecAccessRef-based access control with kSecAttrAccess If a 
      password is intended to be shared between multiple applications, the 
      kSecAttrAccessGroup key must be specified, and each application 
      using this password must have a 'keychain-access-groups' entitlement 
      with the specified access group value 
     - Items stored or obtained using the kSecAttrSynchronizable key may 
      not also specify a kSecAttrAccessible value which is incompatible 
      with syncing (namely, those whose names end with "ThisDeviceOnly") 
     - Items stored or obtained using the kSecAttrSynchronizable key cannot 
      be specified by reference You must pass kSecReturnAttributes and/or 
      kSecReturnData to retrieve results; kSecReturnRef is currently not 
      supported for synchronizable items 
     - Persistent references to synchronizable items should be avoided; 
      while they may work locally, they cannot be moved between devices, 
      and may not resolve if the item is modified on some other device 
     - When specifying a query that uses the kSecAttrSynchronizable key, 
      search keys are limited to the item's class and attributes 
      The only search constant which may be used is kSecMatchLimit; other 
      constants using the kSecMatch prefix are not supported at this time 
 
  @constant kSecAttrCreationDate (read-only) Specifies a dictionary key whose 
    value is the item's creation date You use this key to get a value 
    of type CFDateRef that represents the date the item was created 
  @constant kSecAttrModificationDate (read-only) Specifies a dictionary key 
    whose value is the item's modification date You use this key to get 
    a value of type CFDateRef that represents the last time the item was 
    updated 
  @constant kSecAttrDescription Specifies a dictionary key whose value is 
    the item's description attribute You use this key to set or get a 
    value of type CFStringRef that represents a user-visible string 
    describing this particular kind of item (eg, "disk image password") 
  @constant kSecAttrComment Specifies a dictionary key whose value is the 
    item's comment attribute You use this key to set or get a value of 
    type CFStringRef containing the user-editable comment for this item 
  @constant kSecAttrCreator Specifies a dictionary key whose value is the 
    item's creator attribute You use this key to set or get a value of 
    type CFNumberRef that represents the item's creator This number is 
    the unsigned integer representation of a four-character code (eg, 
    'aCrt') 
  @constant kSecAttrType Specifies a dictionary key whose value is the item's 
    type attribute You use this key to set or get a value of type 
    CFNumberRef that represents the item's type This number is the 
    unsigned integer representation of a four-character code (eg, 
    'aTyp') 
  @constant kSecAttrLabel Specifies a dictionary key whose value is the 
    item's label attribute You use this key to set or get a value of 
    type CFStringRef containing the user-visible label for this item 
  @constant kSecAttrIsInvisible Specifies a dictionary key whose value is the 
    item's invisible attribute You use this key to set or get a value 
    of type CFBooleanRef that indicates whether the item is invisible 
    (ie, should not be displayed) 
  @constant kSecAttrIsNegative Specifies a dictionary key whose value is the 
    item's negative attribute You use this key to set or get a value of 
    type CFBooleanRef that indicates whether there is a valid password 
    associated with this keychain item This is useful if your application 
    doesn't want a password for some particular service to be stored in 
    the keychain, but prefers that it always be entered by the user 
  @constant kSecAttrAccount Specifies a dictionary key whose value is the 
    item's account attribute You use this key to set or get a CFStringRef 
    that contains an account name (Items of class 
    kSecClassGenericPassword, kSecClassInternetPassword have this 
    attribute) 
  @constant kSecAttrService Specifies a dictionary key whose value is the 
    item's service attribute You use this key to set or get a CFStringRef 
    that represents the service associated with this item (Items of class 
    kSecClassGenericPassword have this attribute) 
  @constant kSecAttrGeneric Specifies a dictionary key whose value is the 
    item's generic attribute You use this key to set or get a value of 
    CFDataRef that contains a user-defined attribute (Items of class 
    kSecClassGenericPassword have this attribute) 
  @constant kSecAttrSecurityDomain Specifies a dictionary key whose value 
    is the item's security domain attribute You use this key to set or 
    get a CFStringRef value that represents the Internet security domain 
    (Items of class kSecClassInternetPassword have this attribute) 
  @constant kSecAttrServer Specifies a dictionary key whose value is the 
    item's server attribute You use this key to set or get a value of 
    type CFStringRef that contains the server's domain name or IP address 
    (Items of class kSecClassInternetPassword have this attribute) 
  @constant kSecAttrProtocol Specifies a dictionary key whose value is the 
    item's protocol attribute You use this key to set or get a value of 
    type CFNumberRef that denotes the protocol for this item (see the 
    SecProtocolType enum in SecKeychainItemh) (Items of class 
    kSecClassInternetPassword have this attribute) 
  @constant kSecAttrAuthenticationType Specifies a dictionary key whose value 
    is the item's authentication type attribute You use this key to set 
    or get a value of type CFNumberRef that denotes the authentication 
    scheme for this item (see the kSecAttrAuthenticationType value 
    constants below) 
  @constant kSecAttrPort Specifies a dictionary key whose value is the item's 
    port attribute You use this key to set or get a CFNumberRef value 
    that represents an Internet port number (Items of class 
    kSecClassInternetPassword have this attribute) 
  @constant kSecAttrPath Specifies a dictionary key whose value is the item's 
    path attribute, typically this is the path component of the URL You use 
    this key to set or get a CFStringRef value that represents a path (Items 
    of class kSecClassInternetPassword have this attribute) 
  @constant kSecAttrSubject (read-only) Specifies a dictionary key whose 
    value is the item's subject You use this key to get a value of type 
    CFDataRef that contains the X500 subject name of a certificate 
    (Items of class kSecClassCertificate have this attribute) 
  @constant kSecAttrIssuer (read-only) Specifies a dictionary key whose value 
    is the item's issuer You use this key to get a value of type 
    CFDataRef that contains the X500 issuer name of a certificate (Items 
    of class kSecClassCertificate have this attribute) 
  @constant kSecAttrSerialNumber (read-only) Specifies a dictionary key whose 
    value is the item's serial number You use this key to get a value 
    of type CFDataRef that contains the serial number data of a 
    certificate (Items of class kSecClassCertificate have this 
    attribute) 
  @constant kSecAttrSubjectKeyID (read-only) Specifies a dictionary key whose 
    value is the item's subject key ID You use this key to get a value 
    of type CFDataRef that contains the subject key ID of a certificate 
    (Items of class kSecClassCertificate have this attribute) 
  @constant kSecAttrPublicKeyHash (read-only) Specifies a dictionary key 
    whose value is the item's public key hash You use this key to get a 
    value of type CFDataRef that contains the hash of a certificate's 
    public key (Items of class kSecClassCertificate have this attribute) 
  @constant kSecAttrCertificateType (read-only) Specifies a dictionary key 
    whose value is the item's certificate type You use this key to get 
    a value of type CFNumberRef that denotes the certificate type 
    (Currently only the value of this attribute must be equal to the 
    version of the X509 certificate So 1 for v1 2 for v2 and 3 for v3 
    certificates) Only items of class kSecClassCertificate have this 
    attribute 
  @constant kSecAttrCertificateEncoding (read-only) Specifies a dictionary 
    key whose value is the item's certificate encoding You use this key 
    to get a value of type CFNumberRef that denotes the certificate 
    encoding (Currently only the value 3 meaning 
    kSecAttrCertificateEncodingDER is supported) Only items of class 
    kSecClassCertificate have this attribute 
  @constant kSecAttrKeyClass (read only) Specifies a dictionary key whose 
    value is one of kSecAttrKeyClassPublic, kSecAttrKeyClassPrivate or 
    kSecAttrKeyClassSymmetric 
  @constant kSecAttrApplicationLabel Specifies a dictionary key whose value 
    is the key's application label attribute This is different from the 
    kSecAttrLabel (which is intended to be human-readable) This attribute 
    is used to look up a key programmatically; in particular, for keys of 
    class kSecAttrKeyClassPublic and kSecAttrKeyClassPrivate, the value of 
    this attribute is the hash of the public key 
  @constant kSecAttrIsPermanent Specifies a dictionary key whose value is a 
    CFBooleanRef indicating whether the key in question will be stored 
    permanently 
  @constant kSecAttrApplicationTag Specifies a dictionary key whose value is a 
    CFDataRef containing private tag data 
  @constant kSecAttrKeyType Specifies a dictionary key whose value is a 
    CFNumberRef indicating the algorithm associated with this key 
    (Currently only the value 42 is supported, alternatively you can use 
    kSecAttrKeyTypeRSA) 
  @constant kSecAttrKeySizeInBits Specifies a dictionary key whose value 
    is a CFNumberRef indicating the number of bits in this key 
  @constant kSecAttrEffectiveKeySize Specifies a dictionary key whose value 
    is a CFNumberRef indicating the effective number of bits in this key 
    For example, a DES key has a kSecAttrKeySizeInBits of 64, but a 
    kSecAttrEffectiveKeySize of 56 bits 
  @constant kSecAttrCanEncrypt Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    encrypt data 
  @constant kSecAttrCanDecrypt Specifies a dictionary key whose value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    decrypt data 
  @constant kSecAttrCanDerive Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    derive another key 
  @constant kSecAttrCanSign Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    create a digital signature 
  @constant kSecAttrCanVerify Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    verify a digital signature 
  @constant kSecAttrCanWrap Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    wrap another key 
  @constant kSecAttrCanUnwrap Specifies a dictionary key whole value is a 
    CFBooleanRef indicating whether the key in question can be used to 
    unwrap another key 
  @constant kSecAttrSyncViewHint Specifies a dictionary key whose value is 
  a CFStringRef This value is part of the primary key of each item, and 
  can be used to help distiguish Sync Views when defining their 
  queries 
  @constant kSecAttrTokenID Specifies a dictionary key whose presence 
  indicates that item is backed by external token Value of this attribute 
  is CFStringRef uniquely identifying containing token When this attribute 
  is not present, item is stored in internal keychain database 
  Note that once item is created, this attribute cannot be changed - in other 
  words it is not possible to migrate existing items to, from or between tokens 
  Currently the only available value for this attribute is 
  kSecAttrTokenIDSecureEnclave, which indicates that item (private key) is 
  backed by device's Secure Enclave 
 */ 
extern const CFStringRef kSecAttrAccessible 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessControl 
  __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); 
extern const CFStringRef kSecAttrAccessGroup 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_3_0); 
extern const CFStringRef kSecAttrSynchronizable 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); 
extern const CFStringRef kSecAttrCreationDate 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrModificationDate 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrDescription 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrComment 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCreator 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrType 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrLabel 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrIsInvisible 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrIsNegative 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAccount 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrService 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrGeneric 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrSecurityDomain 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrServer 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocol 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationType 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrPort 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrPath 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrSubject 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrIssuer 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrSerialNumber 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrSubjectKeyID 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrPublicKeyHash 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCertificateType 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCertificateEncoding 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeyClass 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrApplicationLabel 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrIsPermanent 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrApplicationTag 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeyType 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeySizeInBits 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrEffectiveKeySize 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanEncrypt 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanDecrypt 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanDerive 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanSign 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanVerify 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanWrap 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrCanUnwrap 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrSyncViewHint 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
extern const CFStringRef kSecAttrTokenID 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
 
/*! 
  @enum kSecAttrAccessible Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrAccessible constant is the key and its 
    value is one of the constants defined here 
    When asking SecItemCopyMatching to return the item's data, the error 
    errSecInteractionNotAllowed will be returned if the item's data is not 
    available until a device unlock occurs 
  @constant kSecAttrAccessibleWhenUnlocked Item data can only be accessed 
    while the device is unlocked This is recommended for items that only 
    need be accesible while the application is in the foreground Items 
    with this attribute will migrate to a new device when using encrypted 
    backups 
  @constant kSecAttrAccessibleAfterFirstUnlock Item data can only be 
    accessed once the device has been unlocked after a restart This is 
    recommended for items that need to be accesible by background 
    applications Items with this attribute will migrate to a new device 
    when using encrypted backups 
  @constant kSecAttrAccessibleAlways Item data can always be accessed 
    regardless of the lock state of the device This is not recommended 
    for anything except system use Items with this attribute will migrate 
    to a new device when using encrypted backups 
  @constant kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly Item data can 
     only be accessed while the device is unlocked This class is only 
     available if a passcode is set on the device This is recommended for 
     items that only need to be accessible while the application is in the 
     foreground Items with this attribute will never migrate to a new 
     device, so after a backup is restored to a new device, these items 
     will be missing No items can be stored in this class on devices 
     without a passcode Disabling the device passcode will cause all 
     items in this class to be deleted 
  @constant kSecAttrAccessibleWhenUnlockedThisDeviceOnly Item data can only 
    be accessed while the device is unlocked This is recommended for items 
    that only need be accesible while the application is in the foreground 
    Items with this attribute will never migrate to a new device, so after 
    a backup is restored to a new device, these items will be missing 
  @constant kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly Item data can 
    only be accessed once the device has been unlocked after a restart 
    This is recommended for items that need to be accessible by background 
    applications Items with this attribute will never migrate to a new 
    device, so after a backup is restored to a new device these items will 
    be missing 
  @constant kSecAttrAccessibleAlwaysThisDeviceOnly Item data can always 
    be accessed regardless of the lock state of the device This option 
    is not recommended for anything except system use Items with this 
    attribute will never migrate to a new device, so after a backup is 
    restored to a new device, these items will be missing 
*/ 
extern const CFStringRef kSecAttrAccessibleWhenUnlocked 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessibleAfterFirstUnlock 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessibleAlways 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessibleWhenPasscodeSetThisDeviceOnly 
  __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); 
extern const CFStringRef kSecAttrAccessibleWhenUnlockedThisDeviceOnly 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
extern const CFStringRef kSecAttrAccessibleAlwaysThisDeviceOnly 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
 
/*! 
  @enum kSecAttrProtocol Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrProtocol constant is the key and its 
    value is one of the constants defined here 
  @constant kSecAttrProtocolFTP 
  @constant kSecAttrProtocolFTPAccount 
  @constant kSecAttrProtocolHTTP 
  @constant kSecAttrProtocolIRC 
  @constant kSecAttrProtocolNNTP 
  @constant kSecAttrProtocolPOP 
  @constant kSecAttrProtocolSMTP 
  @constant kSecAttrProtocolSOCKS 
  @constant kSecAttrProtocolIMAP 
  @constant kSecAttrProtocolLDAP 
  @constant kSecAttrProtocolAppleTalk 
  @constant kSecAttrProtocolAFP 
  @constant kSecAttrProtocolTelnet 
  @constant kSecAttrProtocolSSH 
  @constant kSecAttrProtocolFTPS 
  @constant kSecAttrProtocolHTTPS 
  @constant kSecAttrProtocolHTTPProxy 
  @constant kSecAttrProtocolHTTPSProxy 
  @constant kSecAttrProtocolFTPProxy 
  @constant kSecAttrProtocolSMB 
  @constant kSecAttrProtocolRTSP 
  @constant kSecAttrProtocolRTSPProxy 
  @constant kSecAttrProtocolDAAP 
  @constant kSecAttrProtocolEPPC 
  @constant kSecAttrProtocolIPP 
  @constant kSecAttrProtocolNNTPS 
  @constant kSecAttrProtocolLDAPS 
  @constant kSecAttrProtocolTelnetS 
  @constant kSecAttrProtocolIMAPS 
  @constant kSecAttrProtocolIRCS 
  @constant kSecAttrProtocolPOP3S 
*/ 
extern const CFStringRef kSecAttrProtocolFTP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolFTPAccount 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolHTTP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolIRC 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolNNTP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolPOP3 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolSMTP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolSOCKS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolIMAP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolLDAP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolAppleTalk 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolAFP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolTelnet 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolSSH 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolFTPS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolHTTPS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolHTTPProxy 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolHTTPSProxy 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolFTPProxy 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolSMB 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolRTSP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolRTSPProxy 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolDAAP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolEPPC 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolIPP 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolNNTPS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolLDAPS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolTelnetS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolIMAPS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolIRCS 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrProtocolPOP3S 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @enum kSecAttrAuthenticationType Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrAuthenticationType constant is the key 
    and its value is one of the constants defined here 
  @constant kSecAttrAuthenticationTypeNTLM 
  @constant kSecAttrAuthenticationTypeMSN 
  @constant kSecAttrAuthenticationTypeDPA 
  @constant kSecAttrAuthenticationTypeRPA 
  @constant kSecAttrAuthenticationTypeHTTPBasic 
  @constant kSecAttrAuthenticationTypeHTTPDigest 
  @constant kSecAttrAuthenticationTypeHTMLForm 
  @constant kSecAttrAuthenticationTypeDefault 
*/ 
extern const CFStringRef kSecAttrAuthenticationTypeNTLM 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeMSN 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeDPA 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeRPA 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeHTTPBasic 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeHTTPDigest 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeHTMLForm 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecAttrAuthenticationTypeDefault 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @enum kSecAttrKeyClass Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrKeyClass constant is the key 
    and its value is one of the constants defined here 
  @constant kSecAttrKeyClassPublic 
  @constant kSecAttrKeyClassPrivate 
  @constant kSecAttrKeyClassSymmetric 
*/ 
extern const CFStringRef kSecAttrKeyClassPublic 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeyClassPrivate 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeyClassSymmetric 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
 
/*! 
  @enum kSecAttrKeyType Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrKeyType constant is the key 
    and its value is one of the constants defined here 
  @constant kSecAttrKeyTypeRSA 
  @constant kSecAttrKeyTypeEC 
*/ 
extern const CFStringRef kSecAttrKeyTypeRSA 
  __OSX_AVAILABLE_STARTING(__MAC_10_7, __IPHONE_2_0); 
extern const CFStringRef kSecAttrKeyTypeEC 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_4_0); 
 
/*! 
  @enum kSecAttrSynchronizable Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecAttrSynchronizable constant is the key 
    and its value is one of the constants defined here 
  @constant kSecAttrSynchronizableAny Specifies that both synchronizable and 
    non-synchronizable results should be returned from this query This may 
    be used as a value for the kSecAttrSynchronizable dictionary key in a 
    call to SecItemCopyMatching, SecItemUpdate, or SecItemDelete 
*/ 
extern const CFStringRef kSecAttrSynchronizableAny 
  __OSX_AVAILABLE_STARTING(__MAC_10_9, __IPHONE_7_0); 
 
/*! 
  @enum Search Constants 
  @discussion Predefined search constants used to set values in a query 
    dictionary You can specify a combination of search attributes and 
    item attributes when looking for matching items with the 
    SecItemCopyMatching function 
  @constant kSecMatchPolicy Specifies a dictionary key whose value is a 
    SecPolicyRef If provided, returned certificates or identities must 
    verify with this policy 
  @constant kSecMatchIssuers Specifies a dictionary key whose value is a 
    CFArray of X500 names (of type CFDataRef) If provided, returned 
    certificates or identities will be limited to those whose 
    certificate chain contains one of the issuers provided in this list 
  @constant kSecMatchEmailAddressIfPresent Specifies a dictionary key whose 
    value is a CFStringRef containing an RFC822 email address If 
    provided, returned certificates or identities will be limited to those 
    that contain the address, or do not contain any email address 
  @constant kSecMatchSubjectContains Specifies a dictionary key whose value 
    is a CFStringRef If provided, returned certificates or identities 
    will be limited to those containing this string in the subject 
  @constant kSecMatchCaseInsensitive Specifies a dictionary key whose value 
    is a CFBooleanRef If this value is kCFBooleanFalse, or is not 
    provided, then case-sensitive string matching is performed 
  @constant kSecMatchTrustedOnly Specifies a dictionary key whose value is 
    a CFBooleanRef If provided with a value of kCFBooleanTrue, only 
    certificates which can be verified back to a trusted anchor will be 
    returned If this value is kCFBooleanFalse, or is not provided, then 
    both trusted and untrusted certificates may be returned 
  @constant kSecMatchValidOnDate Specifies a dictionary key whose value is 
    of type CFDateRef If provided, returned keys, certificates or 
    identities will be limited to those which are valid for the given date 
    Pass a value of kCFNull to indicate the current date 
  @constant kSecMatchLimit Specifies a dictionary key whose value is a 
    CFNumberRef If provided, this value specifies the maximum number of 
    results to return If not provided, results are limited to the first 
    item found Predefined values are provided for a single item 
    (kSecMatchLimitOne) and all matching items (kSecMatchLimitAll) 
  @constant kSecMatchLimitOne Specifies that results are limited to the first 
    item found; used as a value for the kSecMatchLimit dictionary key 
  @constant kSecMatchLimitAll Specifies that an unlimited number of results 
    may be returned; used as a value for the kSecMatchLimit dictionary 
    key 
*/ 
extern const CFStringRef kSecMatchPolicy 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchItemList 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchSearchList 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchIssuers 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchEmailAddressIfPresent 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchSubjectContains 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchCaseInsensitive 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchTrustedOnly 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchValidOnDate 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchLimit 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchLimitOne 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecMatchLimitAll 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
 
/*! 
  @enum Return Type Key Constants 
  @discussion Predefined return type keys used to set values in a dictionary 
    You use these keys to specify the type of results which should be 
    returned by the SecItemCopyMatching or SecItemAdd function You can 
    specify zero or more of these return types If more than one of these 
    result types is specified, the result is returned as a CFDictionaryRef 
    whose keys are the result types and values are the requested data 
  @constant kSecReturnData Specifies a dictionary key whose value is of type 
    CFBooleanRef A value of kCFBooleanTrue indicates that the data of 
    an item (CFDataRef) should be returned For keys and password 
    items, data is secret (encrypted) and may require the user to enter 
    a password for access 
  @constant kSecReturnAttributes Specifies a dictionary key whose value is 
    of type CFBooleanRef A value of kCFBooleanTrue indicates that the 
    (non-encrypted) attributes of an item (CFDictionaryRef) should be 
    returned 
  @constant kSecReturnRef Specifies a dictionary key whose value is a 
    CFBooleanRef A value of kCFBooleanTrue indicates that a reference 
    should be returned Depending on the item class requested, the 
    returned reference(s) may be of type SecKeychainItemRef, SecKeyRef, 
    SecCertificateRef, or SecIdentityRef 
  @constant kSecReturnPersistentRef Specifies a dictionary key whose value 
    is of type CFBooleanRef A value of kCFBooleanTrue indicates that a 
    persistent reference to an item (CFDataRef) should be returned 
*/ 
extern const CFStringRef kSecReturnData 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecReturnAttributes 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecReturnRef 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecReturnPersistentRef 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
 
/*! 
  @enum Value Type Key Constants 
  @discussion Predefined value type keys used to pass values in a dictionary 
    You can specify zero or more of these types depending on the function 
    you are calling For SecItemCopyMatching or SecItemAdd these are 
    used as keys in the results dictionary 
  @constant kSecValueData Specifies a dictionary key whose value is of type 
    CFDataRef For keys and password items, data is secret (encrypted) 
    and may require the user to enter a password for access 
  @constant kSecValueRef Specifies a dictionary key whose value, depending 
    on the item class requested, is of type SecKeychainItemRef, SecKeyRef, 
    SecCertificateRef, or SecIdentityRef 
  @constant kSecValuePersistentRef Specifies a dictionary key whose value 
    is of type CFDataRef The bytes in this CFDataRef can be stored by 
    the caller and used on a subsequent invocation of the application (or 
    even a different application) to retrieve the item referenced by it 
*/ 
extern const CFStringRef kSecValueData 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecValueRef 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecValuePersistentRef 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
 
/*! 
  @enum Other Constants 
  @discussion Predefined constants used to set values in a dictionary 
  @constant kSecUseItemList Specifies a dictionary key whose value is a 
    CFArray of items If provided, this array is treated as the set of 
    all possible items to search, or add if the API being called is 
    SecItemAdd The items in this array may be of type SecKeyRef, 
    SecCertificateRef, SecIdentityRef, or CFDataRef (for a persistent 
    item reference) The items in the array must all be of the same 
    type When this attribute is provided, no keychains are searched 
  @constant kSecUseOperationPrompt Specifies a dictionary key whose value 
    is a CFStringRef that represents a user-visible string describing 
    the operation for which the application is attempting to authenticate 
    The application is responsible for the text localization 
  @constant kSecUseNoAuthenticationUI Specifies a dictionary key whose value 
    is a CFBooleanRef If provided with a value of kCFBooleanTrue, the error 
    errSecInteractionNotAllowed will be returned if the item is attempting 
    to authenticate with UI 
  @constant kSecUseAuthenticationUI Specifies a dictionary key whose value 
    is one of kSecUseAuthenticationUIAllow, kSecUseAuthenticationUIFail, kSecUseAuthenticationUISkip 
  @constant kSecUseAuthenticationContext Specifies a dictionary key whose value 
    is LAContext to be used for keychain item authentication 
    * If the item requires authentication and this key is omitted, a new context 
     will be created just for the purpose of the single call 
    * If the specified context has been previously authenticated, the operation 
     will succeed without asking user for authentication 
    * If the specified context has not been previously authenticated, the new 
     authentication will be started on this context, allowing caller to 
     eventually reuse the sucessfully authenticated context in subsequent 
     keychain operations 
*/ 
extern const CFStringRef kSecUseItemList 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
extern const CFStringRef kSecUseOperationPrompt 
  __OSX_AVAILABLE_STARTING(__MAC_10_10, __IPHONE_8_0); 
extern const CFStringRef kSecUseNoAuthenticationUI 
  __OSX_AVAILABLE_BUT_DEPRECATED_MSG(__MAC_10_10, __MAC_10_11, __IPHONE_8_0, __IPHONE_9_0, "Use a kSecAuthenticationUI instead"); 
extern const CFStringRef kSecUseAuthenticationUI 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
extern const CFStringRef kSecUseAuthenticationContext 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
 
/*! 
  @enum kSecUseAuthenticationUI Value Constants 
  @discussion Predefined item attribute constants used to get or set values 
    in a dictionary The kSecUseAuthenticationUI constant is the key and its 
    value is one of the constants defined here 
    If the key kSecUseAuthenticationUI not provided then kSecUseAuthenticationUIAllow 
    is used as default 
  @constant kSecUseAuthenticationUIAllow Specifies that authenticate UI can appear 
  @constant kSecUseAuthenticationUIFail Specifies that the error 
    errSecInteractionNotAllowed will be returned if an item needs 
    to authenticate with UI 
  @constant kSecUseAuthenticationUIAllowSkip Specifies that all items which need 
    to authenticate with UI will be silently skipped This value can be used 
    only with SecItemCopyMatching 
 */ 
extern const CFStringRef kSecUseAuthenticationUIAllow 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
extern const CFStringRef kSecUseAuthenticationUIFail 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
extern const CFStringRef kSecUseAuthenticationUISkip 
  __OSX_AVAILABLE_STARTING(__MAC_10_11, __IPHONE_9_0); 
 
/*! 
   @enum kSecAttrTokenID Value Constants 
   @discussion Predefined item attribute constant used to get or set values 
     in a dictionary The kSecAttrTokenID constant is the key and its value 
     can be kSecAttrTokenIDSecureEnclave 
   @constant kSecAttrTokenIDSecureEnclave Specifies well-known identifier of the 
     token implemented using device's Secure Enclave The only keychain items 
     supported by the Secure Enclave token are 256-bit elliptic curve keys 
     (kSecAttrKeyTypeEC) Keys must be generated on the secure enclave using 
     SecKeyGenerateKeyPair call with kSecAttrTokenID set to 
     kSecAttrTokenIDSecureEnclave in the parameters dictionary, it is not 
     possible to import pregenerated keys to kSecAttrTokenIDSecureEnclave token 
*/ 
extern const CFStringRef kSecAttrTokenIDSecureEnclave 
  __OSX_AVAILABLE_STARTING(__MAC_NA, __IPHONE_9_0); 
 
/*! 
  @function SecItemCopyMatching 
  @abstract Returns one or more items which match a search query 
  @param query A dictionary containing an item class specification and 
    optional attributes for controlling the search See the "Keychain 
    Search Attributes" section for a description of currently defined 
    search attributes 
  @param result On return, a CFTypeRef reference to the found item(s) The 
    exact type of the result is based on the search attributes supplied 
    in the query, as discussed below 
  @result A result code See "Security Error Codes" (SecBaseh) 
  @discussion Attributes defining a search are specified by adding key/value 
    pairs to the query dictionary 
 
  A typical query consists of: 
 
   * a kSecClass key, whose value is a constant from the Class 
    Constants section that specifies the class of item(s) to be searched 
   * one or more keys from the "Attribute Key Constants" section, whose value 
    is the attribute data to be matched 
   * one or more keys from the "Search Constants" section, whose value is 
    used to further refine the search 
   * a key from the "Return Type Key Constants" section, specifying the type of 
    results desired 
 
  Result types are specified as follows: 
 
   * To obtain the data of a matching item (CFDataRef), specify 
    kSecReturnData with a value of kCFBooleanTrue 
   * To obtain the attributes of a matching item (CFDictionaryRef), specify 
    kSecReturnAttributes with a value of kCFBooleanTrue 
   * To obtain a reference to a matching item (SecKeychainItemRef, 
    SecKeyRef, SecCertificateRef, or SecIdentityRef), specify kSecReturnRef 
    with a value of kCFBooleanTrue 
   * To obtain a persistent reference to a matching item (CFDataRef), 
    specify kSecReturnPersistentRef with a value of kCFBooleanTrue Note 
    that unlike normal references, a persistent reference may be stored 
    on disk or passed between processes 
   * If more than one of these result types is specified, the result is 
    returned as a CFDictionaryRef containing all the requested data 
   * If a result type is not specified, no results are returned 
 
  By default, this function returns only the first match found To obtain 
  more than one matching item at a time, specify kSecMatchLimit with a value 
  greater than The result will be a CFArrayRef containing up to that 
  number of matching items; the items' types are described above 
 
  To filter a provided list of items down to those matching the query, 
  specify a kSecMatchItemList whose value is a CFArray of SecKeychainItemRef, 
  SecKeyRef, SecCertificateRef, or SecIdentityRef items The objects in the 
  provided array must be of the same type 
 
  To convert from a persistent item reference to a normal item reference, 
  specify a kSecValuePersistentRef whose value a CFDataRef (the persistent 
  reference), and a kSecReturnRef whose value is kCFBooleanTrue 
*/ 
OSStatus SecItemCopyMatching(CFDictionaryRef query, CFTypeRef * __nullable CF_RETURNS_RETAINED result) 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @function SecItemAdd 
  @abstract Add one or more items to a keychain 
  @param attributes A dictionary containing an item class specification and 
    optional entries specifying the item's attribute values See the 
    "Attribute Key Constants" section for a description of currently defined 
    attributes 
  @param result On return, a CFTypeRef reference to the newly added item(s) 
    The exact type of the result is based on the values supplied 
    in attributes, as discussed below Pass NULL if this result is not 
    required 
  @result A result code See "Security Error Codes" (SecBaseh) 
  @discussion Attributes defining an item are specified by adding key/value 
    pairs to the attributes dictionary To add multiple items to a keychain 
    at once use the kSecUseItemList key with an array of items as its value 
    This is currently only supported for non password items 
 
  Result types are specified as follows: 
 
   * To obtain the data of the added item (CFDataRef), specify 
    kSecReturnData with a value of kCFBooleanTrue 
   * To obtain all the attributes of the added item (CFDictionaryRef), 
    specify kSecReturnAttributes with a value of kCFBooleanTrue 
   * To obtain a reference to the added item (SecKeychainItemRef, SecKeyRef, 
    SecCertificateRef, or SecIdentityRef), specify kSecReturnRef with a 
    value of kCFBooleanTrue 
   * To obtain a persistent reference to the added item (CFDataRef), specify 
    kSecReturnPersistentRef with a value of kCFBooleanTrue Note that 
    unlike normal references, a persistent reference may be stored on disk 
    or passed between processes 
   * If more than one of these result types is specified, the result is 
    returned as a CFDictionaryRef containing all the requested data 
   * If a result type is not specified, no results are returned 
*/ 
OSStatus SecItemAdd(CFDictionaryRef attributes, CFTypeRef * __nullable CF_RETURNS_RETAINED result) 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @function SecItemUpdate 
  @abstract Modify zero or more items which match a search query 
  @param query A dictionary containing an item class specification and 
    optional attributes for controlling the search See the "Attribute 
    Constants" and "Search Constants" sections for a description of 
    currently defined search attributes 
  @param attributesToUpdate A dictionary containing one or more attributes 
    whose values should be set to the ones specified Only real keychain 
    attributes are permitted in this dictionary (no "meta" attributes are 
    allowed) See the "Attribute Key Constants" section for a description of 
    currently defined value attributes 
  @result A result code See "Security Error Codes" (SecBaseh) 
  @discussion Attributes defining a search are specified by adding key/value 
    pairs to the query dictionary 
*/ 
OSStatus SecItemUpdate(CFDictionaryRef query, 
  CFDictionaryRef attributesToUpdate) 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
/*! 
  @function SecItemDelete 
  @abstract Delete zero or more items which match a search query 
  @param query A dictionary containing an item class specification and 
    optional attributes for controlling the search See the "Attribute 
    Constants" and "Search Constants" sections for a description of 
    currently defined search attributes 
  @result A result code See "Security Error Codes" (SecBaseh) 
  @discussion Attributes defining a search are specified by adding key/value 
    pairs to the query dictionary 
 
  By default, this function deletes all items matching the specified query 
  You can change this behavior by specifying one of the follow keys: 
 
   * To delete an item identified by a transient reference, specify 
    kSecValueRef with a reference returned by using the kSecReturnRef 
    key in a previous call to SecItemCopyMatching or SecItemAdd 
   * To delete an item identified by a persistent reference, specify 
    kSecValuePersistentRef with a persistent reference returned by 
    using the kSecReturnPersistentRef key to SecItemCopyMatching or 
    SecItemAdd 
   * To delete multiple items specify kSecMatchItemList with an array 
    of references 
   * If more than one of these result keys is specified, the behavior is 
    undefined 
*/ 
OSStatus SecItemDelete(CFDictionaryRef query) 
  __OSX_AVAILABLE_STARTING(__MAC_10_6, __IPHONE_2_0); 
 
CF_IMPLICIT_BRIDGING_DISABLED 
CF_ASSUME_NONNULL_END 
 
__END_DECLS 
 
#endif /* !_SECURITY_SECITEM_H_ */ 

二、蘋果官方的KeychainItemWrapper

官方示例地址

https://developer.apple.com/library/ios/samplecode/GenericKeychain/Listings/Classes_KeychainItemWrapper_m.html#//apple_ref/doc/uid/DTS40007797-Classes_KeychainItemWrapper_m-DontLinkElementID_10

/* 
   File: KeychainItemWrapperm 
 Abstract: 
 Objective-C wrapper for accessing a single keychain item 
  
 Version: 2 
  
 Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple 
 Inc ("Apple") in consideration of your agreement to the following 
 terms, and your use, installation, modification or redistribution of 
 this Apple software constitutes acceptance of these terms If you do 
 not agree with these terms, please do not use, install, modify or 
 redistribute this Apple software 
  
 In consideration of your agreement to abide by the following terms, and 
 subject to these terms, Apple grants you a personal, non-exclusive 
 license, under Apple's copyrights in this original Apple software (the 
 "Apple Software"), to use, reproduce, modify and redistribute the Apple 
 Software, with or without modifications, in source and/or binary forms; 
 provided that if you redistribute the Apple Software in its entirety and 
 without modifications, you must retain this notice and the following 
 text and disclaimers in all such redistributions of the Apple Software 
 Neither the name, trademarks, service marks or logos of Apple Inc may 
 be used to endorse or promote products derived from the Apple Software 
 without specific prior written permission from Apple Except as 
 expressly stated in this notice, no other rights or licenses, express or 
 implied, are granted by Apple herein, including but not limited to any 
 patent rights that may be infringed by your derivative works or by other 
 works in which the Apple Software may be incorporated 
  
 The Apple Software is provided by Apple on an "AS IS" basis APPLE 
 MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION 
 THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS 
 FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND 
 OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS 
  
 IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL 
 OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
 INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, 
 MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED 
 AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE), 
 STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE 
 POSSIBILITY OF SUCH DAMAGE 
  
 Copyright (C) 2010 Apple Inc All Rights Reserved 
  
*/  
  
#import "KeychainItemWrapperh" 
#import <Security/Securityh> 
  
/* 
 
These are the default constants and their respective types, 
available for the kSecClassGenericPassword Keychain Item class: 
 
kSecAttrAccessGroup     -    CFStringRef 
kSecAttrCreationDate    -    CFDateRef 
kSecAttrModificationDate  -    CFDateRef 
kSecAttrDescription     -    CFStringRef 
kSecAttrComment       -    CFStringRef 
kSecAttrCreator       -    CFNumberRef 
kSecAttrType        -    CFNumberRef 
kSecAttrLabel        -    CFStringRef 
kSecAttrIsInvisible     -    CFBooleanRef 
kSecAttrIsNegative     -    CFBooleanRef 
kSecAttrAccount       -    CFStringRef 
kSecAttrService       -    CFStringRef 
kSecAttrGeneric       -    CFDataRef 
 
See the header file Security/SecItemh for more details 
 
*/ 
  
@interface KeychainItemWrapper (PrivateMethods) 
/* 
The decision behind the following two methods (secItemFormatToDictionary and dictionaryToSecItemFormat) was 
to encapsulate the transition between what the detail view controller was expecting (NSString *) and what the 
Keychain API expects as a validly constructed container class 
*/ 
- (NSMutableDictionary *)secItemFormatToDictionary:(NSDictionary *)dictionaryToConvert; 
- (NSMutableDictionary *)dictionaryToSecItemFormat:(NSDictionary *)dictionaryToConvert; 
  
// Updates the item in the keychain, or adds it if it doesn't exist 
- (void)writeToKeychain; 
  
@end 
  
@implementation KeychainItemWrapper 
  
@synthesize keychainItemData, genericPasswordQuery; 
  
- (id)initWithIdentifier: (NSString *)identifier accessGroup:(NSString *) accessGroup; 
{ 
  if (self = [super init]) 
  { 
    // Begin Keychain search setup The genericPasswordQuery leverages the special user 
    // defined attribute kSecAttrGeneric to distinguish itself between other generic Keychain 
    // items which may be included by the same application 
    genericPasswordQuery = [[NSMutableDictionary alloc] init]; 
     
    [genericPasswordQuery setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; 
    [genericPasswordQuery setObject:identifier forKey:(id)kSecAttrGeneric]; 
     
    // The keychain access group attribute determines if this item can be shared 
    // amongst multiple apps whose code signing entitlements contain the same keychain access group 
    if (accessGroup != nil) 
    { 
#if TARGET_IPHONE_SIMULATOR 
      // Ignore the access group if running on the iPhone simulator 
      //  
      // Apps that are built for the simulator aren't signed, so there's no keychain access group 
      // for the simulator to check This means that all apps can see all keychain items when run 
      // on the simulator 
      // 
      // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the 
      // simulator will return -25243 (errSecNoAccessForItem) 
#else       
      [genericPasswordQuery setObject:accessGroup forKey:(id)kSecAttrAccessGroup]; 
#endif 
    } 
     
    // Use the proper search constants, return only the attributes of the first match 
    [genericPasswordQuery setObject:(id)kSecMatchLimitOne forKey:(id)kSecMatchLimit]; 
    [genericPasswordQuery setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnAttributes]; 
     
    NSDictionary *tempQuery = [NSDictionary dictionaryWithDictionary:genericPasswordQuery]; 
     
    NSMutableDictionary *outDictionary = nil; 
     
    if (! SecItemCopyMatching((CFDictionaryRef)tempQuery, (CFTypeRef *)&outDictionary) == noErr) 
    { 
      // Stick these default values into keychain item if nothing found 
      [self resetKeychainItem]; 
       
      // Add the generic attribute and the keychain access group 
      [keychainItemData setObject:identifier forKey:(id)kSecAttrGeneric]; 
      if (accessGroup != nil) 
      { 
#if TARGET_IPHONE_SIMULATOR 
        // Ignore the access group if running on the iPhone simulator 
        //  
        // Apps that are built for the simulator aren't signed, so there's no keychain access group 
        // for the simulator to check This means that all apps can see all keychain items when run 
        // on the simulator 
        // 
        // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the 
        // simulator will return -25243 (errSecNoAccessForItem) 
#else       
        [keychainItemData setObject:accessGroup forKey:(id)kSecAttrAccessGroup]; 
#endif 
      } 
    } 
    else 
    { 
      // load the saved data from Keychain 
      selfkeychainItemData = [self secItemFormatToDictionary:outDictionary]; 
    } 
     
    [outDictionary release]; 
  } 
   
  return self; 
} 
  
- (void)dealloc 
{ 
  [keychainItemData release]; 
  [genericPasswordQuery release]; 
   
  [super dealloc]; 
} 
  
- (void)setObject:(id)inObject forKey:(id)key  
{ 
  if (inObject == nil) return; 
  id currentObject = [keychainItemData objectForKey:key]; 
  if (![currentObject isEqual:inObject]) 
  { 
    [keychainItemData setObject:inObject forKey:key]; 
    [self writeToKeychain]; 
  } 
} 
  
- (id)objectForKey:(id)key 
{ 
  return [keychainItemData objectForKey:key]; 
} 
  
- (void)resetKeychainItem 
{ 
  OSStatus junk = noErr; 
  if (!keychainItemData)  
  { 
    selfkeychainItemData = [[NSMutableDictionary alloc] init]; 
  } 
  else if (keychainItemData) 
  { 
    NSMutableDictionary *tempDictionary = [self dictionaryToSecItemFormat:keychainItemData]; 
    junk = SecItemDelete((CFDictionaryRef)tempDictionary); 
    NSAssert( junk == noErr || junk == errSecItemNotFound, @"Problem deleting current dictionary" ); 
  } 
   
  // Default attributes for keychain item 
  [keychainItemData setObject:@"" forKey:(id)kSecAttrAccount]; 
  [keychainItemData setObject:@"" forKey:(id)kSecAttrLabel]; 
  [keychainItemData setObject:@"" forKey:(id)kSecAttrDescription]; 
   
  // Default data for keychain item 
  [keychainItemData setObject:@"" forKey:(id)kSecValueData]; 
} 
  
- (NSMutableDictionary *)dictionaryToSecItemFormat:(NSDictionary *)dictionaryToConvert 
{ 
  // The assumption is that this method will be called with a properly populated dictionary 
  // containing all the right key/value pairs for a SecItem 
   
  // Create a dictionary to return populated with the attributes and data 
  NSMutableDictionary *returnDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionaryToConvert]; 
   
  // Add the Generic Password keychain item class attribute 
  [returnDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; 
   
  // Convert the NSString to NSData to meet the requirements for the value type kSecValueData 
  // This is where to store sensitive data that should be encrypted 
  NSString *passwordString = [dictionaryToConvert objectForKey:(id)kSecValueData]; 
  [returnDictionary setObject:[passwordString dataUsingEncoding:NSUTF8StringEncoding] forKey:(id)kSecValueData]; 
   
  return returnDictionary; 
} 
  
- (NSMutableDictionary *)secItemFormatToDictionary:(NSDictionary *)dictionaryToConvert 
{ 
  // The assumption is that this method will be called with a properly populated dictionary 
  // containing all the right key/value pairs for the UI element 
   
  // Create a dictionary to return populated with the attributes and data 
  NSMutableDictionary *returnDictionary = [NSMutableDictionary dictionaryWithDictionary:dictionaryToConvert]; 
   
  // Add the proper search key and class attribute 
  [returnDictionary setObject:(id)kCFBooleanTrue forKey:(id)kSecReturnData]; 
  [returnDictionary setObject:(id)kSecClassGenericPassword forKey:(id)kSecClass]; 
   
  // Acquire the password data from the attributes 
  NSData *passwordData = NULL; 
  if (SecItemCopyMatching((CFDictionaryRef)returnDictionary, (CFTypeRef *)&passwordData) == noErr) 
  { 
    // Remove the search, class, and identifier key/value, we don't need them anymore 
    [returnDictionary removeObjectForKey:(id)kSecReturnData]; 
     
    // Add the password to the dictionary, converting from NSData to NSString 
    NSString *password = [[[NSString alloc] initWithBytes:[passwordData bytes] length:[passwordData length]  
                           encoding:NSUTF8StringEncoding] autorelease]; 
    [returnDictionary setObject:password forKey:(id)kSecValueData]; 
  } 
  else 
  { 
    // Don't do anything if nothing is found 
    NSAssert(NO, @"Serious error, no matching item found in the keychain\n"); 
  } 
   
  [passwordData release]; 
   
  return returnDictionary; 
} 
  
- (void)writeToKeychain 
{ 
  NSDictionary *attributes = NULL; 
  NSMutableDictionary *updateItem = NULL; 
  OSStatus result; 
   
  if (SecItemCopyMatching((CFDictionaryRef)genericPasswordQuery, (CFTypeRef *)&attributes) == noErr) 
  { 
    // First we need the attributes from the Keychain 
    updateItem = [NSMutableDictionary dictionaryWithDictionary:attributes]; 
    // Second we need to add the appropriate search key/values 
    [updateItem setObject:[genericPasswordQuery objectForKey:(id)kSecClass] forKey:(id)kSecClass]; 
     
    // Lastly, we need to set up the updated attribute list being careful to remove the class 
    NSMutableDictionary *tempCheck = [self dictionaryToSecItemFormat:keychainItemData]; 
    [tempCheck removeObjectForKey:(id)kSecClass]; 
     
#if TARGET_IPHONE_SIMULATOR 
    // Remove the access group if running on the iPhone simulator 
    //  
    // Apps that are built for the simulator aren't signed, so there's no keychain access group 
    // for the simulator to check This means that all apps can see all keychain items when run 
    // on the simulator 
    // 
    // If a SecItem contains an access group attribute, SecItemAdd and SecItemUpdate on the 
    // simulator will return -25243 (errSecNoAccessForItem) 
    // 
    // The access group attribute will be included in items returned by SecItemCopyMatching, 
    // which is why we need to remove it before updating the item 
    [tempCheck removeObjectForKey:(id)kSecAttrAccessGroup]; 
#endif 
     
    // An implicit assumption is that you can only update a single item at a time 
     
    result = SecItemUpdate((CFDictionaryRef)updateItem, (CFDictionaryRef)tempCheck); 
    NSAssert( result == noErr, @"Couldn't update the Keychain Item" ); 
  } 
  else 
  { 
    // No previous item found; add the new one 
    result = SecItemAdd((CFDictionaryRef)[self dictionaryToSecItemFormat:keychainItemData], NULL); 
    NSAssert( result == noErr, @"Couldn't add the Keychain Item" ); 
  } 
} 
  
@end 

看到這里會發(fā)現(xiàn)蘋果的KeychainWrapper和我們自定義的工具類實(shí)現(xiàn)原理都一樣,就是調(diào)用那幾個方法,所以就不展開介紹了,將來有空再補(bǔ)上。

相關(guān)文章

最新評論

亚洲成人精品女人久久久| av中文字幕网址在线| 欧美黄片精彩在线免费观看| 亚洲av香蕉一区区二区三区犇| 国产成人精品av网站| 色秀欧美视频第一页| 成人av免费不卡在线观看| 亚洲成人午夜电影在线观看 | 免费手机黄页网址大全| 97国产福利小视频合集| 适合午夜一个人看的视频| 1000小视频在线| 欧美日韩一级黄片免费观看| 97年大学生大白天操逼| 国产精品自拍在线视频| 午夜精品久久久久久99热| 女同久久精品秋霞网| 91中文字幕免费在线观看| 欧美日韩在线精品一区二区三| 亚洲女人的天堂av| 免费观看污视频网站| 天天操天天弄天天射| 婷婷色中文亚洲网68| 天天干天天搞天天摸| 亚洲一区制服丝袜美腿| 2021久久免费视频| 曰本无码人妻丰满熟妇啪啪| 一区二区三区四区中文| 男人操女人逼逼视频网站| 一区二区久久成人网| 青青色国产视频在线| 麻豆精品成人免费视频| 亚洲伊人久久精品影院一美女洗澡| 美女在线观看日本亚洲一区| 又粗又硬又猛又黄免费30| 性欧美激情久久久久久久| 亚洲av无码成人精品区辽| 天天操夜夜操天天操天天操| 国产白袜脚足J棉袜在线观看| 内射久久久久综合网| 国产精品自拍偷拍a| 国产精品大陆在线2019不卡| 我想看操逼黄色大片| 91在线免费观看成人| 国产片免费观看在线观看| 91天堂精品一区二区| 沙月文乃人妻侵犯中文字幕在线| 日韩伦理短片在线观看| 亚洲av色香蕉一区二区三区 | wwwxxx一级黄色片| 亚洲特黄aaaa片| 91久久人澡人人添人人爽乱| 午夜免费观看精品视频| 欧洲欧美日韩国产在线| 精品一区二区三区三区色爱| 硬鸡巴动态操女人逼视频| 黑人性生活视频免费看| 国产九色91在线观看精品| 人妻凌辱欧美丰满熟妇| 日本韩国免费福利精品| 国产亚洲国产av网站在线| 老司机福利精品视频在线| 99精品亚洲av无码国产另类| 绝色少妇高潮3在线观看| 天天干天天搞天天摸| 亚洲成人激情视频免费观看了| 日本一二三区不卡无| 天天躁夜夜躁日日躁a麻豆| 欧美专区日韩专区国产专区| 久久这里只有精彩视频免费| 亚洲美女美妇久久字幕组| 一区二区熟女人妻视频| 在线免费观看日本伦理| 亚洲av日韩精品久久久| 亚洲女人的天堂av| 天天操夜夜骑日日摸| 中文字幕综合一区二区| 天天干天天日天天干天天操| 国产精品自拍视频大全| 日韩精品二区一区久久| 日韩中文字幕在线播放第二页| 五十路人妻熟女av一区二区| 日韩人妻xxxxx| 青青青视频手机在线观看| 在线免费观看av日韩| 色av色婷婷人妻久久久精品高清 | 一区二区三区精品日本| 国产精品三级三级三级| 成人影片高清在线观看| tube69日本少妇| 亚洲欧美日韩视频免费观看| 偷拍自拍亚洲视频在线观看| 高清成人av一区三区| 亚洲国产欧美一区二区三区…| 国产黄色高清资源在线免费观看| 9国产精品久久久久老师| 青青青青在线视频免费观看| 国产三级片久久久久久久| 日本熟妇喷水xxx| 亚洲 中文 自拍 另类 欧美| 日韩人妻丝袜中文字幕| 老司机99精品视频在线观看 | 亚洲超碰97人人做人人爱| 成人综合亚洲欧美一区| 中国无遮挡白丝袜二区精品| 91麻豆精品91久久久久同性| 天天干天天爱天天色| 亚洲区欧美区另类最新章节| 成人乱码一区二区三区av| av手机免费在线观看高潮| 成年人免费看在线视频| 欧美精品 日韩国产| 夏目彩春在线中文字幕| 国产黄色片在线收看| 在线播放一区二区三区Av无码| 五十路丰满人妻熟妇| 91极品大一女神正在播放| 亚洲av色图18p| 欧美激情电影免费在线| 在线观看免费岛国av| 欧美日韩激情啪啪啪| 首之国产AV医生和护士小芳| 一色桃子久久精品亚洲| 大香蕉玖玖一区2区| 亚洲久久午夜av一区二区| 男人的网址你懂的亚洲欧洲av| 性欧美日本大妈母与子| 一区二区三区精品日本| 欧亚乱色一区二区三区| 国产aⅴ一线在线观看| 91av中文视频在线| 五月婷婷在线观看视频免费| 日韩熟女av天堂系列| 精品黑人巨大在线一区| 综合国产成人在线观看| 夜夜嗨av一区二区三区中文字幕| 非洲黑人一级特黄片| 视频在线亚洲一区二区| 大鸡吧插逼逼视频免费看| 成人免费公开视频无毒| 精品视频中文字幕在线播放| 天天色天天操天天透| 韩国亚洲欧美超一级在线播放视频| 日韩精品中文字幕在线| 亚洲一级av大片免费观看| 91亚洲手机在线视频播放| 成人综合亚洲欧美一区| 国产超码片内射在线| 熟女妇女老妇一二三区| 91快播视频在线观看| 亚洲一区二区人妻av| 91片黄在线观看喷潮| 阿v天堂2014 一区亚洲| 亚洲一区二区三区五区 | 中文字幕日韩91人妻在线| 久久久制服丝袜中文字幕| 国产真实灌醉下药美女av福利| 欧美日韩精品永久免费网址 | 久久久极品久久蜜桃| 亚洲天堂第一页中文字幕| 亚洲国产精品久久久久久6| 中文字幕一区二 区二三区四区| 久久丁香花五月天色婷婷| 亚洲另类在线免费观看| 天天日天天鲁天天操| av一区二区三区人妻| 久久久久久久一区二区三| 国产三级影院在线观看| 夜色撩人久久7777| 亚洲国产精品美女在线观看| 日本精品视频不卡一二三| 国产一区av澳门在线观看| 99热这里只有精品中文| 激情五月婷婷免费视频| 91精品国产黑色丝袜| 激情小视频国产在线| 北条麻妃高跟丝袜啪啪| 亚洲人妻30pwc| 天天日天天天天天天天天天天| 精品久久久久久高潮| 新97超碰在线观看| 亚洲综合乱码一区二区| 免费在线看的黄网站| 在线视频国产欧美日韩| 国产日韩精品一二三区久久久| 国产成人午夜精品福利| 黄色片黄色片wyaa| 99久久久无码国产精品性出奶水| 久久午夜夜伦痒痒想咳嗽P| 国产一线二线三线的区别在哪| 老司机在线精品福利视频| 天天干天天插天天谢| 成人亚洲精品国产精品| 亚洲激情偷拍一区二区| 91国产在线免费播放| 在线免费观看黄页视频| 一区二区熟女人妻视频| 亚洲av在线观看尤物| 80电影天堂网官网| av俺也去在线播放| 91色网站免费在线观看| 欧美aa一级一区三区四区| 中文字幕日韩人妻在线三区| 好吊视频—区二区三区| 欧洲日韩亚洲一区二区三区| 成人动漫大肉棒插进去视频| 亚洲中文字字幕乱码| 国产一线二线三线的区别在哪 | 欧美在线偷拍视频免费看| 亚洲国产精品美女在线观看| jul—619中文字幕在线| 婷婷午夜国产精品久久久| 精品久久久久久久久久久99| 瑟瑟视频在线观看免费视频| 久久久精品欧洲亚洲av| 欧洲国产成人精品91铁牛tv| 午夜精品福利91av| 日本av高清免费网站| 毛茸茸的大外阴中国视频| 日韩黄色片在线观看网站| 99精品视频在线观看婷婷| jiuse91九色视频| 国产自拍在线观看成人| 久久一区二区三区人妻欧美| 成年人午夜黄片视频资源| 亚洲综合乱码一区二区| 99久久超碰人妻国产| 91试看福利一分钟| 国产亚洲视频在线观看| 午夜精品福利一区二区三区p | 真实国模和老外性视频| 在线观看国产网站资源| 久久久久久国产精品| 93精品视频在线观看| 非洲黑人一级特黄片| av老司机精品在线观看| 精品黑人一区二区三区久久国产| 天天插天天狠天天操| 播放日本一区二区三区电影| 中文字幕人妻被公上司喝醉在线| 亚洲专区激情在线观看视频| 沙月文乃人妻侵犯中文字幕在线| 免费观看污视频网站| 免费高清自慰一区二区三区网站| 久久久久久久精品老熟妇| 国产一区二区在线欧美| 激情伦理欧美日韩中文字幕| 社区自拍揄拍尻屁你懂的| 人人妻人人人操人人人爽| jiuse91九色视频| 色婷婷久久久久swag精品| 超碰97人人做人人爱| 欧美成人精品欧美一级黄色| 久久久超爽一二三av| 三级av中文字幕在线观看| 毛茸茸的大外阴中国视频| 中文字幕 人妻精品| 在线网站你懂得老司机| 孕妇奶水仑乱A级毛片免费看| 激情五月婷婷综合色啪| 亚洲精品欧美日韩在线播放| 中文字幕第一页国产在线| 亚洲成人三级在线播放 | 国产使劲操在线播放| 在线免费视频 自拍| 99视频精品全部15| 激情人妻校园春色亚洲欧美| 99热久久极品热亚洲| 欧美精产国品一二三区| 亚洲免费成人a v| 国产女人被做到高潮免费视频| 被大鸡吧操的好舒服视频免费| 2021天天色天天干| 都市家庭人妻激情自拍视频| 日韩亚洲高清在线观看| 自拍偷拍亚洲欧美在线视频| 黄色视频成年人免费观看| 在线 中文字幕 一区| 中英文字幕av一区| 精品久久久久久久久久久a√国产| 一区二区三区四区五区性感视频 | 天天做天天爽夜夜做少妇| 欧美精品国产综合久久| 欧美伊人久久大香线蕉综合| 超黄超污网站在线观看| 热久久只有这里有精品| 免费黄高清无码国产| 国产一线二线三线的区别在哪 | 男人和女人激情视频| 亚洲天堂第一页中文字幕| 91精品国产黑色丝袜| 久久久精品999精品日本| 国产欧美精品一区二区高清 | caoporm超碰国产| 中文字幕成人日韩欧美| 红杏久久av人妻一区| 丝袜美腿视频诱惑亚洲无| 操人妻嗷嗷叫视频一区二区| 大胆亚洲av日韩av| 亚洲av色图18p| 91国产在线视频免费观看| 福利视频广场一区二区| 欧美在线偷拍视频免费看| 女人精品内射国产99| 自拍偷拍亚洲精品第2页| 2022国产综合在线干| 夫妻在线观看视频91| 精品一区二区三区欧美| 黄网十四区丁香社区激情五月天| 中文字幕在线观看国产片| 午夜精品久久久久久99热| 亚洲卡1卡2卡三卡四老狼| 婷婷五月亚洲综合在线| 男人天堂av天天操| 男人靠女人的逼视频| 日本特级片中文字幕| 黄色片年轻人在线观看| 9色精品视频在线观看| 在线观看的黄色免费网站| 姐姐的朋友2在线观看中文字幕| 老司机99精品视频在线观看| 亚洲人成精品久久久久久久| 中文字幕在线免费第一页| 蜜桃久久久久久久人妻| 亚洲综合一区成人在线| 动漫美女的小穴视频| 亚洲一区av中文字幕在线观看| 三级黄色亚洲成人av| av在线播放国产不卡| 婷婷午夜国产精品久久久| 国产精品久久久久久美女校花| 巨乳人妻日下部加奈被邻居中出| 日本少妇的秘密免费视频| 爱有来生高清在线中文字幕| 亚洲av第国产精品| 黑人3p华裔熟女普通话| 爱有来生高清在线中文字幕| 日韩精品中文字幕福利| 国产亚洲精品欧洲在线观看| 超级碰碰在线视频免费观看| 内射久久久久综合网| 国产av自拍偷拍盛宴| 一区二区三区国产精选在线播放| 欧美专区第八页一区在线播放 | 日韩二区视频一线天婷婷五| 91在线视频在线精品3| 天天插天天色天天日| 97瑟瑟超碰在线香蕉| 中文字幕视频一区二区在线观看| 日本少妇人妻xxxxxhd| chinese国产盗摄一区二区| 91麻豆精品秘密入口在线观看| 精品久久久久久久久久久99| 在线观看免费岛国av| 国产欧美精品一区二区高清| 日本免费午夜视频网站| 中文字幕 亚洲av| 熟女人妻在线中出观看完整版| av亚洲中文天堂字幕网| 伊人综合免费在线视频| 91麻豆精品久久久久| 粉嫩欧美美人妻小视频| 熟女在线视频一区二区三区| 日本三极片中文字幕| 久久久久91精品推荐99| 亚洲欧美一区二区三区爱爱动图| 日本福利午夜电影在线观看| 青青热久免费精品视频在线观看| 啪啪啪啪啪啪啪免费视频| 美女福利视频导航网站| 中文字幕在线欧美精品| 精品av久久久久久久| 888欧美视频在线| 人妻少妇精品久久久久久| 国产污污污污网站在线| 久久人人做人人妻人人玩精品vr| av天堂资源最新版在线看| 熟女91pooyn熟女| 男人天堂最新地址av| 91天堂天天日天天操| 红桃av成人在线观看| 中国产一级黄片免费视频播放| 2021国产一区二区| 在线成人日韩av电影| 大骚逼91抽插出水视频| 成人色综合中文字幕| 综合激情网激情五月天| 在线不卡成人黄色精品| 国产女人露脸高潮对白视频| 中文字幕第一页国产在线| 涩涩的视频在线观看视频| 亚洲av无乱一区二区三区性色| 欧美伊人久久大香线蕉综合| 日韩成人综艺在线播放| 白白操白白色在线免费视频| 青青青青青青草国产| 播放日本一区二区三区电影| 大香蕉大香蕉在线看| 伊人综合aⅴ在线网| 精品亚洲中文字幕av| 亚洲欧美一卡二卡三卡| 大香蕉伊人国产在线| 淫秽激情视频免费观看| 亚洲天堂成人在线观看视频网站| 午夜国产福利在线观看| 一个色综合男人天堂| 国产精品入口麻豆啊啊啊| 精彩视频99免费在线| 93视频一区二区三区| 2018最新中文字幕在线观看| 9色在线视频免费观看| 超鹏97历史在线观看| 久久久久久久亚洲午夜综合福利| 女同性ⅹxx女同hd| 欧美美女人体视频一区| 黄页网视频在线免费观看| 91精品国产91久久自产久强| 天天干天天操天天爽天天摸| 亚洲视频乱码在线观看| 中国熟女@视频91| 亚洲成人熟妇一区二区三区| 91久久国产成人免费网站| 中文字幕一区二区三区蜜月| 97色视频在线观看| 熟女人妻三十路四十路人妻斩| 久久三久久三久久三久久| 久草视频在线免播放| 在线新三级黄伊人网| 亚洲欧美激情国产综合久久久| 国产97在线视频观看| 黄色大片男人操女人逼| 国产日韩欧美美利坚蜜臀懂色| 被大鸡吧操的好舒服视频免费 | 国产a级毛久久久久精品| 最近中文字幕国产在线| 精品高跟鞋丝袜一区二区| 免费观看丰满少妇做受| 99精品视频之69精品视频 | 岛国青草视频在线观看| 亚洲最大免费在线观看| 成人高清在线观看视频| 黄色黄色黄片78在线| 日本高清成人一区二区三区| 大香蕉大香蕉在线看| 中国把吊插入阴蒂的视频| av久久精品北条麻妃av观看| 91she九色精品国产| 水蜜桃一区二区三区在线观看视频| 国产日韩精品电影7777| 午夜精品福利91av| 天天摸天天日天天操| sw137 中文字幕 在线| 男人天堂最新地址av| 欧美色呦呦最新网址| av日韩在线免费播放| 57pao国产一区二区| 福利国产视频在线观看| 日本三极片视频网站观看| 91久久人澡人人添人人爽乱| www骚国产精品视频| 人妻av无码专区久久绿巨人| 天天插天天狠天天操| 夜鲁夜鲁狠鲁天天在线| 十八禁在线观看地址免费| 天天做天天干天天操天天射| 亚洲图库另类图片区| 天天夜天天日天天日| 亚洲精品 日韩电影| 亚洲一区二区久久久人妻| 国产精品中文av在线播放| 中文字幕高清资源站| 老司机深夜免费福利视频在线观看| gav成人免费播放| 中文亚洲欧美日韩无线码| 日本性感美女写真视频| 黄片大全在线观看观看| 天天色天天操天天舔| 久久美欧人妻少妇一区二区三区| 国产亚洲精品品视频在线| 午夜毛片不卡在线看| 九色porny九色9l自拍视频| 人妻丝袜诱惑我操她视频| 亚洲熟妇x久久av久久| 东京热男人的av天堂| 黄页网视频在线免费观看| 久久精品国产23696| 天天操夜夜操天天操天天操 | 人妻少妇av在线观看| 色吉吉影音天天干天天操| 蜜桃久久久久久久人妻| 欧美一区二区三区啪啪同性| 六月婷婷激情一区二区三区| 2021年国产精品自拍| 亚洲综合另类欧美久久| 视频二区在线视频观看| 视频一区二区在线免费播放| 热久久只有这里有精品| 精品黑人巨大在线一区| 啪啪啪啪啪啪啪啪啪啪黄色| 91免费放福利在线观看| 成人综合亚洲欧美一区| av一区二区三区人妻| 都市家庭人妻激情自拍视频| 免费黄色成人午夜在线网站| 涩涩的视频在线观看视频| 91超碰青青中文字幕| 啪啪啪18禁一区二区三区| 换爱交换乱高清大片| 红桃av成人在线观看| 亚国产成人精品久久久| 午夜精品在线视频一区| 国产麻豆国语对白露脸剧情| 大鸡巴操娇小玲珑的女孩逼| 91色秘乱一区二区三区| 青春草视频在线免费播放| 91天堂天天日天天操| 精品国产污污免费网站入口自| 国产乱子伦一二三区| 美日韩在线视频免费看| 青青草视频手机免费在线观看| 国产一区二区神马久久| 精品亚洲国产中文自在线| 亚洲图片欧美校园春色| 57pao国产一区二区| 18禁美女羞羞免费网站| 热思思国产99re| 男生用鸡操女生视频动漫| 青青青青青青青青青青草青青| 免费高清自慰一区二区三区网站 | 国内精品在线播放第一页| 国产性色生活片毛片春晓精品 | 99热久久这里只有精品8| 日本xx片在线观看| 大屁股肉感人妻中文字幕在线| 欧美亚洲中文字幕一区二区三区 | 亚洲一区久久免费视频| 亚洲一区二区三区久久受 | 在线观看av亚洲情色| 色综合久久无码中文字幕波多| 久草免费人妻视频在线| 国产精品视频男人的天堂| 久久麻豆亚洲精品av| 中文字幕无码一区二区免费| 69精品视频一区二区在线观看| 欧美一区二区三区在线资源| 亚洲1区2区3区精华液| 丝袜长腿第一页在线| 边摸边做超爽毛片18禁色戒| 人妻丝袜诱惑我操她视频| 黄页网视频在线免费观看| 91在线视频在线精品3| 青青草人人妻人人妻| 日本一二三中文字幕| 亚洲免费国产在线日韩| 日韩av有码一区二区三区4| 亚洲欧美清纯唯美另类| 亚洲1卡2卡三卡4卡在线观看 | 午夜场射精嗯嗯啊啊视频| 日本xx片在线观看| 女警官打开双腿沦为性奴| 在线免费观看亚洲精品电影| yy96视频在线观看| 国产成人精品一区在线观看| 日本性感美女三级视频| 免费福利av在线一区二区三区| 精品黑人一区二区三区久久国产| 天天操夜夜骑日日摸| 老司机免费视频网站在线看| 人人超碰国字幕观看97| 动漫av网站18禁| 亚洲欧美另类手机在线| 沙月文乃人妻侵犯中文字幕在线 | 看一级特黄a大片日本片黑人| 国产综合高清在线观看| 国产成人午夜精品福利| 黑人乱偷人妻中文字幕| 日日操综合成人av| 日韩精品啪啪视频一道免费| 国产大鸡巴大鸡巴操小骚逼小骚逼| 国产在线观看免费人成短视频| 青青草精品在线视频观看| av俺也去在线播放| 久久综合老鸭窝色综合久久| 激情人妻校园春色亚洲欧美 | 成人高清在线观看视频| japanese日本熟妇另类| 真实国模和老外性视频| 青青青爽视频在线播放| 婷婷久久一区二区字幕网址你懂得 | 亚洲熟女女同志女同| 97年大学生大白天操逼| 精品区一区二区三区四区人妻| 在线免费观看国产精品黄色| 人人妻人人澡人人爽人人dvl| 亚洲1区2区3区精华液| 韩国三级aaaaa高清视频| 91亚洲精品干熟女蜜桃频道| 欧美一区二区三区在线资源| 精品人妻伦一二三区久| 久久亚洲天堂中文对白| 免费黄页网站4188| 午夜美女福利小视频| 美女张开腿让男生操在线看| 姐姐的朋友2在线观看中文字幕 | 超pen在线观看视频公开97| 亚洲精品一区二区三区老狼| 中文人妻AV久久人妻水| 日本特级片中文字幕| 55夜色66夜色国产精品站| 国产激情av网站在线观看| 日视频免费在线观看| 亚洲高清国产一区二区三区| 亚洲一区二区三区偷拍女厕91| 午夜福利资源综合激情午夜福利资 | 青青操免费日综合视频观看| 亚洲欧美色一区二区| gogo国模私拍视频| 欧美亚洲偷拍自拍色图| av老司机亚洲一区二区| 亚洲va国产va欧美va在线| 日本av在线一区二区三区| 97黄网站在线观看| 亚洲色偷偷综合亚洲AV伊人| 天天操天天干天天艹| 水蜜桃一区二区三区在线观看视频| 国产亚洲成人免费在线观看 | 9国产精品久久久久老师| 亚洲午夜高清在线观看| 欧美老妇精品另类不卡片| 91精品一区二区三区站长推荐| 少妇人妻真实精品视频| 黄色中文字幕在线播放| 韩国三级aaaaa高清视频| 天天草天天色天天干| 福利在线视频网址导航 | 在线播放 日韩 av| 久久精品国产23696| 天天日天天干天天插舔舔| 国产一区av澳门在线观看| 国产免费av一区二区凹凸四季| 水蜜桃国产一区二区三区| 日韩欧美国产精品91| 综合精品久久久久97| 欧美va不卡视频在线观看| 日本少妇在线视频大香蕉在线观看| 18禁美女无遮挡免费| 国产高清女主播在线| 亚洲国产精品久久久久蜜桃| 18禁美女无遮挡免费| 国产精品久久综合久久| 55夜色66夜色国产精品站| 国产精品三级三级三级| eeuss鲁片一区二区三区| 中文亚洲欧美日韩无线码| 国产麻豆乱子伦午夜视频观看| 老司机午夜精品视频资源| 亚欧在线视频你懂的| 国产成人自拍视频播放| 亚洲护士一区二区三区| 天天日天天日天天射天天干 | 欧美精品免费aaaaaa| 99热这里只有精品中文| 日视频免费在线观看| 亚洲 中文字幕在线 日韩| 欧美性受xx黑人性猛交| 久久久久久久久久一区二区三区| 五月精品丁香久久久久福利社| 亚洲 中文 自拍 另类 欧美| 亚洲av无乱一区二区三区性色| 蜜桃专区一区二区在线观看| 操日韩美女视频在线免费看| 中文字幕网站你懂的| 999久久久久999| 成年美女黄网站18禁久久| 日韩中文字幕在线播放第二页 | 在线观看国产网站资源| 青青青爽视频在线播放| 午夜精品久久久久久99热| 欧美黑人巨大性xxxxx猛交| 国产在线91观看免费观看| 欧美一区二区三区高清不卡tv | 大香蕉日本伊人中文在线| 国产精品视频男人的天堂| 亚洲va天堂va国产va久| 五月天久久激情视频| 国产九色91在线视频| 国产麻豆精品人妻av| 好吊操视频这里只有精品| 11久久久久久久久久久| 端庄人妻堕落挣扎沉沦| 国产精品成人xxxx| 国产视频精品资源网站| 红桃av成人在线观看| rct470中文字幕在线| 久久久久久国产精品| 久久99久久99精品影院| 亚洲欧美福利在线观看| 国产使劲操在线播放| 免费观看理论片完整版| 99精品国产自在现线观看| 91人妻精品久久久久久久网站 | 馒头大胆亚洲一区二区| 亚洲粉嫩av一区二区三区| 性色av一区二区三区久久久| 三上悠亚和黑人665番号| 最后99天全集在线观看| av乱码一区二区三区| 全国亚洲男人的天堂| 同居了嫂子在线播高清中文| 黄片大全在线观看观看| 五十路人妻熟女av一区二区| 狠狠的往里顶撞h百合| 噜噜色噜噜噜久色超碰| 无忧传媒在线观看视频| 中文字幕在线免费第一页| 99久久超碰人妻国产| 2021天天色天天干| 天天摸天天干天天操科普| 80电影天堂网官网| 亚洲综合一区成人在线| xxx日本hd高清| 中文字幕之无码色多多| 亚洲一级美女啪啪啪| 亚洲激情偷拍一区二区| 日本人妻少妇18—xx| 亚洲国产精品免费在线观看| 自拍偷拍 国产资源| 国产亚洲精品视频合集| 丰满少妇翘臀后进式| 日本人竟这样玩学生妹| 欧美精品伦理三区四区| 亚洲色偷偷综合亚洲AV伊人| 国产实拍勾搭女技师av在线| 三级黄色亚洲成人av| 天天操夜夜操天天操天天操 | 最近中文字幕国产在线| 国产又色又刺激在线视频| 亚洲精品国品乱码久久久久| 亚洲精品国产综合久久久久久久久 | 不卡一不卡二不卡三| 日韩熟女av天堂系列| 成年人免费看在线视频| 91极品新人『兔兔』精品新作| 欧亚乱色一区二区三区| 天干天天天色天天日天天射| 国产精品三级三级三级| 日日夜夜精品一二三| 欧美男人大鸡吧插女人视频| 国产精品一二三不卡带免费视频| 亚洲国产精品美女在线观看| 91色秘乱一区二区三区| 亚洲卡1卡2卡三卡四老狼| 一区二区三区美女毛片| 欧美黑人与人妻精品| 蜜桃视频入口久久久| 午夜蜜桃一区二区三区| brazzers欧熟精品系列| 国产欧美精品不卡在线| mm131美女午夜爽爽爽| 99精品视频之69精品视频| 久久这里有免费精品| 伊人开心婷婷国产av| yy96视频在线观看| 涩涩的视频在线观看视频| 日本黄色三级高清视频| 青青草人人妻人人妻| 91色秘乱一区二区三区| 国产极品美女久久久久久| 人妻av无码专区久久绿巨人| 初美沙希中文字幕在线| 亚洲一区二区三区久久午夜| 国产+亚洲+欧美+另类| 天天干天天插天天谢| 老司机在线精品福利视频| 男人靠女人的逼视频| av网址在线播放大全| 久久这里有免费精品| 日韩成人免费电影二区| 人妻熟女中文字幕aⅴ在线| 午夜久久久久久久99| yellow在线播放av啊啊啊| 国产午夜亚洲精品麻豆| 欧美精品伦理三区四区| 日本三极片视频网站观看| 日本一区精品视频在线观看| 18禁美女黄网站色大片下载| 大学生A级毛片免费视频| 91国语爽死我了不卡| 久草视频首页在线观看| 一区二区三区四区五区性感视频| 亚洲少妇人妻无码精品| 青青青青草手机在线视频免费看| 91九色porny蝌蚪国产成人| 极品粉嫩小泬白浆20p主播 | 老司机深夜免费福利视频在线观看| 亚洲va国产va欧美va在线| 天天干天天操天天摸天天射| 日本人妻少妇18—xx| 综合色区亚洲熟妇shxstz| 亚洲精品国偷自产在线观看蜜桃| 人妻少妇亚洲一区二区| 免费黄高清无码国产| 天天做天天爽夜夜做少妇| 中文字幕AV在线免费看 | 中文字幕日本人妻中出| 五月激情婷婷久久综合网| 国产中文精品在线观看| 国产精品人妻66p| 97成人免费在线观看网站| 国产chinesehd精品麻豆| 成人24小时免费视频| 岛国青草视频在线观看| 久久精品视频一区二区三区四区| 免费十精品十国产网站| 国产福利小视频免费观看| 中文字幕av男人天堂| 91免费黄片可看视频| 99精品视频在线观看免费播放| 成人伊人精品色xxxx视频| 中文字幕第1页av一天堂网| 中文字幕一区二 区二三区四区| 在线免费91激情四射 | 日本黄色特一级视频| 中文字幕免费在线免费| 2021久久免费视频| av在线免费资源站| 亚洲午夜电影在线观看| 色呦呦视频在线观看视频| 好男人视频在线免费观看网站| 亚洲人妻av毛片在线| 韩国男女黄色在线观看| nagger可以指黑人吗| 国产视频网站一区二区三区| 国产高清在线观看1区2区| 成人资源在线观看免费官网| 亚洲精品久久视频婷婷| 午夜精品福利91av| 免费手机黄页网址大全| 高潮视频在线快速观看国家快速| 国产精品3p和黑人大战| 国产成人小视频在线观看无遮挡| 蜜桃视频在线欧美一区| 青青青艹视频在线观看| 2021年国产精品自拍| 国产精品国产三级国产午| 亚洲青青操骚货在线视频| 天天艹天天干天天操| 欧美黑人性猛交xxxxⅹooo| 老鸭窝在线观看一区| 91九色porny国产在线| 国产福利小视频二区| 欧洲亚洲欧美日韩综合| 韩国亚洲欧美超一级在线播放视频| 高潮视频在线快速观看国家快速| 五月婷婷在线观看视频免费| 国产一区成人在线观看视频| 亚洲免费成人a v| 91在线视频在线精品3| 亚洲av极品精品在线观看| 操人妻嗷嗷叫视频一区二区| 18禁免费av网站| 好男人视频在线免费观看网站| 2020av天堂网在线观看| 在线免费观看av日韩| 亚洲天堂av最新网址| 亚洲少妇人妻无码精品| 午夜精品一区二区三区4| 天天草天天色天天干| 天天操夜夜操天天操天天操| 在线 中文字幕 一区| 自拍偷拍vs一区二区三区| 亚洲国产精品久久久久久6| 成人H精品动漫在线无码播放| av成人在线观看一区| 888欧美视频在线| 啊啊啊视频试看人妻| 18禁美女无遮挡免费| 色秀欧美视频第一页| 中文字幕欧美日韩射射一| 99精品免费观看视频| 大尺度激情四射网站| 国产真实乱子伦a视频| 国产麻豆剧果冻传媒app| 婷婷五月亚洲综合在线| 一个色综合男人天堂| 中国熟女一区二区性xx| 18禁网站一区二区三区四区| 久久久久久97三级| 3D动漫精品啪啪一区二区下载| 999久久久久999| 国产性色生活片毛片春晓精品 | 国产一区二区火爆视频| 喷水视频在线观看这里只有精品| 国产精品自偷自拍啪啪啪| 东京干手机福利视频| 亚洲精品一线二线在线观看 | 成人精品视频99第一页| 中文字幕一区二区自拍| 欧亚日韩一区二区三区观看视频| 午夜精品在线视频一区| 成人蜜臀午夜久久一区| 啊用力插好舒服视频| 美女福利写真在线观看视频| 超碰在线观看免费在线观看| 美女操逼免费短视频下载链接| 天天操天天干天天日狠狠插| 免费无毒热热热热热热久| 狠狠的往里顶撞h百合| 日韩av免费观看一区| 国产高清在线在线视频| 国产在线自在拍91国语自产精品| 啊用力插好舒服视频| 天天操夜夜操天天操天天操| 福利视频广场一区二区| 亚洲va欧美va人人爽3p| 女蜜桃臀紧身瑜伽裤| 国产一区二区神马久久| 99热久久这里只有精品| 孕妇奶水仑乱A级毛片免费看| 亚洲高清视频在线不卡| 亚洲av无硬久久精品蜜桃| av在线观看网址av| 欧美老妇精品另类不卡片| 欧洲亚洲欧美日韩综合| 久久麻豆亚洲精品av| 国产精品人妻66p| 91老师蜜桃臀大屁股| 天天日天天透天天操| 国产精品黄大片在线播放| 在线可以看的视频你懂的| 午夜在线精品偷拍一区二| 亚洲av极品精品在线观看| 538精品在线观看视频| 一区二区三区 自拍偷拍| 国产av福利网址大全| 亚洲最大黄 嗯色 操 啊| 91精品国产91久久自产久强| 日日操综合成人av| 天堂女人av一区二区| 亚洲一级av大片免费观看| 青青草视频手机免费在线观看| 大胆亚洲av日韩av| 天堂av中文在线最新版| 91亚洲国产成人精品性色| 日本福利午夜电影在线观看| 人人妻人人人操人人人爽| 天天干天天搞天天摸| 欧美香蕉人妻精品一区二区| 中文字幕亚洲中文字幕| 超pen在线观看视频公开97| 国产性生活中老年人视频网站| 这里只有精品双飞在线播放| 2021久久免费视频| 中国视频一区二区三区| 欧美亚洲少妇福利视频| 美女福利视频导航网站| 2022天天干天天操| 激情小视频国产在线| 91国内精品久久久久精品一| 国产精品久久久黄网站| 欧美精品一二三视频| 经典国语激情内射视频| 国产露脸对白在线观看| 91社福利《在线观看| 人妻少妇性色欲欧美日韩| 日韩激情文学在线视频| 在线观看的a站 最新| 国产高清在线在线视频| 国产真实灌醉下药美女av福利| 国产精品一区二区三区蜜臀av| 大陆精品一区二区三区久久| 午夜婷婷在线观看视频| 亚洲国产免费av一区二区三区| 精品首页在线观看视频| 成人蜜臀午夜久久一区| 75国产综合在线视频| 2020久久躁狠狠躁夜夜躁| 亚洲综合乱码一区二区| 女同性ⅹxx女同h偷拍| 天天干天天搞天天摸| 爆乳骚货内射骚货内射在线| 午夜极品美女福利视频| 乱亲女秽乱长久久久| 亚洲精品高清自拍av| 天码人妻一区二区三区在线看 | 狠狠操狠狠操免费视频| huangse网站在线观看| 久久农村老妇乱69系列| 粉嫩欧美美人妻小视频| 色噜噜噜噜18禁止观看| 狠狠躁夜夜躁人人爽天天天天97| 精品av国产一区二区三区四区| 国产中文字幕四区在线观看| 久久丁香婷婷六月天| 国产精品大陆在线2019不卡| 特级欧美插插插插插bbbbb| 18禁无翼鸟成人在线| 美女操逼免费短视频下载链接| 美味人妻2在线播放| 9国产精品久久久久老师 | 夜夜嗨av一区二区三区中文字幕| 888欧美视频在线| 中文字幕一区的人妻欧美日韩| 91精品国产观看免费| 韩国AV无码不卡在线播放| 91久久精品色伊人6882| 97青青青手机在线视频| 77久久久久国产精产品| 一区二区视频在线观看视频在线| 伊人网中文字幕在线视频| 人妻少妇亚洲一区二区| 一区二区三区美女毛片| 日韩欧美高清免费在线| 99人妻视频免费在线| 国产福利小视频免费观看| 亚洲超碰97人人做人人爱| 成人蜜桃美臀九一一区二区三区| 制服丝袜在线人妻中文字幕| 国产97在线视频观看| 黑人变态深video特大巨大| av高潮迭起在线观看| 高潮喷水在线视频观看| 亚洲 欧美 精品 激情 偷拍| 久草电影免费在线观看| 成人蜜桃美臀九一一区二区三区| 久久久久久久99精品| 中文字幕国产专区欧美激情| 日本成人不卡一区二区| 综合国产成人在线观看| 国产一区av澳门在线观看| 北条麻妃高跟丝袜啪啪| 精品国产污污免费网站入口自| 亚洲国产美女一区二区三区软件| 国产亚洲天堂天天一区| 欧美viboss性丰满| 中文字幕在线一区精品| 精品一区二区亚洲欧美| 水蜜桃一区二区三区在线观看视频| 亚洲国产欧美一区二区丝袜黑人| 中文字幕人妻一区二区视频| 亚洲一区av中文字幕在线观看| 日本熟妇色熟妇在线观看| 女警官打开双腿沦为性奴| 中出中文字幕在线观看| 偷拍自拍视频图片免费| 巨乳人妻日下部加奈被邻居中出| 2020久久躁狠狠躁夜夜躁 | 亚洲日产av一区二区在线| av资源中文字幕在线观看| 日本美女性生活一级片| 在线视频这里只有精品自拍| 日本xx片在线观看| 不卡一不卡二不卡三| 好吊视频—区二区三区| 一区二区三区另类在线| 黄色的网站在线免费看| 97少妇精品在线观看| 四川乱子伦视频国产vip| 人人爱人人妻人人澡39| 中文字幕日韩无敌亚洲精品| 夜夜嗨av一区二区三区中文字幕| 国产麻豆国语对白露脸剧情| 国产精品人妻熟女毛片av久| 青青草成人福利电影| 久久精品久久精品亚洲人| 亚洲va天堂va国产va久| 美女张开腿让男生操在线看| 岛国黄色大片在线观看| 亚洲一区二区三区在线高清| 天堂av在线官网中文| 噜噜色噜噜噜久色超碰| 欧美精产国品一二三产品价格| 欧美黑人性暴力猛交喷水| 色呦呦视频在线观看视频| 人妻少妇中文有码精品| 75国产综合在线视频| 热99re69精品8在线播放| 亚洲女人的天堂av| 男人和女人激情视频| 亚洲1卡2卡三卡4卡在线观看| 黄色视频在线观看高清无码 | 中文字幕av第1页中文字幕| www天堂在线久久| 亚洲av在线观看尤物| 我想看操逼黄色大片| 国产精品黄页网站视频| 日本午夜福利免费视频| 啪啪啪啪啪啪啪免费视频| 精品人人人妻人人玩日产欧| 99久久99一区二区三区| 青青青国产片免费观看视频| 亚洲成人av在线一区二区| 久久麻豆亚洲精品av| 青娱乐蜜桃臀av色| 天天射,天天操,天天说| 男生舔女生逼逼的视频| 97人妻人人澡爽人人精品| 久久久久久久亚洲午夜综合福利| 在线不卡日韩视频播放| 日本一二三中文字幕| 国产精品人妻66p| 日本福利午夜电影在线观看| 欧美亚洲一二三区蜜臀| 极品性荡少妇一区二区色欲| 性感美女诱惑福利视频| 大鸡吧插逼逼视频免费看| 国产麻豆91在线视频| 成人福利视频免费在线| 国产在线91观看免费观看| 青青青国产免费视频| 亚洲综合另类欧美久久| 欧洲日韩亚洲一区二区三区| 揄拍成人国产精品免费看视频| 又粗又硬又猛又爽又黄的| 老有所依在线观看完整版| 青青青国产片免费观看视频| 2o22av在线视频| 日韩一区二区电国产精品| 晚上一个人看操B片| 香港一级特黄大片在线播放| 亚洲人妻30pwc| 夜夜操,天天操,狠狠操| 人妻av无码专区久久绿巨人| 久久美欧人妻少妇一区二区三区| 天天日天天干天天插舔舔| 岛国黄色大片在线观看| 馒头大胆亚洲一区二区| 黑人进入丰满少妇视频| okirakuhuhu在线观看| 天天躁夜夜躁日日躁a麻豆| 一本久久精品一区二区| 国产一区二区三免费视频| 2017亚洲男人天堂| 自拍偷拍亚洲另类色图| 亚洲视频在线观看高清| 国产av一区2区3区| 美洲精品一二三产区区别| 午夜婷婷在线观看视频| 日韩精品啪啪视频一道免费| 国产午夜无码福利在线看| 激情综合治理六月婷婷| 宅男噜噜噜666国产| japanese五十路熟女熟妇| 国产高清在线在线视频| 福利一二三在线视频观看| 天天干夜夜操天天舔| 2022天天干天天操| 午夜极品美女福利视频| 亚洲精品成人网久久久久久小说| 一区二区久久成人网| 18禁无翼鸟成人在线| 日本高清成人一区二区三区| 国产亚洲精品欧洲在线观看| 2021天天色天天干| 久久久精品欧洲亚洲av| 777奇米久久精品一区| 精品91高清在线观看| 亚洲国产精品免费在线观看| 国产白袜脚足J棉袜在线观看| 日韩欧美国产一区ab| 又色又爽又黄的美女裸体| 精品91自产拍在线观看一区| 日本黄色特一级视频| 天天日天天干天天搡| 亚洲一级av大片免费观看| 福利在线视频网址导航| 超级av免费观看一区二区三区| 97超碰免费在线视频| 2020韩国午夜女主播在线| 粉嫩av懂色av蜜臀av| 久久免费看少妇高潮完整版| 欧美成人综合视频一区二区| 亚洲区美熟妇久久久久| 日韩精品中文字幕福利| okirakuhuhu在线观看| 午夜精品福利一区二区三区p| 2022国产精品视频| 人妻在线精品录音叫床| 日本高清在线不卡一区二区| 人妻少妇亚洲精品中文字幕| 国产精品亚洲在线观看| 干逼又爽又黄又免费的视频| 国产午夜福利av导航| 2o22av在线视频| 91亚洲手机在线视频播放| 免费一级特黄特色大片在线观看| sejizz在线视频| 午夜久久久久久久99| 肏插流水妹子在线乐播下载| 日本韩国免费福利精品| 香港一级特黄大片在线播放| 中出中文字幕在线观看| 国产伦精品一区二区三区竹菊| 丰满熟女午夜福利视频| 天天干天天操天天插天天日| 亚洲狠狠婷婷综合久久app| 国产三级片久久久久久久| 亚洲第一黄色在线观看| 欧美美女人体视频一区| 日本韩国亚洲综合日韩欧美国产| 欧美激情精品在线观看| 人妻丝袜榨强中文字幕| 国产精品亚洲а∨天堂免| 涩涩的视频在线观看视频| 欧美 亚洲 另类综合| 一区二区三区蜜臀在线| 国产97在线视频观看| 成年人该看的视频黄免费| 欧美一区二区三区四区性视频| 国产一区二区火爆视频| 久久久久91精品推荐99| 在线免费观看欧美小视频| 一区二区三区四区五区性感视频| 国产精品久久久久国产三级试频| 91九色porny国产蝌蚪视频| 国产一区成人在线观看视频 | 亚洲丝袜老师诱惑在线观看| 成熟丰满熟妇高潮xx×xx| 国产午夜福利av导航| 国产欧美精品不卡在线| av老司机精品在线观看| 久草视频首页在线观看 | 日日操夜夜撸天天干| 一级黄片久久久久久久久| 欧美黑人性暴力猛交喷水| 99精品免费观看视频| 无码国产精品一区二区高潮久久4| 亚洲成人黄色一区二区三区| 青青草国内在线视频精选| 国产一区二区火爆视频| 男人和女人激情视频| 曰本无码人妻丰满熟妇啪啪| av乱码一区二区三区| 亚洲精品乱码久久久本| 91福利在线视频免费观看| 午夜美女福利小视频| 色av色婷婷人妻久久久精品高清| 国产午夜亚洲精品麻豆| www日韩毛片av| 国产乱子伦精品视频潮优女| 久久农村老妇乱69系列| 一色桃子久久精品亚洲| 国产福利小视频二区| 欧美 亚洲 另类综合| 国产精品免费不卡av| 国产自拍黄片在线观看| 欧美偷拍自拍色图片| 一区二区三区蜜臀在线| 乱亲女秽乱长久久久| 亚洲国产欧美一区二区三区…| 91试看福利一分钟| 91欧美在线免费观看| 成人av免费不卡在线观看| 国产精品系列在线观看一区二区| 人妻激情图片视频小说| 日韩欧美国产一区不卡| 日本最新一二三区不卡在线| 只有精品亚洲视频在线观看| 成人18禁网站在线播放| 3344免费偷拍视频| 啊啊好大好爽啊啊操我啊啊视频| 91国产在线免费播放| 亚洲成人av一区在线| 成人av久久精品一区二区| 国产亚洲欧美视频网站| 中文字日产幕乱六区蜜桃| 国产精品久久久久久久精品视频| 经典亚洲伊人第一页| 国产视频网站一区二区三区 | 激情图片日韩欧美人妻| 一区二区在线观看少妇| 久精品人妻一区二区三区| 欧美成人猛片aaaaaaa| 亚洲精品国产在线电影| 欧美精品伦理三区四区| 亚洲精品福利网站图片| 午夜在线精品偷拍一区二| 亚洲狠狠婷婷综合久久app| 午夜精品一区二区三区城中村| 很黄很污很色的午夜网站在线观看| 精品国产污污免费网站入口自| 日本少妇在线视频大香蕉在线观看| 欧美交性又色又爽又黄麻豆| 亚洲va国产va欧美精品88| 蜜桃色婷婷久久久福利在线| 青青草精品在线视频观看| 亚洲av一妻不如妾| 欧美乱妇无乱码一区二区| 91www一区二区三区| 国产精品黄片免费在线观看| 日韩av有码一区二区三区4 | 欧美日韩高清午夜蜜桃大香蕉| 午夜频道成人在线91| 老熟妇凹凸淫老妇女av在线观看| 777奇米久久精品一区| 亚洲av可乐操首页| 天堂av在线最新版在线| 国产亚洲精品欧洲在线观看| 免费无码人妻日韩精品一区二区 | 亚洲熟妇久久无码精品| 亚洲狠狠婷婷综合久久app| 中文字幕第三十八页久久| 天天操夜夜骑日日摸| 久久久久久性虐视频| 国产成人自拍视频播放| 2022国产综合在线干| 无忧传媒在线观看视频| 传媒在线播放国产精品一区| 人人妻人人澡欧美91精品| 97精品成人一区二区三区 | 亚洲欧美综合另类13p| 少妇高潮无套内谢麻豆| 在线视频国产欧美日韩| 日本av在线一区二区三区| 色哟哟在线网站入口| 天天操天天爽天天干| 精品黑人巨大在线一区| 亚洲精品精品国产综合| 青青青青草手机在线视频免费看| 骚逼被大屌狂草视频免费看| 国产精品系列在线观看一区二区| 密臀av一区在线观看| 一二三区在线观看视频| 欧美日本国产自视大全| 91免费观看在线网站| 青青草在观免费国产精品| 五月激情婷婷久久综合网| 肏插流水妹子在线乐播下载| 蜜臀成人av在线播放| 国产实拍勾搭女技师av在线| 欧美国品一二三产区区别| 在线观看操大逼视频| 久久精品视频一区二区三区四区| 亚洲美女自偷自拍11页| 伊人网中文字幕在线视频| 国产伦精品一区二区三区竹菊| 欧美久久久久久三级网| 91久久国产成人免费网站| 最新日韩av传媒在线| 超黄超污网站在线观看| 国产精品国产精品一区二区| 国产亚洲欧美视频网站| 经典亚洲伊人第一页| 国产高清精品极品美女| 亚洲精品精品国产综合| 做爰视频毛片下载蜜桃视频1| 国产aⅴ一线在线观看| 青青青青青免费视频| 桃色视频在线观看一区二区 | 91试看福利一分钟| 一区二区三区四区中文| 黄网十四区丁香社区激情五月天| 香蕉av影视在线观看| 啊啊啊视频试看人妻| 亚洲另类伦春色综合小| 天天爽夜夜爽人人爽QC| 人妻少妇一区二区三区蜜桃| 国产精彩对白一区二区三区 | 精品少妇一二三视频在线| 91综合久久亚洲综合| 国产精品久久久久久久久福交| 午夜精品九一唐人麻豆嫩草成人| 日本阿v视频在线免费观看| 亚洲2021av天堂| 国产大鸡巴大鸡巴操小骚逼小骚逼 | 国产免费av一区二区凹凸四季| 啊啊啊想要被插进去视频| 中文字幕av男人天堂| 青青青艹视频在线观看| 精品乱子伦一区二区三区免费播 | 亚洲人人妻一区二区三区| 五十路丰满人妻熟妇| 黑人巨大精品欧美视频| 在线免费观看视频一二区| 国产精品视频资源在线播放| 午夜精品久久久久久99热| 色婷婷精品大在线观看| 国产精品久久久久久久久福交 | 中文字幕日韩人妻在线三区| 丝袜美腿视频诱惑亚洲无| 欧美交性又色又爽又黄麻豆| 和邻居少妇愉情中文字幕| 韩国一级特黄大片做受| 精品一区二区三区欧美| 国产大鸡巴大鸡巴操小骚逼小骚逼| 99精品一区二区三区的区| 久久久久久cao我的性感人妻| 国产V亚洲V天堂无码欠欠| 日本午夜福利免费视频| 中文字幕+中文字幕| 国产一区自拍黄视频免费观看| 精品视频一区二区三区四区五区| 国产夫妻视频在线观看免费| 91精品一区二区三区站长推荐| 亚洲精品无码色午夜福利理论片| 经典国语激情内射视频| 欧美性感尤物人妻在线免费看| 青青青青青青青青青国产精品视频| av视屏免费在线播放| 欧美国产亚洲中英文字幕| 欧美一区二区三区久久久aaa| 亚洲偷自拍高清视频| 色秀欧美视频第一页| 在线观看一区二区三级| 一区二区在线视频中文字幕| 91国产在线免费播放| 国产又粗又硬又大视频| yy6080国产在线视频| 日本福利午夜电影在线观看| 国产精品免费不卡av| 久久这里只有精品热视频| 啊啊好大好爽啊啊操我啊啊视频 | 麻豆性色视频在线观看| 久久丁香婷婷六月天| 国产品国产三级国产普通话三级| 天天想要天天操天天干| 男人的天堂在线黄色| 日本真人性生活视频免费看| 在线不卡成人黄色精品| 国产精品国产三级麻豆| 视频 一区二区在线观看| 男人天堂av天天操| 适合午夜一个人看的视频| 国产变态另类在线观看| 精品国产在线手机在线| 国产三级精品三级在线不卡| 97资源人妻免费在线视频| 18禁无翼鸟成人在线| 亚洲天堂有码中文字幕视频| 日韩a级黄色小视频| 2012中文字幕在线高清| 女警官打开双腿沦为性奴| 97精品视频在线观看| 久久久久久久久久性潮| 伊人网中文字幕在线视频| 亚洲国产在人线放午夜| 51国产成人精品视频| 久久久超爽一二三av| 欧美精品亚洲精品日韩在线| 午夜在线一区二区免费| 日本黄在免费看视频| 色综合天天综合网国产成人 | 亚洲人妻视频在线网| 2018在线福利视频| 人妻熟女在线一区二区| 91麻豆精品久久久久| 黑人解禁人妻叶爱071| 最新欧美一二三视频| 少妇人妻久久久久视频黄片| 久久热这里这里只有精品| av破解版在线观看| 在线观看免费视频网| 欧美中国日韩久久精品| 亚洲成人情色电影在线观看| 97人人模人人爽人人喊| 国产视频一区在线观看| 日韩美女福利视频网| 国产亚洲四十路五十路| 97国产在线观看高清| 日韩人妻xxxxx| 成人亚洲国产综合精品| 国产精品入口麻豆啊啊啊| 成年午夜免费无码区| 日韩欧美中文国产在线| 青青草原网站在线观看| 四虎永久在线精品免费区二区 | 日本熟妇喷水xxx| 一区二区三区日本伦理| 一区二区三区四区视频| 黄色片年轻人在线观看| 天干天天天色天天日天天射| 4个黑人操素人视频网站精品91| 亚洲免费在线视频网站| 都市激情校园春色狠狠| 在线国产日韩欧美视频| 久久永久免费精品人妻专区| 一区国内二区日韩三区欧美| 99精品国产免费久久| 欧美亚洲自偷自拍 在线| 精品美女久久久久久| 91传媒一区二区三区| 操人妻嗷嗷叫视频一区二区| 日本18禁久久久久久| 人妻少妇一区二区三区蜜桃| 97人人模人人爽人人喊 | 亚洲中文字幕人妻一区| 欧洲黄页网免费观看| 免费看国产av网站| 熟女妇女老妇一二三区| 国产白嫩美女一区二区| 中国产一级黄片免费视频播放| 亚洲欧美久久久久久久久| 激情色图一区二区三区| 搡老熟女一区二区在线观看| 美女骚逼日出水来了| 日本韩国免费福利精品| 青娱乐最新视频在线| 男女之间激情网午夜在线| 国产精品sm调教视频| 亚洲熟妇无码一区二区三区| 欧美一区二区三区在线资源| okirakuhuhu在线观看| 午夜福利资源综合激情午夜福利资| 91试看福利一分钟| 亚洲熟女久久久36d| 视频一区二区综合精品| 久久香蕉国产免费天天| 五月天色婷婷在线观看视频免费| 欧美亚洲牲夜夜综合久久| 福利视频一区二区三区筱慧| 色天天天天射天天舔| 欧美亚洲中文字幕一区二区三区| 日本熟妇色熟妇在线观看| 国产极品精品免费视频| 东京热男人的av天堂| 视频一区二区在线免费播放| 又色又爽又黄的美女裸体| 黑人大几巴狂插日本少妇| 三级av中文字幕在线观看| 91小伙伴中女熟女高潮| okirakuhuhu在线观看| 亚洲综合自拍视频一区| 2021久久免费视频| 韩国爱爱视频中文字幕| 久久99久久99精品影院| 91成人精品亚洲国产| 欧美男人大鸡吧插女人视频| 亚洲男人在线天堂网| 亚洲特黄aaaa片| 国产在线自在拍91国语自产精品| 91大屁股国产一区二区| 中文字幕在线乱码一区二区| 成人亚洲国产综合精品| 一区二区三区久久久91| 国产一区成人在线观看视频| ka0ri在线视频| 亚洲男人在线天堂网| av手机在线观播放网站| 亚洲成人av一区在线| 国产久久久精品毛片| 免费费一级特黄真人片| 中文字幕乱码av资源| 动漫av网站18禁| 欧美日本在线观看一区二区| 国际av大片在线免费观看| 人妻无码中文字幕专区| 老司机福利精品视频在线| 97瑟瑟超碰在线香蕉| 午夜在线观看一区视频| 婷婷综合蜜桃av在线| 男女之间激情网午夜在线| 国产在线一区二区三区麻酥酥 | 成年人黄色片免费网站| 又色又爽又黄的美女裸体| 日本www中文字幕| 国产综合视频在线看片| 特级欧美插插插插插bbbbb| 成年人该看的视频黄免费| 91大神福利视频网| 快插进小逼里大鸡吧视频| aaa久久久久久久久| 青青青青草手机在线视频免费看| 美女视频福利免费看| 美女大bxxxx内射| 中国黄片视频一区91| 午夜国产免费福利av| 老司机福利精品视频在线| 91免费放福利在线观看| 在线观看免费视频色97| 66久久久久久久久久久| 老师啊太大了啊啊啊尻视频| 欧美视频一区免费在线| 亚洲乱码中文字幕在线| 精品久久久久久久久久久a√国产| 99热碰碰热精品a中文| 亚洲精品精品国产综合| 91精品资源免费观看| 99精品国产aⅴ在线观看| 黄色在线观看免费观看在线| 又粗又长 明星操逼小视频| 日本熟妇一区二区x x| 欧美精品黑人性xxxx| 中文字幕高清免费在线人妻| 超黄超污网站在线观看| 中文字幕成人日韩欧美| 国产超码片内射在线| 欧美精品久久久久久影院| 亚洲精品一线二线在线观看| 亚洲一级 片内射视正片| 婷婷激情四射在线观看视频| 一区二区三区综合视频| 老司机99精品视频在线观看| 国产一区二区欧美三区| 91p0rny九色露脸熟女| caoporn蜜桃视频| 五十路人妻熟女av一区二区| 亚洲欧美一区二区三区爱爱动图| 天天操天天弄天天射| 粉嫩小穴流水视频在线观看| 91九色国产porny蝌蚪| 人人妻人人澡欧美91精品| 全国亚洲男人的天堂| 人妻少妇亚洲精品中文字幕| 青青青青草手机在线视频免费看| 中文字幕亚洲中文字幕| 天天操夜夜骑日日摸| 亚洲精品久久视频婷婷| 亚洲av一妻不如妾| 亚洲av自拍天堂网| 色秀欧美视频第一页| 沙月文乃人妻侵犯中文字幕在线| 蜜桃视频17c在线一区二区| 亚洲精品麻豆免费在线观看| 青青擦在线视频国产在线| 国产九色91在线视频| 超鹏97历史在线观看| 2022国产综合在线干| 97超碰最新免费在线观看| 夏目彩春在线中文字幕| 成人高清在线观看视频| 亚洲国产欧美国产综合在线 | 久久免看30视频口爆视频| 无码国产精品一区二区高潮久久4 日韩欧美一级精品在线观看 | 无码中文字幕波多野不卡| 免费观看国产综合视频| 青青青青青免费视频| 国产av福利网址大全| 青青青国产免费视频| 欧洲黄页网免费观看| 亚洲精品无码色午夜福利理论片| 精品视频中文字幕在线播放| 播放日本一区二区三区电影| 亚洲精品 欧美日韩| 天天日天天玩天天摸| 国产精品人妻一区二区三区网站| 不卡一不卡二不卡三| 天美传媒mv视频在线观看| 97黄网站在线观看| 亚洲精品国偷自产在线观看蜜桃| 亚洲公开视频在线观看| 大胆亚洲av日韩av| 91桃色成人网络在线观看| 91久久精品色伊人6882| 国产 在线 免费 精品| 97瑟瑟超碰在线香蕉| 三级等保密码要求条款| 免费男阳茎伸入女阳道视频| 91在线视频在线精品3| 91桃色成人网络在线观看| 亚洲成人国产av在线| 国产不卡av在线免费| 婷婷色国产黑丝少妇勾搭AV| 欧美亚洲国产成人免费在线| 在线观看黄色成年人网站 | 天堂av中文在线最新版| 狠狠的往里顶撞h百合| 日韩精品二区一区久久| 偷拍3456eee| 欧美黄片精彩在线免费观看| 成人动漫大肉棒插进去视频| 日韩一个色综合导航| 国产老熟女伦老熟妇ⅹ| 老师让我插进去69AV| 中文字幕最新久久久| 午夜在线精品偷拍一区二| 国产成人精品福利短视频| 亚洲精品 欧美日韩| 91破解版永久免费| 免费黄页网站4188| 91国内精品久久久久精品一| 欧洲日韩亚洲一区二区三区| 色在线观看视频免费的| 91色网站免费在线观看| 蜜桃精品久久久一区二区| 亚洲男人在线天堂网| 成人av电影免费版| 久久久久久久久久一区二区三区| 在线视频免费观看网| 精品成人啪啪18免费蜜臀| 国产视频网站国产视频| 97欧洲一区二区精品免费| 国产成人无码精品久久久电影| av老司机精品在线观看| 天天干天天插天天谢| 日本性感美女视频网站| 天堂av在线播放免费| 亚洲1069综合男同| 国产熟妇乱妇熟色T区| 不卡日韩av在线观看| 亚洲中文字幕校园春色| 一区二区三区av高清免费| 成人av在线资源网站| 早川濑里奈av黑人番号| 亚洲欧美成人综合在线观看| 日韩近亲视频在线观看| 亚洲一区二区三区久久午夜| 啪啪啪操人视频在线播放| 亚洲一区二区三区uij| 日韩av中文在线免费观看| 中文字幕亚洲中文字幕| 91国内精品久久久久精品一| 宅男噜噜噜666免费观看| 亚洲国产欧美一区二区三区久久| 偷拍3456eee| 久久精品视频一区二区三区四区 | 蜜桃视频在线欧美一区| 91 亚洲视频在线观看| 沙月文乃人妻侵犯中文字幕在线| 亚洲av极品精品在线观看| 中文字幕 人妻精品| 国产变态另类在线观看| 涩涩的视频在线观看视频| 亚洲国产精品久久久久蜜桃| 一级a看免费观看网站| 一区二区在线视频中文字幕| 最新中文字幕免费视频| 亚洲av日韩av第一区二区三区| 欧美交性又色又爽又黄麻豆| 亚洲第一黄色在线观看| 亚洲无线观看国产高清在线| 风流唐伯虎电视剧在线观看| av一本二本在线观看| av在线观看网址av| 91精品国产综合久久久蜜| 99精品视频在线观看婷婷| 大鸡巴操娇小玲珑的女孩逼| 亚洲一区二区三区久久午夜| 亚洲视频在线视频看视频在线| 只有精品亚洲视频在线观看| 欧美成人综合视频一区二区 | 日本韩国免费福利精品| 97精品综合久久在线| 97国产在线av精品| 在线可以看的视频你懂的| 插逼视频双插洞国产操逼插洞 | 国产janese在线播放| 人人妻人人澡欧美91精品| 人人爱人人妻人人澡39| 人妻另类专区欧美制服| 蜜桃色婷婷久久久福利在线| 午夜精品福利一区二区三区p | 亚洲图片偷拍自拍区| 91九色国产porny蝌蚪| 成人30分钟免费视频| 91国内精品久久久久精品一| 午夜蜜桃一区二区三区| 五十路息与子猛烈交尾视频| 亚洲最大免费在线观看| 成人动漫大肉棒插进去视频| 欧美偷拍自拍色图片| 在线亚洲天堂色播av电影| 亚洲伊人av天堂有码在线| 日本人妻欲求不满中文字幕| 亚洲免费成人a v| 一区二区在线视频中文字幕| 国产黄色大片在线免费播放 | 九色精品视频在线播放| 欧美一区二区三区高清不卡tv| 不卡精品视频在线观看| 亚洲av极品精品在线观看| 亚洲成人情色电影在线观看| 午夜精品福利一区二区三区p| 一级a看免费观看网站| 99婷婷在线观看视频| 91老熟女连续高潮对白| 青青草原网站在线观看| 蜜桃视频入口久久久| 亚洲 中文 自拍 另类 欧美| 中文字幕免费在线免费| 2o22av在线视频| 国产三级精品三级在线不卡| 国产精品国产三级麻豆| 亚洲男人让女人爽的视频| 黑人3p华裔熟女普通话| av一本二本在线观看| 一二三区在线观看视频| 中文字幕人妻一区二区视频| 亚洲综合另类精品小说| 亚洲第17页国产精品| 1区2区3区不卡视频| 国产欧美精品免费观看视频| av在线资源中文字幕| 日本五十路熟新垣里子| 亚洲欧美综合另类13p| 亚洲欧美清纯唯美另类| av在线shipin| 久草免费人妻视频在线| 欧美xxx成人在线| 成人国产小视频在线观看| 女警官打开双腿沦为性奴| 99精品视频在线观看婷婷| 久久香蕉国产免费天天| 成人亚洲国产综合精品| 人人妻人人澡欧美91精品| 久久精品国产23696| 中文字幕中文字幕人妻| av在线资源中文字幕| 日本人妻少妇18—xx| 日本精品美女在线观看| 青青青青青手机视频| 5528327男人天堂| 最近中文2019年在线看| 亚洲av自拍天堂网| 91精品国产91久久自产久强| 91精品国产91青青碰| 中文字幕一区二区人妻电影冢本| 日韩欧美一级黄片亚洲| 亚洲图片欧美校园春色| 成人在线欧美日韩国产| 日本免费午夜视频网站| 午夜激情高清在线观看| av中文字幕在线导航| 手机看片福利盒子日韩在线播放| 日本韩国在线观看一区二区| 91高清成人在线视频| 亚洲国产精品免费在线观看| 亚洲综合色在线免费观看| 中文字幕人妻一区二区视频| 男生舔女生逼逼的视频| 日本熟妇色熟妇在线观看| 51国产成人精品视频| 欧美亚洲国产成人免费在线| 国产av自拍偷拍盛宴| 欧美精产国品一二三区| 亚洲欧美精品综合图片小说| 97精品人妻一区二区三区精品| 久草免费人妻视频在线| 午夜在线精品偷拍一区二| 免费av岛国天堂网站| 欧亚日韩一区二区三区观看视频 | 天天日天天玩天天摸| 国产三级精品三级在线不卡| 99人妻视频免费在线| 免费高清自慰一区二区三区网站| 青青青视频自偷自拍38碰| 93精品视频在线观看| 国产女人叫床高潮大片视频| av天堂资源最新版在线看| 好男人视频在线免费观看网站| 午夜国产免费福利av| 久久丁香花五月天色婷婷| 国产白袜脚足J棉袜在线观看| 欧美va亚洲va天堂va| 中文字幕一区二区三区蜜月| 精品成人啪啪18免费蜜臀| 极品性荡少妇一区二区色欲| 宅男噜噜噜666免费观看| 欧洲亚洲欧美日韩综合| 97超碰最新免费在线观看| 国产福利小视频大全| 男人的天堂在线黄色| 美女张开两腿让男人桶av| 98视频精品在线观看| 孕妇奶水仑乱A级毛片免费看| av网址在线播放大全| 日韩美女搞黄视频免费| 91极品新人『兔兔』精品新作| 国产精品国产三级国产精东| 亚洲2021av天堂| 女同久久精品秋霞网| 老司机免费福利视频网| 日韩美女精品视频在线观看网站| 2018最新中文字幕在线观看| 国产成人无码精品久久久电影| 在线播放一区二区三区Av无码| 日韩国产乱码中文字幕| 亚洲蜜臀av一区二区三区九色 | 在线免费观看日本片| 在线 中文字幕 一区| 自拍偷拍日韩欧美一区二区| 最近中文字幕国产在线| 亚洲精品色在线观看视频| 晚上一个人看操B片| 久久久精品欧洲亚洲av| 操日韩美女视频在线免费看| 19一区二区三区在线播放| 人人人妻人人澡人人| 97国产精品97久久| 男人操女人的逼免费视频| 中文字幕日韩91人妻在线| 亚洲福利精品福利精品福利| 黄片大全在线观看观看| 日本三极片中文字幕| 动漫美女的小穴视频| 夜夜嗨av蜜臀av| 中文字幕一区二区人妻电影冢本| 精品一区二区三区三区88| 4个黑人操素人视频网站精品91| 日本乱人一区二区三区| 日韩a级精品一区二区| av一本二本在线观看| av中文字幕网址在线| av中文字幕在线观看第三页| 欧美视频一区免费在线| 天天色天天爱天天爽| 欧美日韩国产一区二区三区三州| 成人av中文字幕一区| 国产精品欧美日韩区二区| 91精品国产黑色丝袜| 中文字幕熟女人妻久久久| 2021国产一区二区| 91国内视频在线观看| www天堂在线久久| 六月婷婷激情一区二区三区| 国产性感美女福利视频| 国产 在线 免费 精品| 国产丰满熟女成人视频| 日本高清撒尿pissing| 热思思国产99re| 成人av免费不卡在线观看| 亚洲综合色在线免费观看| 538精品在线观看视频| 欧美黑人性暴力猛交喷水| 成人H精品动漫在线无码播放| 欧美亚洲牲夜夜综合久久| 亚洲精品高清自拍av| 一色桃子人妻一区二区三区| 97人妻总资源视频| 2022精品久久久久久中文字幕| 精品日产卡一卡二卡国色天香| av天堂资源最新版在线看| av手机免费在线观看高潮| 1769国产精品视频免费观看| 午夜91一区二区三区| 日韩精品电影亚洲一区| 精品区一区二区三区四区人妻| 精品一区二区三四区| 国产福利小视频二区| 成人30分钟免费视频| 欧美一区二区三区啪啪同性| av在线shipin| 久久免看30视频口爆视频| 欧美日韩熟女一区二区三区| 啪啪啪18禁一区二区三区 | 东京热男人的av天堂| 蜜桃臀av蜜桃臀av| 国产成人小视频在线观看无遮挡 | 午夜大尺度无码福利视频| 亚洲成人国产av在线| 蝴蝶伊人久久中文娱乐网| 亚洲最大免费在线观看| 好太好爽好想要免费| 日本一二三中文字幕| 亚洲精品三级av在线免费观看| 又大又湿又爽又紧A视频| 97小视频人妻一区二区| 亚洲国产香蕉视频在线播放| 亚欧在线视频你懂的| 综合精品久久久久97| 国产成人一区二区三区电影网站| 国产av自拍偷拍盛宴| 91国语爽死我了不卡| 一区二区三区av高清免费| 青青草精品在线视频观看| 93视频一区二区三区| 久久精品国产亚洲精品166m| 国产黄色高清资源在线免费观看| 日本成人不卡一区二区| 日韩二区视频一线天婷婷五| 天天操天天插天天色| 日韩成人综艺在线播放| 啊用力插好舒服视频| 久久这里只有精品热视频 | 欧美精品 日韩国产| 不戴胸罩引我诱的隔壁的人妻| 国产精品入口麻豆啊啊啊| 欧美精品免费aaaaaa| 色伦色伦777国产精品| 搡老妇人老女人老熟女| 国产97在线视频观看| 精品亚洲中文字幕av| 成年人免费看在线视频| 伊人情人综合成人久久网小说| 在线观看视频 你懂的| 天天操天天操天天碰| 精品区一区二区三区四区人妻| 日韩成人综艺在线播放| 一本久久精品一区二区| 中文字幕1卡1区2区3区| 一区二区三区综合视频| 中文字幕人妻被公上司喝醉在线| 97人人模人人爽人人喊 | 免费成人av中文字幕| 1区2区3区不卡视频| 大鸡巴操娇小玲珑的女孩逼| 亚洲图片欧美校园春色| 搡老熟女一区二区在线观看| 超级碰碰在线视频免费观看| 中国熟女一区二区性xx| 在线不卡日韩视频播放| 日韩av有码一区二区三区4| 精品成人午夜免费看| 亚洲日本一区二区三区| 日本精品一区二区三区在线视频。| caoporn蜜桃视频| 中文亚洲欧美日韩无线码| 狠狠躁夜夜躁人人爽天天久天啪| 高潮喷水在线视频观看| 91人妻精品久久久久久久网站| 日本xx片在线观看| 传媒在线播放国产精品一区| 中文字幕一区二 区二三区四区| 中文字幕av第1页中文字幕| 91精品视频在线观看免费| 成人激情文学网人妻| 亚洲欧美一卡二卡三卡| 一区国内二区日韩三区欧美| 欧美激情电影免费在线| 免费在线播放a级片| 亚洲精品午夜久久久久| 又大又湿又爽又紧A视频| 97小视频人妻一区二区| 日本人妻精品久久久久久| 国产又粗又硬又猛的毛片视频| 男人天堂最新地址av| 91久久国产成人免费网站| 一二三中文乱码亚洲乱码one| 亚洲精品麻豆免费在线观看| 中文人妻AV久久人妻水| 国产精品久久久久久久女人18| 熟女在线视频一区二区三区| 91精品一区二区三区站长推荐| av中文字幕福利网| 人妻爱爱 中文字幕| 四川乱子伦视频国产vip| 高潮喷水在线视频观看| 大鸡八强奸视频在线观看| 亚洲2021av天堂| 熟女在线视频一区二区三区| 在线观看av观看av| 国产第一美女一区二区三区四区| 精品一区二区三区在线观看| 性色蜜臀av一区二区三区| 99re国产在线精品| 在线观看免费视频网| 蝴蝶伊人久久中文娱乐网| 国产高清97在线观看视频| 日韩人妻xxxxx| 黄片色呦呦视频免费看| 80电影天堂网官网| 伊人成人在线综合网| 大陆av手机在线观看| 色哟哟在线网站入口| 天天摸天天日天天操| 亚洲中文字幕国产日韩| 伊人综合aⅴ在线网| 欧美日韩人妻久久精品高清国产| 亚洲乱码中文字幕在线| 性感美女诱惑福利视频| 天天干天天操天天玩天天射| 亚洲av日韩精品久久久| 青青青青青手机视频| 播放日本一区二区三区电影 | 亚洲精品精品国产综合| 97超碰最新免费在线观看| 高潮视频在线快速观看国家快速| 夜色撩人久久7777| 日本免费视频午夜福利视频| 国产品国产三级国产普通话三级| 啊慢点鸡巴太大了啊舒服视频| 中文字幕在线乱码一区二区 | 激情啪啪啪啪一区二区三区| 日本午夜福利免费视频| 日日夜夜大香蕉伊人| 99一区二区在线观看| 国产熟妇一区二区三区av| 75国产综合在线视频| 一级黄色av在线观看| 亚洲色偷偷综合亚洲AV伊人| 成人国产影院在线观看| 天天干天天操天天插天天日| 国产精品久久久久国产三级试频| 人人妻人人爽人人添夜| 国产精品久久久黄网站| 国产欧美精品免费观看视频| 青青青视频自偷自拍38碰| 欧美xxx成人在线| 亚洲精品色在线观看视频| 久久久人妻一区二区| 在线免费观看日本伦理| 国产伊人免费在线播放| 欧美视频不卡一区四区| 国产成人自拍视频播放| 免费手机黄页网址大全| 91福利视频免费在线观看| 日噜噜噜夜夜噜噜噜天天噜噜噜| 日本韩国免费一区二区三区视频 | 久草视频福利在线首页| 黑人巨大精品欧美视频| 中出中文字幕在线观看| 91色网站免费在线观看| 中文字幕av熟女人妻| 亚洲av色香蕉一区二区三区| 国产美女精品福利在线| 亚洲av琪琪男人的天堂| 亚洲欧美激情国产综合久久久| 国产麻豆精品人妻av| 日韩欧美亚洲熟女人妻| 亚洲精品久久视频婷婷| 美女少妇亚洲精选av| 老师让我插进去69AV| 三上悠亚和黑人665番号| 亚洲av日韩av网站| 亚洲激情唯美亚洲激情图片| 老师啊太大了啊啊啊尻视频| 综合国产成人在线观看| 天天操天天操天天碰| 日曰摸日日碰夜夜爽歪歪| 99人妻视频免费在线| 97色视频在线观看| av天堂中文免费在线| 青青青青青青青青青国产精品视频| 欧美特色aaa大片| 欧美爆乳肉感大码在线观看| 亚洲国产欧美一区二区三区久久| 五十路息与子猛烈交尾视频 | 成人免费公开视频无毒| 最近的中文字幕在线mv视频| 97超碰国语国产97超碰| 中文亚洲欧美日韩无线码| 亚洲区欧美区另类最新章节| 少妇露脸深喉口爆吞精| 93人妻人人揉人人澡人人| 欧洲欧美日韩国产在线| 亚洲成人国产综合一区| 国产高清女主播在线| 国产av福利网址大全| 欧亚日韩一区二区三区观看视频| 国产精品伦理片一区二区| av破解版在线观看| 绯色av蜜臀vs少妇| 91 亚洲视频在线观看| 99久久成人日韩欧美精品| 亚洲精品乱码久久久本| caoporm超碰国产| 沙月文乃人妻侵犯中文字幕在线| 久久久久久久精品老熟妇| av在线播放国产不卡| 欧美80老妇人性视频| 777奇米久久精品一区| 亚洲精品乱码久久久本| 中文字幕,亚洲人妻| 18禁精品网站久久| 一本久久精品一区二区| 黑人进入丰满少妇视频| 免费观看丰满少妇做受| 亚洲精品高清自拍av| 51国产成人精品视频| 2022国产综合在线干| 99精品视频之69精品视频| 中出中文字幕在线观看| 精彩视频99免费在线| 四川乱子伦视频国产vip| 日韩精品二区一区久久| 55夜色66夜色国产精品站| 亚洲免费成人a v| 激情人妻校园春色亚洲欧美 | 又粗又长 明星操逼小视频 | av日韩在线观看大全| 制丝袜业一区二区三区| 特级无码毛片免费视频播放| 午夜久久久久久久精品熟女| 香蕉91一区二区三区| 免费岛国喷水视频在线观看 | 中文字幕人妻av在线观看| 亚洲美女美妇久久字幕组| 日韩一个色综合导航| 亚洲av自拍偷拍综合| 中文字幕高清在线免费播放| 亚洲视频在线视频看视频在线| 国产中文精品在线观看| 玖玖一区二区在线观看| 亚洲国产最大av综合| 亚洲中文精品人人免费| 欧美日韩精品永久免费网址| 性感美女诱惑福利视频| 美女骚逼日出水来了| 91国产在线免费播放| 亚洲高清自偷揄拍自拍| 黑人大几巴狂插日本少妇| 搡老妇人老女人老熟女| 啪啪啪操人视频在线播放| 色97视频在线播放| 精品老妇女久久9g国产| 免费在线看的黄网站| 国产欧美日韩在线观看不卡| 亚洲第一伊人天堂网| 精品美女久久久久久| 日韩亚国产欧美三级涩爱| 亚洲1区2区3区精华液| 日本特级片中文字幕| 国产精彩福利精品视频| 黑人乱偷人妻中文字幕| 视频久久久久久久人妻| 狍和女人的王色毛片| 国产精品日韩欧美一区二区| 亚洲av色图18p| 日本熟女精品一区二区三区| 亚洲天堂精品久久久| 亚洲精品久久视频婷婷| 欧美黄色录像免费看的| 懂色av之国产精品| 无套猛戳丰满少妇人妻| 亚洲专区激情在线观看视频| 人人妻人人人操人人人爽| 夜色17s精品人妻熟女| 日本精品美女在线观看| 青青青青青青青在线播放视频| 人妻另类专区欧美制服| 专门看国产熟妇的网站| 最新91精品视频在线| 精品国产午夜视频一区二区| 天堂中文字幕翔田av| 丝袜肉丝一区二区三区四区在线| 日日操综合成人av| 国产精品成久久久久三级蜜臀av| 午夜蜜桃一区二区三区| 99国内小视频在现欢看| 日韩一个色综合导航| 亚洲在线观看中文字幕av| 在线观看视频一区麻豆| 2020韩国午夜女主播在线| 亚洲欧美一卡二卡三卡| 亚洲综合图片20p| 超碰公开大香蕉97| 日韩欧美中文国产在线| 免费手机黄页网址大全| 一区二区三区综合视频| 性欧美激情久久久久久久| 免费黄页网站4188| 黄色大片男人操女人逼| 四川五十路熟女av| 91麻豆精品传媒国产黄色片| 大香蕉大香蕉大香蕉大香蕉大香蕉| 天天日天天天天天天天天天天| 中文字幕亚洲久久久| 夜夜骑夜夜操夜夜奸| 粉嫩av蜜乳av蜜臀| 日曰摸日日碰夜夜爽歪歪 | 美女在线观看日本亚洲一区| 黄色av网站免费在线| 日韩欧美国产一区不卡| 强行扒开双腿猛烈进入免费版 | 姐姐的朋友2在线观看中文字幕 | 男人操女人逼逼视频网站| 又黄又刺激的午夜小视频| 欧美特色aaa大片| 欧美视频不卡一区四区| 99精品视频在线观看免费播放| 大陆胖女人与丈夫操b国语高清| 岳太深了紧紧的中文字幕| 国产密臀av一区二区三| 国产亚洲精品品视频在线| 成人av电影免费版| 日韩视频一区二区免费观看| 2012中文字幕在线高清| 蜜桃久久久久久久人妻| 青青青青爽手机在线| 日本一道二三区视频久久| 最新中文字幕乱码在线| 国产乱子伦一二三区| 日本后入视频在线观看| 性色蜜臀av一区二区三区| 自拍偷拍亚洲欧美在线视频| 国产变态另类在线观看| 姐姐的朋友2在线观看中文字幕| 中文字幕 码 在线视频| 五月天色婷婷在线观看视频免费| 国产第一美女一区二区三区四区| 国产精品亚洲а∨天堂免| 粉嫩av蜜乳av蜜臀| 强行扒开双腿猛烈进入免费版| 视频在线亚洲一区二区| 欧美美女人体视频一区| 精品欧美一区二区vr在线观看| 91香蕉成人app下载| 91成人精品亚洲国产| 极品性荡少妇一区二区色欲| 红桃av成人在线观看| 青青青青青青青青青青草青青 | 天堂av在线播放免费| 日本一区美女福利视频| 91免费放福利在线观看| 激情综合治理六月婷婷| 91欧美在线免费观看| 一二三中文乱码亚洲乱码one| 欧美日韩精品永久免费网址 | 密臀av一区在线观看| 欧美黑人巨大性xxxxx猛交| 欧美日韩不卡一区不区二区| 啊啊啊想要被插进去视频| 亚洲一区制服丝袜美腿| av高潮迭起在线观看| 老司机午夜精品视频资源| japanese五十路熟女熟妇| 在线免费观看靠比视频的网站 | 天天操天天爽天天干| 天天干夜夜操啊啊啊| 在线观看的a站 最新| 午夜久久久久久久99| 91久久国产成人免费网站| 日本丰满熟妇BBXBBXHD| 91小伙伴中女熟女高潮| 国产一区二区视频观看| 一区二区三区综合视频| 唐人色亚洲av嫩草| 免费黄页网站4188| 中文字幕一区二区自拍| 天天日天天透天天操| 边摸边做超爽毛片18禁色戒| 一区二区在线观看少妇| 视频久久久久久久人妻| 中文字幕 人妻精品| 婷婷久久一区二区字幕网址你懂得 | 精品老妇女久久9g国产| 国产精品一区二区久久久av| 在线观看的黄色免费网站| 中文字幕一区二区三区人妻大片| 老有所依在线观看完整版| 五月色婷婷综合开心网4438| 伊人精品福利综合导航| 亚洲一区二区三区av网站| 国产乱弄免费视频观看| 免费看国产又粗又猛又爽又黄视频| 成人国产影院在线观看| 天天做天天干天天操天天射| 日韩欧美亚洲熟女人妻| 欧美男人大鸡吧插女人视频| aⅴ精产国品一二三产品| 日韩av中文在线免费观看| 国产高清在线在线视频| 揄拍成人国产精品免费看视频| 啊啊好大好爽啊啊操我啊啊视频| 亚洲成人国产av在线| 国产成人精品一区在线观看 | 揄拍成人国产精品免费看视频| 成人色综合中文字幕| 夜女神免费福利视频| 亚洲黄色av网站免费播放| 国产va在线观看精品| 偷拍3456eee| 亚洲成人黄色一区二区三区| 亚洲av日韩高清hd| 国产精品入口麻豆啊啊啊 | 伊人情人综合成人久久网小说 | 欧美特色aaa大片| 啪啪啪啪啪啪啪啪av| 午夜精品一区二区三区更新| 亚洲 自拍 色综合图| 日韩成人免费电影二区| 中文字幕免费福利视频6| 狠狠的往里顶撞h百合| 做爰视频毛片下载蜜桃视频1| 91九色porny国产在线| 激情内射在线免费观看| 九一传媒制片厂视频在线免费观看| 成人av久久精品一区二区| 亚洲无线观看国产高清在线| 亚洲日本一区二区久久久精品| 91www一区二区三区| 在线免费观看亚洲精品电影| av手机在线观播放网站| 老师啊太大了啊啊啊尻视频| av在线观看网址av| 动漫av网站18禁| 亚洲成人免费看电影| 午夜精品一区二区三区更新| 欧美日韩亚洲国产无线码| 自拍 日韩 欧美激情| 涩爱综合久久五月蜜臀| 欧美精品免费aaaaaa| 精品国产在线手机在线| 日韩a级黄色小视频| 国产免费高清视频视频| 91久久精品色伊人6882| 偷拍自拍 中文字幕| 换爱交换乱高清大片| 国产品国产三级国产普通话三级| 东京热男人的av天堂| 乱亲女秽乱长久久久| 在线观看视频污一区| 在线观看av2025| 任你操视频免费在线观看| 99精品视频之69精品视频 | 成人av天堂丝袜在线观看| 中文字幕免费福利视频6| 亚洲 人妻 激情 中文| 自拍偷拍亚洲精品第2页| 亚洲精品午夜久久久久| 国产九色91在线观看精品| 蜜桃精品久久久一区二区| 国产之丝袜脚在线一区二区三区 | 亚洲国产精品久久久久久6| 日本免费视频午夜福利视频| 亚洲免费av在线视频| 亚洲一区自拍高清免费视频| 欧美日韩情色在线观看| 国产精品国产三级麻豆| 非洲黑人一级特黄片| 蜜桃视频17c在线一区二区| 国产性生活中老年人视频网站| 久久久久久99国产精品| 亚洲国产最大av综合| 一个色综合男人天堂| 人妻熟女在线一区二区 | 亚洲公开视频在线观看| 午夜精彩视频免费一区| 精品久久婷婷免费视频| 五十路人妻熟女av一区二区| 亚洲综合乱码一区二区| 亚洲 中文 自拍 无码| 国产男女视频在线播放| 国产在线免费观看成人| 青青草人人妻人人妻| 最近中文字幕国产在线| 1000小视频在线| 亚洲欧洲av天堂综合| 91麻豆精品传媒国产黄色片| 中文字幕高清免费在线人妻| 久久这里只有精品热视频| 欧美特级特黄a大片免费| 中文字幕 亚洲av| 青青青青青青青青青青草青青| 男人天堂最新地址av| 美女操逼免费短视频下载链接| 久久免看30视频口爆视频| 狠狠操狠狠操免费视频| 欧美亚洲少妇福利视频| 最近的中文字幕在线mv视频|