Could you emphasize - why exactly introducing private header is such a disaster that we have to waste time and efforts trying to not let it happen?
- It's a useless file that's used at exactly 1 place and not even for code used in installed libs but just for the test. At that point you might just as well just pre-declare them in the test source file directly. - It prevents making those function static - It requires static linking for the test - For the A5/[3/4] you bypass the osmo_a5 wrapper and thus don't cover a breakage that would happen there. The alternative solves all of the above and requires exactly 1 lines changes in the original _a5_4 function : uint32_t fn_count = (fn_correct) ? osmo_a5_fn_count(fn) : fn; becomes uint32_t fn_count = (fn & (1<<31)) ? (fn & ~(1<<31)) : osmo_a5_fn_count(fn); btw, in your test I also see + osmo_a5(4, key, osmo_a5_fn(count), dlout, NULL); + osmo_a5(4, key, osmo_a5_fn(count), NULL, ulout); Why separate ? The case where both dlout and ulout are requested at the same time should work as well. Cheers, Sylvain