Many cryptographic primitives and schemes have different security levels.
For example, an encryption scheme can be CPA-secure (secure against chosen-plaintext attacks)
or CCA-secure (secure against chosen-ciphertext attacks).
The security level of a cryptographic entity is specified by making the implementing class of the entity
declare that it implements a certain security level; for example, an encryption scheme that is CCA-secure will implement the Cca interface.
Different primitives have different families that define their security levels (e.g., hash functions, MACs, encryption).
It is often the case that different security levels of a given primitive form a hierarchy (e.g., any CCA-secure encryption scheme is also CPA-secure),
and in this case they extend each other. Thus, it suffices to implement a Cca interface and this immediately implies that a Cpa interface is also implied.
All of the interfaces expressing a security level are marker interfaces that define types of security level and do not have any functionality.