/ KeychainCircle / KCAESGCMDuplexSession.h
KCAESGCMDuplexSession.h
1 // 2 // KCAESGCMDuplexSession.h 3 // Security 4 // 5 // 6 7 #import <Foundation/Foundation.h> 8 9 NS_ASSUME_NONNULL_BEGIN 10 11 @interface KCAESGCMDuplexSession : NSObject <NSSecureCoding> 12 13 // Due to design constraints, this session object is the only thing serialized during piggybacking sessions. 14 // Therefore, we must add some extra data here, which is not strictly part of a AES GCM session. 15 @property (retain, nullable) NSString* pairingUUID; 16 @property uint64_t piggybackingVersion; 17 @property uint64_t epoch; 18 19 - (nullable NSData*) encrypt: (NSData*) data error: (NSError**) error; 20 - (nullable NSData*) decryptAndVerify: (NSData*) data error: (NSError**) error; 21 22 + (nullable instancetype) sessionAsSender: (NSData*) sharedSecret 23 context: (uint64_t) context; 24 + (nullable instancetype) sessionAsReceiver: (NSData*) sharedSecret 25 context: (uint64_t) context; 26 27 - (nullable instancetype) initAsSender: (NSData*) sharedSecret 28 context: (uint64_t) context; 29 - (nullable instancetype) initAsReceiver: (NSData*) sharedSecret 30 context: (uint64_t) context; 31 - (nullable instancetype) initWithSecret: (NSData*) sharedSecret 32 context: (uint64_t) context 33 as: (bool) inverted; 34 35 - (nullable instancetype)initWithSecret:(NSData*)sharedSecret 36 context:(uint64_t)context 37 as:(bool) sender 38 pairingUUID:(NSString* _Nullable)pairingUUID 39 piggybackingVersion:(uint64_t)piggybackingVersion 40 epoch:(uint64_t)epoch 41 NS_DESIGNATED_INITIALIZER; 42 43 - (instancetype) init NS_UNAVAILABLE; 44 45 46 - (void)encodeWithCoder:(NSCoder *)aCoder; 47 - (nullable instancetype)initWithCoder:(NSCoder *)aDecoder; 48 + (BOOL)supportsSecureCoding; 49 50 @end 51 52 NS_ASSUME_NONNULL_END