@tstdl/base 0.83.1 → 0.83.2

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/.eslintrc.cjs CHANGED
@@ -1,4 +1,5 @@
1
1
  module.exports = {
2
+ root: true,
2
3
  env: {
3
4
  browser: true,
4
5
  es2022: true,
@@ -271,11 +271,10 @@ let AuthenticationService = class AuthenticationService2 {
271
271
  }
272
272
  async deriveSigningSecrets() {
273
273
  const key = await (0, import_cryptography.importPbkdf2Key)(this.secret);
274
- const hash = await globalThis.crypto.subtle.deriveBits({ name: "PBKDF2", hash: "SHA-512", iterations: 5e5, salt: new Uint8Array() }, key, SIGNING_SECRETS_LENGTH * 3);
275
- const bufferSize = SIGNING_SECRETS_LENGTH / 8;
276
- this.derivedTokenSigningSecret = new Uint8Array(hash.slice(0, bufferSize));
277
- this.derivedRefreshTokenSigningSecret = new Uint8Array(hash.slice(bufferSize, bufferSize * 2));
278
- this.derivedSecretResetTokenSigningSecret = new Uint8Array(hash.slice(bufferSize * 2));
274
+ const [derivedTokenSigningSecret, derivedRefreshTokenSigningSecret, derivedSecretResetTokenSigningSecret] = await (0, import_cryptography.deriveBytesMultiple)(3, SIGNING_SECRETS_LENGTH / 8, { name: "PBKDF2", hash: "SHA-512", iterations: 5e5, salt: new Uint8Array() }, key);
275
+ this.derivedTokenSigningSecret = derivedTokenSigningSecret;
276
+ this.derivedRefreshTokenSigningSecret = derivedRefreshTokenSigningSecret;
277
+ this.derivedSecretResetTokenSigningSecret = derivedSecretResetTokenSigningSecret;
279
278
  }
280
279
  async getHash(secret, salt) {
281
280
  const key = await (0, import_cryptography.importPbkdf2Key)(secret);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tstdl/base",
3
- "version": "0.83.1",
3
+ "version": "0.83.2",
4
4
  "author": "Patrick Hein",
5
5
  "publishConfig": {
6
6
  "access": "public"
package/types.d.ts CHANGED
@@ -83,10 +83,10 @@ type FromEntriesEntryValue<T extends readonly (readonly [any, any])[], K> = Extr
83
83
  export type FromEntries<T> = T extends readonly (readonly [infer Key, any])[] ? {
84
84
  [K in Cast<Key, PropertyKey>]: Fallback<FromEntriesEntryValue<T, K>, T[number][1]>;
85
85
  } : never;
86
- export type Writable<T> = {
86
+ export type Writable<T> = T extends readonly (infer U)[] ? U[] : {
87
87
  -readonly [P in keyof T]: T[P];
88
88
  };
89
- export type DeepWritable<T> = {
89
+ export type DeepWritable<T> = T extends readonly (infer U)[] ? DeepWritable<U>[] : {
90
90
  -readonly [P in keyof T]: DeepWritable<T[P]>;
91
91
  };
92
92
  export type RequiredKeys<T> = {
@@ -1,4 +1,5 @@
1
1
  import type { BinaryData, TypedExtract } from '../types.js';
2
+ import type { ReadonlyTuple } from 'type-fest';
2
3
  export type AesMode = 'CBC' | 'CTR' | 'GCM' | 'KW';
3
4
  export type EcdsaCurve = 'P-256' | 'P-384' | 'P-521';
4
5
  export type HashAlgorithm = 'SHA-1' | 'SHA-256' | 'SHA-384' | 'SHA-512';
@@ -104,3 +105,13 @@ export declare function generateEcdsaKey(curve: EcdsaCurve, extractable?: boolea
104
105
  * @param extractable whether the key can be used for exportKey
105
106
  */
106
107
  export declare function generatePbkdf2Key(extractable?: boolean): Promise<CryptoKey>;
108
+ type AlgorithmParameter = Parameters<typeof globalThis.crypto.subtle.deriveBits>['0'];
109
+ /**
110
+ * derive multiply byte arrays
111
+ * @param count how many Uint8Arrays to dervice
112
+ * @param length length of each Uint8Array in bytes
113
+ * @param algorithm algorithm to derive with
114
+ * @param baseKey key to derive from
115
+ */
116
+ export declare function deriveBytesMultiple<C extends number>(count: C, length: number, algorithm: AlgorithmParameter, baseKey: CryptoKey): Promise<ReadonlyTuple<Uint8Array, C>>;
117
+ export {};
@@ -19,6 +19,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
19
19
  var cryptography_exports = {};
20
20
  __export(cryptography_exports, {
21
21
  decrypt: () => decrypt,
22
+ deriveBytesMultiple: () => deriveBytesMultiple,
22
23
  digest: () => digest,
23
24
  encrypt: () => encrypt,
24
25
  generateEcdsaKey: () => generateEcdsaKey,
@@ -31,6 +32,7 @@ __export(cryptography_exports, {
31
32
  verify: () => verify
32
33
  });
33
34
  module.exports = __toCommonJS(cryptography_exports);
35
+ var import_array = require("./array/array.js");
34
36
  var import_base64 = require("./base64.js");
35
37
  var import_encoding = require("./encoding.js");
36
38
  var import_random = require("./random.js");
@@ -120,6 +122,11 @@ async function generatePbkdf2Key(extractable = false) {
120
122
  const key = (0, import_random.getRandomBytes)(16);
121
123
  return importPbkdf2Key(key, extractable);
122
124
  }
125
+ async function deriveBytesMultiple(count, length, algorithm, baseKey) {
126
+ const totalBits = count * length * 8;
127
+ const bytes = await globalThis.crypto.subtle.deriveBits(algorithm, baseKey, totalBits);
128
+ return (0, import_array.createArray)(count, (index) => new Uint8Array(bytes.slice(index * length, index * length + length)));
129
+ }
123
130
  function isBinaryKey(key) {
124
131
  return (0, import_type_guards.isDefined)(key.byteLength);
125
132
  }