Too many people get the Secret getters wrong. What if we just always returned a Secret, and had a StringConverter to handle submitted secrets and transparently decrypt again?
This would eliminate this class of problem. Only storage would really need to be done as Secret, but the internal API types wouldn't matter so much.
Test cases need to include String typed encrypted secrets, and unmatched getter/setter types.