CPDFSignature.h 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. //
  2. // CPDFSignature.h
  3. // ComPDFKit
  4. //
  5. // Copyright © 2014-2023 PDF Technologies, Inc. All Rights Reserved.
  6. //
  7. // THIS SOURCE CODE AND ANY ACCOMPANYING DOCUMENTATION ARE PROTECTED BY INTERNATIONAL COPYRIGHT LAW
  8. // AND MAY NOT BE RESOLD OR REDISTRIBUTED. USAGE IS BOUND TO THE ComPDFKit LICENSE AGREEMENT.
  9. // UNAUTHORIZED REPRODUCTION OR DISTRIBUTION IS SUBJECT TO CIVIL AND CRIMINAL PENALTIES.
  10. // This notice may not be removed from this file.
  11. //
  12. #import <ComPDFKit/CPDFKitPlatform.h>
  13. @class CPDFDocument;
  14. typedef NS_ENUM(NSInteger, CPDFSignatureOCSPStatus) {
  15. CPDFSignatureOCSPStatusNone = -2,
  16. CPDFSignatureOCSPStatusFail = -1,
  17. CPDFSignatureOCSPStatusGood = 0,
  18. CPDFSignatureOCSPStatusRevoked = 1
  19. };
  20. typedef NS_ENUM(NSInteger, CPDFModifyType) {
  21. CPDFModifyNone = 0,
  22. CPDFModifyAddPage,
  23. CPDFModifyDeletePage,
  24. CPDFModifyPage,
  25. CPDFModifyAddAnnotation,
  26. CPDFModifyDeleteAnnotation,
  27. CPDFModifyAnnotation,
  28. CPDFModifyFillForm,
  29. CPDFModifyRootIncrease,
  30. CPDFModifyDocument
  31. };
  32. @interface CPDFModifyInfo : NSObject
  33. @property (nonatomic,readonly) CPDFModifyType type;
  34. @property (nonatomic,readonly) NSInteger pageIndex;
  35. @property (nonatomic,readonly) NSInteger annotationType;
  36. @property (nonatomic,readonly) NSInteger formType;
  37. @property (nonatomic,readonly) NSString *info;
  38. @end
  39. @interface CPDFSignatureCertificate : NSObject
  40. // Version 版本
  41. @property (nonatomic,readonly) NSString *version;
  42. // Signature algorithm 签名算法
  43. @property (nonatomic,readonly) NSString *signatureAlgorithmOID;
  44. @property (nonatomic,readonly) NSString *signatureAlgorithmType;
  45. // Subject 主题
  46. @property (nonatomic,readonly) NSString *subject;
  47. // C(国家),ST(省),L(地区),O(组织),OU(单位),CN(通用名)
  48. @property (nonatomic,readonly) NSDictionary *subjectDict;
  49. // Issuer 颁发者
  50. @property (nonatomic,readonly) NSString *issuer;
  51. // C(国家),ST(省),L(地区),O(组织),OU(单位),CN(通用名)
  52. @property (nonatomic,readonly) NSDictionary *issuerDict;
  53. // Serial number 序列号
  54. @property (nonatomic,readonly) NSString *serialNumber;
  55. // Validity starts 有效起始日期
  56. @property (nonatomic,readonly) NSDate *validityStarts;
  57. // Validity ends 有效截止日期
  58. @property (nonatomic,readonly) NSDate *validityEnds;
  59. // Authority info access 颁发机构信息访问
  60. @property (nonatomic,readonly) NSArray<NSDictionary *> *authorityInfoAccess;
  61. // Subject key identifier 主题密钥标识符
  62. @property (nonatomic,readonly) NSString *subjectKeyIdentifier;
  63. // Key usage 密钥用法
  64. @property (nonatomic,readonly) NSString *keyUsage;
  65. // Certificate policies 证书策略
  66. @property (nonatomic,readonly) NSString *certificatePolicies;
  67. // Authority key identifier 颁发结构密钥标识符
  68. @property (nonatomic,readonly) NSString *authorityKeyIdentifier;
  69. // CRL distribution points CRL分发点
  70. @property (nonatomic,readonly) NSArray<NSString *> *CRLDistributionPoints;
  71. // Basic constraints 基本限制
  72. @property (nonatomic,readonly) NSString *basicConstraints;
  73. // Public key 公钥
  74. @property (nonatomic,readonly) NSString *publicKey;
  75. // X.509 data X.509数据
  76. @property (nonatomic,readonly) NSString *X509Data;
  77. // SHA1 digest SHA1摘要
  78. @property (nonatomic,readonly) NSString *SHA1Digest;
  79. // MD5 digest MD5摘要
  80. @property (nonatomic,readonly) NSString *MD5Digest;
  81. @property (nonatomic,readonly) NSString *ocspURL;
  82. @property (nonatomic,readonly) CPDFSignatureOCSPStatus ocspStatus;
  83. @property (nonatomic,readonly) BOOL isTrusted;
  84. - (void)verifyOCSPWithCompletionHandler:(void (^)(BOOL result, CPDFSignatureOCSPStatus ocspStatus))handler;
  85. - (BOOL)exportToFilePath:(NSString *)filePath;
  86. - (BOOL)addToTrustedCertificates;
  87. + (CPDFSignatureCertificate *)certificateWithPKCS12Path:(NSString *)path password:(NSString *)password;
  88. @end
  89. @interface CPDFSigner : NSObject
  90. @property (nonatomic,readonly) BOOL isSignVerified;
  91. @property (nonatomic,readonly) BOOL isCertTrusted;
  92. @property (nonatomic,readonly) NSString *name;
  93. @property (nonatomic,readonly) NSDate *date;
  94. @property (nonatomic,readonly) NSArray<CPDFSignatureCertificate*> *certificates;
  95. @property (nonatomic,readonly) NSArray<CPDFSigner*> *timestampSigners;
  96. - (void)checkCertificateIsTrusted;
  97. @end
  98. @interface CPDFSignature : NSObject
  99. @property (nonatomic,readonly) NSArray<CPDFSigner *> *signers;
  100. @property (nonatomic,readonly) NSArray<CPDFModifyInfo *> *modifyInfos;
  101. @property (nonatomic,readonly) NSUInteger pageIndex;
  102. @property (nonatomic,readonly) NSString *fieldName;
  103. @property (nonatomic,readonly) CGRect bounds;
  104. /**
  105. * The access permissions granted for this document.
  106. *
  107. * @discussion Valid values shall be:
  108. * 1 : No changes to the document shall be permitted; any change to the document shall invalidate the signature.
  109. * 2 : Permitted changes shall be filling in forms, instantiating page templates, and signing; other changes shall invalidate the signature.
  110. * 3 : Permitted changes shall be the same as for 2, as well as annotation creation, deletion, and modification; other changes shall invalidate the signature.
  111. */
  112. @property (nonatomic,readonly) NSInteger permissions;
  113. - (void)verifySignatureWithDocument:(CPDFDocument *)document;
  114. /**
  115. * 生成P12证书
  116. *
  117. * @param info C(国家),ST(省),L(地区),O(组织),OU(单位),CN(通用名),emailaddress(邮箱)
  118. * @param password 密码
  119. * @param path 保存路径
  120. */
  121. + (BOOL)generatePKCS12CertWithInfo:(NSDictionary *)info password:(NSString *)password toPath:(NSString *)path;
  122. @end