@tidecloak/js
Version:
TideCloak client side JS SDK
56 lines • 2.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.genBlindMessage = genBlindMessage;
exports.unblindSignature = unblindSignature;
exports.verifyBlindSignature = verifyBlindSignature;
exports.serializeBlindSig = serializeBlindSig;
const Math_js_1 = require("../Math.js");
const Ed25519_js_1 = require("../Ed25519.js");
const Hash_js_1 = require("../Hashing/Hash.js");
const Serialization_js_1 = require("../Serialization.js");
const index_js_1 = require("../index.js");
/**
*
* @param {Point} gR
* @param {Point} pub
* @param {Uint8Array} message
* @param {bigint} multiplier
*/
async function genBlindMessage(gR, pub, message, multiplier) {
const blur = (0, Math_js_1.RandomBigInt)();
const gRMul = gR.mul((0, Math_js_1.mod_inv)(blur));
const eddsaH = (0, Math_js_1.mod)((0, Serialization_js_1.BigIntFromByteArray)(await (0, Hash_js_1.SHA512_Digest)((0, Serialization_js_1.ConcatUint8Arrays)([gRMul.toRawBytes(), pub.toRawBytes(), message]))));
const blurHCMKMul = (0, Math_js_1.mod)(eddsaH * multiplier * blur);
return { blurHCMKMul, blur, gRMul };
}
/**
*
* @param {bigint} blindS
* @param {bigint} blur
*/
async function unblindSignature(blindS, blur) {
const s = (0, Math_js_1.mod)(blindS * (0, Math_js_1.mod_inv)(blur));
return s;
}
/**
*
* @param {bigint} S
* @param {Point} noncePublic
* @param {Point} pub
* @param {Uint8Array} message
*/
async function verifyBlindSignature(S, noncePublic, pub, message) {
const valid = await index_js_1.EdDSA.verifyRaw(S, noncePublic, pub, message);
if (!valid) {
console.error(`Signature failed. \nM: ${(0, Serialization_js_1.bytesToBase64)(message)}\nS: ${S.toString()}\nNoncePublic: ${noncePublic.toBase64()}\nPublic: ${pub.toBase64()}`);
}
return valid;
}
/**
* @param {bigint} S
* @param {Point} noncePublic
*/
function serializeBlindSig(S, noncePublic) {
return (0, Serialization_js_1.ConcatUint8Arrays)([(0, Serialization_js_1.BigIntToByteArray)(S), noncePublic.toRawBytes()]);
}
//# sourceMappingURL=BlindSig.js.map