epir
Version:
EllipticPIR client library (Node.js / TypeScript bindings).
40 lines (33 loc) • 1.18 kB
text/typescript
import crypto from 'crypto';
import { MG_DEFAULT_PATH } from './types';
import { printMeasurement } from './util';
import { createEpir, createDecryptionContext } from './addon';
export const DIMENSION = 3;
export const PACKING = 3;
export const ELEM_SIZE = 32;
export const run = async (): Promise<boolean> => {
const epir = await createEpir();
const decCtx = await createDecryptionContext(MG_DEFAULT_PATH);
const privkey = epir.createPrivkey();
const pubkey = epir.createPubkey(privkey);
const elem = new Uint8Array(crypto.randomBytes(ELEM_SIZE));
const reply = await printMeasurement<ArrayBuffer>(() => {
return epir.computeReplyMock(pubkey, DIMENSION, PACKING, elem.buffer);
}, 'Compute mock:');
const decrypted = await printMeasurement<ArrayBuffer>(async () => {
return await decCtx.decryptReply(privkey, DIMENSION, PACKING, reply);
}, 'Decrypt reply:');
const decryptedView = new Uint8Array(decrypted);
for(let i=0; i<ELEM_SIZE; i++) {
/* istanbul ignore if */
if(elem[i] != decryptedView[i]) {
console.log('Wrong decryption result detected.');
return false;
}
}
return true;
};
/* istanbul ignore if */
if(!module.parent) {
run();
}