Well, RMS you take the samples, square them (mind the increased number of bits -- probably truncate the fractional end), add them up over whatever period you're averaging over, then divide by the number of samples and sqrt it. (Presumably the number of samples will be a power of 2, so shifting can be used instead of division. The sqrt will have to be written out somehow or another, but the compiler or library will have a solution for that.)
For power, instead of multiplying one signal by itself, multiply V times I, i.e. instantaneous power. Average that, and don't take sqrt. That's the time domain definition of average power.
Mind offsets -- any DC offset will contribute to the output, just as it's supposed to. If your signals are biased or unsigned, keep this in mind and adjust the math accordingly.
You can also find the apparent power |S|, which is rms(V) * rms(I). This is greater than the real power.
You can, finally, find reactive power Q by doing the vector subtraction, since |S| = |P + jQ| = sqrt(P^2 + Q^2). Of course, as you're taking the difference of two noisy signals, don't expect great accuracy this way.
Tim