File size: 1,895 Bytes
6d69a4c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
import initWasm, { encrypt_serialize_u64_radix_flat_wasm } from './concrete-ml-extensions-wasm/concrete_ml_extensions_wasm.js';

let clientKey;
let wasmInitialized = false;

self.onmessage = async function(e) {
    if (e.data.type === 'init') {
        try {
            await initWasm();
            wasmInitialized = true;
            clientKey = e.data.clientKey;
            console.log(`[Encrypt] Client key loaded: ${clientKey.length} bytes`);
            self.postMessage({ type: 'ready' });
        } catch (error) {
            console.error('[Encrypt] WASM initialization failed:', error.message);
            self.postMessage({ type: 'error', error: `WASM initialization failed: ${error.message}` });
        }
    } else if (e.data.type === 'encrypt') {
        if (!wasmInitialized) {
            console.error('[Encrypt] Attempted encryption before WASM initialization');
            self.postMessage({ type: 'error', error: 'WASM not initialized' });
            return;
        }
        try {
            const tokenIds = e.data.tokenIds;
            console.log(`[Encrypt] Starting encryption for ${tokenIds.length} token IDs`);
            
            // Convert token IDs to BigUint64Array for FHE encryption
            const bigArr = new BigUint64Array(tokenIds.map(id => BigInt(id)));
            console.log(`[Encrypt] Token array size: ${bigArr.length} tokens`);
            
            console.log('[Encrypt] Performing encryption...');
            const result = encrypt_serialize_u64_radix_flat_wasm(bigArr, clientKey);
            console.log(`[Encrypt] Encryption completed: ${result.length} bytes`);
            
            self.postMessage({ type: 'success', result });
        } catch (error) {
            console.error('[Encrypt] Encryption failed:', error.message);
            self.postMessage({ type: 'error', error: error.message });
        }
    }
};