@yielded/crypto 0.1.0-beta.30 → 0.1.0-beta.31
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.
- package/README.md +8 -9
- package/THIRD_PARTY_NOTICES.md +3 -0
- package/dist/Kdf.d.mts +16 -2
- package/dist/Kdf.mjs +21 -3
- package/dist/Kdf.mjs.map +1 -1
- package/dist/Portable.d.mts +2 -1
- package/dist/Portable.mjs +3 -1
- package/dist/Portable.mjs.map +1 -1
- package/dist/WebCrypto.mjs +2 -1
- package/dist/WebCrypto.mjs.map +1 -1
- package/dist/internal/argon2-core.mjs +19 -12
- package/dist/internal/argon2-core.mjs.map +1 -1
- package/dist/internal/argon2-wasm.mjs +33 -0
- package/dist/internal/argon2-wasm.mjs.map +1 -0
- package/dist/internal/argon2.mjs +6 -5
- package/dist/internal/argon2.mjs.map +1 -1
- package/dist/internal/argon2.wasm +0 -0
- package/dist/internal/kdf.mjs +21 -1
- package/dist/internal/kdf.mjs.map +1 -1
- package/dist/internal/layer.mjs.map +1 -1
- package/dist/internal/node.d.mts +3 -2
- package/dist/internal/node.mjs +4 -3
- package/dist/internal/node.mjs.map +1 -1
- package/dist/internal/scrypt-backend.mjs +10 -0
- package/dist/internal/scrypt-backend.mjs.map +1 -0
- package/dist/internal/scrypt.mjs +25 -0
- package/dist/internal/scrypt.mjs.map +1 -0
- package/dist/platform-workerd.d.mts +14 -0
- package/dist/platform-workerd.mjs +18 -0
- package/dist/platform-workerd.mjs.map +1 -0
- package/package.json +1 -1
- package/src/Kdf.ts +20 -2
- package/src/Portable.ts +4 -1
- package/src/WebCrypto.ts +2 -1
- package/src/internal/argon2-block.c +76 -0
- package/src/internal/argon2-core.ts +36 -12
- package/src/internal/argon2-wasm.ts +59 -0
- package/src/internal/argon2.ts +28 -23
- package/src/internal/argon2.wasm +0 -0
- package/src/internal/kdf.ts +39 -1
- package/src/internal/layer.ts +4 -1
- package/src/internal/node.ts +6 -3
- package/src/internal/scrypt-backend.ts +25 -0
- package/src/internal/scrypt.ts +38 -0
- package/src/internal/wasm.d.ts +5 -0
- package/src/platform-workerd.ts +16 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
// @effect-diagnostics-next-line nodeBuiltinImport:off -- Native scrypt is not exposed by Effect Crypto or WebCrypto.
|
|
2
|
+
import * as crypto from "node:crypto";
|
|
3
|
+
|
|
4
|
+
import { Effect, Layer, Result } from "effect";
|
|
5
|
+
|
|
6
|
+
import { CryptoUnavailable, UnsupportedAlgorithm } from "../Errors";
|
|
7
|
+
import { ScryptBackend, type ScryptParameters } from "./scrypt-backend";
|
|
8
|
+
|
|
9
|
+
const derive = Effect.fnUntraced(function* (input: ScryptParameters) {
|
|
10
|
+
if (typeof crypto.scrypt !== "function") return yield* UnsupportedAlgorithm.make({});
|
|
11
|
+
|
|
12
|
+
// Native work cannot be cancelled. Keep admission and borrowed buffers until
|
|
13
|
+
// its callback finishes, including when the caller requests interruption.
|
|
14
|
+
return yield* Effect.callback<Uint8Array, CryptoUnavailable>((resume) => {
|
|
15
|
+
const registration = Result.try({
|
|
16
|
+
try: () =>
|
|
17
|
+
crypto.scrypt(
|
|
18
|
+
input.password,
|
|
19
|
+
input.salt,
|
|
20
|
+
input.length,
|
|
21
|
+
{
|
|
22
|
+
N: input.cost,
|
|
23
|
+
r: input.blockSize,
|
|
24
|
+
p: input.parallelism,
|
|
25
|
+
maxmem: input.maximumMemoryBytes,
|
|
26
|
+
},
|
|
27
|
+
// Bun supplies undefined on success; Node supplies null.
|
|
28
|
+
(error, key) =>
|
|
29
|
+
resume(error ? Effect.fail(CryptoUnavailable.make({})) : Effect.succeed(key)),
|
|
30
|
+
),
|
|
31
|
+
catch: () => CryptoUnavailable.make({}),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
if (Result.isFailure(registration)) resume(Effect.fail(registration.failure));
|
|
35
|
+
}).pipe(Effect.uninterruptible);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export const layer = Layer.succeed(ScryptBackend, { derive });
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Layer } from "effect";
|
|
2
|
+
|
|
3
|
+
import { makeArgon2 } from "./internal/argon2-wasm";
|
|
4
|
+
import module from "./internal/argon2.wasm";
|
|
5
|
+
import { makeLayer } from "./internal/layer";
|
|
6
|
+
import * as Scrypt from "./internal/scrypt";
|
|
7
|
+
import { xchacha } from "./internal/xchacha";
|
|
8
|
+
import type { Limits } from "./Kdf";
|
|
9
|
+
|
|
10
|
+
/** Workers WebCrypto, Wasm Argon2id and native scrypt.
|
|
11
|
+
* Bundle with Wrangler and enable Node.js compatibility.
|
|
12
|
+
*/
|
|
13
|
+
export const layer = (subtle: SubtleCrypto, limits: Partial<Limits> = {}) =>
|
|
14
|
+
makeLayer(subtle, limits, { argon2: makeArgon2(module), xchacha }).pipe(
|
|
15
|
+
Layer.provide(Scrypt.layer),
|
|
16
|
+
);
|