1*90e502c7SAndroid Build Coastguard Worker /* 2*90e502c7SAndroid Build Coastguard Worker * aes_gcm.h 3*90e502c7SAndroid Build Coastguard Worker * 4*90e502c7SAndroid Build Coastguard Worker * Header for AES Galois Counter Mode. 5*90e502c7SAndroid Build Coastguard Worker * 6*90e502c7SAndroid Build Coastguard Worker * John A. Foley 7*90e502c7SAndroid Build Coastguard Worker * Cisco Systems, Inc. 8*90e502c7SAndroid Build Coastguard Worker * 9*90e502c7SAndroid Build Coastguard Worker */ 10*90e502c7SAndroid Build Coastguard Worker /* 11*90e502c7SAndroid Build Coastguard Worker * 12*90e502c7SAndroid Build Coastguard Worker * Copyright (c) 2013-2017, Cisco Systems, Inc. 13*90e502c7SAndroid Build Coastguard Worker * All rights reserved. 14*90e502c7SAndroid Build Coastguard Worker * 15*90e502c7SAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without 16*90e502c7SAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions 17*90e502c7SAndroid Build Coastguard Worker * are met: 18*90e502c7SAndroid Build Coastguard Worker * 19*90e502c7SAndroid Build Coastguard Worker * Redistributions of source code must retain the above copyright 20*90e502c7SAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer. 21*90e502c7SAndroid Build Coastguard Worker * 22*90e502c7SAndroid Build Coastguard Worker * Redistributions in binary form must reproduce the above 23*90e502c7SAndroid Build Coastguard Worker * copyright notice, this list of conditions and the following 24*90e502c7SAndroid Build Coastguard Worker * disclaimer in the documentation and/or other materials provided 25*90e502c7SAndroid Build Coastguard Worker * with the distribution. 26*90e502c7SAndroid Build Coastguard Worker * 27*90e502c7SAndroid Build Coastguard Worker * Neither the name of the Cisco Systems, Inc. nor the names of its 28*90e502c7SAndroid Build Coastguard Worker * contributors may be used to endorse or promote products derived 29*90e502c7SAndroid Build Coastguard Worker * from this software without specific prior written permission. 30*90e502c7SAndroid Build Coastguard Worker * 31*90e502c7SAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 32*90e502c7SAndroid Build Coastguard Worker * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 33*90e502c7SAndroid Build Coastguard Worker * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS 34*90e502c7SAndroid Build Coastguard Worker * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE 35*90e502c7SAndroid Build Coastguard Worker * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, 36*90e502c7SAndroid Build Coastguard Worker * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 37*90e502c7SAndroid Build Coastguard Worker * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 38*90e502c7SAndroid Build Coastguard Worker * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 39*90e502c7SAndroid Build Coastguard Worker * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 40*90e502c7SAndroid Build Coastguard Worker * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 41*90e502c7SAndroid Build Coastguard Worker * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 42*90e502c7SAndroid Build Coastguard Worker * OF THE POSSIBILITY OF SUCH DAMAGE. 43*90e502c7SAndroid Build Coastguard Worker * 44*90e502c7SAndroid Build Coastguard Worker */ 45*90e502c7SAndroid Build Coastguard Worker 46*90e502c7SAndroid Build Coastguard Worker #ifndef AES_GCM_H 47*90e502c7SAndroid Build Coastguard Worker #define AES_GCM_H 48*90e502c7SAndroid Build Coastguard Worker 49*90e502c7SAndroid Build Coastguard Worker #include "cipher.h" 50*90e502c7SAndroid Build Coastguard Worker #include "srtp.h" 51*90e502c7SAndroid Build Coastguard Worker #include "datatypes.h" 52*90e502c7SAndroid Build Coastguard Worker 53*90e502c7SAndroid Build Coastguard Worker #ifdef OPENSSL 54*90e502c7SAndroid Build Coastguard Worker 55*90e502c7SAndroid Build Coastguard Worker #include <openssl/evp.h> 56*90e502c7SAndroid Build Coastguard Worker #include <openssl/aes.h> 57*90e502c7SAndroid Build Coastguard Worker 58*90e502c7SAndroid Build Coastguard Worker typedef struct { 59*90e502c7SAndroid Build Coastguard Worker int key_size; 60*90e502c7SAndroid Build Coastguard Worker int tag_len; 61*90e502c7SAndroid Build Coastguard Worker EVP_CIPHER_CTX *ctx; 62*90e502c7SAndroid Build Coastguard Worker srtp_cipher_direction_t dir; 63*90e502c7SAndroid Build Coastguard Worker } srtp_aes_gcm_ctx_t; 64*90e502c7SAndroid Build Coastguard Worker 65*90e502c7SAndroid Build Coastguard Worker #endif /* OPENSSL */ 66*90e502c7SAndroid Build Coastguard Worker 67*90e502c7SAndroid Build Coastguard Worker #ifdef NSS 68*90e502c7SAndroid Build Coastguard Worker 69*90e502c7SAndroid Build Coastguard Worker #include <nss.h> 70*90e502c7SAndroid Build Coastguard Worker #include <pk11pub.h> 71*90e502c7SAndroid Build Coastguard Worker 72*90e502c7SAndroid Build Coastguard Worker #define MAX_AD_SIZE 2048 73*90e502c7SAndroid Build Coastguard Worker 74*90e502c7SAndroid Build Coastguard Worker typedef struct { 75*90e502c7SAndroid Build Coastguard Worker int key_size; 76*90e502c7SAndroid Build Coastguard Worker int tag_size; 77*90e502c7SAndroid Build Coastguard Worker srtp_cipher_direction_t dir; 78*90e502c7SAndroid Build Coastguard Worker NSSInitContext *nss; 79*90e502c7SAndroid Build Coastguard Worker PK11SymKey *key; 80*90e502c7SAndroid Build Coastguard Worker uint8_t iv[12]; 81*90e502c7SAndroid Build Coastguard Worker uint8_t aad[MAX_AD_SIZE]; 82*90e502c7SAndroid Build Coastguard Worker int aad_size; 83*90e502c7SAndroid Build Coastguard Worker CK_GCM_PARAMS params; 84*90e502c7SAndroid Build Coastguard Worker uint8_t tag[16]; 85*90e502c7SAndroid Build Coastguard Worker } srtp_aes_gcm_ctx_t; 86*90e502c7SAndroid Build Coastguard Worker 87*90e502c7SAndroid Build Coastguard Worker #endif /* NSS */ 88*90e502c7SAndroid Build Coastguard Worker 89*90e502c7SAndroid Build Coastguard Worker #endif /* AES_GCM_H */ 90