//SK checking algorithm - If PK and SK matches, it returns True; otherwise, it returns false. // Written by Bingsheng Zhang function skCheck(ctx, params, SK, PK) { var D = ctx.PAIR.G1mul(params.g1, SK); return D.equals(PK) } function validateSKFromString(SKStr) { // Re-create the SK from the string byte definition let ctx = new CTX("BN254CX"); let skBytes = SKStr.split(","); let sk = new ctx.BIG.fromBytes(skBytes); // Re-create the params let n = new ctx.BIG(); let g1 = new ctx.ECP(); let g2 = new ctx.ECP2(); n.copy(tempParams.n); g1.copy(tempParams.g1); g2.copy(tempParams.g2); let params = { n:n, g1:g1, g2:g2 }; // Re-create the trustee PK from the string byte definition let pkBytes = trustee_pk.split(',').map(function(byteStr) { return parseInt(byteStr) }); let pk = new ctx.ECP.fromBytes(pkBytes); // Check that the SK supplies generates the PK we know about return skCheck(ctx, params, sk, pk); } function showDialog(titleTxt, bodyTxt) { var modalDialog = $('#modalDialog'); var title = modalDialog.find('.modal-title'); var body = modalDialog.find('.modal-body'); title.text(titleTxt); var bodyText = bodyTxt; var p = document.createElement("p"); p.innerHTML = bodyText; body.empty(); body.append( p ); modalDialog.modal('show'); } function processFileSKChange(event) { var files = event.target.files; if(files !== undefined && files[0] !== undefined) { var reader = new FileReader(); reader.onload = function(e) { var SKStr = reader.result; // Check that the SK string is not blank if(SKStr === '') { // Show a dialog informing the user that they've uploaded a blank file showDialog('Error', 'The file you have uploaded is blank.'); } const valid = validateSKFromString(SKStr); if(valid) { $('input#secret-key').val(SKStr); } else { // Show a dialog informing the user that they've supplied an invalid SK showDialog('Error', 'The secret key you have supplied is invalid and doesn\'t match with the recorded public key.'); } }; reader.readAsText(files[0]); } } var filesHandleSK = document.getElementById('files_sk_upload'); if(filesHandleSK) { filesHandleSK.addEventListener('change', processFileSKChange, false); }