Skip to content

Commit 3633bf4

Browse files
authored
fix: add react-native-quick-base64 as peer dependency (#903)
1 parent ab2bf6b commit 3633bf4

7 files changed

Lines changed: 34 additions & 18 deletions

File tree

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ There is a benchmark suite in the Example app in this repo that has benchmarks o
5050
</h3>
5151

5252
```sh
53-
bun add react-native-quick-crypto react-native-nitro-modules
53+
bun add react-native-quick-crypto react-native-nitro-modules react-native-quick-base64
5454
cd ios && pod install
5555
```
5656

docs/content/docs/api/install.mdx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,3 +55,4 @@ const buf = Buffer.from('hello');
5555
1. **`global.Buffer`**: Re-exported from [`@craftzdog/react-native-buffer`](https://github.com/craftzdog/react-native-buffer). You can also import it directly: `import { Buffer } from 'react-native-quick-crypto'`.
5656
2. **`global.crypto`**: Points to `QuickCrypto`.
5757
3. **`global.process`**: Adds `process.nextTick` (mapped to `setImmediate`).
58+
4. **`global.base64ToArrayBuffer` / `global.base64FromArrayBuffer`**: Native base64 encoding/decoding from [`react-native-quick-base64`](https://github.com/craftzdog/react-native-quick-base64).

docs/content/docs/introduction/quick-start.mdx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -98,22 +98,22 @@ Follow these steps to integrate Quick Crypto into your React Native project.
9898
<Tabs items={['npm', 'yarn', 'pnpm', 'bun']}>
9999
<Tab value="npm">
100100
```bash
101-
npm install react-native-quick-crypto react-native-nitro-modules
101+
npm install react-native-quick-crypto react-native-nitro-modules react-native-quick-base64
102102
```
103103
</Tab>
104104
<Tab value="yarn">
105105
```bash
106-
yarn add react-native-quick-crypto react-native-nitro-modules
106+
yarn add react-native-quick-crypto react-native-nitro-modules react-native-quick-base64
107107
```
108108
</Tab>
109109
<Tab value="pnpm">
110110
```bash
111-
pnpm add react-native-quick-crypto react-native-nitro-modules
111+
pnpm add react-native-quick-crypto react-native-nitro-modules react-native-quick-base64
112112
```
113113
</Tab>
114114
<Tab value="bun">
115115
```bash
116-
bun add react-native-quick-crypto react-native-nitro-modules
116+
bun add react-native-quick-crypto react-native-nitro-modules react-native-quick-base64
117117
```
118118
</Tab>
119119
</Tabs>

example/src/hooks/useTestsList.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import '../tests/blake3/blake3_tests';
66
import '../tests/cipher/cipher_tests';
77
import '../tests/cipher/chacha_tests';
88
import '../tests/cipher/xsalsa20_tests';
9+
import '../tests/dh/dh_tests';
10+
import '../tests/ecdh/ecdh_tests';
911
import '../tests/hash/hash_tests';
1012
import '../tests/hmac/hmac_tests';
1113
import '../tests/hkdf/hkdf_tests';
@@ -17,8 +19,6 @@ import '../tests/keys/public_cipher';
1719
import '../tests/keys/sign_verify_streaming';
1820
import '../tests/keys/sign_verify_oneshot';
1921
import '../tests/pbkdf2/pbkdf2_tests';
20-
import '../tests/ecdh/ecdh_tests';
21-
import '../tests/dh/dh_tests';
2222
import '../tests/random/random_tests';
2323
import '../tests/scrypt/scrypt_tests';
2424
import '../tests/subtle/deriveBits';

example/src/tests/subtle/import_export.ts

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
11
import { assert, expect } from 'chai';
2-
import {
3-
fromByteArray,
4-
toByteArray,
5-
trimBase64Padding,
6-
} from 'react-native-quick-base64';
2+
3+
declare global {
4+
// eslint-disable-next-line no-var
5+
var base64ToArrayBuffer: (
6+
base64: string,
7+
removeLinebreaks?: boolean,
8+
) => ArrayBuffer;
9+
// eslint-disable-next-line no-var
10+
var base64FromArrayBuffer: (buffer: ArrayBuffer, urlSafe?: boolean) => string;
11+
}
12+
713
import type {
814
CryptoKey,
915
CryptoKeyPair,
@@ -72,14 +78,19 @@ function base64ToArrayBuffer(val: string): ArrayBuffer {
7278
while (cleaned.endsWith('.')) {
7379
cleaned = cleaned.slice(0, -1);
7480
}
75-
const arr = toByteArray(cleaned);
76-
return binaryLikeToArrayBuffer(arr);
81+
return global.base64ToArrayBuffer(cleaned);
7782
}
7883

79-
// TODO: add in `url` from react-native-quick-base64 when 2.1.1 is released
8084
function arrayBufferToBase64(buffer: ArrayBuffer, urlSafe: boolean = false) {
81-
const bytes = new Uint8Array(buffer);
82-
return fromByteArray(bytes, urlSafe);
85+
return global.base64FromArrayBuffer(buffer, urlSafe);
86+
}
87+
88+
function trimBase64Padding(str: string): string {
89+
return str.replace(/[.=]{1,2}$/, '');
90+
}
91+
92+
function toByteArray(b64: string): Uint8Array {
93+
return new Uint8Array(global.base64ToArrayBuffer(b64));
8394
}
8495

8596
const SUITE = 'subtle.importKey/exportKey';

packages/react-native-quick-crypto/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,6 @@
7575
"dependencies": {
7676
"@craftzdog/react-native-buffer": "6.1.0",
7777
"events": "3.3.0",
78-
"react-native-quick-base64": "2.2.2",
7978
"readable-stream": "4.5.2",
8079
"safe-buffer": "^5.2.1",
8180
"util": "0.12.5"
@@ -97,6 +96,7 @@
9796
"react": "*",
9897
"react-native": "*",
9998
"react-native-nitro-modules": ">=0.29.1",
99+
"react-native-quick-base64": ">=2.1.0",
100100
"expo": ">=48.0.0",
101101
"expo-build-properties": "*"
102102
},

packages/react-native-quick-crypto/src/index.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ export const install = () => {
5353

5454
// @ts-expect-error subtle isn't fully implemented and Cryptokey is missing
5555
global.crypto = QuickCrypto;
56+
57+
// Install base64 globals (base64ToArrayBuffer, base64FromArrayBuffer)
58+
// eslint-disable-next-line @typescript-eslint/no-require-imports
59+
require('react-native-quick-base64');
5660
};
5761

5862
// random, cipher, hash use nextTick

0 commit comments

Comments
 (0)