bc is surprisingly easy to deal with, even with all the POSIX limitations like one lowercase letter variable/function identifiers and strictly uppercase hex applied to everything if you have set the ibase=16 before.
The only *real* limitation is inability to return multiple values from functions, but come on, you've got arbitrary precision, nothing prevents you from just multiplying the first point coordinate by fucking 2^256 (or 2^100 in ibase=16) and then adding the second one and returning both as a single number...