Domain engineering of a family of cryptography abstractions:
The figure below shows our family of cryptography abstractions:
And the figure below shows the interfaces proposed for all members, and the inflated interface:
In this design approach, the entity 'Key', a very important aspect of cryptography, was not separated from the crypter. We took this approach considering the fact that the expansion and treatment of the key is usually completelly dependent of the especific cryptography algoritm being implemented, and thus treating Key as a separate entity could be error prone and confusing, leading to assumpions that different Keys could be used with different Crypters.