diff --git a/packages/core/package.json b/packages/core/package.json index 582b6070..59751e5f 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -51,7 +51,6 @@ "dependencies": { "@mtcute/tl": "workspace:^", "@mtcute/tl-runtime": "workspace:^", - "@mtcute/wasm": "workspace:^", "@mtcute/file-id": "workspace:^", "@types/events": "3.0.0", "events": "3.2.0", diff --git a/packages/core/src/utils/crypto/index.ts b/packages/core/src/utils/crypto/index.ts index d9c8f825..278772be 100644 --- a/packages/core/src/utils/crypto/index.ts +++ b/packages/core/src/utils/crypto/index.ts @@ -5,4 +5,3 @@ export * from './miller-rabin.js' export * from './mtproto.js' export * from './password.js' export * from './utils.js' -export * from './wasm.js' diff --git a/packages/core/src/utils/crypto/wasm.ts b/packages/core/src/utils/crypto/wasm.ts deleted file mode 100644 index aab86e13..00000000 --- a/packages/core/src/utils/crypto/wasm.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - createCtr256, - ctr256, - deflateMaxSize, - freeCtr256, - gunzip, - ige256Decrypt, - ige256Encrypt, - sha1, - sha256, -} from '@mtcute/wasm' - -import { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } from './abstract.js' - -export abstract class WasmCryptoProvider extends BaseCryptoProvider implements Partial { - abstract randomFill(buf: Uint8Array): void - abstract initialize(): Promise - - sha1(data: Uint8Array): Uint8Array { - return sha1(data) - } - - sha256(data: Uint8Array): Uint8Array { - return sha256(data) - } - - createAesCtr(key: Uint8Array, iv: Uint8Array): IAesCtr { - const ctx = createCtr256(key, iv) - - return { - process: (data) => ctr256(ctx, data), - close: () => freeCtr256(ctx), - } - } - - createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme { - return { - encrypt: (data) => ige256Encrypt(data, key, iv), - decrypt: (data) => ige256Decrypt(data, key, iv), - } - } - - gzip(data: Uint8Array, maxSize: number): Uint8Array | null { - return deflateMaxSize(data, maxSize) - } - - gunzip(data: Uint8Array): Uint8Array { - return gunzip(data) - } -} diff --git a/packages/web/src/crypto.ts b/packages/web/src/crypto.ts index b0e0e3a2..31068077 100644 --- a/packages/web/src/crypto.ts +++ b/packages/web/src/crypto.ts @@ -1,5 +1,16 @@ -import { ICryptoProvider, WasmCryptoProvider } from '@mtcute/core/utils.js' -import { initSync } from '@mtcute/wasm' +import { BaseCryptoProvider, IAesCtr, ICryptoProvider, IEncryptionScheme } from '@mtcute/core/utils.js' +import { + createCtr256, + ctr256, + deflateMaxSize, + freeCtr256, + gunzip, + ige256Decrypt, + ige256Encrypt, + initSync, + sha1, + sha256, +} from '@mtcute/wasm' import { loadWasmBinary, WasmInitInput } from './wasm.js' @@ -14,10 +25,42 @@ export interface WebCryptoProviderOptions { wasmInput?: WasmInitInput } -export class WebCryptoProvider extends WasmCryptoProvider implements ICryptoProvider { +export class WebCryptoProvider extends BaseCryptoProvider implements ICryptoProvider { readonly crypto: Crypto private _wasmInput?: WasmInitInput + sha1(data: Uint8Array): Uint8Array { + return sha1(data) + } + + sha256(data: Uint8Array): Uint8Array { + return sha256(data) + } + + createAesCtr(key: Uint8Array, iv: Uint8Array): IAesCtr { + const ctx = createCtr256(key, iv) + + return { + process: (data) => ctr256(ctx, data), + close: () => freeCtr256(ctx), + } + } + + createAesIge(key: Uint8Array, iv: Uint8Array): IEncryptionScheme { + return { + encrypt: (data) => ige256Encrypt(data, key, iv), + decrypt: (data) => ige256Decrypt(data, key, iv), + } + } + + gzip(data: Uint8Array, maxSize: number): Uint8Array | null { + return deflateMaxSize(data, maxSize) + } + + gunzip(data: Uint8Array): Uint8Array { + return gunzip(data) + } + constructor(params?: WebCryptoProviderOptions) { super() const crypto = params?.crypto ?? globalThis.crypto diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ea545077..1e711b11 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -126,9 +126,6 @@ importers: '@mtcute/tl-runtime': specifier: workspace:^ version: link:../tl-runtime - '@mtcute/wasm': - specifier: workspace:^ - version: link:../wasm '@types/events': specifier: 3.0.0 version: 3.0.0