I'm not sure I follow, it sounds like you're using DC (which is undefined, as he doesn't have C) to find C. Am I misinterpreting?

Oops, I did make that assumption, though only for a minor portion of the solution. The trick is that there will be exactly two tangent lines from H onto the circle at D (unless H is on that circle, in which case you get one tangent with a different meaning; you'd be working with fixed-distance points on the circle instead of tangent lines at that point but otherwise the solution is the same, I think). You just need to select the right line to give you the desired K (midpoint of DC). Assuming you have some idea of the topology you're going for (as in the picture), you could filter out the tangent in one of several ways.

One way to do the filtering would be to take candidate vector H->K with the largest possible dot product result with the vector G->D so it'll find the tangent on the side of the circle least likely to be intersecting DEFG. Another way would be to pick the tangent that does not intersect FD. The correct criteria is going to depend on what you plan to generalize out of the given example.

In any event, the answer lies in that circle at point D with radius 2 and tangent lines. Find the tangents, select the one you want to keep, that gives you K, from that find C, and then finding A and B should be trivial.