1.2.2 • Published 9 months ago

@randomredltd/mm-homomorphic v1.2.2

Weekly downloads
-
License
AGPL-3.0-only
Repository
-
Last release
9 months ago

MorphMetro - Homomorphic calculations library

About

Homomorphic-lib is used to calculate two metrics (z-score and E_n number) that are used during ILC (Inter Laboratory Comparison) and PT (Proficiency Testing). All accredited measuring laboratories are required to periodically conduct ILC/PT. They do so by comparing their measurements with referent data provided by the referent laboratory.

To use homomorphic-lib, two data sets are needed. First is the referent data which consists of 3 to 10 referent values (X_RD) and one value representing measuring uncertainty of the referent laboratory (U_RD). Second data set is the data from the accredited measuring laboratory. It consists of 3 to 10 measured values (X_MD) and one value representing the uncertainty of the measuring laboratory (U_MD).

To calculate two metrics (z-score and E_n number) the following equations are used:

$z=(X{MD}-X{RD})/S_{MD}$

$En=(X{MD}-X{RD})/\sqrt{U{MD}2+U_{RD}2}$

,where

$X_{MD}$ – average value of measured data

$X_{RD}$ – average value of referent data

$S_{MD}$ – standard deviation of measured data

$U_{MD}$ – expanded measurement uncertainty of measured data

$U_{RD}$ – expanded measurement uncertainty of referent data

From equations it can be seen that for calculation of z-score and E_n number, both referent and measured data are required. To preserve data privacy, homomorphic-lib encrypts both data sets and performs the calculations in encrypted form by using homomorphic encryption (Microsoft SEAL library).

Install

Install all packages

npm i

Test

Run tests

npm run test

Build

Build and bundle with webpack

npm run build:prod

Publish to NPM

Publish to RandomRed internal NPM

npm run co:login
npm run publish

Example usage

Example usage of the library

    const {generateKeys, referenceLabCalculation, measuringLabCalculation, referenceLabFinalCalculation} = require('mm-homomorphic')
    
   //******************************************
   // REFERENCE LABORATORY
    const referenceData = [3.65, 3.72, 3.77, 3.68, 3.73, 3.72, 3.70, 3.71];
    const uBRD = 0.02;
    const {secretKey, publicKey, relin_keys, galKeys} = await generateKeys();
    const {cipher_average_RD, cipher_u_RD_square} = await referenceLabCalculation(publicKey, secretKey, referenceData,  uBRD )
   //******************************************

   //******************************************
   // MEASURING LABORATORY
    // measured data input
    const measured_data = [3.45, 3.74, 3.854, 3.54, 3.71];
    const uB_MD = 0.05;
    const {cipher_z_score, cipher_En} = await measuringLabCalculation(cipher_average_RD, publicKey, relin_keys,  cipher_u_RD_square, measured_data, uB_MD);
   //******************************************

   //******************************************
   // REFERENCE LABORATORY
    const results = await referenceLabFinalCalculation(cipher_z_score, publicKey, cipher_En, secretKey)
   //******************************************

Acknowledgments

This package was developed under MorphMetro project, funded by the EU in the framework of the NGI TRUSTCHAIN project, grant No. 101093274.

1.2.0

9 months ago

1.2.2

9 months ago

1.2.1

9 months ago

1.0.0

1 year ago