So, wow, that was a lot of learning.
The mask itself isn't important. The mask can be calculated on the fly every time you want to create it (though caching would probably be an improvement) so that you don't need to guess the right bit flip to +1 the value; the plaintext value can be directly xor'd with the desired value because the operations I insert are commutative.
Also I picked a fairly roundabout way to implement the block breaker and mask.
A big reorganization and progress
So, solved #10 in this, somehow, too.
Instead of having crates organized by challenge number, they're now organized by focus. I can move through challenges faster this way.