@yielded/crypto 0.1.0-beta.30 → 0.1.0-beta.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. package/README.md +8 -9
  2. package/THIRD_PARTY_NOTICES.md +3 -0
  3. package/dist/Kdf.d.mts +16 -2
  4. package/dist/Kdf.mjs +21 -3
  5. package/dist/Kdf.mjs.map +1 -1
  6. package/dist/Portable.d.mts +2 -1
  7. package/dist/Portable.mjs +3 -1
  8. package/dist/Portable.mjs.map +1 -1
  9. package/dist/WebCrypto.mjs +2 -1
  10. package/dist/WebCrypto.mjs.map +1 -1
  11. package/dist/internal/argon2-core.mjs +19 -12
  12. package/dist/internal/argon2-core.mjs.map +1 -1
  13. package/dist/internal/argon2-wasm.mjs +33 -0
  14. package/dist/internal/argon2-wasm.mjs.map +1 -0
  15. package/dist/internal/argon2.mjs +6 -5
  16. package/dist/internal/argon2.mjs.map +1 -1
  17. package/dist/internal/argon2.wasm +0 -0
  18. package/dist/internal/kdf.mjs +21 -1
  19. package/dist/internal/kdf.mjs.map +1 -1
  20. package/dist/internal/layer.mjs.map +1 -1
  21. package/dist/internal/node.d.mts +3 -2
  22. package/dist/internal/node.mjs +4 -3
  23. package/dist/internal/node.mjs.map +1 -1
  24. package/dist/internal/scrypt-backend.mjs +10 -0
  25. package/dist/internal/scrypt-backend.mjs.map +1 -0
  26. package/dist/internal/scrypt.mjs +25 -0
  27. package/dist/internal/scrypt.mjs.map +1 -0
  28. package/dist/platform-workerd.d.mts +14 -0
  29. package/dist/platform-workerd.mjs +18 -0
  30. package/dist/platform-workerd.mjs.map +1 -0
  31. package/package.json +1 -1
  32. package/src/Kdf.ts +20 -2
  33. package/src/Portable.ts +4 -1
  34. package/src/WebCrypto.ts +2 -1
  35. package/src/internal/argon2-block.c +76 -0
  36. package/src/internal/argon2-core.ts +36 -12
  37. package/src/internal/argon2-wasm.ts +59 -0
  38. package/src/internal/argon2.ts +28 -23
  39. package/src/internal/argon2.wasm +0 -0
  40. package/src/internal/kdf.ts +39 -1
  41. package/src/internal/layer.ts +4 -1
  42. package/src/internal/node.ts +6 -3
  43. package/src/internal/scrypt-backend.ts +25 -0
  44. package/src/internal/scrypt.ts +38 -0
  45. package/src/internal/wasm.d.ts +5 -0
  46. 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,5 @@
1
+ declare module "*.wasm" {
2
+ const module: WebAssembly.Module;
3
+
4
+ export default module;
5
+ }
@@ -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
+ );