As a general statement, tool offsets can happen in two environments, CAD/CAM software, or controller.
The way the machine knows the difference is generally determined by whether or not the feed move is commanded as "with" or "without" cutter compensation. Typically with a G41 or G42 command. If they are all G40, then no cutter comp is applied or existing comp is removed, exact behavior depends on the controller.
In the CAD/CAM package, one usually has the option of using "Machine compensation" or "CAD/CAM compensation". In the first case, the CAD/CAM package Post Processor will output the necessary tool comp commands such as G41 or G42 (comp left and comp right respectively) and the coordinates are the geometry coordinates plus actual lead-in and lead-out end points. In the latter case, the CAD/CAM package will output the actual tool path that is to be followed. This means that the machine will follow the CAM generated path regardless of the tool in the spindle and regardless of the tool diameter information in the offset registries/tables.
So, in your described case it is hard to tell with the information given. If your code includes a G41 or G42 then the machine controller is applying the offset.
So, to answer the end question:
I can't tell which one is doing the offsetting, but it would be easy to tell by lie-ing to either the machine or the CAM software, cut something, and determine from the finished size which one was used. Yes you could do all the offset work in the CAM program, however, that may be unwise. The primary purpose for cutter compensation is to accomodate tools sizes deviation from nominal, through sharpening of the tool or by deliberately using a differnet size tool for the job WITHOUT requiring a change to the program. Note: using a smaller tool is usually easier than using a larger one if your lead ins are along an edge and nearly tangent to the tool path, as a larger tool may foul the part, a smaller one will not.
Tool profiles and how they are defined is another matter, and I suspect it is software specific. I use a AlphaCAM so my experience may be substantially different than yours. In my CAM software, I define tools, and save them in the tool library, so when I want a 1/2"cd 1.25" cl 2 flute compression bit, I select that tool. The library tells AlphaCAM what the tool length is, and diameter, starting rpms and feedrates (optionally depending on material, sfm, number of flutes and rpm-derived-from sfm). I choose either machine compensation or ACAM generated toolpath. If I want a roundover tool, or custom ground profile, I first draw the tool profile, then use the AlphaCAM "User defined tool" feature to input it into the library. This process also includes the option to define a specific point on the profile for determining the diameter and a similar option for the tools Z reference point. These options can be used in special cases such as mutli profile tools or cases where you want to reference the small diameter of a round over tool instead of the default intersection between the material top and where the tool touches the top (typically the major diameter or close too it).