How to rotate around a pivot


I don't understand how to make multiple transformations at once and get the result. I'm not sure if it is a problem with the order in which it should happen. The gp_Trsf seems to make one transformation at a time and therefor I think multiple gp_Trsf must be chained to get the result.

My use case is to rotate around a pivot. Therefor I need to subtract, rotate and add to get the correct position.
As per documentation of opencascade ( I need to create a gp_Trsf for every transformation and chain them TopLoc_Location.Multiplied().

This is what I do so far:

gp_XYZ pivot(25., 75., 33.);
gp_XYZ originalPos = world.TranslationPart(); //originalPos = (5.0/125.0/20.0)
gp_Trsf subTrsf;
gp_XYZ subPos = originalPos.Subtracted(pivot);
TopLoc_Location sub(subTrsf);

gp_Trsf rotTrsf;
TopLoc_Location rot(rotTrsf);

gp_Trsf addTrsf;
TopLoc_Location add(addTrsf);

TopLoc_Location result = sub * rot * add;

This is the process in screenshots, the red arrow points to the pivot and the yellow to 0,0,0:

But it does not end in the location where it should be. I also suspect that I didn't understand how the rotation works?

Any help is appreciated...