Не совсем понятно, как соотносятся, например, padding и text, ну да ладно.
Я провел эксперименты на питоне (pycryptodome) и выяснилось следующее.
Простого способа задать произвольное внутреннее состояние (32х битные значения A, B, C, D) библиотека не предоставляет. Но можно скопировать экземпляр хэшируюшего класса с его текущим внутренним состоянием для дальнейшего использования.
Далее, запрос значения хеша (hasher.hexdigest()) приводит к выравниванию и финализации входных данных и изменению внутреннего состояния. Учтя эти два момента, т.е. копируя экземпляр класса до вызова hasher.hexdigest(), получилось удлиннить хеш без знания секрета.
Таким образом, если у вас что-то не получается, можно посоветовать обратить пристальное внимание
1) на вычисление выравнивания и
2) на задание внутреннего состояния MD4.
В обоих случаях надо учитывать endianness, подробнее в RFC.