1 /* 2 * crypto_types.h 3 * 4 * constants for cipher types and auth func types 5 * 6 * David A. McGrew 7 * Cisco Systems, Inc. 8 */ 9 /* 10 * 11 * Copyright(c) 2001-2006 Cisco Systems, Inc. 12 * All rights reserved. 13 * 14 * Redistribution and use in source and binary forms, with or without 15 * modification, are permitted provided that the following conditions 16 * are met: 17 * 18 * Redistributions of source code must retain the above copyright 19 * notice, this list of conditions and the following disclaimer. 20 * 21 * Redistributions in binary form must reproduce the above 22 * copyright notice, this list of conditions and the following 23 * disclaimer in the documentation and/or other materials provided 24 * with the distribution. 25 * 26 * Neither the name of the Cisco Systems, Inc. nor the names of its 27 * contributors may be used to endorse or promote products derived 28 * from this software without specific prior written permission. 29 * 30 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 31 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 32 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 33 * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 34 * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 35 * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 36 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 37 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 38 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 39 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 40 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 41 * OF THE POSSIBILITY OF SUCH DAMAGE. 42 * 43 */ 44 45 #ifndef CRYPTO_TYPES_H 46 #define CRYPTO_TYPES_H 47 48 /** 49 * @defgroup Algos Cryptographic Algorithms 50 * 51 * 52 * This library provides several different cryptographic algorithms, 53 * each of which can be selected by using the cipher_type_id_t and 54 * auth_type_id_t. These algorithms are documented below. 55 * 56 * Authentication functions that use the Universal Security Transform 57 * (UST) must be used in conjunction with a cipher other than the null 58 * cipher. These functions require a per-message pseudorandom input 59 * that is generated by the cipher. 60 * 61 * The identifiers STRONGHOLD_AUTH and STRONGHOLD_CIPHER identify the 62 * strongest available authentication function and cipher, 63 * respectively. They are resolved at compile time to the strongest 64 * available algorithm. The stronghold algorithms can serve as did 65 * the keep of a medieval fortification; they provide the strongest 66 * defense (or the last refuge). 67 * 68 * @{ 69 */ 70 71 /** 72 * @defgroup Ciphers Cipher Types 73 * 74 * @brief Each cipher type is identified by an unsigned integer. The 75 * cipher types available in this edition of libSRTP are given 76 * by the #defines below. 77 * 78 * A cipher_type_id_t is an identifier for a cipher_type; only values 79 * given by the #defines above (or those present in the file 80 * crypto_types.h) should be used. 81 * 82 * The identifier STRONGHOLD_CIPHER indicates the strongest available 83 * cipher, allowing an application to choose the strongest available 84 * algorithm without any advance knowledge about the avaliable 85 * algorithms. 86 * 87 * @{ 88 */ 89 90 /** 91 * @brief The null cipher performs no encryption. 92 * 93 * The NULL_CIPHER leaves its inputs unaltered, during both the 94 * encryption and decryption operations. This cipher can be chosen 95 * to indicate that no encryption is to be performed. 96 */ 97 #define NULL_CIPHER 0 98 99 /** 100 * @brief AES-128 Integer Counter Mode (AES ICM) 101 * 102 * AES-128 ICM is the variant of counter mode that is used by Secure RTP. 103 * This cipher uses a 16-octet key and a 30-octet offset (or salt) value. 104 */ 105 #define AES_128_ICM 1 106 107 /** 108 * @brief SEAL 3.0 109 * 110 * SEAL is the Software-Optimized Encryption Algorithm of Coppersmith 111 * and Rogaway. Nota bene: this cipher is IBM proprietary. 112 */ 113 #define SEAL 2 114 115 /** 116 * @brief AES-128 Integer Counter Mode (AES ICM) 117 * 118 * AES-128 ICM is the variant of counter mode that is used by Secure RTP. 119 * This cipher uses a 16-octet key and a 30-octet offset (or salt) value. 120 */ 121 #define AES_128_CBC 3 122 123 /** 124 * @brief Strongest available cipher. 125 * 126 * This identifier resolves to the strongest cipher type available. 127 */ 128 #define STRONGHOLD_CIPHER AES_128_ICM 129 130 /** 131 * @} 132 */ 133 134 135 136 /** 137 * @defgroup Authentication Authentication Function Types 138 * 139 * @brief Each authentication function type is identified by an 140 * unsigned integer. The authentication function types available in 141 * this edition of libSRTP are given by the #defines below. 142 * 143 * An auth_type_id_t is an identifier for an authentication function type; 144 * only values given by the #defines above (or those present in the 145 * file crypto_types.h) should be used. 146 * 147 * The identifier STRONGHOLD_AUTH indicates the strongest available 148 * authentication function, allowing an application to choose the 149 * strongest available algorithm without any advance knowledge about 150 * the avaliable algorithms. The stronghold algorithms can serve as 151 * did the keep of a medieval fortification; they provide the 152 * strongest defense (or the last refuge). 153 * 154 * @{ 155 */ 156 157 /** 158 * @brief The null authentication function performs no authentication. 159 * 160 * The NULL_AUTH function does nothing, and can be selected to indicate 161 * that authentication should not be performed. 162 */ 163 #define NULL_AUTH 0 164 165 /** 166 * @brief UST with TMMH Version 2 167 * 168 * UST_TMMHv2 implements the Truncated Multi-Modular Hash using 169 * UST. This function must be used in conjunction with a cipher other 170 * than the null cipher. 171 * with a cipher. 172 */ 173 #define UST_TMMHv2 1 174 175 /** 176 * @brief (UST) AES-128 XORMAC 177 * 178 * UST_AES_128_XMAC implements AES-128 XORMAC, using UST. Nota bene: 179 * the XORMAC algorithm is IBM proprietary. 180 */ 181 #define UST_AES_128_XMAC 2 182 183 /** 184 * @brief HMAC-SHA1 185 * 186 * HMAC_SHA1 implements the Hash-based MAC using the NIST Secure 187 * Hash Algorithm version 1 (SHA1). 188 */ 189 #define HMAC_SHA1 3 190 191 /** 192 * @brief Strongest available authentication function. 193 * 194 * This identifier resolves to the strongest available authentication 195 * function. 196 */ 197 #define STRONGHOLD_AUTH HMAC_SHA1 198 199 /** 200 * @} 201 */ 202 /** 203 * @} 204 */ 205 206 #endif /* CRYPTO_TYPES_H */ 207