react-native-quick-crypto 0.5.0 → 0.6.1

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.
@@ -1,36 +1,30 @@
1
+ project(react-native-quick-crypto)
1
2
  cmake_minimum_required(VERSION 3.9.0)
2
3
 
3
- set (PACKAGE_NAME "react-native-quick-crypto")
4
- set (BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
5
- file (GLOB LIBFBJNI_INCLUDES "${BUILD_DIR}/fbjni-*-headers.jar/")
6
- file (GLOB LIBRN_SO "${BUILD_DIR}/react-native-0*/jni/${ANDROID_ABI}")
7
- set (CMAKE_CXX_STANDARD 17)
4
+ set(PACKAGE_NAME "reactnativequickcrypto")
5
+ set(BUILD_DIR ${CMAKE_SOURCE_DIR}/build)
6
+ set(CMAKE_CXX_STANDARD 17)
7
+
8
8
  # TODO(osp) remove before release
9
- #set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
10
- #set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
9
+ # set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -g")
10
+ # set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -g")
11
+
12
+ # Consume shared libraries and headers from prefabs
13
+ find_package(fbjni REQUIRED CONFIG)
14
+ find_package(ReactAndroid REQUIRED CONFIG)
11
15
 
12
16
  include_directories(
13
17
  ../cpp
14
- "${NODE_MODULES_DIR}/react-native/React"
15
- "${NODE_MODULES_DIR}/react-native/React/Base"
16
- "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni"
17
- "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/jni"
18
+ "${NODE_MODULES_DIR}/react-native/ReactAndroid/src/main/jni/react/turbomodule"
18
19
  "${NODE_MODULES_DIR}/react-native/ReactCommon"
19
20
  "${NODE_MODULES_DIR}/react-native/ReactCommon/callinvoker"
20
21
  "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi"
21
22
  "${NODE_MODULES_DIR}/react-native/ReactCommon/turbomodule/core"
22
23
  "${NODE_MODULES_DIR}/react-native/ReactCommon/react/nativemodule/core"
23
- "${LIBFBJNI_INCLUDES}"
24
24
  )
25
25
 
26
- if(${REACT_NATIVE_VERSION} LESS 66)
27
- set (
28
- INCLUDE_JSI_CPP
29
- "${NODE_MODULES_DIR}/react-native/ReactCommon/jsi/jsi/jsi.cpp"
30
- )
31
- endif()
32
-
33
- add_library(reactnativequickcrypto # <-- Library name
26
+ add_library(
27
+ ${PACKAGE_NAME}
34
28
  SHARED
35
29
  "src/main/cpp/cpp-adapter.cpp"
36
30
  "../cpp/MGLQuickCryptoHostObject.cpp"
@@ -56,70 +50,33 @@ add_library(reactnativequickcrypto # <-- Library name
56
50
  "../cpp/Sig/MGLSignInstaller.cpp"
57
51
  "../cpp/Sig/MGLVerifyInstaller.cpp"
58
52
  "../cpp/Sig/MGLSignHostObjects.cpp"
59
- ${INCLUDE_JSI_CPP} # only on older RN versions
60
53
  )
61
54
 
62
55
  set_target_properties(
63
- reactnativequickcrypto PROPERTIES
56
+ ${PACKAGE_NAME}
57
+ PROPERTIES
64
58
  CXX_STANDARD 17
65
59
  CXX_EXTENSIONS OFF
66
60
  POSITION_INDEPENDENT_CODE ON
67
61
  )
68
62
 
69
- file (GLOB LIBRN_DIR "${PREBUILT_DIR}/${ANDROID_ABI}")
63
+ file(GLOB LIBRN_DIR "${BUILD_DIR}/react-native-0*/jni/${ANDROID_ABI}")
70
64
 
71
65
  find_library(
72
66
  log-lib
73
67
  log
74
68
  )
75
- find_library(
76
- REACT_NATIVE_JNI_LIB
77
- reactnativejni
78
- PATHS ${LIBRN_DIR}
79
- NO_CMAKE_FIND_ROOT_PATH
80
- )
81
- find_library(
82
- FBJNI_LIB
83
- fbjni
84
- PATHS ${LIBRN_SO}
85
- NO_CMAKE_FIND_ROOT_PATH
86
- )
87
- find_library(
88
- TURBOMODULES_LIB
89
- turbomodulejsijni
90
- PATHS ${LIBRN_DIR}
91
- NO_CMAKE_FIND_ROOT_PATH
92
- )
93
- find_library(
94
- REACT_LIB
95
- react_nativemodule_core
96
- PATHS ${LIBRN_DIR}
97
- NO_CMAKE_FIND_ROOT_PATH
98
- )
99
-
100
- if(${REACT_NATIVE_VERSION} LESS 66)
101
- # JSI lib didn't exist on RN 0.65 and before. Simply omit it.
102
- set (JSI_LIB "")
103
- else()
104
- # RN 0.66 distributes libjsi.so, can be used instead of compiling jsi.cpp manually.
105
- find_library(
106
- JSI_LIB
107
- jsi
108
- PATHS ${LIBRN_DIR}
109
- NO_CMAKE_FIND_ROOT_PATH
110
- )
111
- endif()
112
69
 
113
70
  find_package(openssl REQUIRED CONFIG)
114
71
 
115
72
  target_link_libraries(
116
- reactnativequickcrypto
117
- ${TURBOMODULES_LIB}
118
- ${FBJNI_LIB}
73
+ ${PACKAGE_NAME}
74
+ ReactAndroid::turbomodulejsijni
75
+ fbjni::fbjni
119
76
  ${log-lib}
120
- ${JSI_LIB}
121
- ${REACT_NATIVE_JNI_LIB}
122
- ${REACT_LIB}
77
+ ReactAndroid::jsi
78
+ ReactAndroid::reactnativejni
79
+ ReactAndroid::react_nativemodule_core
123
80
  android
124
81
  openssl::crypto
125
82
  )
@@ -1,5 +1,3 @@
1
- import groovy.json.JsonSlurper
2
- import org.apache.tools.ant.filters.ReplaceTokens
3
1
  import java.nio.file.Paths
4
2
 
5
3
  static def findNodeModules(baseDir) {
@@ -31,12 +29,10 @@ buildscript {
31
29
 
32
30
  dependencies {
33
31
  classpath 'com.android.tools.build:gradle:4.2.2'
34
- classpath 'de.undercouch:gradle-download-task:4.1.2'
35
32
  }
36
33
  }
37
34
 
38
35
  apply plugin: 'com.android.library'
39
- apply plugin: 'de.undercouch.download'
40
36
 
41
37
  def getExtOrDefault(name) {
42
38
  return rootProject.ext.has(name) ? rootProject.ext.get(name) : project.properties['QuickCrypto_' + name]
@@ -51,43 +47,18 @@ def reactNativeArchitectures() {
51
47
  return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"]
52
48
  }
53
49
 
54
- def sourceBuild = false
55
- def defaultDir = null
56
- def androidSourcesDir = null
57
- def androidSourcesName = 'React Native sources'
58
-
59
- if (rootProject.ext.has('reactNativeAndroidRoot')) {
60
- defaultDir = rootProject.ext.get('reactNativeAndroidRoot')
61
- androidSourcesDir = defaultDir.parentFile.toString()
62
- } else if (findProject(':ReactAndroid') != null) {
63
- sourceBuild = true
64
- defaultDir = project(':ReactAndroid').projectDir
65
- androidSourcesDir = defaultDir.parentFile.toString()
66
- } else {
67
- defaultDir = file("$nodeModules/react-native/android")
68
- androidSourcesDir = defaultDir.parentFile.toString()
69
- }
70
-
71
- if (!defaultDir.exists()) {
72
- throw new GradleException(
73
- "${project.name}: React Native android directory (node_modules/react-native/android) does not exist! Resolved node_modules to: ${nodeModules}"
74
- )
75
- }
76
-
77
- def prebuiltDir = sourceBuild
78
- ? "$nodeModules/react-native/ReactAndroid/src/main/jni/prebuilt/lib"
79
- : "$buildDir/react-native-0*/jni"
80
-
81
-
82
50
  def reactProperties = new Properties()
83
51
  file("$nodeModules/react-native/ReactAndroid/gradle.properties").withInputStream { reactProperties.load(it) }
84
- def REACT_NATIVE_VERSION = reactProperties.getProperty("VERSION_NAME").split("\\.")[1].toInteger()
85
52
 
86
53
  android {
87
54
  compileSdkVersion getExtOrIntegerDefault('compileSdkVersion')
88
55
  buildToolsVersion getExtOrDefault('buildToolsVersion')
89
56
  ndkVersion getExtOrDefault('ndkVersion')
90
57
 
58
+ buildFeatures {
59
+ prefab true
60
+ }
61
+
91
62
  defaultConfig {
92
63
  minSdkVersion 21
93
64
  targetSdkVersion getExtOrIntegerDefault('targetSdkVersion')
@@ -95,11 +66,9 @@ android {
95
66
  versionName "1.0"
96
67
  externalNativeBuild {
97
68
  cmake {
98
- cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID"
69
+ cppFlags "-fexceptions", "-frtti", "-std=c++1y", "-DONANDROID", "-DANDROID"
99
70
  arguments '-DANDROID_STL=c++_shared',
100
- "-DREACT_NATIVE_VERSION=${REACT_NATIVE_VERSION}",
101
- "-DNODE_MODULES_DIR=${nodeModules}",
102
- "-DPREBUILT_DIR=${prebuiltDir}"
71
+ "-DNODE_MODULES_DIR=${nodeModules}"
103
72
  }
104
73
  }
105
74
  ndk {
@@ -107,10 +76,6 @@ android {
107
76
  }
108
77
  }
109
78
 
110
- dexOptions {
111
- javaMaxHeapSize "4g"
112
- }
113
-
114
79
  externalNativeBuild {
115
80
  cmake {
116
81
  path "CMakeLists.txt"
@@ -118,7 +83,16 @@ android {
118
83
  }
119
84
 
120
85
  packagingOptions {
121
- excludes = ["**/libc++_shared.so", "**/libfbjni.so", "**/libreactnativejni.so", "**/libjsi.so", "**/MANIFEST.MF", ""]
86
+ excludes = [
87
+ "**/libc++_shared.so",
88
+ "**/libfbjni.so",
89
+ "**/libreactnativejni.so",
90
+ "**/libjsi.so",
91
+ "**/libreact_nativemodule_core.so",
92
+ "**/libturbomodulejsijni.so",
93
+ "**/MANIFEST.MF",
94
+ ""
95
+ ]
122
96
  doNotStrip '**/*.so'
123
97
  }
124
98
 
@@ -145,11 +119,6 @@ android {
145
119
  targetCompatibility JavaVersion.VERSION_1_8
146
120
  }
147
121
 
148
- configurations {
149
- extractHeaders
150
- extractJNI
151
- }
152
-
153
122
  buildFeatures {
154
123
  prefab true
155
124
  }
@@ -158,225 +127,12 @@ android {
158
127
  repositories {
159
128
  mavenCentral()
160
129
  google()
161
-
162
- maven {
163
- url defaultDir.toString()
164
- name androidSourcesName
165
- }
166
130
  }
167
131
 
168
132
  dependencies {
169
133
  // https://mvnrepository.com/artifact/com.android.ndk.thirdparty/openssl
170
134
  implementation 'com.android.ndk.thirdparty:openssl:1.1.1l-beta-1'
171
- // noinspection GradleDynamicVersion
172
- implementation 'com.facebook.react:react-native:+'
173
-
174
- //noinspection GradleDynamicVersion
175
- extractHeaders("com.facebook.fbjni:fbjni:+:headers")
176
- //noinspection GradleDynamicVersion
177
- extractJNI("com.facebook.fbjni:fbjni:+")
178
-
179
- if (!sourceBuild) {
180
- def buildType = "debug"
181
- tasks.all({ task ->
182
- if (task.name == "buildCMakeRelease") {
183
- buildType = "release"
184
- }
185
- })
186
- def rnAarMatcher = "**/react-native/**/*${buildType}.aar"
187
- if (REACT_NATIVE_VERSION < 69) {
188
- rnAarMatcher = "**/**/*.aar"
189
- }
190
- def rnAAR = fileTree("${defaultDir.toString()}").matching({ it.include rnAarMatcher }).singleFile
191
- extractJNI(files(rnAAR))
192
- }
193
- }
194
-
195
- // third-party-ndk deps headers
196
- // mostly a copy of https://github.com/software-mansion/react-native-reanimated/blob/master/android/build.gradle#L115
197
-
198
- def downloadsDir = new File("$buildDir/downloads")
199
- def thirdPartyNdkDir = new File("$buildDir/third-party-ndk")
200
- def thirdPartyVersionsFile = new File("${androidSourcesDir.toString()}/ReactAndroid/gradle.properties")
201
- def thirdPartyVersions = new Properties()
202
- thirdPartyVersions.load(new FileInputStream(thirdPartyVersionsFile))
203
-
204
- def BOOST_VERSION = thirdPartyVersions["BOOST_VERSION"]
205
- def boost_file = new File(downloadsDir, "boost_${BOOST_VERSION}.tar.gz")
206
- def DOUBLE_CONVERSION_VERSION = thirdPartyVersions["DOUBLE_CONVERSION_VERSION"]
207
- def double_conversion_file = new File(downloadsDir, "double-conversion-${DOUBLE_CONVERSION_VERSION}.tar.gz")
208
- def FOLLY_VERSION = thirdPartyVersions["FOLLY_VERSION"]
209
- def folly_file = new File(downloadsDir, "folly-${FOLLY_VERSION}.tar.gz")
210
- def GLOG_VERSION = thirdPartyVersions["GLOG_VERSION"]
211
- def glog_file = new File(downloadsDir, "glog-${GLOG_VERSION}.tar.gz")
212
-
213
- task createNativeDepsDirectories {
214
- doLast {
215
- downloadsDir.mkdirs()
216
- thirdPartyNdkDir.mkdirs()
217
- }
218
- }
219
-
220
- task downloadBoost(dependsOn: createNativeDepsDirectories, type: Download) {
221
- def transformedVersion = BOOST_VERSION.replace("_", ".")
222
- def srcUrl = "https://boostorg.jfrog.io/artifactory/main/release/${transformedVersion}/source/boost_${BOOST_VERSION}.tar.gz"
223
- if (REACT_NATIVE_VERSION < 69) {
224
- srcUrl = "https://github.com/react-native-community/boost-for-react-native/releases/download/v${transformedVersion}-0/boost_${BOOST_VERSION}.tar.gz"
225
- }
226
- src(srcUrl)
227
- onlyIfNewer(true)
228
- overwrite(false)
229
- dest(boost_file)
230
- }
231
-
232
- task prepareBoost(dependsOn: downloadBoost, type: Copy) {
233
- from(tarTree(resources.gzip(downloadBoost.dest)))
234
- from("src/main/jni/third-party/boost/Android.mk")
235
- include("Android.mk", "boost_${BOOST_VERSION}/boost/**/*.hpp", "boost/boost/**/*.hpp")
236
- includeEmptyDirs = false
237
- into("$thirdPartyNdkDir") // /boost_X_XX_X
238
- doLast {
239
- file("$thirdPartyNdkDir/boost_${BOOST_VERSION}").renameTo("$thirdPartyNdkDir/boost")
240
- }
241
- }
242
-
243
- task downloadDoubleConversion(dependsOn: createNativeDepsDirectories, type: Download) {
244
- src("https://github.com/google/double-conversion/archive/v${DOUBLE_CONVERSION_VERSION}.tar.gz")
245
- onlyIfNewer(true)
246
- overwrite(false)
247
- dest(double_conversion_file)
248
- }
249
135
 
250
- task prepareDoubleConversion(dependsOn: downloadDoubleConversion, type: Copy) {
251
- from(tarTree(downloadDoubleConversion.dest))
252
- from("src/main/jni/third-party/double-conversion/Android.mk")
253
- include("double-conversion-${DOUBLE_CONVERSION_VERSION}/src/**/*", "Android.mk")
254
- filesMatching("*/src/**/*", { fname -> fname.path = "double-conversion/${fname.name}" })
255
- includeEmptyDirs = false
256
- into("$thirdPartyNdkDir/double-conversion")
257
- }
258
-
259
- task downloadFolly(dependsOn: createNativeDepsDirectories, type: Download) {
260
- src("https://github.com/facebook/folly/archive/v${FOLLY_VERSION}.tar.gz")
261
- onlyIfNewer(true)
262
- overwrite(false)
263
- dest(folly_file)
264
- }
265
-
266
- task prepareFolly(dependsOn: downloadFolly, type: Copy) {
267
- from(tarTree(downloadFolly.dest))
268
- from("src/main/jni/third-party/folly/Android.mk")
269
- include("folly-${FOLLY_VERSION}/folly/**/*", "Android.mk")
270
- eachFile { fname -> fname.path = (fname.path - "folly-${FOLLY_VERSION}/") }
271
- includeEmptyDirs = false
272
- into("$thirdPartyNdkDir/folly")
273
- }
274
-
275
- task downloadGlog(dependsOn: createNativeDepsDirectories, type: Download) {
276
- src("https://github.com/google/glog/archive/v${GLOG_VERSION}.tar.gz")
277
- onlyIfNewer(true)
278
- overwrite(false)
279
- dest(glog_file)
280
- }
281
-
282
- task prepareGlog(dependsOn: downloadGlog, type: Copy) {
283
- from(tarTree(downloadGlog.dest))
284
- from("src/main/jni/third-party/glog/")
285
- include("glog-${GLOG_VERSION}/src/**/*", "Android.mk", "config.h")
286
- includeEmptyDirs = false
287
- filesMatching("**/*.h.in") {
288
- filter(ReplaceTokens, tokens: [
289
- ac_cv_have_unistd_h : "1",
290
- ac_cv_have_stdint_h : "1",
291
- ac_cv_have_systypes_h : "1",
292
- ac_cv_have_inttypes_h : "1",
293
- ac_cv_have_libgflags : "0",
294
- ac_google_start_namespace : "namespace google {",
295
- ac_cv_have_uint16_t : "1",
296
- ac_cv_have_u_int16_t : "1",
297
- ac_cv_have___uint16 : "0",
298
- ac_google_end_namespace : "}",
299
- ac_cv_have___builtin_expect : "1",
300
- ac_google_namespace : "google",
301
- ac_cv___attribute___noinline : "__attribute__ ((noinline))",
302
- ac_cv___attribute___noreturn : "__attribute__ ((noreturn))",
303
- ac_cv___attribute___printf_4_5: "__attribute__((__format__ (__printf__, 4, 5)))"
304
- ])
305
- it.path = (it.name - ".in")
306
- }
307
- into("$thirdPartyNdkDir/glog")
308
-
309
- doLast {
310
- copy {
311
- from(fileTree(dir: "$thirdPartyNdkDir/glog", includes: ["stl_logging.h", "logging.h", "raw_logging.h", "vlog_is_on.h", "**/src/glog/log_severity.h"]).files)
312
- includeEmptyDirs = false
313
- into("$thirdPartyNdkDir/glog/exported/glog")
314
- }
315
- }
316
- }
317
-
318
- task prepareThirdPartyNdkHeaders {
319
- if (!boost_file.exists()) {
320
- dependsOn(prepareBoost)
321
- }
322
- if (!double_conversion_file.exists()) {
323
- dependsOn(prepareDoubleConversion)
324
- }
325
- if (!folly_file.exists()) {
326
- dependsOn(prepareFolly)
327
- }
328
- if (!glog_file.exists()) {
329
- dependsOn(prepareGlog)
330
- }
331
- }
332
-
333
- prepareThirdPartyNdkHeaders.mustRunAfter createNativeDepsDirectories
334
-
335
- task extractAARHeaders {
336
- doLast {
337
- configurations.extractHeaders.files.each {
338
- def file = it.absoluteFile
339
- copy {
340
- from zipTree(file)
341
- into "$buildDir/$file.name"
342
- include "**/*.h"
343
- }
344
- }
345
- }
346
- }
347
- extractAARHeaders.mustRunAfter prepareThirdPartyNdkHeaders
348
-
349
- task extractJNIFiles {
350
- doLast {
351
- configurations.extractJNI.files.each {
352
- def file = it.absoluteFile
353
-
354
- copy {
355
- from zipTree(file)
356
- into "$buildDir/$file.name"
357
- include "jni/**/*"
358
- }
359
- }
360
- }
361
- }
362
- extractJNIFiles.mustRunAfter extractAARHeaders
363
-
364
- def nativeBuildDependsOn(dependsOnTask, variant) {
365
- def buildTasks = tasks.findAll({ task ->
366
- !task.name.contains("Clean") && (task.name.contains("externalNative") || task.name.contains("CMake")) })
367
- if (variant != null) {
368
- buildTasks = buildTasks.findAll({ task -> task.name.contains(variant) })
369
- }
370
- buildTasks.forEach { task -> task.dependsOn(dependsOnTask) }
371
- }
372
-
373
- afterEvaluate {
374
- if (sourceBuild) {
375
- nativeBuildDependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck", "Debug")
376
- nativeBuildDependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck", "Rel")
377
- } else {
378
- nativeBuildDependsOn(extractAARHeaders, null)
379
- nativeBuildDependsOn(extractJNIFiles, null)
380
- nativeBuildDependsOn(prepareThirdPartyNdkHeaders, null)
381
- }
136
+ implementation "com.facebook.react:react-android:"
137
+ implementation "com.facebook.react:hermes-android:"
382
138
  }
@@ -591,7 +591,6 @@ function generateKeyPair(type, options, callback) {
591
591
  }
592
592
 
593
593
  function generateKeyPairSync(type, options) {
594
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
595
594
  const [_, publicKey, privateKey] = internalGenerateKeyPair(false, type, options, undefined);
596
595
  return {
597
596
  publicKey,
@@ -1 +1 @@
1
- {"version":3,"sources":["Cipher.ts"],"names":["global","process","nextTick","setImmediate","createInternalCipher","NativeQuickCrypto","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","StringDecoder","CipherCommon","Stream","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","SBuffer","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","Buffer","constants","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","kEmptyObject","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","RSAKeyVariant","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream-browserify';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
1
+ {"version":3,"sources":["Cipher.ts"],"names":["global","process","nextTick","setImmediate","createInternalCipher","NativeQuickCrypto","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","StringDecoder","CipherCommon","Stream","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","SBuffer","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","Buffer","constants","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","kEmptyObject","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","RSAKeyVariant","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream-browserify';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Cipher.ts"],"names":["RSAKeyVariant"],"mappings":";;;;;;AAGA;AACA;IACYA,a;;;WAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,6BAAAA,a","sourcesContent":["import type { BinaryLike } from 'src/Utils';\nimport type { Buffer } from '@craftzdog/react-native-buffer';\n\n// TODO(osp) on node this is defined on the native side\n// Need to do the same so that values are always in sync\nexport enum RSAKeyVariant {\n kKeyVariantRSA_SSA_PKCS1_v1_5,\n kKeyVariantRSA_PSS,\n kKeyVariantRSA_OAEP,\n}\n\nexport type InternalCipher = {\n update: (data: BinaryLike | ArrayBufferView) => ArrayBuffer;\n final: () => ArrayBuffer;\n copy: () => void;\n setAAD: (args: {\n data: BinaryLike;\n plaintextLength?: number;\n }) => InternalCipher;\n setAutoPadding: (autoPad: boolean) => boolean;\n setAuthTag: (tag: ArrayBuffer) => boolean;\n};\n\nexport type CreateCipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type CreateDecipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type PublicEncryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\nexport type PrivateDecryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\n\nexport type GenerateKeyPairMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => Promise<[error: unknown, publicBuffer: any, privateBuffer: any]>;\n\nexport type GenerateKeyPairSyncMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => [error: unknown, publicBuffer: any, privateBuffer: any];\n"]}
1
+ {"version":3,"sources":["Cipher.ts"],"names":["RSAKeyVariant"],"mappings":";;;;;;AAGA;AACA;IACYA,a;;;WAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,6BAAAA,a","sourcesContent":["import type { BinaryLike } from '../Utils';\nimport type { Buffer } from '@craftzdog/react-native-buffer';\n\n// TODO(osp) on node this is defined on the native side\n// Need to do the same so that values are always in sync\nexport enum RSAKeyVariant {\n kKeyVariantRSA_SSA_PKCS1_v1_5,\n kKeyVariantRSA_PSS,\n kKeyVariantRSA_OAEP,\n}\n\nexport type InternalCipher = {\n update: (data: BinaryLike | ArrayBufferView) => ArrayBuffer;\n final: () => ArrayBuffer;\n copy: () => void;\n setAAD: (args: {\n data: BinaryLike;\n plaintextLength?: number;\n }) => InternalCipher;\n setAutoPadding: (autoPad: boolean) => boolean;\n setAuthTag: (tag: ArrayBuffer) => boolean;\n};\n\nexport type CreateCipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type CreateDecipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type PublicEncryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\nexport type PrivateDecryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\n\nexport type GenerateKeyPairMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => Promise<[error: unknown, publicBuffer: any, privateBuffer: any]>;\n\nexport type GenerateKeyPairSyncMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => [error: unknown, publicBuffer: any, privateBuffer: any];\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["random.ts"],"names":["random","NativeQuickCrypto","randomFill","buffer","Error","callback","offset","size","byteLength","Buffer","isBuffer","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data","byteToHex","i","toString","slice","randomUUID","toLowerCase"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(Buffer.isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\n// Based on https://github.com/uuidjs/uuid/blob/main/src/v4.js\nexport function randomUUID() {\n const size = 16;\n const buffer = new Buffer(size)\n randomFillSync(buffer, 0, size);\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n buffer[6] = (buffer[6] & 0x0f) | 0x40;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n\n return (\n byteToHex[buffer[0]] +\n byteToHex[buffer[1]] +\n byteToHex[buffer[2]] +\n byteToHex[buffer[3]] +\n '-' +\n byteToHex[buffer[4]] +\n byteToHex[buffer[5]] +\n '-' +\n byteToHex[buffer[6]] +\n byteToHex[buffer[7]] +\n '-' +\n byteToHex[buffer[8]] +\n byteToHex[buffer[9]] +\n '-' +\n byteToHex[buffer[10]] +\n byteToHex[buffer[11]] +\n byteToHex[buffer[12]] +\n byteToHex[buffer[13]] +\n byteToHex[buffer[14]] +\n byteToHex[buffer[15]]\n ).toLowerCase();\n}\n\n"]}
1
+ {"version":3,"sources":["random.ts"],"names":["random","NativeQuickCrypto","randomFill","buffer","Error","callback","offset","size","byteLength","Buffer","isBuffer","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data","byteToHex","i","toString","slice","randomUUID","toLowerCase"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(Buffer.isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\n// Based on https://github.com/uuidjs/uuid/blob/main/src/v4.js\nexport function randomUUID() {\n const size = 16;\n const buffer = new Buffer(size);\n randomFillSync(buffer, 0, size);\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n buffer[6] = (buffer[6] & 0x0f) | 0x40;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n\n return (\n byteToHex[buffer[0]] +\n byteToHex[buffer[1]] +\n byteToHex[buffer[2]] +\n byteToHex[buffer[3]] +\n '-' +\n byteToHex[buffer[4]] +\n byteToHex[buffer[5]] +\n '-' +\n byteToHex[buffer[6]] +\n byteToHex[buffer[7]] +\n '-' +\n byteToHex[buffer[8]] +\n byteToHex[buffer[9]] +\n '-' +\n byteToHex[buffer[10]] +\n byteToHex[buffer[11]] +\n byteToHex[buffer[12]] +\n byteToHex[buffer[13]] +\n byteToHex[buffer[14]] +\n byteToHex[buffer[15]]\n ).toLowerCase();\n}\n"]}
@@ -571,7 +571,6 @@ export function generateKeyPair(type, options, callback) {
571
571
  internalGenerateKeyPair(true, type, options, callback);
572
572
  }
573
573
  export function generateKeyPairSync(type, options) {
574
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
575
574
  const [_, publicKey, privateKey] = internalGenerateKeyPair(false, type, options, undefined);
576
575
  return {
577
576
  publicKey,
@@ -1 +1 @@
1
- {"version":3,"sources":["Cipher.ts"],"names":["NativeQuickCrypto","Stream","binaryLikeToArrayBuffer","getDefaultEncoding","kEmptyObject","validateFunction","validateObject","validateString","validateUint32","validateInt32","RSAKeyVariant","StringDecoder","Buffer","SBuffer","constants","parsePrivateKeyEncoding","parsePublicKeyEncoding","preparePrivateKey","preparePublicOrPrivateKey","global","process","nextTick","setImmediate","createInternalCipher","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","CipherCommon","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream-browserify';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
1
+ {"version":3,"sources":["Cipher.ts"],"names":["NativeQuickCrypto","Stream","binaryLikeToArrayBuffer","getDefaultEncoding","kEmptyObject","validateFunction","validateObject","validateString","validateUint32","validateInt32","RSAKeyVariant","StringDecoder","Buffer","SBuffer","constants","parsePrivateKeyEncoding","parsePublicKeyEncoding","preparePrivateKey","preparePublicOrPrivateKey","global","process","nextTick","setImmediate","createInternalCipher","createCipher","createInternalDecipher","createDecipher","_publicEncrypt","publicEncrypt","_publicDecrypt","publicDecrypt","_privateDecrypt","privateDecrypt","getUIntOption","options","key","value","Error","normalizeEncoding","enc","retried","toLowerCase","validateEncoding","data","encoding","normalizedEncoding","length","getDecoder","decoder","CipherCommon","Transform","constructor","cipherType","cipherKey","isCipher","iv","cipherKeyBuffer","authTagLength","args","cipher_type","cipher_key","auth_tag_len","internal","update","inputEncoding","outputEncoding","defaultEncoding","ArrayBuffer","isView","ret","write","from","final","end","_transform","chunk","callback","push","_flush","setAutoPadding","autoPadding","setAAD","buffer","plaintextLength","setAuthTag","tag","Cipher","Decipher","algorithm","password","createDecipheriv","createCipheriv","rsaFunctionFor","method","defaultPadding","keyType","format","type","passphrase","padding","oaepHash","oaepLabel","undefined","rawRes","RSA_PKCS1_OAEP_PADDING","RSA_PKCS1_PADDING","parseKeyEncoding","publicKeyEncoding","privateKeyEncoding","publicFormat","publicType","privateFormat","privateType","cipher","internalGenerateKeyPair","isAsync","modulusLength","publicExponent","generateKeyPair","kKeyVariantRSA_SSA_PKCS1_v1_5","then","err","publicKey","privateKey","catch","generateKeyPairSync","hash","mgf1Hash","hashAlgorithm","mgf1HashAlgorithm","saltLength","kKeyVariantRSA_PSS","_"],"mappings":"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","sourcesContent":["/* eslint-disable no-dupe-class-members */\nimport { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport Stream from 'stream-browserify';\nimport {\n BinaryLike,\n binaryLikeToArrayBuffer,\n CipherEncoding,\n Encoding,\n getDefaultEncoding,\n kEmptyObject,\n validateFunction,\n validateObject,\n validateString,\n validateUint32,\n validateInt32,\n} from './Utils';\nimport { InternalCipher, RSAKeyVariant } from './NativeQuickCrypto/Cipher';\n// TODO(osp) re-enable type specific constructors\n// They are nice to have but not absolutely necessary\n// import type {\n// CipherCCMOptions,\n// CipherCCMTypes,\n// CipherGCMTypes,\n// CipherGCMOptions,\n// // CipherKey,\n// // KeyObject,\n// // TODO(Szymon) This types seem to be missing? Where did you get this definitions from?\n// // CipherOCBTypes,\n// // CipherOCBOptions,\n// } from 'crypto'; // Node crypto typings\nimport { StringDecoder } from 'string_decoder';\nimport { Buffer } from '@craftzdog/react-native-buffer';\nimport { Buffer as SBuffer } from 'safe-buffer';\nimport { constants } from './constants';\nimport {\n parsePrivateKeyEncoding,\n parsePublicKeyEncoding,\n preparePrivateKey,\n preparePublicOrPrivateKey,\n} from './keys';\n\n// make sure that nextTick is there\nglobal.process.nextTick = setImmediate;\n\nconst createInternalCipher = NativeQuickCrypto.createCipher;\nconst createInternalDecipher = NativeQuickCrypto.createDecipher;\nconst _publicEncrypt = NativeQuickCrypto.publicEncrypt;\nconst _publicDecrypt = NativeQuickCrypto.publicDecrypt;\nconst _privateDecrypt = NativeQuickCrypto.privateDecrypt;\n\nfunction getUIntOption(options: Record<string, any>, key: string) {\n let value;\n if (options && (value = options[key]) != null) {\n // >>> Turns any type into a positive integer (also sets the sign bit to 0)\n // eslint-disable-next-line no-bitwise\n if (value >>> 0 !== value) throw new Error(`options.${key}: ${value}`);\n return value;\n }\n return -1;\n}\n\nfunction normalizeEncoding(enc: string) {\n if (!enc) return 'utf8';\n var retried;\n while (true) {\n switch (enc) {\n case 'utf8':\n case 'utf-8':\n return 'utf8';\n case 'ucs2':\n case 'ucs-2':\n case 'utf16le':\n case 'utf-16le':\n return 'utf16le';\n case 'latin1':\n case 'binary':\n return 'latin1';\n case 'base64':\n case 'ascii':\n case 'hex':\n return enc;\n default:\n if (retried) return; // undefined\n enc = ('' + enc).toLowerCase();\n retried = true;\n }\n }\n}\n\nfunction validateEncoding(data: string, encoding: string) {\n const normalizedEncoding = normalizeEncoding(encoding);\n const length = data.length;\n\n if (normalizedEncoding === 'hex' && length % 2 !== 0) {\n throw new Error(`Encoding ${encoding} not valid for data length ${length}`);\n }\n}\n\nfunction getDecoder(decoder?: StringDecoder, encoding?: BufferEncoding) {\n return decoder ?? new StringDecoder(encoding);\n}\n\nclass CipherCommon extends Stream.Transform {\n private internal: InternalCipher;\n private decoder: StringDecoder | undefined;\n\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n isCipher: boolean,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n super(options);\n const cipherKeyBuffer = binaryLikeToArrayBuffer(cipherKey);\n // TODO(osp) This might not be smart, check again after release\n const authTagLength = getUIntOption(options, 'authTagLength');\n const args = {\n cipher_type: cipherType,\n cipher_key: cipherKeyBuffer,\n iv,\n ...options,\n auth_tag_len: authTagLength,\n };\n this.internal = isCipher\n ? createInternalCipher(args)\n : createInternalDecipher(args);\n }\n\n update(\n data: BinaryLike,\n inputEncoding?: CipherEncoding,\n outputEncoding?: CipherEncoding\n ): ArrayBuffer | string {\n const defaultEncoding = getDefaultEncoding();\n inputEncoding = inputEncoding ?? defaultEncoding;\n outputEncoding = outputEncoding ?? defaultEncoding;\n\n if (typeof data === 'string') {\n validateEncoding(data, inputEncoding);\n } else if (!ArrayBuffer.isView(data)) {\n throw new Error('Invalid data argument');\n }\n\n if (typeof data === 'string') {\n // On node this is handled on the native side\n // on our case we need to correctly send the arraybuffer to the jsi side\n inputEncoding = inputEncoding === 'buffer' ? 'utf8' : inputEncoding;\n data = binaryLikeToArrayBuffer(data, inputEncoding);\n } else {\n data = binaryLikeToArrayBuffer(data as any, inputEncoding);\n }\n\n const ret = this.internal.update(data);\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.write(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n final(): ArrayBuffer;\n final(outputEncoding: BufferEncoding | 'buffer'): string;\n final(outputEncoding?: BufferEncoding | 'buffer'): ArrayBuffer | string {\n const ret = this.internal.final();\n\n if (outputEncoding && outputEncoding !== 'buffer') {\n this.decoder = getDecoder(this.decoder, outputEncoding);\n\n return this.decoder!.end(SBuffer.from(ret) as any);\n }\n\n return ret;\n }\n\n _transform(chunk: BinaryLike, encoding: Encoding, callback: () => void) {\n this.push(this.update(chunk, encoding));\n callback();\n }\n\n _flush(callback: () => void) {\n this.push(this.final());\n callback();\n }\n\n public setAutoPadding(autoPadding?: boolean): this {\n this.internal.setAutoPadding(!!autoPadding);\n return this;\n }\n\n public setAAD(\n buffer: Buffer,\n options?: {\n plaintextLength: number;\n }\n ): this {\n this.internal.setAAD({\n data: buffer.buffer,\n plaintextLength: options?.plaintextLength,\n });\n return this;\n }\n\n // protected getAuthTag(): Buffer {\n // return Buffer.from(this.internal.getAuthTag());\n // }\n\n public setAuthTag(tag: Buffer): this {\n this.internal.setAuthTag(tag.buffer);\n return this;\n }\n}\n\nclass Cipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n super(cipherType, cipherKey, true, options, iv);\n }\n}\n\nclass Decipher extends CipherCommon {\n constructor(\n cipherType: string,\n cipherKey: BinaryLike,\n options: Record<string, any> = {},\n iv?: BinaryLike | null\n ) {\n if (iv != null) {\n iv = binaryLikeToArrayBuffer(iv);\n }\n\n super(cipherType, cipherKey, false, options, iv);\n }\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, password, options);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// export function createDecipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Decipher;\n// export function createDecipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): DecipherOCB;\n// export function createDecipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Decipher;\nexport function createDecipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Decipher {\n return new Decipher(algorithm, key, options, iv);\n}\n\n// TODO(osp) This definitions cause typescript errors when using the API\n// commenting them out for now\n// export function createCipher(\n// algorithm: CipherCCMTypes,\n// password: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipher(\n// algorithm: CipherGCMTypes,\n// password: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipher(\n algorithm: string,\n password: BinaryLike,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, password, options);\n}\n\n// TODO(osp) on all the createCipheriv methods, node seems to use a \"KeyObject\" is seems to be a thread safe\n// object that creates keys and what not. Not sure if we should support it.\n// Fow now I replaced all of them to BinaryLike\n// export function createCipheriv(\n// algorithm: CipherCCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherCCMOptions\n// ): Cipher;\n// export function createCipheriv(\n// algorithm: CipherOCBTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options: CipherOCBOptions\n// ): CipherOCB;\n// export function createCipheriv(\n// algorithm: CipherGCMTypes,\n// key: BinaryLike,\n// iv: BinaryLike,\n// options?: CipherGCMOptions\n// ): Cipher;\nexport function createCipheriv(\n algorithm: string,\n key: BinaryLike,\n iv: BinaryLike | null,\n options?: Stream.TransformOptions\n): Cipher {\n return new Cipher(algorithm, key, options, iv);\n}\n\n// RSA Functions\n// Follows closely the model implemented in node\n\n// TODO(osp) types...\nfunction rsaFunctionFor(\n method: (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n ) => Buffer,\n defaultPadding: number,\n keyType: 'public' | 'private'\n) {\n return (\n options: {\n key: any;\n encoding?: string;\n format?: any;\n padding?: any;\n oaepHash?: any;\n oaepLabel?: any;\n passphrase?: string;\n },\n buffer: BinaryLike\n ) => {\n const { format, type, data, passphrase } =\n keyType === 'private'\n ? preparePrivateKey(options)\n : preparePublicOrPrivateKey(options);\n const padding = options.padding || defaultPadding;\n const { oaepHash, encoding } = options;\n let { oaepLabel } = options;\n if (oaepHash !== undefined) validateString(oaepHash, 'key.oaepHash');\n if (oaepLabel !== undefined)\n oaepLabel = binaryLikeToArrayBuffer(oaepLabel, encoding);\n buffer = binaryLikeToArrayBuffer(buffer, encoding);\n\n const rawRes = method(\n data,\n format,\n type,\n passphrase,\n buffer,\n padding,\n oaepHash,\n oaepLabel\n );\n\n return Buffer.from(rawRes);\n };\n}\n\nexport const publicEncrypt = rsaFunctionFor(\n _publicEncrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'public'\n);\nexport const publicDecrypt = rsaFunctionFor(\n _publicDecrypt,\n constants.RSA_PKCS1_PADDING,\n 'public'\n);\n// const privateEncrypt = rsaFunctionFor(_privateEncrypt, constants.RSA_PKCS1_PADDING,\n// 'private');\nexport const privateDecrypt = rsaFunctionFor(\n _privateDecrypt,\n constants.RSA_PKCS1_OAEP_PADDING,\n 'private'\n);\n\n// _ _ __ _____ _\n// | | | |/ / | __ \\ (_)\n// __ _ ___ _ __ ___ _ __ __ _| |_ ___| ' / ___ _ _| |__) |_ _ _ _ __\n// / _` |/ _ \\ '_ \\ / _ \\ '__/ _` | __/ _ \\ < / _ \\ | | | ___/ _` | | '__|\n// | (_| | __/ | | | __/ | | (_| | || __/ . \\ __/ |_| | | | (_| | | |\n// \\__, |\\___|_| |_|\\___|_| \\__,_|\\__\\___|_|\\_\\___|\\__, |_| \\__,_|_|_|\n// __/ | __/ |\n// |___/ |___/\ntype GenerateKeyPairOptions = {\n modulusLength: number; // Key size in bits (RSA, DSA).\n publicExponent?: number; // Public exponent (RSA). Default: 0x10001.\n hashAlgorithm?: string; // Name of the message digest (RSA-PSS).\n mgf1HashAlgorithm?: string; // string Name of the message digest used by MGF1 (RSA-PSS).\n saltLength?: number; // Minimal salt length in bytes (RSA-PSS).\n divisorLength?: number; // Size of q in bits (DSA).\n namedCurve?: string; // Name of the curve to use (EC).\n prime?: Buffer; // The prime parameter (DH).\n primeLength?: number; // Prime length in bits (DH).\n generator?: number; // Custom generator (DH). Default: 2.\n groupName?: string; // Diffie-Hellman group name (DH). See crypto.getDiffieHellman().\n publicKeyEncoding?: any; // See keyObject.export().\n privateKeyEncoding?: any; // See keyObject.export().\n paramEncoding?: string;\n hash?: any;\n mgf1Hash?: any;\n};\ntype GenerateKeyPairCallback = (\n error: unknown | null,\n publicKey?: Buffer,\n privateKey?: Buffer\n) => void;\n\nfunction parseKeyEncoding(\n keyType: string,\n options: GenerateKeyPairOptions = kEmptyObject\n) {\n const { publicKeyEncoding, privateKeyEncoding } = options;\n\n let publicFormat, publicType;\n if (publicKeyEncoding == null) {\n publicFormat = publicType = undefined;\n } else if (typeof publicKeyEncoding === 'object') {\n ({ format: publicFormat, type: publicType } = parsePublicKeyEncoding(\n publicKeyEncoding,\n keyType,\n 'publicKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.publicKeyEncoding',\n publicKeyEncoding\n );\n }\n\n let privateFormat, privateType, cipher, passphrase;\n if (privateKeyEncoding == null) {\n privateFormat = privateType = undefined;\n } else if (typeof privateKeyEncoding === 'object') {\n ({\n format: privateFormat,\n type: privateType,\n cipher,\n passphrase,\n } = parsePrivateKeyEncoding(\n privateKeyEncoding,\n keyType,\n 'privateKeyEncoding'\n ));\n } else {\n throw new Error(\n 'Invalid argument options.privateKeyEncoding',\n publicKeyEncoding\n );\n }\n\n return [\n publicFormat,\n publicType,\n privateFormat,\n privateType,\n cipher,\n passphrase,\n ];\n}\n\nfunction internalGenerateKeyPair(\n isAsync: boolean,\n type: string,\n options: GenerateKeyPairOptions | undefined,\n callback: GenerateKeyPairCallback | undefined\n) {\n // On node a very complex \"job\" chain is created, we are going for a far simpler approach and calling\n // an internal function that basically executes the same byte shuffling on the native side\n const encoding = parseKeyEncoding(type, options);\n\n // if (options !== undefined)\n // validateObject(options, 'options');\n\n switch (type) {\n case 'rsa-pss':\n case 'rsa': {\n validateObject<GenerateKeyPairOptions>(options, 'options');\n const { modulusLength } = options!;\n validateUint32(modulusLength, 'options.modulusLength');\n\n let { publicExponent } = options!;\n if (publicExponent == null) {\n publicExponent = 0x10001;\n } else {\n validateUint32(publicExponent, 'options.publicExponent');\n }\n\n if (type === 'rsa') {\n if (isAsync) {\n NativeQuickCrypto.generateKeyPair(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n )\n .then(([err, publicKey, privateKey]) => {\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n callback?.(err, publicKey, privateKey);\n })\n .catch((err) => {\n callback?.(err, undefined, undefined);\n });\n return;\n } else {\n let [err, publicKey, privateKey] =\n NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_SSA_PKCS1_v1_5,\n modulusLength,\n publicExponent,\n ...encoding\n );\n\n if (typeof publicKey === 'object') {\n publicKey = Buffer.from(publicKey);\n }\n if (typeof privateKey === 'object') {\n privateKey = Buffer.from(privateKey);\n }\n\n return [err, publicKey, privateKey];\n }\n }\n\n const { hash, mgf1Hash, hashAlgorithm, mgf1HashAlgorithm, saltLength } =\n options!;\n\n // // We don't have a process object on RN\n // // const pendingDeprecation = getOptionValue('--pending-deprecation');\n\n if (saltLength !== undefined)\n validateInt32(saltLength, 'options.saltLength', 0);\n if (hashAlgorithm !== undefined)\n validateString(hashAlgorithm, 'options.hashAlgorithm');\n if (mgf1HashAlgorithm !== undefined)\n validateString(mgf1HashAlgorithm, 'options.mgf1HashAlgorithm');\n if (hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.hash\" is deprecated, ' +\n // 'use \"options.hashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(hash, 'options.hash');\n if (hashAlgorithm && hash !== hashAlgorithm) {\n throw new Error(`Invalid Argument options.hash ${hash}`);\n }\n }\n if (mgf1Hash !== undefined) {\n // pendingDeprecation && process.emitWarning(\n // '\"options.mgf1Hash\" is deprecated, ' +\n // 'use \"options.mgf1HashAlgorithm\" instead.',\n // 'DeprecationWarning',\n // 'DEP0154');\n validateString(mgf1Hash, 'options.mgf1Hash');\n if (mgf1HashAlgorithm && mgf1Hash !== mgf1HashAlgorithm) {\n throw new Error(`Invalid Argument options.mgf1Hash ${mgf1Hash}`);\n }\n }\n\n return NativeQuickCrypto.generateKeyPairSync(\n RSAKeyVariant.kKeyVariantRSA_PSS,\n modulusLength,\n publicExponent,\n hashAlgorithm || hash,\n mgf1HashAlgorithm || mgf1Hash,\n saltLength,\n ...encoding\n );\n }\n // case 'dsa': {\n // validateObject(options, 'options');\n // const { modulusLength } = options!;\n // validateUint32(modulusLength, 'options.modulusLength');\n\n // let { divisorLength } = options!;\n // if (divisorLength == null) {\n // divisorLength = -1;\n // } else validateInt32(divisorLength, 'options.divisorLength', 0);\n\n // // return new DsaKeyPairGenJob(\n // // mode,\n // // modulusLength,\n // // divisorLength,\n // // ...encoding);\n // }\n // case 'ec': {\n // validateObject(options, 'options');\n // const { namedCurve } = options!;\n // validateString(namedCurve, 'options.namedCurve');\n // let { paramEncoding } = options!;\n // if (paramEncoding == null || paramEncoding === 'named')\n // paramEncoding = OPENSSL_EC_NAMED_CURVE;\n // else if (paramEncoding === 'explicit')\n // paramEncoding = OPENSSL_EC_EXPLICIT_CURVE;\n // else\n // throw new Error(`Invalid Argument options.paramEncoding ${paramEncoding}`);\n // // throw new ERR_INVALID_ARG_VALUE('options.paramEncoding', paramEncoding);\n\n // // return new EcKeyPairGenJob(mode, namedCurve, paramEncoding, ...encoding);\n // }\n // case 'ed25519':\n // case 'ed448':\n // case 'x25519':\n // case 'x448': {\n // let id;\n // switch (type) {\n // case 'ed25519':\n // id = EVP_PKEY_ED25519;\n // break;\n // case 'ed448':\n // id = EVP_PKEY_ED448;\n // break;\n // case 'x25519':\n // id = EVP_PKEY_X25519;\n // break;\n // case 'x448':\n // id = EVP_PKEY_X448;\n // break;\n // }\n // return new NidKeyPairGenJob(mode, id, ...encoding);\n // }\n // case 'dh': {\n // validateObject(options, 'options');\n // const { group, primeLength, prime, generator } = options;\n // if (group != null) {\n // if (prime != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'prime');\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'primeLength');\n // if (generator != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('group', 'generator');\n\n // validateString(group, 'options.group');\n\n // return new DhKeyPairGenJob(mode, group, ...encoding);\n // }\n\n // if (prime != null) {\n // if (primeLength != null)\n // throw new ERR_INCOMPATIBLE_OPTION_PAIR('prime', 'primeLength');\n\n // validateBuffer(prime, 'options.prime');\n // } else if (primeLength != null) {\n // validateInt32(primeLength, 'options.primeLength', 0);\n // } else {\n // throw new ERR_MISSING_OPTION(\n // 'At least one of the group, prime, or primeLength options'\n // );\n // }\n\n // if (generator != null) {\n // validateInt32(generator, 'options.generator', 0);\n // }\n // return new DhKeyPairGenJob(\n // mode,\n // prime != null ? prime : primeLength,\n // generator == null ? 2 : generator,\n // ...encoding\n // );\n // }\n default:\n // Fall through\n }\n throw new Error(\n `Invalid Argument options: ${type} scheme not supported. Currently not all encryption methods are supported in quick-crypto!`\n );\n}\n\n// TODO(osp) put correct types (e.g. type -> 'rsa', etc..)\nexport function generateKeyPair(\n type: string,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options: GenerateKeyPairOptions,\n callback: GenerateKeyPairCallback\n): void;\nexport function generateKeyPair(\n type: string,\n options?: GenerateKeyPairCallback | GenerateKeyPairOptions,\n callback?: GenerateKeyPairCallback\n) {\n if (typeof options === 'function') {\n callback = options;\n options = undefined;\n }\n\n validateFunction(callback);\n\n internalGenerateKeyPair(true, type, options, callback);\n}\n\nexport function generateKeyPairSync(type: string): {\n publicKey: any;\n privateKey: any;\n};\nexport function generateKeyPairSync(\n type: string,\n options: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any };\nexport function generateKeyPairSync(\n type: string,\n options?: GenerateKeyPairOptions\n): { publicKey: any; privateKey: any } {\n const [_, publicKey, privateKey] = internalGenerateKeyPair(\n false,\n type,\n options,\n undefined\n )!;\n\n return {\n publicKey,\n privateKey,\n };\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["Cipher.ts"],"names":["RSAKeyVariant"],"mappings":"AAGA;AACA;AACA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import type { BinaryLike } from 'src/Utils';\nimport type { Buffer } from '@craftzdog/react-native-buffer';\n\n// TODO(osp) on node this is defined on the native side\n// Need to do the same so that values are always in sync\nexport enum RSAKeyVariant {\n kKeyVariantRSA_SSA_PKCS1_v1_5,\n kKeyVariantRSA_PSS,\n kKeyVariantRSA_OAEP,\n}\n\nexport type InternalCipher = {\n update: (data: BinaryLike | ArrayBufferView) => ArrayBuffer;\n final: () => ArrayBuffer;\n copy: () => void;\n setAAD: (args: {\n data: BinaryLike;\n plaintextLength?: number;\n }) => InternalCipher;\n setAutoPadding: (autoPad: boolean) => boolean;\n setAuthTag: (tag: ArrayBuffer) => boolean;\n};\n\nexport type CreateCipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type CreateDecipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type PublicEncryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\nexport type PrivateDecryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\n\nexport type GenerateKeyPairMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => Promise<[error: unknown, publicBuffer: any, privateBuffer: any]>;\n\nexport type GenerateKeyPairSyncMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => [error: unknown, publicBuffer: any, privateBuffer: any];\n"]}
1
+ {"version":3,"sources":["Cipher.ts"],"names":["RSAKeyVariant"],"mappings":"AAGA;AACA;AACA,WAAYA,aAAZ;;WAAYA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;AAAAA,EAAAA,a,CAAAA,a;GAAAA,a,KAAAA,a","sourcesContent":["import type { BinaryLike } from '../Utils';\nimport type { Buffer } from '@craftzdog/react-native-buffer';\n\n// TODO(osp) on node this is defined on the native side\n// Need to do the same so that values are always in sync\nexport enum RSAKeyVariant {\n kKeyVariantRSA_SSA_PKCS1_v1_5,\n kKeyVariantRSA_PSS,\n kKeyVariantRSA_OAEP,\n}\n\nexport type InternalCipher = {\n update: (data: BinaryLike | ArrayBufferView) => ArrayBuffer;\n final: () => ArrayBuffer;\n copy: () => void;\n setAAD: (args: {\n data: BinaryLike;\n plaintextLength?: number;\n }) => InternalCipher;\n setAutoPadding: (autoPad: boolean) => boolean;\n setAuthTag: (tag: ArrayBuffer) => boolean;\n};\n\nexport type CreateCipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type CreateDecipherMethod = (params: {\n cipher_type: string;\n cipher_key: ArrayBuffer;\n auth_tag_len: number;\n}) => InternalCipher;\n\nexport type PublicEncryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\nexport type PrivateDecryptMethod = (\n data: ArrayBuffer,\n format: number,\n type: any,\n passphrase: any,\n buffer: ArrayBuffer,\n padding: number,\n oaepHash: any,\n oaepLabel: any\n) => Buffer;\n\nexport type GenerateKeyPairMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => Promise<[error: unknown, publicBuffer: any, privateBuffer: any]>;\n\nexport type GenerateKeyPairSyncMethod = (\n keyVariant: RSAKeyVariant,\n modulusLength: number,\n publicExponent: number,\n ...rest: any[]\n) => [error: unknown, publicBuffer: any, privateBuffer: any];\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["random.ts"],"names":["NativeQuickCrypto","Buffer","random","randomFill","buffer","Error","callback","offset","size","byteLength","isBuffer","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data","byteToHex","i","toString","slice","randomUUID","toLowerCase"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(Buffer.isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\n// Based on https://github.com/uuidjs/uuid/blob/main/src/v4.js\nexport function randomUUID() {\n const size = 16;\n const buffer = new Buffer(size)\n randomFillSync(buffer, 0, size);\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n buffer[6] = (buffer[6] & 0x0f) | 0x40;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n\n return (\n byteToHex[buffer[0]] +\n byteToHex[buffer[1]] +\n byteToHex[buffer[2]] +\n byteToHex[buffer[3]] +\n '-' +\n byteToHex[buffer[4]] +\n byteToHex[buffer[5]] +\n '-' +\n byteToHex[buffer[6]] +\n byteToHex[buffer[7]] +\n '-' +\n byteToHex[buffer[8]] +\n byteToHex[buffer[9]] +\n '-' +\n byteToHex[buffer[10]] +\n byteToHex[buffer[11]] +\n byteToHex[buffer[12]] +\n byteToHex[buffer[13]] +\n byteToHex[buffer[14]] +\n byteToHex[buffer[15]]\n ).toLowerCase();\n}\n\n"]}
1
+ {"version":3,"sources":["random.ts"],"names":["NativeQuickCrypto","Buffer","random","randomFill","buffer","Error","callback","offset","size","byteLength","isBuffer","then","e","randomFillSync","randomBytes","buf","undefined","error","rng","pseudoRandomBytes","prng","RAND_MAX","randomCache","randomCacheOffset","length","asyncCacheFillInProgress","asyncCachePendingTasks","randomInt","arg1","arg2","max","min","minNotSpecified","isSync","Number","isSafeInteger","range","randLimit","x","readUIntBE","n","process","nextTick","push","asyncRefillRandomIntCache","err","tasks","errorReceiver","shift","splice","forEach","task","getRandomValues","data","byteToHex","i","toString","slice","randomUUID","toLowerCase"],"mappings":"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","sourcesContent":["import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';\nimport { Buffer } from '@craftzdog/react-native-buffer';\n\nconst random = NativeQuickCrypto.random;\n\ntype TypedArray =\n | Uint8Array\n | Uint8ClampedArray\n | Uint16Array\n | Uint32Array\n | Int8Array\n | Int16Array\n | Int32Array\n | Float32Array\n | Float64Array;\ntype ArrayBufferView = TypedArray | DataView | ArrayBufferLike | Buffer;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill<T extends ArrayBufferView>(\n buffer: T,\n offset: number,\n size: number,\n callback: (err: Error | null, buf: T) => void\n): void;\n\nexport function randomFill(buffer: any, ...rest: any[]): void {\n if (typeof rest[rest.length - 1] !== 'function') {\n throw new Error('No callback provided to randomDill');\n }\n\n const callback = rest[rest.length - 1] as any as (\n err: Error | null,\n buf?: ArrayBuffer\n ) => void;\n\n let offset: number = 0;\n let size: number = buffer.byteLength;\n\n if (typeof rest[2] === 'function') {\n offset = rest[0];\n size = rest[1];\n }\n\n if (typeof rest[1] === 'function') {\n offset = rest[0];\n }\n\n random\n .randomFill(Buffer.isBuffer(buffer) ? buffer.buffer : buffer, offset, size)\n .then(\n () => {\n callback(null, buffer);\n },\n (e: Error) => {\n callback(e);\n }\n );\n}\n\nexport function randomFillSync<T extends ArrayBufferView>(\n buffer: T,\n offset?: number,\n size?: number\n): T;\n\nexport function randomFillSync(buffer: any, offset: number = 0, size?: number) {\n random.randomFillSync(\n buffer.buffer ? buffer.buffer : buffer,\n offset,\n size ?? buffer.byteLength\n );\n return buffer;\n}\n\nexport function randomBytes(size: number): ArrayBuffer;\n\nexport function randomBytes(\n size: number,\n callback: (err: Error | null, buf?: ArrayBuffer) => void\n): void;\n\nexport function randomBytes(\n size: number,\n callback?: (err: Error | null, buf?: ArrayBuffer) => void\n): void | ArrayBuffer {\n const buf = new Buffer(size);\n\n if (callback === undefined) {\n randomFillSync(buf.buffer, 0, size);\n return buf;\n }\n\n randomFill(buf.buffer, 0, size, (error: Error | null) => {\n if (error) {\n callback(error);\n }\n callback(null, buf);\n });\n}\n\nexport const rng = randomBytes;\nexport const pseudoRandomBytes = randomBytes;\nexport const prng = randomBytes;\n\ntype RandomIntCallback = (err: Error | null, value: number) => void;\ntype Task = {\n min: number;\n max: number;\n callback: RandomIntCallback;\n};\n\n// The rest of the file is taken from https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js\n\n// Largest integer we can read from a buffer.\n// e.g.: Buffer.from(\"ff\".repeat(6), \"hex\").readUIntBE(0, 6);\nconst RAND_MAX = 0xffffffffffff;\n\n// Cache random data to use in randomInt. The cache size must be evenly\n// divisible by 6 because each attempt to obtain a random int uses 6 bytes.\nconst randomCache = new Buffer(6 * 1024);\nlet randomCacheOffset = randomCache.length;\nlet asyncCacheFillInProgress = false;\nconst asyncCachePendingTasks: Task[] = [];\n\n// Generates an integer in [min, max) range where min is inclusive and max is\n// exclusive.\n\nexport function randomInt(max: number, callback: RandomIntCallback): void;\nexport function randomInt(max: number): number;\nexport function randomInt(\n min: number,\n max: number,\n callback: RandomIntCallback\n): void;\nexport function randomInt(min: number, max: number): number;\nexport function randomInt(\n arg1: number,\n arg2?: number | RandomIntCallback,\n callback?: RandomIntCallback\n): void | number {\n // Detect optional min syntax\n // randomInt(max)\n // randomInt(max, callback)\n let max: number;\n let min: number;\n const minNotSpecified =\n typeof arg2 === 'undefined' || typeof arg2 === 'function';\n\n if (minNotSpecified) {\n callback = arg2 as any as undefined | RandomIntCallback;\n max = arg1;\n min = 0;\n } else {\n min = arg1;\n max = arg2 as any as number;\n }\n\n const isSync = typeof callback === 'undefined';\n if (!Number.isSafeInteger(min)) {\n // todo throw new ERR_INVALID_ARG_TYPE('min', 'a safe integer', min);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (!Number.isSafeInteger(max)) {\n // todo throw new ERR_INVALID_ARG_TYPE('max', 'a safe integer', max);\n throw 'ERR_INVALID_ARG_TYPE';\n }\n if (max <= min) {\n /* todo throw new ERR_OUT_OF_RANGE(\n 'max',\n `greater than the value of \"min\" (${min})`,\n max\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // First we generate a random int between [0..range)\n const range = max - min;\n\n if (!(range <= RAND_MAX)) {\n /* todo throw new ERR_OUT_OF_RANGE(\n `max${minNotSpecified ? '' : ' - min'}`,\n `<= ${RAND_MAX}`,\n range\n );*/\n throw 'ERR_OUT_OF_RANGE';\n }\n\n // For (x % range) to produce an unbiased value greater than or equal to 0 and\n // less than range, x must be drawn randomly from the set of integers greater\n // than or equal to 0 and less than randLimit.\n const randLimit = RAND_MAX - (RAND_MAX % range);\n\n // If we don't have a callback, or if there is still data in the cache, we can\n // do this synchronously, which is super fast.\n while (isSync || randomCacheOffset < randomCache.length) {\n if (randomCacheOffset === randomCache.length) {\n // This might block the thread for a bit, but we are in sync mode.\n randomFillSync(randomCache);\n randomCacheOffset = 0;\n }\n\n const x = randomCache.readUIntBE(randomCacheOffset, 6);\n randomCacheOffset += 6;\n\n if (x < randLimit) {\n const n = (x % range) + min;\n if (isSync) return n;\n process.nextTick(callback as Function, undefined, n);\n return;\n }\n }\n\n // At this point, we are in async mode with no data in the cache. We cannot\n // simply refill the cache, because another async call to randomInt might\n // already be doing that. Instead, queue this call for when the cache has\n // been refilled.\n if (callback !== undefined) {\n // it is (typescript doesn't know it)\n asyncCachePendingTasks.push({ min, max, callback });\n asyncRefillRandomIntCache();\n }\n}\n\nfunction asyncRefillRandomIntCache() {\n if (asyncCacheFillInProgress) return;\n\n asyncCacheFillInProgress = true;\n randomFill(randomCache, (err) => {\n asyncCacheFillInProgress = false;\n\n const tasks = asyncCachePendingTasks;\n const errorReceiver = err && tasks.shift();\n if (!err) randomCacheOffset = 0;\n\n // Restart all pending tasks. If an error occurred, we only notify a single\n // callback (errorReceiver) about it. This way, every async call to\n // randomInt has a chance of being successful, and it avoids complex\n // exception handling here.\n tasks.splice(0).forEach((task) => {\n randomInt(task.min, task.max, task.callback);\n });\n\n // This is the only call that might throw, and is therefore done at the end.\n if (errorReceiver) errorReceiver.callback(err, 0);\n });\n}\n\n// Really just the Web Crypto API alternative\n// to require('crypto').randomFillSync() with an\n// additional limitation that the input buffer is\n// not allowed to exceed 65536 bytes, and can only\n// be an integer-type TypedArray.\ntype DataType =\n | Int8Array\n | Int16Array\n | Int32Array\n | Uint8Array\n | Uint16Array\n | Uint32Array;\nexport function getRandomValues(data: DataType) {\n if (data.byteLength > 65536) {\n throw new Error('The requested length exceeds 65,536 bytes');\n }\n randomFillSync(data, 0);\n return data;\n}\n\nconst byteToHex: string[] = [];\n\nfor (let i = 0; i < 256; ++i) {\n byteToHex.push((i + 0x100).toString(16).slice(1));\n}\n\n// Based on https://github.com/uuidjs/uuid/blob/main/src/v4.js\nexport function randomUUID() {\n const size = 16;\n const buffer = new Buffer(size);\n randomFillSync(buffer, 0, size);\n\n // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`\n buffer[6] = (buffer[6] & 0x0f) | 0x40;\n buffer[8] = (buffer[8] & 0x3f) | 0x80;\n\n return (\n byteToHex[buffer[0]] +\n byteToHex[buffer[1]] +\n byteToHex[buffer[2]] +\n byteToHex[buffer[3]] +\n '-' +\n byteToHex[buffer[4]] +\n byteToHex[buffer[5]] +\n '-' +\n byteToHex[buffer[6]] +\n byteToHex[buffer[7]] +\n '-' +\n byteToHex[buffer[8]] +\n byteToHex[buffer[9]] +\n '-' +\n byteToHex[buffer[10]] +\n byteToHex[buffer[11]] +\n byteToHex[buffer[12]] +\n byteToHex[buffer[13]] +\n byteToHex[buffer[14]] +\n byteToHex[buffer[15]]\n ).toLowerCase();\n}\n"]}
@@ -1,4 +1,4 @@
1
- import type { BinaryLike } from 'src/Utils';
1
+ import type { BinaryLike } from '../Utils';
2
2
  import type { Buffer } from '@craftzdog/react-native-buffer';
3
3
  export declare enum RSAKeyVariant {
4
4
  kKeyVariantRSA_SSA_PKCS1_v1_5 = 0,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-quick-crypto",
3
- "version": "0.5.0",
3
+ "version": "0.6.1",
4
4
  "description": "A fast implementation of Node's `crypto` module written in C/C++ JSI",
5
5
  "main": "lib/commonjs/index",
6
6
  "module": "lib/module/index",
@@ -50,23 +50,23 @@
50
50
  },
51
51
  "devDependencies": {
52
52
  "@jamesacarr/eslint-formatter-github-actions": "^0.1.0",
53
- "@react-native-community/eslint-config": "^3.0.1",
54
- "@react-native-community/eslint-plugin": "^1.1.0",
53
+ "@react-native-community/eslint-config": "^3.2.0",
54
+ "@react-native-community/eslint-plugin": "^1.3.0",
55
55
  "@release-it/conventional-changelog": "^3.3.0",
56
- "@types/react": "^17.0.21",
57
- "@types/react-native": "^0.65.5",
58
- "@typescript-eslint/eslint-plugin": "^5.28.0",
59
- "eslint": "^8.17.0",
56
+ "@types/react": "^18.0.33",
57
+ "@typescript-eslint/eslint-plugin": "^5.57.1",
58
+ "eslint": "^8.37.0",
59
+ "eslint-plugin-ft-flow": "^2.0.3",
60
60
  "prettier": "^2.4.0",
61
- "react": "^17.0.2",
62
- "react-native": "^0.66.0",
61
+ "react": "^18.2.0",
62
+ "react-native": "^0.71.6",
63
63
  "react-native-builder-bob": "^0.18.1",
64
64
  "release-it": "^14.11.5",
65
- "typescript": "^4.7.4"
65
+ "typescript": "4.8.4"
66
66
  },
67
67
  "peerDependencies": {
68
68
  "react": "*",
69
- "react-native": "*"
69
+ "react-native": ">=0.71.0"
70
70
  },
71
71
  "release-it": {
72
72
  "git": {
@@ -130,6 +130,9 @@
130
130
  "globals": {
131
131
  "BufferEncoding": true,
132
132
  "Buffer": true
133
+ },
134
+ "parserOptions": {
135
+ "requireConfigFile": false
133
136
  }
134
137
  },
135
138
  "eslintIgnore": [
@@ -158,12 +161,12 @@
158
161
  ]
159
162
  },
160
163
  "dependencies": {
161
- "@craftzdog/react-native-buffer": "^6.0.4",
164
+ "@craftzdog/react-native-buffer": "^6.0.5",
162
165
  "@types/node": "^17.0.31",
166
+ "crypto-browserify": "^3.12.0",
163
167
  "events": "^3.3.0",
164
- "react-native-quick-base64": "^2.0.2",
168
+ "react-native-quick-base64": "^2.0.5",
165
169
  "stream-browserify": "^3.0.0",
166
- "string_decoder": "^1.3.0",
167
- "crypto-browserify": "^3.12.0"
170
+ "string_decoder": "^1.3.0"
168
171
  }
169
172
  }
@@ -10,7 +10,7 @@ Pod::Spec.new do |s|
10
10
  s.license = package["license"]
11
11
  s.authors = package["authors"]
12
12
 
13
- s.platforms = { :ios => "11.0", :tvos => "12.0", :osx => "10.14" }
13
+ s.platforms = { :ios => "12.4", :tvos => "12.0", :osx => "10.14" }
14
14
  s.source = { :git => "https://github.com/mrousavy/react-native-quick-crypto.git", :tag => "#{s.version}" }
15
15
 
16
16
  # All source files that should be publicly visible
package/src/Cipher.ts CHANGED
@@ -749,7 +749,6 @@ export function generateKeyPairSync(
749
749
  type: string,
750
750
  options?: GenerateKeyPairOptions
751
751
  ): { publicKey: any; privateKey: any } {
752
- // eslint-disable-next-line @typescript-eslint/no-unused-vars
753
752
  const [_, publicKey, privateKey] = internalGenerateKeyPair(
754
753
  false,
755
754
  type,
@@ -1,4 +1,4 @@
1
- import type { BinaryLike } from 'src/Utils';
1
+ import type { BinaryLike } from '../Utils';
2
2
  import type { Buffer } from '@craftzdog/react-native-buffer';
3
3
 
4
4
  // TODO(osp) on node this is defined on the native side
package/src/random.ts CHANGED
@@ -284,7 +284,7 @@ for (let i = 0; i < 256; ++i) {
284
284
  // Based on https://github.com/uuidjs/uuid/blob/main/src/v4.js
285
285
  export function randomUUID() {
286
286
  const size = 16;
287
- const buffer = new Buffer(size)
287
+ const buffer = new Buffer(size);
288
288
  randomFillSync(buffer, 0, size);
289
289
 
290
290
  // Per 4.4, set bits for version and `clock_seq_hi_and_reserved`
@@ -314,4 +314,3 @@ export function randomUUID() {
314
314
  byteToHex[buffer[15]]
315
315
  ).toLowerCase();
316
316
  }
317
-