int CG21_KEY_RESHARE_ROUND1_N2()

in src/cg21/cg21_reshare.c [189:241]


int CG21_KEY_RESHARE_ROUND1_N2(csprng *RNG, const CG21_SSID *ssid, int ID, CG21_RESHARE_SETTING setting,
                               CG21_RESHARE_ROUND1_STORE_SECRET_N2 *storeSecret, CG21_RESHARE_ROUND1_STORE_PUB_N2 *storePub,
                               CG21_RESHARE_ROUND1_OUT *pubOut){

    // check ID is in N2, but not in T1
    bool check_T1 = false;
    bool check_N2 = false;
    for (int i=0; i<setting.t1; i++){
        if (ID == *(setting.T1 + i)){
            check_T1 = true;
        }
    }
    for (int i=0; i<setting.n2; i++){
        if (ID == *(setting.N2 + i)){
            check_N2 = true;
        }
    }

    if (check_T1!=false || check_N2!=true){
        return CG21_ID_IS_INVALID;
    }

    BIG_256_56 q;
    BIG_256_56 s;

    // sample rho_i
    BIG_256_56_rcopy(q, CURVE_Order_SECP256K1);
    BIG_256_56_randomnum(s, q, RNG);
    storePub->rho->len=EGS_SECP256K1;
    BIG_256_56_toBytes(storePub->rho->val,s);
    BIG_256_56_zero(s);

    // sample u_i
    BIG_256_56_randomnum(s, q, RNG);
    storePub->u->len=EGS_SECP256K1;
    BIG_256_56_toBytes(storePub->u->val,s);
    BIG_256_56_zero(s);

    // i component of (ssid,i,V)
    *pubOut->i = ID;
    *storePub->i = ID;

    // commit to random r
    SCHNORR_commit(RNG, storeSecret->r, storePub->A);

    //compute V_i
    int rc = CG21_KEY_RESHARE_GEN_V_N2(ssid, storePub, pubOut, setting);
    if (rc!=CG21_OK) {
        return rc;
    }

    return CG21_OK;
}