@onekeyfe/react-native-jpush 0.0.0-stage → 6.7.0-alpha.435

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +23 -2
  3. package/ReactNativeJpush.podspec +66 -0
  4. package/android/CMakeLists.txt +24 -0
  5. package/android/build.gradle +143 -0
  6. package/android/gradle.properties +4 -0
  7. package/android/src/main/AndroidManifest.xml +143 -0
  8. package/android/src/main/cpp/cpp-adapter.cpp +6 -0
  9. package/android/src/main/java/cn/android/service/JTransitActivity.java +19 -0
  10. package/android/src/main/java/cn/jiguang/android/BuildConfig.java +10 -0
  11. package/android/src/main/java/cn/jiguang/android/IDataShare.java +190 -0
  12. package/android/src/main/java/cn/jiguang/api/BaseLogger.java +82 -0
  13. package/android/src/main/java/cn/jiguang/api/JAction.java +22 -0
  14. package/android/src/main/java/cn/jiguang/api/JActionExtra.java +21 -0
  15. package/android/src/main/java/cn/jiguang/api/JAnalyticsAction.java +11 -0
  16. package/android/src/main/java/cn/jiguang/api/JCoreInterface.java +228 -0
  17. package/android/src/main/java/cn/jiguang/api/JCoreManager.java +156 -0
  18. package/android/src/main/java/cn/jiguang/api/JDispatchAction.java +66 -0
  19. package/android/src/main/java/cn/jiguang/api/MultiSpHelper.java +114 -0
  20. package/android/src/main/java/cn/jiguang/api/ReportCallBack.java +9 -0
  21. package/android/src/main/java/cn/jiguang/api/SdkType.java +13 -0
  22. package/android/src/main/java/cn/jiguang/api/utils/JCollectionAuth.java +23 -0
  23. package/android/src/main/java/cn/jiguang/core/JCoreCrypto.java +545 -0
  24. package/android/src/main/java/cn/jiguang/core/JCoreStorage.java +737 -0
  25. package/android/src/main/java/cn/jiguang/core/JCoreTcpEngine.java +1394 -0
  26. package/android/src/main/java/cn/jiguang/core/JCoreWireCodec.java +1716 -0
  27. package/android/src/main/java/cn/jiguang/internal/ActionManager.java +63 -0
  28. package/android/src/main/java/cn/jiguang/internal/JConstants.java +61 -0
  29. package/android/src/main/java/cn/jiguang/internal/JCoreHelperAction.java +12 -0
  30. package/android/src/main/java/cn/jiguang/internal/JCoreInternalHelper.java +102 -0
  31. package/android/src/main/java/cn/jiguang/net/DefaultHostVerifier.java +40 -0
  32. package/android/src/main/java/cn/jiguang/net/HttpRequest.java +78 -0
  33. package/android/src/main/java/cn/jiguang/net/HttpResponse.java +48 -0
  34. package/android/src/main/java/cn/jiguang/net/HttpUtils.java +106 -0
  35. package/android/src/main/java/cn/jiguang/plugins/core/JCoreModule.java +91 -0
  36. package/android/src/main/java/cn/jiguang/plugins/core/JCorePackage.java +27 -0
  37. package/android/src/main/java/cn/jiguang/plugins/push/JPushModule.java +773 -0
  38. package/android/src/main/java/cn/jiguang/plugins/push/JPushPackage.java +25 -0
  39. package/android/src/main/java/cn/jiguang/plugins/push/common/JConstants.java +88 -0
  40. package/android/src/main/java/cn/jiguang/plugins/push/common/JLogger.java +122 -0
  41. package/android/src/main/java/cn/jiguang/plugins/push/helper/JPushHelper.java +710 -0
  42. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushBroadcastReceiver.java +37 -0
  43. package/android/src/main/java/cn/jiguang/plugins/push/receiver/JPushModuleReceiver.java +264 -0
  44. package/android/src/main/java/cn/jiguang/plugins/service/JCoreModuleService.java +7 -0
  45. package/android/src/main/java/cn/jpush/android/api/BasicPushNotificationBuilder.java +83 -0
  46. package/android/src/main/java/cn/jpush/android/api/CallBackParams.java +50 -0
  47. package/android/src/main/java/cn/jpush/android/api/CmdMessage.java +33 -0
  48. package/android/src/main/java/cn/jpush/android/api/CustomMessage.java +28 -0
  49. package/android/src/main/java/cn/jpush/android/api/CustomPushNotificationBuilder.java +81 -0
  50. package/android/src/main/java/cn/jpush/android/api/DefaultPushNotificationBuilder.java +90 -0
  51. package/android/src/main/java/cn/jpush/android/api/InAppSlotParams.java +65 -0
  52. package/android/src/main/java/cn/jpush/android/api/InstrumentedActivity.java +17 -0
  53. package/android/src/main/java/cn/jpush/android/api/InstrumentedListActivity.java +17 -0
  54. package/android/src/main/java/cn/jpush/android/api/JPushInterface.java +488 -0
  55. package/android/src/main/java/cn/jpush/android/api/JPushMessage.java +121 -0
  56. package/android/src/main/java/cn/jpush/android/api/JThirdPlatFormInterface.java +147 -0
  57. package/android/src/main/java/cn/jpush/android/api/MultiActionsNotificationBuilder.java +72 -0
  58. package/android/src/main/java/cn/jpush/android/api/NotificationCustomButton.java +50 -0
  59. package/android/src/main/java/cn/jpush/android/api/NotificationMessage.java +67 -0
  60. package/android/src/main/java/cn/jpush/android/api/PushNotificationBuilder.java +13 -0
  61. package/android/src/main/java/cn/jpush/android/api/TagAliasCallback.java +8 -0
  62. package/android/src/main/java/cn/jpush/android/data/JPushCollectControl.java +96 -0
  63. package/android/src/main/java/cn/jpush/android/data/JPushConfig.java +79 -0
  64. package/android/src/main/java/cn/jpush/android/data/JPushConfigEx.java +41 -0
  65. package/android/src/main/java/cn/jpush/android/data/JPushLocalNotification.java +155 -0
  66. package/android/src/main/java/cn/jpush/android/helper/JCoreHelper.java +70 -0
  67. package/android/src/main/java/cn/jpush/android/helper/Logger.java +82 -0
  68. package/android/src/main/java/cn/jpush/android/local/ActionHelper.java +1198 -0
  69. package/android/src/main/java/cn/jpush/android/local/ActivityLifeCallBack.java +47 -0
  70. package/android/src/main/java/cn/jpush/android/local/JPushAction.java +67 -0
  71. package/android/src/main/java/cn/jpush/android/local/JPushConstants.java +34 -0
  72. package/android/src/main/java/cn/jpush/android/local/JPushResponse.java +26 -0
  73. package/android/src/main/java/cn/jpush/android/local/ProxyActivityAction.java +34 -0
  74. package/android/src/main/java/cn/jpush/android/service/AlarmReceiver.java +15 -0
  75. package/android/src/main/java/cn/jpush/android/service/BActivity.java +19 -0
  76. package/android/src/main/java/cn/jpush/android/service/DActivity.java +19 -0
  77. package/android/src/main/java/cn/jpush/android/service/DaemonService.java +17 -0
  78. package/android/src/main/java/cn/jpush/android/service/DataProvider.java +136 -0
  79. package/android/src/main/java/cn/jpush/android/service/DataShare.java +129 -0
  80. package/android/src/main/java/cn/jpush/android/service/DownloadProvider.java +139 -0
  81. package/android/src/main/java/cn/jpush/android/service/InitProvider.java +48 -0
  82. package/android/src/main/java/cn/jpush/android/service/JCommonService.java +79 -0
  83. package/android/src/main/java/cn/jpush/android/service/JNotifyActivity.java +28 -0
  84. package/android/src/main/java/cn/jpush/android/service/JPushMessageReceiver.java +93 -0
  85. package/android/src/main/java/cn/jpush/android/service/PushReceiver.java +26 -0
  86. package/android/src/main/java/cn/jpush/android/service/PushService.java +28 -0
  87. package/android/src/main/java/cn/jpush/android/service/SchedulerReceiver.java +17 -0
  88. package/android/src/main/java/cn/jpush/android/service/TagAliasReceiver.java +11 -0
  89. package/android/src/main/java/cn/jpush/android/service/WakedResultReceiver.java +24 -0
  90. package/android/src/main/java/cn/jpush/android/ui/FullScreenView.java +11 -0
  91. package/android/src/main/java/cn/jpush/android/ui/PopWinActivity.java +16 -0
  92. package/android/src/main/java/cn/jpush/android/ui/PushActivity.java +27 -0
  93. package/android/src/main/java/cn/jpush/android/ui/RoundedImageView.java +63 -0
  94. package/android/src/main/java/cn/jpush/android/ui/ShadowViewCard.java +56 -0
  95. package/android/src/main/java/cn/jpush/android/ups/ICallbackResult.java +5 -0
  96. package/android/src/main/java/cn/jpush/android/ups/JPushUPSManager.java +37 -0
  97. package/android/src/main/java/cn/jpush/android/ups/TokenResult.java +47 -0
  98. package/android/src/main/java/cn/jpush/android/ups/UPSRegisterCallBack.java +4 -0
  99. package/android/src/main/java/cn/jpush/android/ups/UPSTurnCallBack.java +4 -0
  100. package/android/src/main/java/cn/jpush/android/ups/UPSUnRegisterCallBack.java +4 -0
  101. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpush.kt +455 -0
  102. package/android/src/main/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushPackage.kt +50 -0
  103. package/android/src/main/res/values/jpush_string.xml +7 -0
  104. package/android/src/main/res/values/jpush_style.xml +22 -0
  105. package/android/src/test/java/com/margelo/nitro/reactnativejpush/ReactNativeJpushProtocolTest.java +1016 -0
  106. package/ios/ReactNativeJpush.swift +522 -0
  107. package/ios/bridge/RCTJCoreModule.h +5 -0
  108. package/ios/bridge/RCTJCoreModule.m +31 -0
  109. package/ios/bridge/RCTJPushEventQueue.h +14 -0
  110. package/ios/bridge/RCTJPushEventQueue.m +23 -0
  111. package/ios/bridge/RCTJPushModule.h +37 -0
  112. package/ios/bridge/RCTJPushModule.m +1165 -0
  113. package/ios/include/JCOREService.h +3 -0
  114. package/ios/include/JGCOREAPI.h +14 -0
  115. package/ios/include/JGInforCollectionAuth.h +17 -0
  116. package/ios/include/JGInforCollectionAuthItems.h +2 -0
  117. package/ios/include/JGPushNotificationTrigger.h +2 -0
  118. package/ios/include/JPUSHService.h +359 -0
  119. package/ios/jcore/JCOREConfiguration.h +141 -0
  120. package/ios/jcore/JCOREConfiguration.m +703 -0
  121. package/ios/jcore/JCORECrypto.h +73 -0
  122. package/ios/jcore/JCORECrypto.m +649 -0
  123. package/ios/jcore/JCORESisResolver.h +56 -0
  124. package/ios/jcore/JCORESisResolver.m +525 -0
  125. package/ios/jcore/JCORETcpSession.h +42 -0
  126. package/ios/jcore/JCORETcpSession.m +956 -0
  127. package/ios/jcore/JCOREWireProtocol.h +274 -0
  128. package/ios/jcore/JCOREWireProtocol.m +1453 -0
  129. package/ios/jpush/JPUSHModels.m +214 -0
  130. package/ios/jpush/JPUSHNotificationManager.h +34 -0
  131. package/ios/jpush/JPUSHNotificationManager.m +360 -0
  132. package/ios/jpush/JPUSHService.m +794 -0
  133. package/ios/tests/ReactNativeJpushTests.m +148 -0
  134. package/lib/module/ReactNativeJpush.nitro.js +4 -0
  135. package/lib/module/ReactNativeJpush.nitro.js.map +1 -0
  136. package/lib/module/index.js +801 -0
  137. package/lib/module/index.js.map +1 -0
  138. package/lib/module/package.json +1 -0
  139. package/lib/typescript/package.json +1 -0
  140. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts +60 -0
  141. package/lib/typescript/src/ReactNativeJpush.nitro.d.ts.map +1 -0
  142. package/lib/typescript/src/index.d.ts +235 -0
  143. package/lib/typescript/src/index.d.ts.map +1 -0
  144. package/nitro.json +23 -0
  145. package/nitrogen/generated/android/c++/JFunc_void_bool.hpp +75 -0
  146. package/nitrogen/generated/android/c++/JFunc_void_std__string_std__string.hpp +76 -0
  147. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.cpp +310 -0
  148. package/nitrogen/generated/android/c++/JHybridReactNativeJpushSpec.hpp +115 -0
  149. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_bool.kt +78 -0
  150. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/Func_void_std__string_std__string.kt +78 -0
  151. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/HybridReactNativeJpushSpec.kt +274 -0
  152. package/nitrogen/generated/android/kotlin/com/margelo/nitro/reactnativejpush/reactnativejpushOnLoad.kt +35 -0
  153. package/nitrogen/generated/android/reactnativejpush+autolinking.cmake +81 -0
  154. package/nitrogen/generated/android/reactnativejpush+autolinking.gradle +27 -0
  155. package/nitrogen/generated/android/reactnativejpushOnLoad.cpp +58 -0
  156. package/nitrogen/generated/android/reactnativejpushOnLoad.hpp +34 -0
  157. package/nitrogen/generated/ios/ReactNativeJpush+autolinking.rb +62 -0
  158. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.cpp +49 -0
  159. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Bridge.hpp +147 -0
  160. package/nitrogen/generated/ios/ReactNativeJpush-Swift-Cxx-Umbrella.hpp +46 -0
  161. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.mm +33 -0
  162. package/nitrogen/generated/ios/ReactNativeJpushAutolinking.swift +26 -0
  163. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.cpp +11 -0
  164. package/nitrogen/generated/ios/c++/HybridReactNativeJpushSpecSwift.hpp +402 -0
  165. package/nitrogen/generated/ios/swift/Func_void_bool.swift +46 -0
  166. package/nitrogen/generated/ios/swift/Func_void_std__string_std__string.swift +46 -0
  167. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec.swift +107 -0
  168. package/nitrogen/generated/ios/swift/HybridReactNativeJpushSpec_cxx.swift +723 -0
  169. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.cpp +73 -0
  170. package/nitrogen/generated/shared/c++/HybridReactNativeJpushSpec.hpp +116 -0
  171. package/package.json +173 -4
  172. package/src/ReactNativeJpush.nitro.ts +93 -0
  173. package/src/index.tsx +1090 -0
@@ -0,0 +1,649 @@
1
+ #import "JCORECrypto.h"
2
+ #import <CommonCrypto/CommonCryptor.h>
3
+ #import <CommonCrypto/CommonDigest.h>
4
+ #import <CommonCrypto/CommonHMAC.h>
5
+ #import <Security/Security.h>
6
+ #import <zlib.h>
7
+
8
+ typedef struct {
9
+ int mode;
10
+ uint32_t sk[32];
11
+ } JCORESm4Context;
12
+
13
+ static const uint8_t kJCORESm4SBox[256] = {
14
+ 0xd6, 0x90, 0xe9, 0xfe, 0xcc, 0xe1, 0x3d, 0xb7, 0x16, 0xb6, 0x14, 0xc2, 0x28, 0xfb, 0x2c, 0x05,
15
+ 0x2b, 0x67, 0x9a, 0x76, 0x2a, 0xbe, 0x04, 0xc3, 0xaa, 0x44, 0x13, 0x26, 0x49, 0x86, 0x06, 0x99,
16
+ 0x9c, 0x42, 0x50, 0xf4, 0x91, 0xef, 0x98, 0x7a, 0x33, 0x54, 0x0b, 0x43, 0xed, 0xcf, 0xac, 0x62,
17
+ 0xe4, 0xb3, 0x1c, 0xa9, 0xc9, 0x08, 0xe8, 0x95, 0x80, 0xdf, 0x94, 0xfa, 0x75, 0x8f, 0x3f, 0xa6,
18
+ 0x47, 0x07, 0xa7, 0xfc, 0xf3, 0x73, 0x17, 0xba, 0x83, 0x59, 0x3c, 0x19, 0xe6, 0x85, 0x4f, 0xa8,
19
+ 0x68, 0x6b, 0x81, 0xb2, 0x71, 0x64, 0xda, 0x8b, 0xf8, 0xeb, 0x0f, 0x4b, 0x70, 0x56, 0x9d, 0x35,
20
+ 0x1e, 0x24, 0x0e, 0x5e, 0x63, 0x58, 0xd1, 0xa2, 0x25, 0x22, 0x7c, 0x3b, 0x01, 0x21, 0x78, 0x87,
21
+ 0xd4, 0x00, 0x46, 0x57, 0x9f, 0xd3, 0x27, 0x52, 0x4c, 0x36, 0x02, 0xe7, 0xa0, 0xc4, 0xc8, 0x9e,
22
+ 0xea, 0xbf, 0x8a, 0xd2, 0x40, 0xc7, 0x38, 0xb5, 0xa3, 0xf7, 0xf2, 0xce, 0xf9, 0x61, 0x15, 0xa1,
23
+ 0xe0, 0xae, 0x5d, 0xa4, 0x9b, 0x34, 0x1a, 0x55, 0xad, 0x93, 0x32, 0x30, 0xf5, 0x8c, 0xb1, 0xe3,
24
+ 0x1d, 0xf6, 0xe2, 0x2e, 0x82, 0x66, 0xca, 0x60, 0xc0, 0x29, 0x23, 0xab, 0x0d, 0x53, 0x4e, 0x6f,
25
+ 0xd5, 0xdb, 0x37, 0x45, 0xde, 0xfd, 0x8e, 0x2f, 0x03, 0xff, 0x6a, 0x72, 0x6d, 0x6c, 0x5b, 0x51,
26
+ 0x8d, 0x1b, 0xaf, 0x92, 0xbb, 0xdd, 0xbc, 0x7f, 0x11, 0xd9, 0x5c, 0x41, 0x1f, 0x10, 0x5a, 0xd8,
27
+ 0x0a, 0xc1, 0x31, 0x88, 0xa5, 0xcd, 0x7b, 0xbd, 0x2d, 0x74, 0xd0, 0x12, 0xb8, 0xe5, 0xb4, 0xb0,
28
+ 0x89, 0x69, 0x97, 0x4a, 0x0c, 0x96, 0x77, 0x7e, 0x65, 0xb9, 0xf1, 0x09, 0xc5, 0x6e, 0xc6, 0x84,
29
+ 0x18, 0xf0, 0x7d, 0xec, 0x3a, 0xdc, 0x4d, 0x20, 0x79, 0xee, 0x5f, 0x3e, 0xd7, 0xcb, 0x39, 0x48,
30
+ };
31
+
32
+ static inline uint32_t JCORESm4RotateLeft(uint32_t value, unsigned int shift) {
33
+ return (value << shift) | (value >> (32U - shift));
34
+ }
35
+
36
+ static inline uint32_t JCORESm4SubstituteWord(uint32_t value) {
37
+ return ((uint32_t)kJCORESm4SBox[(value >> 24) & 0xFF] << 24) |
38
+ ((uint32_t)kJCORESm4SBox[(value >> 16) & 0xFF] << 16) |
39
+ ((uint32_t)kJCORESm4SBox[(value >> 8) & 0xFF] << 8) |
40
+ (uint32_t)kJCORESm4SBox[value & 0xFF];
41
+ }
42
+
43
+ static inline uint32_t JCORESm4ReadBE32(const uint8_t *bytes) {
44
+ return ((uint32_t)bytes[0] << 24) |
45
+ ((uint32_t)bytes[1] << 16) |
46
+ ((uint32_t)bytes[2] << 8) |
47
+ (uint32_t)bytes[3];
48
+ }
49
+
50
+ static inline void JCORESm4WriteBE32(uint8_t *bytes, uint32_t value) {
51
+ bytes[0] = (uint8_t)(value >> 24);
52
+ bytes[1] = (uint8_t)(value >> 16);
53
+ bytes[2] = (uint8_t)(value >> 8);
54
+ bytes[3] = (uint8_t)value;
55
+ }
56
+
57
+ static void JCORESm4InitKeySchedule(JCORESm4Context *ctx, const uint8_t key[16], BOOL decrypt) {
58
+ static const uint32_t kFK[4] = { 0xa3b1bac6U, 0x56aa3350U, 0x677d9197U, 0xb27022dcU };
59
+ uint32_t words[36];
60
+ for (unsigned int i = 0; i < 4; i++) {
61
+ words[i] = JCORESm4ReadBE32(key + i * 4) ^ kFK[i];
62
+ }
63
+ for (unsigned int i = 0; i < 32; i++) {
64
+ uint32_t ck = 0;
65
+ for (unsigned int j = 0; j < 4; j++) {
66
+ ck = (ck << 8) | (((i * 4 + j) * 7) & 0xFF);
67
+ }
68
+ uint32_t t = JCORESm4SubstituteWord(words[i + 1] ^ words[i + 2] ^ words[i + 3] ^ ck);
69
+ words[i + 4] = words[i] ^ t ^ JCORESm4RotateLeft(t, 13) ^ JCORESm4RotateLeft(t, 23);
70
+ ctx->sk[decrypt ? (31 - i) : i] = words[i + 4];
71
+ }
72
+ ctx->mode = decrypt ? 0 : 1;
73
+ }
74
+
75
+ static void JCORESm4ProcessBlock(const uint32_t sk[32], const uint8_t input[16], uint8_t output[16]) {
76
+ uint32_t words[36];
77
+ for (unsigned int i = 0; i < 4; i++) {
78
+ words[i] = JCORESm4ReadBE32(input + i * 4);
79
+ }
80
+ for (unsigned int i = 0; i < 32; i++) {
81
+ uint32_t t = JCORESm4SubstituteWord(words[i + 1] ^ words[i + 2] ^ words[i + 3] ^ sk[i]);
82
+ words[i + 4] = words[i] ^ t ^ JCORESm4RotateLeft(t, 2) ^ JCORESm4RotateLeft(t, 10) ^
83
+ JCORESm4RotateLeft(t, 18) ^ JCORESm4RotateLeft(t, 24);
84
+ }
85
+ for (unsigned int i = 0; i < 4; i++) {
86
+ JCORESm4WriteBE32(output + i * 4, words[35 - i]);
87
+ }
88
+ }
89
+
90
+ static BOOL JCORESm4DecodeHexKey16(NSString *hexKey, uint8_t outKey[16]) {
91
+ if (hexKey.length != 32) {
92
+ return NO;
93
+ }
94
+ const char *cstr = hexKey.UTF8String;
95
+ if (cstr == NULL) {
96
+ return NO;
97
+ }
98
+ for (int i = 0; i < 16; i++) {
99
+ char hi = cstr[i * 2];
100
+ char lo = cstr[i * 2 + 1];
101
+ uint8_t hiVal = 0;
102
+ uint8_t loVal = 0;
103
+ if (hi >= '0' && hi <= '9') hiVal = (uint8_t)(hi - '0');
104
+ else if (hi >= 'a' && hi <= 'f') hiVal = (uint8_t)(10 + hi - 'a');
105
+ else if (hi >= 'A' && hi <= 'F') hiVal = (uint8_t)(10 + hi - 'A');
106
+ else return NO;
107
+
108
+ if (lo >= '0' && lo <= '9') loVal = (uint8_t)(lo - '0');
109
+ else if (lo >= 'a' && lo <= 'f') loVal = (uint8_t)(10 + lo - 'a');
110
+ else if (lo >= 'A' && lo <= 'F') loVal = (uint8_t)(10 + lo - 'A');
111
+ else return NO;
112
+
113
+ outKey[i] = (uint8_t)((hiVal << 4) | loVal);
114
+ }
115
+ return YES;
116
+ }
117
+
118
+ static NSData *JCORESm4StripPkcs7Padding(NSData *decrypted) {
119
+ if (decrypted.length == 0 || (decrypted.length % 16) != 0) {
120
+ return nil;
121
+ }
122
+ const uint8_t *bytes = decrypted.bytes;
123
+ NSUInteger length = decrypted.length;
124
+ uint8_t pad = bytes[length - 1];
125
+ if (pad == 0 || pad > 16 || pad > length) {
126
+ return decrypted;
127
+ }
128
+ for (NSUInteger i = 1; i < pad; i++) {
129
+ if (bytes[length - 1 - i] != pad) {
130
+ return decrypted;
131
+ }
132
+ }
133
+ return [NSData dataWithBytes:bytes length:length - pad];
134
+ }
135
+
136
+ @implementation JCORECrypto
137
+
138
+ + (NSString *)generateSeedKey:(uint64_t)seed {
139
+ static const uint32_t kMultipliers[10] = { 8, 5, 23, 3, 13, 17, 7, 31, 29, 37 };
140
+ static const uint32_t kModuli[10] = { 74, 88, 15, 73, 96, 49, 68, 39, 41, 91 };
141
+ NSUInteger index = (NSUInteger)(seed % 10ULL);
142
+ uint64_t transformed = seed * kMultipliers[index] + (seed % kModuli[index]);
143
+ NSString *source = [NSString stringWithFormat:@"JCKP%lld", (long long)transformed];
144
+ return [self md5Hex:source];
145
+ }
146
+
147
+ + (NSString *)seedKeyForSeed:(uint64_t)seed {
148
+ return [self generateSeedKey:seed];
149
+ }
150
+
151
+ + (NSString *)httpSeedKeyWithOutSeed:(uint32_t *)outSeed {
152
+ uint32_t randomSeed = arc4random();
153
+ if (randomSeed == 0) {
154
+ randomSeed = 1;
155
+ }
156
+ if (outSeed != NULL) {
157
+ *outSeed = randomSeed;
158
+ }
159
+ return [self generateSeedKey:randomSeed];
160
+ }
161
+
162
+ + (NSData *)cryptData:(NSData *)data
163
+ key:(NSString *)key
164
+ iv:(const void *)iv
165
+ keySize:(size_t)keySize
166
+ operation:(CCOperation)operation
167
+ options:(CCOptions)options {
168
+ if (data.length == 0 || key.length == 0) {
169
+ return nil;
170
+ }
171
+ char keyBuffer[kCCKeySizeAES256 + 1];
172
+ memset(keyBuffer, 0, sizeof(keyBuffer));
173
+ [key getCString:keyBuffer maxLength:sizeof(keyBuffer) encoding:NSUTF8StringEncoding];
174
+
175
+ size_t actualKeySize = (keySize == kCCKeySizeAES128 || keySize == kCCKeySizeAES256)
176
+ ? keySize
177
+ : (key.length >= kCCKeySizeAES256 ? kCCKeySizeAES256 : kCCKeySizeAES128);
178
+
179
+ size_t bufferSize = data.length + kCCBlockSizeAES128;
180
+ void *buffer = malloc(bufferSize);
181
+ if (buffer == NULL) {
182
+ return nil;
183
+ }
184
+ size_t bytesProcessed = 0;
185
+ CCCryptorStatus status = CCCrypt(
186
+ operation,
187
+ kCCAlgorithmAES,
188
+ options,
189
+ keyBuffer,
190
+ actualKeySize,
191
+ iv,
192
+ data.bytes,
193
+ data.length,
194
+ buffer,
195
+ bufferSize,
196
+ &bytesProcessed
197
+ );
198
+ if (status == kCCSuccess) {
199
+ return [NSData dataWithBytesNoCopy:buffer length:bytesProcessed freeWhenDone:YES];
200
+ }
201
+ free(buffer);
202
+ return nil;
203
+ }
204
+
205
+ + (NSData *)aesCbcEncrypt:(NSData *)data
206
+ key:(NSString *)key
207
+ iv:(const void *)iv
208
+ keySize:(size_t)keySize {
209
+ return [self cryptData:data
210
+ key:key
211
+ iv:iv
212
+ keySize:keySize
213
+ operation:kCCEncrypt
214
+ options:kCCOptionPKCS7Padding];
215
+ }
216
+
217
+ + (NSData *)aesCbcDecrypt:(NSData *)data
218
+ key:(NSString *)key
219
+ iv:(const void *)iv
220
+ keySize:(size_t)keySize {
221
+ return [self cryptData:data
222
+ key:key
223
+ iv:iv
224
+ keySize:keySize
225
+ operation:kCCDecrypt
226
+ options:kCCOptionPKCS7Padding];
227
+ }
228
+
229
+ + (NSData *)aesEcbEncrypt:(NSData *)data
230
+ key:(NSString *)key
231
+ keySize:(size_t)keySize {
232
+ return [self cryptData:data
233
+ key:key
234
+ iv:NULL
235
+ keySize:keySize
236
+ operation:kCCEncrypt
237
+ options:(kCCOptionPKCS7Padding | kCCOptionECBMode)];
238
+ }
239
+
240
+ + (NSData *)aesEcbDecrypt:(NSData *)data
241
+ key:(NSString *)key
242
+ keySize:(size_t)keySize {
243
+ return [self cryptData:data
244
+ key:key
245
+ iv:NULL
246
+ keySize:keySize
247
+ operation:kCCDecrypt
248
+ options:(kCCOptionPKCS7Padding | kCCOptionECBMode)];
249
+ }
250
+
251
+ + (NSData *)fixedHttpReportIvData {
252
+ static NSData *ivData = nil;
253
+ static dispatch_once_t onceToken;
254
+ dispatch_once(&onceToken, ^{
255
+ ivData = [[NSData alloc] initWithBase64EncodedString:@"aW9wMjAzMDQwNTA2YVBrIQ==" options:0];
256
+ });
257
+ return ivData;
258
+ }
259
+
260
+ + (NSData *)aes256CBCEncryptWithFixedHttpIV:(NSData *)data
261
+ key:(NSString *)key {
262
+ NSData *ivData = [self fixedHttpReportIvData];
263
+ if (ivData.length < 16) {
264
+ return nil;
265
+ }
266
+ return [self aesCbcEncrypt:data key:key iv:ivData.bytes keySize:kCCKeySizeAES256];
267
+ }
268
+
269
+ + (NSData *)aes256CBCDecryptWithFixedHttpIV:(NSData *)data
270
+ key:(NSString *)key {
271
+ NSData *ivData = [self fixedHttpReportIvData];
272
+ if (ivData.length < 16) {
273
+ return nil;
274
+ }
275
+ return [self aesCbcDecrypt:data key:key iv:ivData.bytes keySize:kCCKeySizeAES256];
276
+ }
277
+
278
+ + (NSData *)aes128CBCEncryptData:(NSData *)data
279
+ key16:(NSString *)key16
280
+ iv16:(NSString *)iv16 {
281
+ if (key16.length < 16 || iv16.length < 16) {
282
+ return nil;
283
+ }
284
+ return [self aesCbcEncrypt:data key:key16 iv:iv16.UTF8String keySize:kCCKeySizeAES128];
285
+ }
286
+
287
+ + (NSData *)aes128CBCDecryptData:(NSData *)data
288
+ key16:(NSString *)key16
289
+ iv16:(NSString *)iv16 {
290
+ if (key16.length < 16 || iv16.length < 16) {
291
+ return nil;
292
+ }
293
+ return [self aesCbcDecrypt:data key:key16 iv:iv16.UTF8String keySize:kCCKeySizeAES128];
294
+ }
295
+
296
+ + (NSData *)sm4CBCEncryptData:(NSData *)data
297
+ withKey:(NSString *)hexKey
298
+ iv:(const char *)iv {
299
+ if (data == nil || iv == NULL) {
300
+ return nil;
301
+ }
302
+ uint8_t rawKey[16];
303
+ if (!JCORESm4DecodeHexKey16(hexKey, rawKey)) {
304
+ return nil;
305
+ }
306
+ uint8_t padding = (uint8_t)(16 - (data.length % 16));
307
+ NSMutableData *padded = [NSMutableData dataWithLength:data.length + padding];
308
+ memset(padded.mutableBytes, padding, padded.length);
309
+ if (data.length > 0) {
310
+ memcpy(padded.mutableBytes, data.bytes, data.length);
311
+ }
312
+
313
+ JCORESm4Context ctx;
314
+ JCORESm4InitKeySchedule(&ctx, rawKey, NO);
315
+
316
+ uint8_t currentIv[16];
317
+ memcpy(currentIv, iv, 16);
318
+
319
+ NSMutableData *output = [NSMutableData dataWithLength:padded.length];
320
+ const uint8_t *inBytes = padded.bytes;
321
+ uint8_t *outBytes = output.mutableBytes;
322
+ for (NSUInteger offset = 0; offset < padded.length; offset += 16) {
323
+ uint8_t xored[16];
324
+ for (int i = 0; i < 16; i++) {
325
+ xored[i] = inBytes[offset + i] ^ currentIv[i];
326
+ }
327
+ JCORESm4ProcessBlock(ctx.sk, xored, outBytes + offset);
328
+ memcpy(currentIv, outBytes + offset, 16);
329
+ }
330
+ return output;
331
+ }
332
+
333
+ + (NSData *)sm4CBCDecryptData:(NSData *)data
334
+ withKey:(NSString *)hexKey
335
+ iv:(const char *)iv {
336
+ if (data.length == 0 || (data.length % 16) != 0 || iv == NULL) {
337
+ return nil;
338
+ }
339
+ uint8_t rawKey[16];
340
+ if (!JCORESm4DecodeHexKey16(hexKey, rawKey)) {
341
+ return nil;
342
+ }
343
+ JCORESm4Context ctx;
344
+ JCORESm4InitKeySchedule(&ctx, rawKey, YES);
345
+
346
+ uint8_t currentIv[16];
347
+ memcpy(currentIv, iv, 16);
348
+
349
+ NSMutableData *output = [NSMutableData dataWithLength:data.length];
350
+ const uint8_t *inBytes = data.bytes;
351
+ uint8_t *outBytes = output.mutableBytes;
352
+ for (NSUInteger offset = 0; offset < data.length; offset += 16) {
353
+ uint8_t savedCipher[16];
354
+ memcpy(savedCipher, inBytes + offset, 16);
355
+ JCORESm4ProcessBlock(ctx.sk, inBytes + offset, outBytes + offset);
356
+ for (int i = 0; i < 16; i++) {
357
+ outBytes[offset + i] ^= currentIv[i];
358
+ }
359
+ memcpy(currentIv, savedCipher, 16);
360
+ }
361
+ return JCORESm4StripPkcs7Padding(output);
362
+ }
363
+
364
+ + (NSData *)sm4ECBEncryptData:(NSData *)data
365
+ withKey:(NSString *)hexKey {
366
+ if (data == nil) {
367
+ return nil;
368
+ }
369
+ uint8_t rawKey[16];
370
+ if (!JCORESm4DecodeHexKey16(hexKey, rawKey)) {
371
+ return nil;
372
+ }
373
+ uint8_t padding = (uint8_t)(16 - (data.length % 16));
374
+ NSMutableData *padded = [NSMutableData dataWithLength:data.length + padding];
375
+ memset(padded.mutableBytes, padding, padded.length);
376
+ if (data.length > 0) {
377
+ memcpy(padded.mutableBytes, data.bytes, data.length);
378
+ }
379
+
380
+ JCORESm4Context ctx;
381
+ JCORESm4InitKeySchedule(&ctx, rawKey, NO);
382
+
383
+ NSMutableData *output = [NSMutableData dataWithLength:padded.length];
384
+ const uint8_t *inBytes = padded.bytes;
385
+ uint8_t *outBytes = output.mutableBytes;
386
+ for (NSUInteger offset = 0; offset < padded.length; offset += 16) {
387
+ JCORESm4ProcessBlock(ctx.sk, inBytes + offset, outBytes + offset);
388
+ }
389
+ return output;
390
+ }
391
+
392
+ + (NSData *)sm4ECBDecryptData:(NSData *)data
393
+ withKey:(NSString *)hexKey {
394
+ if (data.length == 0 || (data.length % 16) != 0) {
395
+ return nil;
396
+ }
397
+ uint8_t rawKey[16];
398
+ if (!JCORESm4DecodeHexKey16(hexKey, rawKey)) {
399
+ return nil;
400
+ }
401
+ JCORESm4Context ctx;
402
+ JCORESm4InitKeySchedule(&ctx, rawKey, YES);
403
+
404
+ NSMutableData *output = [NSMutableData dataWithLength:data.length];
405
+ const uint8_t *inBytes = data.bytes;
406
+ uint8_t *outBytes = output.mutableBytes;
407
+ for (NSUInteger offset = 0; offset < data.length; offset += 16) {
408
+ JCORESm4ProcessBlock(ctx.sk, inBytes + offset, outBytes + offset);
409
+ }
410
+ return JCORESm4StripPkcs7Padding(output);
411
+ }
412
+
413
+ + (NSData *)stripX509PublicKeyHeader:(NSData *)derData {
414
+ static const unsigned char kRsaOidSequence[15] = {
415
+ 0x30, 0x0d, 0x06, 0x09, 0x2a, 0x86, 0x48, 0x86,
416
+ 0xf7, 0x0d, 0x01, 0x01, 0x01, 0x05, 0x00
417
+ };
418
+ const unsigned char *bytes = derData.bytes;
419
+ NSUInteger length = derData.length;
420
+ if (length < 20 || bytes[0] != 0x30) {
421
+ return derData;
422
+ }
423
+ NSUInteger index = (bytes[1] > 0x80) ? (2 + bytes[1] - 0x80) : 2;
424
+ if (index > length || length - index < 17) {
425
+ return nil;
426
+ }
427
+ if (memcmp(bytes + index, kRsaOidSequence, sizeof(kRsaOidSequence)) != 0) {
428
+ return derData;
429
+ }
430
+ index += sizeof(kRsaOidSequence);
431
+ if (index >= length || bytes[index++] != 0x03) {
432
+ return nil;
433
+ }
434
+ if (index >= length) {
435
+ return nil;
436
+ }
437
+ unsigned char bitStringLength = bytes[index++];
438
+ if (bitStringLength > 0x80) {
439
+ index += (bitStringLength - 0x80);
440
+ }
441
+ if (index >= length || bytes[index++] != 0x00) {
442
+ return nil;
443
+ }
444
+ return [NSData dataWithBytes:bytes + index length:length - index];
445
+ }
446
+
447
+ + (NSString *)rsaEncryptString:(NSString *)plainText
448
+ publicKeyBase64:(NSString *)publicKeyBase64 {
449
+ if (plainText.length == 0 || publicKeyBase64.length == 0) {
450
+ return nil;
451
+ }
452
+ NSString *cleaned = publicKeyBase64;
453
+ cleaned = [cleaned stringByReplacingOccurrencesOfString:@"-----BEGIN PUBLIC KEY-----" withString:@""];
454
+ cleaned = [cleaned stringByReplacingOccurrencesOfString:@"-----END PUBLIC KEY-----" withString:@""];
455
+ cleaned = [[cleaned componentsSeparatedByCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] componentsJoinedByString:@""];
456
+
457
+ NSData *rawKeyData = [[NSData alloc] initWithBase64EncodedString:cleaned
458
+ options:NSDataBase64DecodingIgnoreUnknownCharacters];
459
+ NSData *pkcs1KeyData = [self stripX509PublicKeyHeader:rawKeyData];
460
+ if (pkcs1KeyData.length == 0) {
461
+ return nil;
462
+ }
463
+
464
+ NSDictionary *attributes = @{
465
+ (__bridge id)kSecAttrKeyType: (__bridge id)kSecAttrKeyTypeRSA,
466
+ (__bridge id)kSecAttrKeyClass: (__bridge id)kSecAttrKeyClassPublic,
467
+ };
468
+ CFErrorRef error = NULL;
469
+ SecKeyRef publicKey = SecKeyCreateWithData((__bridge CFDataRef)pkcs1KeyData,
470
+ (__bridge CFDictionaryRef)attributes,
471
+ &error);
472
+ if (error != NULL) {
473
+ CFRelease(error);
474
+ error = NULL;
475
+ }
476
+ if (publicKey == NULL && rawKeyData.length > 0) {
477
+ publicKey = SecKeyCreateWithData((__bridge CFDataRef)rawKeyData,
478
+ (__bridge CFDictionaryRef)attributes,
479
+ &error);
480
+ if (error != NULL) {
481
+ CFRelease(error);
482
+ error = NULL;
483
+ }
484
+ }
485
+ if (publicKey == NULL) {
486
+ return nil;
487
+ }
488
+
489
+ NSData *plainData = [plainText dataUsingEncoding:NSUTF8StringEncoding];
490
+ size_t blockSize = SecKeyGetBlockSize(publicKey);
491
+ size_t maxChunkSize = blockSize > 11 ? (blockSize - 11) : plainData.length;
492
+ if (maxChunkSize == 0) {
493
+ CFRelease(publicKey);
494
+ return nil;
495
+ }
496
+
497
+ NSMutableData *encryptedTotal = [NSMutableData data];
498
+ NSUInteger offset = 0;
499
+ while (offset < plainData.length) {
500
+ NSUInteger chunkLen = MIN((NSUInteger)maxChunkSize, plainData.length - offset);
501
+ NSData *chunk = [plainData subdataWithRange:NSMakeRange(offset, chunkLen)];
502
+ CFDataRef encryptedRef = SecKeyCreateEncryptedData(publicKey,
503
+ kSecKeyAlgorithmRSAEncryptionPKCS1,
504
+ (__bridge CFDataRef)chunk,
505
+ &error);
506
+ if (error != NULL) {
507
+ CFRelease(error);
508
+ error = NULL;
509
+ }
510
+ if (encryptedRef == NULL) {
511
+ CFRelease(publicKey);
512
+ return nil;
513
+ }
514
+ NSData *encryptedChunk = (__bridge_transfer NSData *)encryptedRef;
515
+ [encryptedTotal appendData:encryptedChunk];
516
+ offset += chunkLen;
517
+ }
518
+ CFRelease(publicKey);
519
+ return [encryptedTotal base64EncodedStringWithOptions:0];
520
+ }
521
+
522
+ + (NSData *)gzipCompress:(NSData *)data {
523
+ if (data.length == 0) {
524
+ return data;
525
+ }
526
+ z_stream stream;
527
+ memset(&stream, 0, sizeof(stream));
528
+ stream.next_in = (Bytef *)data.bytes;
529
+ stream.avail_in = (uInt)data.length;
530
+
531
+ if (deflateInit2(&stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, 15 + 16, 8, Z_DEFAULT_STRATEGY) != Z_OK) {
532
+ return nil;
533
+ }
534
+ NSMutableData *compressed = [NSMutableData dataWithLength:16384];
535
+ int status = Z_OK;
536
+ do {
537
+ if (stream.total_out >= compressed.length) {
538
+ [compressed increaseLengthBy:16384];
539
+ }
540
+ stream.next_out = (Bytef *)compressed.mutableBytes + stream.total_out;
541
+ stream.avail_out = (uInt)(compressed.length - stream.total_out);
542
+ status = deflate(&stream, Z_FINISH);
543
+ } while (status == Z_OK);
544
+
545
+ deflateEnd(&stream);
546
+ if (status != Z_STREAM_END) {
547
+ return nil;
548
+ }
549
+ compressed.length = stream.total_out;
550
+ return compressed;
551
+ }
552
+
553
+ + (NSData *)gzipDecompress:(NSData *)data {
554
+ if (data.length == 0) {
555
+ return data;
556
+ }
557
+ z_stream stream;
558
+ memset(&stream, 0, sizeof(stream));
559
+ stream.next_in = (Bytef *)data.bytes;
560
+ stream.avail_in = (uInt)data.length;
561
+
562
+ if (inflateInit2(&stream, 15 + 32) != Z_OK) {
563
+ return nil;
564
+ }
565
+ NSMutableData *decompressed = [NSMutableData dataWithLength:data.length * 2];
566
+ int status = Z_OK;
567
+ while (status == Z_OK) {
568
+ if (stream.total_out >= decompressed.length) {
569
+ [decompressed increaseLengthBy:MAX((NSUInteger)4096, data.length)];
570
+ }
571
+ stream.next_out = (Bytef *)decompressed.mutableBytes + stream.total_out;
572
+ stream.avail_out = (uInt)(decompressed.length - stream.total_out);
573
+ status = inflate(&stream, Z_SYNC_FLUSH);
574
+ }
575
+ if (inflateEnd(&stream) != Z_OK || status != Z_STREAM_END) {
576
+ return nil;
577
+ }
578
+ decompressed.length = stream.total_out;
579
+ return decompressed;
580
+ }
581
+
582
+ + (NSString *)md5Hex:(NSString *)input {
583
+ NSData *data = [input dataUsingEncoding:NSUTF8StringEncoding];
584
+ return [self md5HexForData:data];
585
+ }
586
+
587
+ + (NSString *)md5HexForData:(NSData *)data {
588
+ if (data == nil) {
589
+ return @"";
590
+ }
591
+ unsigned char digest[CC_MD5_DIGEST_LENGTH];
592
+ #pragma clang diagnostic push
593
+ #pragma clang diagnostic ignored "-Wdeprecated-declarations"
594
+ CC_MD5(data.bytes, (CC_LONG)data.length, digest);
595
+ #pragma clang diagnostic pop
596
+ NSMutableString *hex = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH * 2];
597
+ for (int i = 0; i < CC_MD5_DIGEST_LENGTH; i++) {
598
+ [hex appendFormat:@"%02x", digest[i]];
599
+ }
600
+ return hex;
601
+ }
602
+
603
+ + (NSData *)sha1Data:(NSData *)data {
604
+ if (data == nil) {
605
+ return [NSData data];
606
+ }
607
+ unsigned char digest[CC_SHA1_DIGEST_LENGTH];
608
+ CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
609
+ return [NSData dataWithBytes:digest length:CC_SHA1_DIGEST_LENGTH];
610
+ }
611
+
612
+ + (NSString *)sha1Hex:(NSData *)data {
613
+ if (data == nil) {
614
+ return @"";
615
+ }
616
+ unsigned char digest[CC_SHA1_DIGEST_LENGTH];
617
+ CC_SHA1(data.bytes, (CC_LONG)data.length, digest);
618
+ NSMutableString *hex = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
619
+ for (int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++) {
620
+ [hex appendFormat:@"%02x", digest[i]];
621
+ }
622
+ return hex;
623
+ }
624
+
625
+ + (NSString *)sha1HexForString:(NSString *)input {
626
+ NSData *data = [input ?: @"" dataUsingEncoding:NSUTF8StringEncoding];
627
+ return [self sha1Hex:data];
628
+ }
629
+
630
+ + (NSString *)hmacSHA256HexWithKey:(NSString *)key content:(NSString *)content {
631
+ if (content.length == 0 || key.length == 0) {
632
+ return nil;
633
+ }
634
+ const char *keyBytes = [key UTF8String];
635
+ const char *contentBytes = [content UTF8String];
636
+ unsigned char digest[CC_SHA256_DIGEST_LENGTH];
637
+ CCHmac(kCCHmacAlgSHA256, keyBytes, strlen(keyBytes), contentBytes, strlen(contentBytes), digest);
638
+ NSMutableString *hex = [NSMutableString stringWithCapacity:CC_SHA256_DIGEST_LENGTH * 2];
639
+ for (int i = 0; i < CC_SHA256_DIGEST_LENGTH; i++) {
640
+ [hex appendFormat:@"%02x", digest[i]];
641
+ }
642
+ return hex;
643
+ }
644
+
645
+ + (NSString *)hmacSha256Hex:(NSString *)content key:(NSString *)key {
646
+ return [self hmacSHA256HexWithKey:key content:content];
647
+ }
648
+
649
+ @end
@@ -0,0 +1,56 @@
1
+ #import <Foundation/Foundation.h>
2
+
3
+ NS_ASSUME_NONNULL_BEGIN
4
+
5
+ @interface JCORESisEndpoint : NSObject
6
+
7
+ @property (nonatomic, copy) NSString *host;
8
+ @property (nonatomic, assign) uint16_t port;
9
+ @property (nonatomic, assign) BOOL useSSL;
10
+
11
+ + (nullable instancetype)endpointFromString:(NSString *)addressString useSSL:(BOOL)useSSL;
12
+ - (NSString *)addressString;
13
+
14
+ @end
15
+
16
+ @interface JCORESisResolver : NSObject
17
+
18
+ + (instancetype)shared;
19
+
20
+ @property (nonatomic, copy, nullable) NSString *customSisHost;
21
+ @property (nonatomic, assign) uint16_t customSisPort;
22
+
23
+ - (void)setCustomConnectHost:(nullable NSString *)host
24
+ port:(uint16_t)port
25
+ useSSL:(BOOL)useSSL;
26
+ - (void)setCustomConnectAddresses:(nullable NSArray<NSString *> *)addresses;
27
+ - (void)clearCustomConnectEndpoint;
28
+
29
+ - (NSDictionary *)buildSisRequestPayload;
30
+
31
+ + (nullable NSData *)assembleUdpSisPacketWithPayload:(NSDictionary *)payload
32
+ magic:(char)magic
33
+ seed:(uint32_t)seed;
34
+
35
+ + (nullable NSDictionary *)parseUdpSisPacket:(NSData *)packetData;
36
+
37
+ + (nullable NSData *)encryptHttpSisPayload:(NSDictionary *)payload
38
+ aesKey:(NSString *)aesKey
39
+ outAuthHeader:(NSString *_Nullable *_Nullable)outAuthHeader;
40
+
41
+ + (nullable NSDictionary *)decryptHttpSisResponse:(NSData *)responseData
42
+ aesKey:(NSString *)aesKey;
43
+
44
+ - (NSArray<JCORESisEndpoint *> *)parseSisResponseDictionary:(NSDictionary *)dict;
45
+ - (NSArray<JCORESisEndpoint *> *)defaultFallbackEndpoints;
46
+
47
+ - (void)resolveUdpSisWithHost:(NSString *)host
48
+ port:(uint16_t)port
49
+ timeout:(NSTimeInterval)timeout
50
+ completion:(void (^)(NSArray<JCORESisEndpoint *> *endpoints))completion;
51
+
52
+ - (void)resolveEndpointsWithCompletion:(void (^)(NSArray<JCORESisEndpoint *> *endpoints))completion;
53
+
54
+ @end
55
+
56
+ NS_ASSUME_NONNULL_END