From 8106dcc8723a10483308a0a3cc9fe447e9d5362f Mon Sep 17 00:00:00 2001
From: Oliver Wiese <oliver.wiese@fu-berlin.de>
Date: Fri, 8 Jun 2018 15:27:40 +0200
Subject: [PATCH] update ObjectivePGP

---
 ObjectivePGP.framework/Headers/PGPBigNum.h    | 21 ++++++
 .../Headers/PGPCompressedPacket.h             | 25 +++++++
 ObjectivePGP.framework/Headers/PGPCryptoCFB.h | 29 ++++++++
 .../Headers/PGPFoundation.h                   | 24 ++++++
 .../Headers/PGPKeyMaterial.h                  | 25 +++++++
 .../Headers/PGPLiteralPacket.h                | 29 ++++++++
 ObjectivePGP.framework/Headers/PGPLogging.h   | 33 +++++++++
 ObjectivePGP.framework/Headers/PGPMPI.h       | 47 ++++++++++++
 .../PGPModificationDetectionCodePacket.h      | 16 ++++
 .../Headers/PGPOnePassSignaturePacket.h       | 27 +++++++
 ObjectivePGP.framework/Headers/PGPPKCSEme.h   | 16 ++++
 ObjectivePGP.framework/Headers/PGPPKCSEmsa.h  | 16 ++++
 ObjectivePGP.framework/Headers/PGPPacket.h    | 32 ++++++++
 .../Headers/PGPPacketFactory.h                | 21 ++++++
 .../Headers/PGPPacketProtocol.h               | 16 ++++
 .../PGPPublicKeyEncryptedSessionKeyPacket.h   | 27 +++++++
 .../Headers/PGPPublicKeyPacket.h              | 41 +++++++++++
 .../Headers/PGPPublicSubKeyPacket.h           | 16 ++++
 ObjectivePGP.framework/Headers/PGPS2K.h       | 36 +++++++++
 .../Headers/PGPSecretKeyPacket.h              | 36 +++++++++
 .../Headers/PGPSecretSubKeyPacket.h           | 13 ++++
 .../Headers/PGPSignaturePacket.h              | 73 +++++++++++++++++++
 .../Headers/PGPSignatureSubpacket.h           | 35 +++++++++
 .../PGPSignatureSubpacketCreationTime.h       | 31 ++++++++
 .../Headers/PGPSignatureSubpacketHeader.h     | 22 ++++++
 .../PGPSymmetricallyEncryptedDataPacket.h     | 14 ++++
 ...llyEncryptedIntegrityProtectedDataPacket.h | 25 +++++++
 .../Headers/PGPTrustPacket.h                  | 17 +++++
 .../Headers/PGPUserAttributePacket.h          | 17 +++++
 .../Headers/PGPUserAttributeSubpacket.h       | 18 +++++
 .../Headers/PGPUserIDPacket.h                 | 26 +++++++
 .../PrivateHeaders/NSMutableArray+PGPUtils.h  | 19 +++++
 ObjectivePGP.framework/strip-frameworks.sh    | 54 ++++++++++++++
 enzevalos_iphone/PLists/enzevalos-Info.plist  |  4 +-
 34 files changed, 899 insertions(+), 2 deletions(-)
 create mode 100644 ObjectivePGP.framework/Headers/PGPBigNum.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPCompressedPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPCryptoCFB.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPFoundation.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPKeyMaterial.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPLiteralPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPLogging.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPMPI.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPModificationDetectionCodePacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPOnePassSignaturePacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPKCSEme.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPKCSEmsa.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPacketFactory.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPacketProtocol.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPublicKeyEncryptedSessionKeyPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPublicKeyPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPPublicSubKeyPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPS2K.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSecretKeyPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSecretSubKeyPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSignaturePacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSignatureSubpacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSignatureSubpacketCreationTime.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSignatureSubpacketHeader.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedDataPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedIntegrityProtectedDataPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPTrustPacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPUserAttributePacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPUserAttributeSubpacket.h
 create mode 100644 ObjectivePGP.framework/Headers/PGPUserIDPacket.h
 create mode 100644 ObjectivePGP.framework/PrivateHeaders/NSMutableArray+PGPUtils.h
 create mode 100644 ObjectivePGP.framework/strip-frameworks.sh

diff --git a/ObjectivePGP.framework/Headers/PGPBigNum.h b/ObjectivePGP.framework/Headers/PGPBigNum.h
new file mode 100644
index 00000000..688e9c29
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPBigNum.h
@@ -0,0 +1,21 @@
+//
+//  PGPBigNum.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 26/06/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPBigNum : NSObject <NSCopying>
+
+@property (nonatomic, readonly) unsigned int bitsCount;
+@property (nonatomic, readonly) unsigned int bytesCount;
+@property (nonatomic, readonly) NSData *data;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPCompressedPacket.h b/ObjectivePGP.framework/Headers/PGPCompressedPacket.h
new file mode 100644
index 00000000..02649c8f
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPCompressedPacket.h
@@ -0,0 +1,25 @@
+//
+//  PGPCompressedPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 02/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+
+// 9.3.  Compression Algorithms
+typedef NS_ENUM(UInt8, PGPCompressionAlgorithm) {
+    PGPCompressionUncompressed = 0,
+    PGPCompressionZIP = 1, // TODO: Unsupported
+    PGPCompressionZLIB = 2,
+    PGPCompressionBZIP2 = 3
+};
+
+@interface PGPCompressedPacket : PGPPacket
+@property (nonatomic, readonly) PGPCompressionAlgorithm compressionType;
+@property (nonatomic) NSData *decompressedData;
+
+- (instancetype)initWithData:(NSData *)dataToCompress type:(PGPCompressionAlgorithm)type;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPCryptoCFB.h b/ObjectivePGP.framework/Headers/PGPCryptoCFB.h
new file mode 100644
index 00000000..d47e4c0b
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPCryptoCFB.h
@@ -0,0 +1,29 @@
+//
+//  PGPCryptoCFB.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 05/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPS2K.h"
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPCryptoCFB : NSObject
+
++ (nullable NSData *)decryptData:(NSData *)encryptedData
+                  sessionKeyData:(NSData *)sessionKeyData // s2k produceSessionKeyWithPassphrase
+              symmetricAlgorithm:(PGPSymmetricAlgorithm)symmetricAlgorithm
+                              iv:(NSData *)ivData;
+
++ (nullable NSData *)encryptData:(NSData *)encryptedData
+                  sessionKeyData:(NSData *)sessionKeyData // s2k produceSessionKeyWithPassphrase
+              symmetricAlgorithm:(PGPSymmetricAlgorithm)symmetricAlgorithm
+                              iv:(NSData *)ivData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPFoundation.h b/ObjectivePGP.framework/Headers/PGPFoundation.h
new file mode 100644
index 00000000..a4a30464
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPFoundation.h
@@ -0,0 +1,24 @@
+
+//
+//  Copyright (c) Marcin Krzyżanowski. All rights reserved.
+//
+//  THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY
+//  INTERNATIONAL COPYRIGHT LAW. USAGE IS BOUND TO THE LICENSE AGREEMENT.
+//  This notice may not be removed from this file.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#define PGPCast(obj, c) ((c * _Nullable) _pgp__cast(obj, c.class))
+
+id _Nullable _pgp__cast(id _Nullable obj, Class objClass);
+
+BOOL PGPEqualObjects(id _Nullable obj1, id _Nullable obj2);
+
+@interface PGPFoundation : NSObject
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPKeyMaterial.h b/ObjectivePGP.framework/Headers/PGPKeyMaterial.h
new file mode 100644
index 00000000..987a3bf8
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPKeyMaterial.h
@@ -0,0 +1,25 @@
+//
+//  PGPKeyMaterial.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 25/08/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "PGPMPI.h"
+
+@interface PGPKeyMaterial: NSObject
+
+@property (nonatomic) PGPMPI *n;
+@property (nonatomic) PGPMPI *e;
+@property (nonatomic) PGPMPI *d;
+@property (nonatomic) PGPMPI *p;
+@property (nonatomic) PGPMPI *q;
+@property (nonatomic) PGPMPI *r;
+@property (nonatomic) PGPMPI *g;
+@property (nonatomic) PGPMPI *u;
+@property (nonatomic) PGPMPI *x;
+@property (nonatomic) PGPMPI *y;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPLiteralPacket.h b/ObjectivePGP.framework/Headers/PGPLiteralPacket.h
new file mode 100644
index 00000000..df904b66
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPLiteralPacket.h
@@ -0,0 +1,29 @@
+//
+//  PGPLiteralPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 24/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPExportableProtocol.h"
+#import "PGPPacket.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+typedef NS_ENUM(UInt8, PGPLiteralPacketFormat) { PGPLiteralPacketBinary = 'b', PGPLiteralPacketText = 't', PGPLiteralPacketTextUTF8 = 'u' };
+
+@interface PGPLiteralPacket : PGPPacket <PGPExportable>
+
+@property (nonatomic) PGPLiteralPacketFormat format;
+@property (nonatomic) NSDate *timestamp;
+@property (nonatomic, nullable) NSString *filename;
+
+@property (nonatomic) NSData *literalRawData;
+
+- (instancetype)initWithData:(NSData *)rawData;
++ (PGPLiteralPacket *)literalPacket:(PGPLiteralPacketFormat)format withData:(NSData *)rawData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPLogging.h b/ObjectivePGP.framework/Headers/PGPLogging.h
new file mode 100644
index 00000000..01124be8
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPLogging.h
@@ -0,0 +1,33 @@
+//
+//  PGPLogging.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 14/05/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+#define PGPLogMacro(_level, _tag, _message) NSLog(@"[%s] %@ %s/%tu %@", _tag, @(_level), __PRETTY_FUNCTION__, __LINE__, _message())
+
+#ifdef DEBUG
+#define PGPLogDebug(format, ...)                                                     \
+    PGPLogMacro(0, "ObjectivePGP", (^{                                               \
+                    return [NSString stringWithFormat:(@"" format), ##__VA_ARGS__]; \
+                }))
+#else
+#define PGPLogDebug(format, ...)
+#endif
+
+#define PGPLogWarning(format, ...)                                                   \
+    PGPLogMacro(1, "ObjectivePGP", (^{                                               \
+                    return [NSString stringWithFormat:(@"" format), ##__VA_ARGS__]; \
+                }))
+#define PGPLogError(format, ...)                                                     \
+    PGPLogMacro(2, "ObjectivePGP", (^{                                               \
+                    return [NSString stringWithFormat:(@"" format), ##__VA_ARGS__]; \
+                }))
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPMPI.h b/ObjectivePGP.framework/Headers/PGPMPI.h
new file mode 100644
index 00000000..bc4d67bc
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPMPI.h
@@ -0,0 +1,47 @@
+//
+//  OpenPGPMPI.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <ObjectivePGP/PGPBigNum.h>
+#import <ObjectivePGP/PGPMacros.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+OBJC_EXTERN NSString * const PGPMPI_N;
+OBJC_EXTERN NSString * const PGPMPI_E;
+OBJC_EXTERN NSString * const PGPMPI_P;
+OBJC_EXTERN NSString * const PGPMPI_G;
+OBJC_EXTERN NSString * const PGPMPI_Q;
+OBJC_EXTERN NSString * const PGPMPI_D;
+OBJC_EXTERN NSString * const PGPMPI_U;
+OBJC_EXTERN NSString * const PGPMPI_X;
+OBJC_EXTERN NSString * const PGPMPI_R;
+OBJC_EXTERN NSString * const PGPMPI_S;
+OBJC_EXTERN NSString * const PGPMPI_Y;
+OBJC_EXTERN NSString * const PGPMPI_M;
+
+@interface PGPMPI : NSObject <NSCopying>
+
+@property (nonatomic, copy, readonly) NSString *identifier;
+@property (nonatomic, readonly) PGPBigNum *bigNum;
+/**
+ *  Total bytes, header + body
+ */
+@property (nonatomic, readonly) NSUInteger packetLength;
+
+PGP_EMPTY_INIT_UNAVAILABLE;
+
+- (instancetype)initWithData:(NSData *)dataToMPI identifier:(NSString *)identifier NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithBigNum:(PGPBigNum *)bigNum identifier:(NSString *)identifier;
+- (instancetype)initWithMPIData:(NSData *)mpiData identifier:(NSString *)identifier atPosition:(NSUInteger)position;
+- (nullable NSData *)exportMPI;
+- (nullable NSData *)bodyData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPModificationDetectionCodePacket.h b/ObjectivePGP.framework/Headers/PGPModificationDetectionCodePacket.h
new file mode 100644
index 00000000..b075bbc8
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPModificationDetectionCodePacket.h
@@ -0,0 +1,16 @@
+//
+//  PGPModificationDetectionCodePacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 12/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+
+@interface PGPModificationDetectionCodePacket : PGPPacket
+@property (nonatomic, readonly) NSData *hashData;
+
+- (instancetype)initWithData:(NSData *)data;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPOnePassSignaturePacket.h b/ObjectivePGP.framework/Headers/PGPOnePassSignaturePacket.h
new file mode 100644
index 00000000..cbbb2a92
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPOnePassSignaturePacket.h
@@ -0,0 +1,27 @@
+//
+//  PGPOnePassSignaturePacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 29/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+#import "PGPExportableProtocol.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPKeyID;
+
+@interface PGPOnePassSignaturePacket : PGPPacket <PGPExportable>
+
+@property (nonatomic) UInt8 version; //  The current version is 3.
+@property (nonatomic) PGPSignatureType signatureType;
+@property (nonatomic) PGPHashAlgorithm hashAlgorith;
+@property (nonatomic) PGPPublicKeyAlgorithm publicKeyAlgorithm;
+@property (nonatomic) PGPKeyID *keyID; // 8
+@property (nonatomic) BOOL notNested;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPPKCSEme.h b/ObjectivePGP.framework/Headers/PGPPKCSEme.h
new file mode 100644
index 00000000..e727f9e4
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPKCSEme.h
@@ -0,0 +1,16 @@
+//
+//  PGPPKCSEme.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 06/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PGPPKCSEme : NSObject
+
++ (NSData *)encodeMessage:(NSData *)m keyModulusLength:(NSUInteger)k error:(NSError *__autoreleasing *)error;
++ (NSData *)decodeMessage:(NSData *)m error:(NSError *__autoreleasing *)error;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPPKCSEmsa.h b/ObjectivePGP.framework/Headers/PGPPKCSEmsa.h
new file mode 100644
index 00000000..95fa8ea9
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPKCSEmsa.h
@@ -0,0 +1,16 @@
+//
+//  PGPPKCS.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 22/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+@interface PGPPKCSEmsa : NSObject
+
++ (NSData *)encode:(PGPHashAlgorithm)hashAlgorithm message:(NSData *)m encodedMessageLength:(NSUInteger)emLen error:(NSError *__autoreleasing *)error;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPPacket.h b/ObjectivePGP.framework/Headers/PGPPacket.h
new file mode 100644
index 00000000..a4a7d0d8
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPacket.h
@@ -0,0 +1,32 @@
+//
+//  PGPPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 06/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPExportableProtocol.h"
+#import "PGPPacketProtocol.h"
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+extern const UInt32 PGPUnknownLength;
+
+@interface PGPPacket : NSObject <PGPPacketProtocol, NSCopying, PGPExportable>
+@property (nonatomic) BOOL indeterminateLength; // should not be used, but gpg use it
+
+- (instancetype)init NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithHeader:(NSData *)headerData body:(NSData *)bodyData;
+
++ (nullable NSData *)parsePacketHeader:(NSData *)data headerLength:(UInt32 *)headerLength nextPacketOffset:(nullable NSUInteger *)nextPacketOffset packetTag:(PGPPacketTag *)tag indeterminateLength:(BOOL *)indeterminateLength;
+- (NSUInteger)parsePacketBody:(NSData *)packetBody error:(NSError *__autoreleasing *)error;
+
++ (NSData *)buildPacketOfType:(PGPPacketTag)tag withBody:(PGP_NOESCAPE NSData *(^)(void))body;
+
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPPacketFactory.h b/ObjectivePGP.framework/Headers/PGPPacketFactory.h
new file mode 100644
index 00000000..15f3c746
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPacketFactory.h
@@ -0,0 +1,21 @@
+//
+//  PGPPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPPacketFactory : NSObject
+
++ (nullable PGPPacket *)packetWithData:(NSData *)packetsData offset:(NSUInteger)offset nextPacketOffset:(nullable NSUInteger *)nextPacketOffset;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPPacketProtocol.h b/ObjectivePGP.framework/Headers/PGPPacketProtocol.h
new file mode 100644
index 00000000..3f5000cf
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPacketProtocol.h
@@ -0,0 +1,16 @@
+//
+//  PGPPacketProtocol.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 24/08/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+#import "PGPTypes.h"
+
+@protocol PGPPacketProtocol <NSObject>
+
+@property (nonatomic, readonly) PGPPacketTag tag;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPPublicKeyEncryptedSessionKeyPacket.h b/ObjectivePGP.framework/Headers/PGPPublicKeyEncryptedSessionKeyPacket.h
new file mode 100644
index 00000000..3e3575b2
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPublicKeyEncryptedSessionKeyPacket.h
@@ -0,0 +1,27 @@
+//
+//  PGPPublicKeyEncryptedSessionKeyPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 06/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+#import "PGPExportableProtocol.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPKeyID, PGPPublicKeyPacket, PGPSecretKeyPacket;
+
+@interface PGPPublicKeyEncryptedSessionKeyPacket : PGPPacket <NSCopying, PGPExportable>
+@property (nonatomic) UInt8 version;
+@property (nonatomic) PGPKeyID *keyID;
+@property (nonatomic) PGPPublicKeyAlgorithm publicKeyAlgorithm;
+@property (nonatomic, getter=isEncrypted) BOOL encrypted;
+
+- (BOOL)encrypt:(PGPPublicKeyPacket *)publicKeyPacket sessionKeyData:(NSData *)sessionKeyData sessionKeyAlgorithm:(PGPSymmetricAlgorithm)sessionKeyAlgorithm error:(NSError *__autoreleasing *)error;
+- (nullable NSData *)decryptSessionKeyData:(PGPSecretKeyPacket *)secretKeyPacket sessionKeyAlgorithm:(PGPSymmetricAlgorithm *)sessionKeyAlgorithm error:(NSError *__autoreleasing *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPPublicKeyPacket.h b/ObjectivePGP.framework/Headers/PGPPublicKeyPacket.h
new file mode 100644
index 00000000..ca94f638
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPublicKeyPacket.h
@@ -0,0 +1,41 @@
+//
+//  OpenPGPPublicKey.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+//  Tag 6
+
+#import "PGPFingerprint.h"
+#import "PGPKeyID.h"
+#import "PGPPacketFactory.h"
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPMPI;
+
+@interface PGPPublicKeyPacket : PGPPacket <NSCopying, PGPExportable>
+
+@property (nonatomic, readonly) UInt8 version;
+@property (nonatomic, readonly) NSDate *createDate;
+@property (nonatomic, readonly) UInt16 V3validityPeriod; // obsolete
+@property (nonatomic, readonly) PGPPublicKeyAlgorithm publicKeyAlgorithm;
+@property (nonatomic, copy, readonly) NSArray<PGPMPI *> *publicMPIArray;
+
+// generated properties
+@property (nonatomic, readonly) NSUInteger keySize;
+@property (nonatomic, readonly) PGPFingerprint *fingerprint;
+@property (nonatomic, readonly) PGPKeyID *keyID;
+
+- (NSData *)exportKeyPacketOldStyle;
+- (NSData *)buildKeyBodyData:(BOOL)forceV4;
+
+- (nullable PGPMPI *)publicMPI:(NSString *)identifier;
+- (nullable NSData *)encryptData:(NSData *)data withPublicKeyAlgorithm:(PGPPublicKeyAlgorithm)publicKeyAlgorithm;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPPublicSubKeyPacket.h b/ObjectivePGP.framework/Headers/PGPPublicSubKeyPacket.h
new file mode 100644
index 00000000..1c5cbad0
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPPublicSubKeyPacket.h
@@ -0,0 +1,16 @@
+//
+//  PGPPublicSubKey.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+//  Tag 14
+
+#import "PGPPacketFactory.h"
+#import "PGPPublicKeyPacket.h"
+#import <Foundation/Foundation.h>
+
+@interface PGPPublicSubKeyPacket : PGPPublicKeyPacket
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPS2K.h b/ObjectivePGP.framework/Headers/PGPS2K.h
new file mode 100644
index 00000000..1311b080
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPS2K.h
@@ -0,0 +1,36 @@
+//
+//  PGPS2K.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 07/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <ObjectivePGP/PGPMacros.h>
+#import <ObjectivePGP/PGPTypes.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPS2K : NSObject <NSCopying>
+
+@property (nonatomic, readonly) PGPS2KSpecifier specifier;
+@property (nonatomic, readonly) PGPHashAlgorithm hashAlgorithm;
+// random 8 bytes.
+@property (nonatomic, copy, readonly) NSData *salt;
+// Iteration count.
+@property (nonatomic) UInt32 iterationsCount;
+
+PGP_EMPTY_INIT_UNAVAILABLE
+
+- (instancetype)initWithSpecifier:(PGPS2KSpecifier)specifier hashAlgorithm:(PGPHashAlgorithm)hashAlgorithm NS_DESIGNATED_INITIALIZER;
+
++ (PGPS2K *)S2KFromData:(NSData *)data atPosition:(NSUInteger)position length:(nullable NSUInteger *)length;
+
+- (nullable NSData *)buildKeyDataForPassphrase:(NSData *)passphrase prefix:(nullable NSData *)prefix salt:(NSData *)salt codedCount:(UInt32)codedCount;
+- (nullable NSData *)produceSessionKeyWithPassphrase:(NSString *)passphrase symmetricAlgorithm:(PGPSymmetricAlgorithm)symmetricAlgorithm;
+- (nullable NSData *)export:(NSError *__autoreleasing *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSecretKeyPacket.h b/ObjectivePGP.framework/Headers/PGPSecretKeyPacket.h
new file mode 100644
index 00000000..b3564fb6
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSecretKeyPacket.h
@@ -0,0 +1,36 @@
+//
+//  PGPSecretKeyPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 07/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPublicKeyPacket.h"
+#import "PGPS2K.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPSecretKeyPacket : PGPPublicKeyPacket <NSCopying, PGPExportable>
+
+@property (nonatomic, readonly) PGPS2KUsage s2kUsage;
+@property (nonatomic, readonly) PGPS2K *s2k;
+@property (nonatomic, readonly) PGPSymmetricAlgorithm symmetricAlgorithm;
+@property (nonatomic, nullable, copy, readonly) NSData *ivData;
+@property (nonatomic, getter=isEncryptedWithPassphrase, readonly) BOOL encryptedWithPassphrase;
+
+/**
+ *  Decrypt packet
+ *
+ *  @param passphrase Passphrase
+ *  @param error      error
+ *
+ *  @return Decrypted key on success
+ */
+- (nullable PGPSecretKeyPacket *)decryptedKeyPacket:(NSString *)passphrase error:(NSError *__autoreleasing *)error;
+
+- (nullable PGPMPI *)secretMPI:(NSString *)identifier;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSecretSubKeyPacket.h b/ObjectivePGP.framework/Headers/PGPSecretSubKeyPacket.h
new file mode 100644
index 00000000..7e41b00e
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSecretSubKeyPacket.h
@@ -0,0 +1,13 @@
+//
+//  PGPSecretSubKeyPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 07/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPSecretKeyPacket.h"
+
+@interface PGPSecretSubKeyPacket : PGPSecretKeyPacket
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPSignaturePacket.h b/ObjectivePGP.framework/Headers/PGPSignaturePacket.h
new file mode 100644
index 00000000..41baf987
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSignaturePacket.h
@@ -0,0 +1,73 @@
+//
+//  PGPSignature.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+//  Tag 2
+
+#import "PGPKeyID.h"
+#import "PGPMPI.h"
+#import "PGPPacketFactory.h"
+#import "PGPSignatureSubpacket.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPPartialKey, PGPUser, PGPUserIDPacket, PGPPublicKeyPacket, PGPKey;
+
+@interface PGPSignaturePacket : PGPPacket <NSCopying>
+
+@property (nonatomic) UInt8 version;
+@property (nonatomic) PGPSignatureType type;
+@property (nonatomic) PGPPublicKeyAlgorithm publicKeyAlgorithm;
+@property (nonatomic) PGPHashAlgorithm hashAlgoritm;
+@property (nonatomic, copy, readonly) NSArray<PGPSignatureSubpacket *> *hashedSubpackets;
+@property (nonatomic, copy, readonly) NSArray<PGPSignatureSubpacket *> *unhashedSubpackets;
+/// Two-octet field holding the left 16 bits of the signed hash value.
+/// Read from the key or set byt the call to `-[PGPSignaturePacket signData:usingKey:passphrase:userID:error]`
+@property (nonatomic, nullable) NSData *signedHashValueData;
+@property (nonatomic, copy) NSArray<PGPMPI *> *signatureMPIArray;
+
+@property (nonatomic, readonly) BOOL canBeUsedToSign; // computed
+@property (nonatomic, readonly) BOOL canBeUsedToEncrypt; // computed
+
+@property (nonatomic, nullable, readonly) PGPKeyID *issuerKeyID;
+@property (nonatomic, copy, readonly) NSArray<PGPSignatureSubpacket *> *subpackets;
+@property (nonatomic, nullable, readonly) NSDate *expirationDate; // computed
+@property (nonatomic, readonly, readonly, getter=isExpired) BOOL expired; // computed
+@property (nonatomic, nullable, readonly) NSDate *creationDate; // computed
+@property (nonatomic, readonly, readonly, getter=isPrimaryUserID) BOOL primaryUserID; // computed
+
+/**
+ *  Create signature packet for signing. This is convienience constructor.
+ *
+ *  @param type               example: PGPSignatureBinaryDocument
+ *  @param hashAlgorithm      hash algorithm to be used for signature
+ *
+ *  @return Packet instance ready to call signData:secretKey
+ */
++ (PGPSignaturePacket *)signaturePacket:(PGPSignatureType)type hashAlgorithm:(PGPHashAlgorithm)hashAlgorithm;
+
+- (NSArray<PGPSignatureSubpacket *> *)subpacketsOfType:(PGPSignatureSubpacketType)type;
+- (NSData *)calculateSignedHashForDataToSign:(NSData *)dataToSign;
+
+/**
+ *  Build signature data (signature packet with subpackets).
+ *
+ *  @param inputData Data to sign.
+ *  @param withKey   A key used to create signature.
+ *  @param error     error
+ *
+ *  @return YES on success.
+ */
+- (BOOL)signData:(nullable NSData *)inputData withKey:(PGPKey *)key subKey:(nullable PGPKey *)subKey passphrase:(nullable NSString *)passphrase userID:(nullable NSString *)userID error:(NSError *__autoreleasing *)error;
+
+- (BOOL)verifyData:(NSData *)inputData withKey:(PGPKey *)publicKey error:(NSError *__autoreleasing *)error;
+- (BOOL)verifyData:(NSData *)inputData withKey:(PGPKey *)publicKey userID:(nullable NSString *)userID error:(NSError *__autoreleasing *)error;
+- (BOOL)verifyData:(NSData *)inputData withKey:(PGPKey *)publicKey signingKeyPacket:(PGPPublicKeyPacket *)signingKeyPacket userID:(nullable NSString *)userID error:(NSError *__autoreleasing *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSignatureSubpacket.h b/ObjectivePGP.framework/Headers/PGPSignatureSubpacket.h
new file mode 100644
index 00000000..56422193
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSignatureSubpacket.h
@@ -0,0 +1,35 @@
+//
+//  PGPSignatureSubPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <ObjectivePGP/PGPTypes.h>
+#import <ObjectivePGP/PGPMacros.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPSignatureSubpacketHeader;
+
+@interface PGPSignatureSubpacket : NSObject
+
+@property (nonatomic, readonly) PGPSignatureSubpacketType type;
+@property (nonatomic, readonly) id value;
+@property (nonatomic, readonly) NSUInteger length;
+
+PGP_EMPTY_INIT_UNAVAILABLE;
+
+- (instancetype)initWithType:(PGPSignatureSubpacketType)type andValue:(id)value NS_DESIGNATED_INITIALIZER;
+- (instancetype)initWithHeader:(PGPSignatureSubpacketHeader *)header body:(NSData *)subPacketBodyData;
+
++ (PGPSignatureSubpacketHeader *)subpacketHeaderFromData:(NSData *)headerData;
+
+- (void)parseSubpacketBody:(NSData *)packetBody;
+- (nullable NSData *)export:(NSError *__autoreleasing *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSignatureSubpacketCreationTime.h b/ObjectivePGP.framework/Headers/PGPSignatureSubpacketCreationTime.h
new file mode 100644
index 00000000..b5551cc2
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSignatureSubpacketCreationTime.h
@@ -0,0 +1,31 @@
+//
+//  PGPSignatureSubpacketCreationTime.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 10/07/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+//  5.2.3.4.  Signature Creation Time
+//  Signature Creation Time MUST be present in the hashed area.
+
+#import <ObjectivePGP/PGPTypes.h>
+#import <ObjectivePGP/PGPMacros.h>
+#import <ObjectivePGP/PGPExportableProtocol.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPSignatureSubpacketCreationTime : NSObject <PGPExportable>
+
+@property (nonatomic, copy, readonly) NSDate *value;
+@property (class, nonatomic, readonly) PGPSignatureSubpacketType type;
+
+PGP_EMPTY_INIT_UNAVAILABLE
+
+- (instancetype)initWithDate:(NSDate *)date NS_DESIGNATED_INITIALIZER;
+
++ (instancetype)packetWithData:(NSData *)packetBodyData;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSignatureSubpacketHeader.h b/ObjectivePGP.framework/Headers/PGPSignatureSubpacketHeader.h
new file mode 100644
index 00000000..8bbc3aab
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSignatureSubpacketHeader.h
@@ -0,0 +1,22 @@
+//
+//  PGPSignatureSubpacketHeader.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 10/07/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPTypes.h"
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPSignatureSubpacketHeader : NSObject
+
+@property (nonatomic) PGPSignatureSubpacketType type;
+@property (nonatomic) NSUInteger headerLength;
+@property (nonatomic) NSUInteger bodyLength;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedDataPacket.h b/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedDataPacket.h
new file mode 100644
index 00000000..05faa6d2
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedDataPacket.h
@@ -0,0 +1,14 @@
+//
+//  PGPSymmetricallyEncryptedDataPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 11/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+
+@interface PGPSymmetricallyEncryptedDataPacket : PGPPacket
+@property (nonatomic) NSData *encryptedData;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedIntegrityProtectedDataPacket.h b/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedIntegrityProtectedDataPacket.h
new file mode 100644
index 00000000..06a3687e
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPSymmetricallyEncryptedIntegrityProtectedDataPacket.h
@@ -0,0 +1,25 @@
+//
+//  PGPSymmetricallyEncryptedDataPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 04/06/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+#import "PGPSymmetricallyEncryptedDataPacket.h"
+
+NS_ASSUME_NONNULL_BEGIN
+
+@class PGPSecretKeyPacket, PGPPublicKeyPacket;
+
+@interface PGPSymmetricallyEncryptedIntegrityProtectedDataPacket : PGPSymmetricallyEncryptedDataPacket
+
+@property (nonatomic) NSUInteger version;
+
+- (BOOL)encrypt:(NSData *)literalPacketData symmetricAlgorithm:(PGPSymmetricAlgorithm)sessionKeyAlgorithm sessionKeyData:(NSData *)sessionKeyData error:(NSError *__autoreleasing *)error;
+- (NSArray<PGPPacket *> *)decryptWithSecretKeyPacket:(PGPSecretKeyPacket *)secretKeyPacket sessionKeyAlgorithm:(PGPSymmetricAlgorithm)sessionKeyAlgorithm sessionKeyData:(NSData *)sessionKeyData isIntegrityProtected:(BOOL *)isIntegrityProtected error:(NSError *__autoreleasing _Nullable *)error;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/Headers/PGPTrustPacket.h b/ObjectivePGP.framework/Headers/PGPTrustPacket.h
new file mode 100644
index 00000000..78c2a014
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPTrustPacket.h
@@ -0,0 +1,17 @@
+//
+//  PGPTrustPacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 06/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+//  Tag 12
+
+#import "PGPPacketFactory.h"
+#import <Foundation/Foundation.h>
+
+@interface PGPTrustPacket : PGPPacket
+
+@property (nonatomic, readonly) NSData *data;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPUserAttributePacket.h b/ObjectivePGP.framework/Headers/PGPUserAttributePacket.h
new file mode 100644
index 00000000..7f86d1a5
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPUserAttributePacket.h
@@ -0,0 +1,17 @@
+//
+//  PGPUserAttributePacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 24/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import "PGPPacket.h"
+#import "PGPUserAttributeSubpacket.h"
+
+@interface PGPUserAttributePacket : PGPPacket
+
+// array of PGPUserAttributeSubpacket
+@property (nonatomic) NSArray<PGPUserAttributeSubpacket *> *subpackets;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPUserAttributeSubpacket.h b/ObjectivePGP.framework/Headers/PGPUserAttributeSubpacket.h
new file mode 100644
index 00000000..515b87d3
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPUserAttributeSubpacket.h
@@ -0,0 +1,18 @@
+//
+//  PGPUserAttributeSubpacket.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 24/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+@interface PGPUserAttributeSubpacket : NSObject
+
+// Subpacket types 100 through 110 are reserved for private or experimental use.
+@property (nonatomic) UInt8 type;
+// Value
+@property (nonatomic) NSData *valueData;
+
+@end
diff --git a/ObjectivePGP.framework/Headers/PGPUserIDPacket.h b/ObjectivePGP.framework/Headers/PGPUserIDPacket.h
new file mode 100644
index 00000000..ae4a0b4b
--- /dev/null
+++ b/ObjectivePGP.framework/Headers/PGPUserIDPacket.h
@@ -0,0 +1,26 @@
+//
+//  PGPUserID.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 05/05/14.
+//  Copyright (c) 2014 Marcin Krzyżanowski. All rights reserved.
+//
+//  Tag 13
+
+#import <ObjectivePGP/PGPMacros.h>
+#import <ObjectivePGP/PGPPacket.h>
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface PGPUserIDPacket : PGPPacket
+
+@property (nonatomic, copy, readonly) NSString *userID;
+
+PGP_EMPTY_INIT_UNAVAILABLE
+
+- (instancetype)initWithUserID:(NSString *)userID NS_DESIGNATED_INITIALIZER;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/PrivateHeaders/NSMutableArray+PGPUtils.h b/ObjectivePGP.framework/PrivateHeaders/NSMutableArray+PGPUtils.h
new file mode 100644
index 00000000..05d583ef
--- /dev/null
+++ b/ObjectivePGP.framework/PrivateHeaders/NSMutableArray+PGPUtils.h
@@ -0,0 +1,19 @@
+//
+//  NSMutableArray+PGPUtils.h
+//  ObjectivePGP
+//
+//  Created by Marcin Krzyzanowski on 10/09/2017.
+//  Copyright © 2017 Marcin Krzyżanowski. All rights reserved.
+//
+
+#import <Foundation/Foundation.h>
+
+NS_ASSUME_NONNULL_BEGIN
+
+@interface NSMutableArray <ObjectType> (PGPUtils)
+
+- (void)pgp_addObject:(nullable ObjectType)anObject;
+
+@end
+
+NS_ASSUME_NONNULL_END
diff --git a/ObjectivePGP.framework/strip-frameworks.sh b/ObjectivePGP.framework/strip-frameworks.sh
new file mode 100644
index 00000000..6aaa926b
--- /dev/null
+++ b/ObjectivePGP.framework/strip-frameworks.sh
@@ -0,0 +1,54 @@
+# This script strips all non-valid architectures from dynamic libraries in
+# the application's `Frameworks` directory.
+#
+# The following environment variables are required:
+#
+# BUILT_PRODUCTS_DIR
+# FRAMEWORKS_FOLDER_PATH
+# VALID_ARCHS
+# EXPANDED_CODE_SIGN_IDENTITY
+
+
+# Signs a framework with the provided identity
+code_sign() {
+  # Use the current code_sign_identitiy
+  echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
+  echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements $1"
+  /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} --preserve-metadata=identifier,entitlements "$1"
+}
+
+# Set working directory to product’s embedded frameworks 
+cd "${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
+
+if [ "$ACTION" = "install" ]; then
+  echo "Copy .bcsymbolmap files to .xcarchive"
+  find . -name '*.bcsymbolmap' -type f -exec mv {} "${CONFIGURATION_BUILD_DIR}" \;
+else
+  # Delete *.bcsymbolmap files from framework bundle unless archiving
+  find . -name '*.bcsymbolmap' -type f -exec rm -rf "{}" +\;
+fi
+
+echo "Stripping frameworks"
+
+for file in $(find . -type f -perm +111); do
+  # Skip non-dynamic libraries
+  if ! [[ "$(file "$file")" == *"dynamically linked shared library"* ]]; then
+    continue
+  fi
+  # Get architectures for current file
+  archs="$(lipo -info "${file}" | rev | cut -d ':' -f1 | rev)"
+  stripped=""
+  for arch in $archs; do
+    if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then
+      # Strip non-valid architectures in-place
+      lipo -remove "$arch" -output "$file" "$file" || exit 1
+      stripped="$stripped $arch"
+    fi
+  done
+  if [[ "$stripped" != "" ]]; then
+    echo "Stripped $file of architectures:$stripped"
+    if [ "${CODE_SIGNING_REQUIRED}" == "YES" ]; then
+      code_sign "${file}"
+    fi
+  fi
+done
\ No newline at end of file
diff --git a/enzevalos_iphone/PLists/enzevalos-Info.plist b/enzevalos_iphone/PLists/enzevalos-Info.plist
index f3aae050..770c6385 100644
--- a/enzevalos_iphone/PLists/enzevalos-Info.plist
+++ b/enzevalos_iphone/PLists/enzevalos-Info.plist
@@ -17,7 +17,7 @@
 	<key>CFBundlePackageType</key>
 	<string>APPL</string>
 	<key>CFBundleShortVersionString</key>
-	<string>0.8.5</string>
+	<string>0.8.6</string>
 	<key>CFBundleSignature</key>
 	<string>????</string>
 	<key>CFBundleURLTypes</key>
@@ -32,7 +32,7 @@
 		</dict>
 	</array>
 	<key>CFBundleVersion</key>
-	<string>0.8.5</string>
+	<string>0.8.6</string>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
 	<key>NSAppTransportSecurity</key>
-- 
GitLab