int CG21_VALIDATE_PARTIAL_PKS()

in src/cg21/cg21_presign.c [23:53]


int CG21_VALIDATE_PARTIAL_PKS(CG21_RESHARE_OUTPUT *reshareOutput){
    int size = reshareOutput->pk.pack_size;

    char cc[size][EFS_SECP256K1 + 1];
    octet CC[size];
    init_octets((char *)cc,   CC,   EFS_SECP256K1 + 1, size);

    char x_[EFS_SECP256K1 + 1];
    octet X = {0, sizeof(x_), x_};

    // unpack partial PKs into array of octets
    int rc = CG21_unpack(reshareOutput->pk.X_set_packed, size, CC, EFS_SECP256K1 + 1);
    if (rc!=CG21_OK){
        return rc;
    }

    // add all the partial PKs
    OCT_copy(&X, &CC[0]);
    for (int j =1; j<size; j++){
        CG21_ADD_TWO_PK(&X, &CC[j]);
    }

    // check whether the sum-of-PKs match the main PK
    rc = OCT_comp(&X, reshareOutput->pk.X);
    if (!rc){
        return CG21_PRESIGN_PARTIAL_PK_NOT_VALID;
    }


    return CG21_OK;
}