Skip to content

Commit 5a9943a

Browse files
authored
fix: feedback from #518 (#520)
1 parent 6dc2ca6 commit 5a9943a

File tree

5 files changed

+62
-66
lines changed

5 files changed

+62
-66
lines changed

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -323,7 +323,7 @@ PODS:
323323
- react-native-quick-base64 (2.1.2):
324324
- RCT-Folly (= 2021.07.22.00)
325325
- React-Core
326-
- react-native-quick-crypto (0.7.9):
326+
- react-native-quick-crypto (0.7.10):
327327
- OpenSSL-Universal
328328
- RCT-Folly (= 2021.07.22.00)
329329
- React
@@ -628,7 +628,7 @@ SPEC CHECKSUMS:
628628
React-logger: 8edc785c47c8686c7962199a307015e2ce9a0e4f
629629
react-native-fast-encoder: 6f59e9b08e2bc5a8bf1f36e1630cdcfd66dd18af
630630
react-native-quick-base64: 61228d753294ae643294a75fece8e0e80b7558a6
631-
react-native-quick-crypto: d8c6ba8c31de79da1ebbbdb79cf16d1ee980b407
631+
react-native-quick-crypto: 3126bf520d6ef977d103027d8287027ebea4d0d7
632632
react-native-safe-area-context: ab8f4a3d8180913bd78ae75dd599c94cce3d5e9a
633633
React-NativeModulesApple: b6868ee904013a7923128892ee4a032498a1024a
634634
React-perflogger: 31ea61077185eb1428baf60c0db6e2886f141a5a

example/src/testing/tests/RandomTests/randomTests.ts

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -73,22 +73,22 @@ describe('random', () => {
7373
});
7474
});
7575

76-
it('simple test (do sth)', () => {
76+
it('simple test 1', () => {
7777
const buf = Buffer.alloc(10);
7878
const before = buf.toString('hex');
7979
const after = crypto.randomFillSync(buf).toString('hex');
8080
assert.notStrictEqual(before, after);
8181
});
8282

83-
it('simple test (do sth) 2', () => {
83+
it('simple test 2', () => {
8484
const buf = new Uint8Array(new Array(10).fill(0));
8585
const before = Buffer.from(buf).toString('hex');
8686
crypto.randomFillSync(buf);
8787
const after = Buffer.from(buf).toString('hex');
8888
assert.notStrictEqual(before, after);
8989
});
9090

91-
it('simple test (do sth) 3', () => {
91+
it('simple test 3', () => {
9292
[
9393
new Uint16Array(10),
9494
new Uint32Array(10),
@@ -103,7 +103,7 @@ describe('random', () => {
103103
});
104104
});
105105

106-
it('simple test (do sth) 4 - random Fill Sync AB', () => {
106+
it('simple test 4 - random Fill Sync AB', () => {
107107
[new ArrayBuffer(10), new ArrayBuffer(10)].forEach((buf) => {
108108
const before = Buffer.from(buf).toString('hex');
109109
crypto.randomFillSync(buf);
@@ -112,7 +112,7 @@ describe('random', () => {
112112
});
113113
});
114114

115-
it('simple test (do sth) 5- random Fill ', (done: Done) => {
115+
it('simple test 5- random Fill ', (done: Done) => {
116116
const buf = Buffer.alloc(10);
117117
const before = buf.toString('hex');
118118

@@ -127,7 +127,7 @@ describe('random', () => {
127127
});
128128
});
129129

130-
it('simple test (do sth) 6 ', (done: Done) => {
130+
it('simple test 6 ', (done: Done) => {
131131
const buf = new Uint8Array(new Array(10).fill(0));
132132
const before = Buffer.from(buf).toString('hex');
133133

@@ -172,7 +172,7 @@ describe('random', () => {
172172
});
173173
});
174174

175-
it('simple test (do sth) 8', (done: Done) => {
175+
it('simple test 8', (done: Done) => {
176176
let ctr = 0;
177177
[new ArrayBuffer(10), new ArrayBuffer(10)].forEach((buf) => {
178178
const before = Buffer.from(buf).toString('hex');
@@ -416,7 +416,7 @@ describe('random', () => {
416416
});
417417

418418
it('randomInt - Synchronous API', () => {
419-
const randomInts = [];
419+
const randomInts: number[] = [];
420420
for (let i = 0; i < 100; i++) {
421421
const n = crypto.randomInt(3);
422422
assert.ok(n >= 0);
@@ -609,7 +609,6 @@ describe('random', () => {
609609
[true, NaN, null, {}, [], 10].forEach((val) => {
610610
it(`expect type error: ${val}`, () => {
611611
assert.throws(
612-
// @ts-expect-error bad callback
613612
() => crypto.randomInt(0, 1, val),
614613
/callback must be a function or undefined/,
615614
);

package.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,9 @@
107107
"github": {
108108
"release": true
109109
},
110+
"hooks": {
111+
"before:release": "bun install && bun pods && git add example/ios/Podfile.lock"
112+
},
110113
"plugins": {
111114
"@release-it/conventional-changelog": {
112115
"preset": {

src/Utils.ts

Lines changed: 33 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { Buffer as CraftzdogBuffer } from '@craftzdog/react-native-buffer';
22
import { Buffer as SafeBuffer } from 'safe-buffer';
3-
import { Buffer as FerossBuffer } from 'buffer';
3+
44
import type {
55
AnyAlgorithm,
66
DeriveBitsAlgorithm,
@@ -18,14 +18,12 @@ import { type CipherKey } from 'crypto'; // @types/node
1818
export type BufferLike =
1919
| ArrayBuffer
2020
| CraftzdogBuffer
21-
| FerossBuffer
2221
| SafeBuffer
2322
| ArrayBufferView;
2423
export type BinaryLike =
2524
| string
2625
| ArrayBuffer
2726
| CraftzdogBuffer
28-
| FerossBuffer
2927
| SafeBuffer
3028
| TypedArray
3129
| DataView;
@@ -91,6 +89,8 @@ export type TypedArray =
9189
| Float32Array
9290
| Float64Array;
9391

92+
export type ABV = TypedArray | DataView | ArrayBufferLike | CraftzdogBuffer;
93+
9494
type DOMName =
9595
| string
9696
| {
@@ -182,18 +182,38 @@ export const kEmptyObject = Object.freeze(Object.create(null));
182182
// return slowCases(enc);
183183
// }
184184

185+
/**
186+
* Converts supplied argument to an ArrayBuffer. Note this does not copy the
187+
* data so it is faster than toArrayBuffer. Not copying is important for
188+
* functions like randomFill which need to be able to write to the underlying
189+
* buffer.
190+
* @param buf
191+
* @returns ArrayBuffer
192+
*/
193+
export function abvToArrayBuffer(buffer: ABV): ArrayBuffer {
194+
if (CraftzdogBuffer.isBuffer(buffer) || ArrayBuffer.isView(buffer)) {
195+
return buffer.buffer as ArrayBuffer;
196+
}
197+
return buffer as ArrayBuffer;
198+
}
199+
200+
/**
201+
* Converts supplied argument to an ArrayBuffer. Note this copies data if the
202+
* supplied buffer has the .slice() method, so can be a bit slow.
203+
* @param buf
204+
* @returns ArrayBuffer
205+
*/
185206
export function toArrayBuffer(
186-
buf: CraftzdogBuffer | FerossBuffer | SafeBuffer | ArrayBufferView,
207+
buf: CraftzdogBuffer | SafeBuffer | ArrayBufferView,
187208
): ArrayBuffer {
188-
if (
189-
CraftzdogBuffer.isBuffer(buf) ||
190-
FerossBuffer.isBuffer(buf) ||
191-
ArrayBuffer.isView(buf)
192-
) {
209+
if (CraftzdogBuffer.isBuffer(buf) || ArrayBuffer.isView(buf)) {
193210
if (buf?.buffer?.slice) {
194-
return buf.buffer.slice(buf.byteOffset, buf.byteOffset + buf.byteLength);
211+
return buf.buffer.slice(
212+
buf.byteOffset,
213+
buf.byteOffset + buf.byteLength,
214+
) as ArrayBuffer;
195215
} else {
196-
return buf.buffer;
216+
throw new Error('This implementation of buffer does not implement slice');
197217
}
198218
}
199219
const ab = new ArrayBuffer(buf.length);
@@ -205,11 +225,7 @@ export function toArrayBuffer(
205225
}
206226

207227
export function bufferLikeToArrayBuffer(buf: BufferLike): ArrayBuffer {
208-
if (
209-
CraftzdogBuffer.isBuffer(buf) ||
210-
FerossBuffer.isBuffer(buf) ||
211-
SafeBuffer.isBuffer(buf)
212-
) {
228+
if (CraftzdogBuffer.isBuffer(buf) || SafeBuffer.isBuffer(buf)) {
213229
return toArrayBuffer(buf);
214230
}
215231
if (ArrayBuffer.isView(buf)) {
@@ -239,11 +255,7 @@ export function binaryLikeToArrayBuffer(
239255
}
240256

241257
// Buffer
242-
if (
243-
CraftzdogBuffer.isBuffer(input) ||
244-
FerossBuffer.isBuffer(input) ||
245-
SafeBuffer.isBuffer(input)
246-
) {
258+
if (CraftzdogBuffer.isBuffer(input) || SafeBuffer.isBuffer(input)) {
247259
return toArrayBuffer(input);
248260
}
249261

@@ -778,16 +790,6 @@ export const bigIntArrayToUnsignedInt = (
778790
return result;
779791
};
780792

781-
export function abvToArrayBuffer(buffer: ArrayBufferView): ArrayBuffer {
782-
if (CraftzdogBuffer.isBuffer(buffer)) {
783-
return buffer.buffer;
784-
}
785-
if (ArrayBuffer.isView(buffer)) {
786-
return buffer.buffer;
787-
}
788-
return buffer;
789-
}
790-
791793
// TODO: these used to be shipped by crypto-browserify in quickcrypto v0.6
792794
// could instead fetch from OpenSSL if needed and handle breaking changes
793795
export const getHashes = () => [

src/random.ts

Lines changed: 16 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,29 @@
11
import { abvToArrayBuffer } from './Utils';
22
import { NativeQuickCrypto } from './NativeQuickCrypto/NativeQuickCrypto';
33
import { Buffer } from '@craftzdog/react-native-buffer';
4-
import type { TypedArray } from './Utils';
4+
import type { ABV } from './Utils';
55

66
const random = NativeQuickCrypto.random;
77

8-
type RandomBuffer = TypedArray | DataView | ArrayBufferLike | Buffer;
9-
10-
export function randomFill<T extends RandomBuffer>(
8+
export function randomFill<T extends ABV>(
119
buffer: T,
1210
callback: (err: Error | null, buf: T) => void,
1311
): void;
1412

15-
export function randomFill<T extends RandomBuffer>(
13+
export function randomFill<T extends ABV>(
1614
buffer: T,
1715
offset: number,
1816
callback: (err: Error | null, buf: T) => void,
1917
): void;
2018

21-
export function randomFill<T extends RandomBuffer>(
19+
export function randomFill<T extends ABV>(
2220
buffer: T,
2321
offset: number,
2422
size: number,
2523
callback: (err: Error | null, buf: T) => void,
2624
): void;
2725

28-
export function randomFill(buffer: RandomBuffer, ...rest: unknown[]): void {
26+
export function randomFill(buffer: ABV, ...rest: unknown[]): void {
2927
if (typeof rest[rest.length - 1] !== 'function') {
3028
throw new Error('No callback provided to randomFill');
3129
}
@@ -47,31 +45,25 @@ export function randomFill(buffer: RandomBuffer, ...rest: unknown[]): void {
4745
offset = rest[0] as number;
4846
}
4947

50-
random
51-
.randomFill(abvToArrayBuffer(buffer as ArrayBufferView), offset, size)
52-
.then(
53-
(res: ArrayBuffer) => {
54-
callback(null, res);
55-
},
56-
(e: Error) => {
57-
callback(e);
58-
},
59-
);
48+
random.randomFill(abvToArrayBuffer(buffer), offset, size).then(
49+
(res: ArrayBuffer) => {
50+
callback(null, res);
51+
},
52+
(e: Error) => {
53+
callback(e);
54+
},
55+
);
6056
}
6157

62-
export function randomFillSync<T extends RandomBuffer>(
58+
export function randomFillSync<T extends ABV>(
6359
buffer: T,
6460
offset?: number,
6561
size?: number,
6662
): T;
6763

68-
export function randomFillSync(
69-
buffer: RandomBuffer,
70-
offset: number = 0,
71-
size?: number,
72-
) {
64+
export function randomFillSync(buffer: ABV, offset: number = 0, size?: number) {
7365
return random.randomFillSync(
74-
abvToArrayBuffer(buffer as ArrayBufferView),
66+
abvToArrayBuffer(buffer),
7567
offset,
7668
size ?? buffer.byteLength,
7769
);

0 commit comments

Comments
 (0)