//Generate Signing Keys //This function is called by each participant in //A ring multisignature transaction. //The participant will send the returned parameters //to whomever is managing the transaction. //returns a, aG, aHP and I tuple<key, key, key, key> InitiateRMS(key x) { key I = scalarmultKey(hashToPoint(scalarmultBase(x)), x); key a, aG; skpkGen(a, aG); key aHP = scalarmultKey(hashToPoint(scalarmultBase(x)), a); return make_tuple(a, aG, aHP, I); }
key commit(xmr_amount amount, key mask) { mask = scalarmultBase(mask); key am = d2h(amount); key bH = scalarmultH(am); addKeys(mask, mask, bH); return mask; }
key commit(xmr_amount amount, const key &mask) { key c = scalarmultBase(mask); key am = d2h(amount); key bH = scalarmultH(am); addKeys(c, c, bH); return c; }
key zeroCommit(xmr_amount amount) { key mask = identity(); mask = scalarmultBase(mask); key am = d2h(amount); key bH = scalarmultH(am); addKeys(mask, mask, bH); return mask; }
//addKeys1 //aGB = aG + B where a is a scalar, G is the basepoint, and B is a point void addKeys1(key &aGB, const key &a, const key & B) { key aG = scalarmultBase(a); addKeys(aGB, aG, B); }
//generates a random secret and corresponding public key tuple<key, key> skpkGen() { key sk = skGen(); key pk = scalarmultBase(sk); return make_tuple(sk, pk); }
//generates a random secret and corresponding public key void skpkGen(key &sk, key &pk) { skGen(sk); scalarmultBase(pk, sk); }
//generates a random curve point (for testing) key pkGen() { key sk = skGen(); key pk = scalarmultBase(sk); return pk; }