This project will research some basic and important areas in cryptography and theoretical computer science that have significant interaction with combinatorics, in particular, secrecy and authentication codes, secret-sharing schemes and universal hashing. Informally, a secrecy code is used in order to keep the contents of message secret, while an authentication code is used to ensure the "integrity" of a message, i.e. that the message has not been tampered with. Threshold schemes and secret-sharing schemes were introduced to handle problems such as key distribution and shared control of jointly initiated events. Universal hashing is a technique to ensure good average-case behaviour of hash function, and has applications in diverse areas of theoretical computer science, including cryptography. New constructions and algorithms will be investigated for these types of cryptographic protocols. The problems to be researched include: construction of optimal codes for authentication and secrecy and construction of codes which permit arbitration; construction of secret-sharing schemes for general access structures and efficient implementations of these codes; and constructions and bounds for universal classes of hash function. All of these questions involve combinatorial designs in a fundamental way, both in constructions and in characterizations.