CoolFace
Apppublic

opusdev/vector-similarity-api

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes
crypto_callbacks.ts88 linesDownload Raw Back to client-side-encryption
1import * as crypto from 'crypto';2 3type AES256Callback = (key: Buffer, iv: Buffer, input: Buffer, output: Buffer) => number | Error;4 5export function makeAES256Hook(6  method: 'createCipheriv' | 'createDecipheriv',7  mode: 'aes-256-cbc' | 'aes-256-ctr'8): AES256Callback {9  return function (key: Buffer, iv: Buffer, input: Buffer, output: Buffer): number | Error {10    let result;11 12    try {13      const cipher = crypto[method](mode, key, iv);14      cipher.setAutoPadding(false);15      result = cipher.update(input);16      const final = cipher.final();17      if (final.length > 0) {18        result = Buffer.concat([result, final]);19      }20    } catch (e) {21      return e;22    }23 24    result.copy(output);25    return result.length;26  };27}28 29export function randomHook(buffer: Buffer, count: number): number | Error {30  try {31    crypto.randomFillSync(buffer, 0, count);32  } catch (e) {33    return e;34  }35  return count;36}37 38export function sha256Hook(input: Buffer, output: Buffer): number | Error {39  let result;40  try {41    result = crypto.createHash('sha256').update(input).digest();42  } catch (e) {43    return e;44  }45 46  result.copy(output);47  return result.length;48}49 50type HMACHook = (key: Buffer, input: Buffer, output: Buffer) => number | Error;51export function makeHmacHook(algorithm: 'sha512' | 'sha256'): HMACHook {52  return (key: Buffer, input: Buffer, output: Buffer): number | Error => {53    let result;54    try {55      result = crypto.createHmac(algorithm, key).update(input).digest();56    } catch (e) {57      return e;58    }59 60    result.copy(output);61    return result.length;62  };63}64 65export function signRsaSha256Hook(key: Buffer, input: Buffer, output: Buffer): number | Error {66  let result;67  try {68    const signer = crypto.createSign('sha256WithRSAEncryption');69    const privateKey = Buffer.from(70      `-----BEGIN PRIVATE KEY-----\n${key.toString('base64')}\n-----END PRIVATE KEY-----\n`71    );72 73    result = signer.update(input).end().sign(privateKey);74  } catch (e) {75    return e;76  }77 78  result.copy(output);79  return result.length;80}81 82export const aes256CbcEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-cbc');83export const aes256CbcDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-cbc');84export const aes256CtrEncryptHook = makeAES256Hook('createCipheriv', 'aes-256-ctr');85export const aes256CtrDecryptHook = makeAES256Hook('createDecipheriv', 'aes-256-ctr');86export const hmacSha512Hook = makeHmacHook('sha512');87export const hmacSha256Hook = makeHmacHook('sha256');88