Because of this, cryptographic primitives are designed to do one very specific task in a precisely defined and highly reliable fashion.
The reasons include: Cryptographic primitives are one of the building blocks of every cryptosystem, e.g., TLS, SSL, SSH, etc.
For example, a bare encryption algorithm will provide no authentication mechanism, nor any explicit message integrity checking.
[citation needed] There are some basic properties that can be verified with automated methods, such as BAN logic.
Protocol design is an art requiring deep knowledge and much practice; even then mistakes are common.