int CG21_KEY_RESHARE_ROUND3_CHECK_V_T1()

in src/cg21/cg21_reshare.c [243:286]


int CG21_KEY_RESHARE_ROUND3_CHECK_V_T1(const CG21_SSID *ssid,
                                       CG21_RESHARE_SETTING setting,
                                       const CG21_RESHARE_ROUND1_STORE_PUB_T1 *ReceiveR3,
                                       CG21_RESHARE_ROUND1_OUT *ReceiveR2){


    // check Party IDs in both messages are the same
    if (*ReceiveR2->i != *ReceiveR3->i){
        return CG21_RESHARE_V_IS_NOT_VALID;
    }

    // ID should be in T1
    bool ID_in_T1=false;
    for (int i=0; i<setting.t1; i++){
        if (*(setting.T1+i) == *ReceiveR2->i){
            ID_in_T1 = true;
        }
    }
    if (!ID_in_T1){
        return CG21_RESHARE_V_IS_NOT_VALID;
    }

    int Vi;

    char v[SHA256];
    octet V = {0, sizeof(v), v};
    CG21_RESHARE_ROUND1_OUT pubOut;
    pubOut.i = &Vi;
    pubOut.V = &V;

    pubOut.i = ReceiveR2->i;

    //compute V_i
    int rc = CG21_KEY_RESHARE_GEN_V_T1(ssid, ReceiveR3, &pubOut, setting);
    if (rc!=CG21_OK)
        return rc;

    int ret = OCT_comp(pubOut.V, ReceiveR2->V);
    if (ret != 1){
        return CG21_RESHARE_V_IS_NOT_VALID;
    }

    return  CG21_OK;
}