Randomized black-box group algorithm for normality testing

Assuming random oracles for both the group and the subgroup

 * Use the random oracle for $$G$$ to pick an element $$g \in G$$ uniformly at random.
 * Use the random oracle for $$H$$ to pick an element $$h \in H$$ uniformly at random.
 * Use the membership test to determine whether the element $$ghg^{-1}$$ is an element of $$H$$. If No, declare the answer to be No and output $$g,h$$ as proof. If Yes, then this particular choice did not disprove the hypothesis of normality.

If $$H$$ is not normal in $$G$$, the probability that the test would show Yes for $$H$$ is at most $$3/4$$. Thus, if we run the test $$k$$ times, the probability of getting a false "Yes" each time is at most $$(3/4)^k$$. We can thus obtain an arbitrarily high degree of certainty.

Assuming a random oracle only for the group
If $$H$$ has index at most $$d$$ in $$G$$, we can simulate the random oracle in $$H$$ using a random oracle in $$G$$ as follows: use the oracle in $$G$$ along with the membership test in $$H$$ to generate the random element of $$H$$ with probability $$1/d$$ per attempt, and keep repeating the attempts until you get an element of $$H$$.