1 /******************************************************************************* 2 * Copyright 2007-2018 Intel Corporation 3 * All Rights Reserved. 4 * 5 * If this software was obtained under the Intel Simplified Software License, 6 * the following terms apply: 7 * 8 * The source code, information and material ("Material") contained herein is 9 * owned by Intel Corporation or its suppliers or licensors, and title to such 10 * Material remains with Intel Corporation or its suppliers or licensors. The 11 * Material contains proprietary information of Intel or its suppliers and 12 * licensors. The Material is protected by worldwide copyright laws and treaty 13 * provisions. No part of the Material may be used, copied, reproduced, 14 * modified, published, uploaded, posted, transmitted, distributed or disclosed 15 * in any way without Intel's prior express written permission. No license under 16 * any patent, copyright or other intellectual property rights in the Material 17 * is granted to or conferred upon you, either expressly, by implication, 18 * inducement, estoppel or otherwise. Any license under such intellectual 19 * property rights must be express and approved by Intel in writing. 20 * 21 * Unless otherwise agreed by Intel in writing, you may not remove or alter this 22 * notice or any other notice embedded in Materials by Intel or Intel's 23 * suppliers or licensors in any way. 24 * 25 * 26 * If this software was obtained under the Apache License, Version 2.0 (the 27 * "License"), the following terms apply: 28 * 29 * You may not use this file except in compliance with the License. You may 30 * obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 31 * 32 * 33 * Unless required by applicable law or agreed to in writing, software 34 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT 35 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 36 * 37 * See the License for the specific language governing permissions and 38 * limitations under the License. 39 *******************************************************************************/ 40 41 /* 42 // 43 // Purpose: 44 // Cryptography Primitive. 45 // Ciper-based Message Authentication Code (CMAC) see SP800-38B 46 // Internal Definitions and Internal Functions Prototypes 47 // 48 */ 49 50 #if !defined(_PCP_CMAC_H) 51 #define _PCP_CMAC_H 52 53 #include "pcprij.h" 54 55 56 /* 57 // Rijndael128 based CMAC context 58 */ 59 struct _cpAES_CMAC { 60 IppCtxId idCtx; /* CMAC identifier */ 61 int index; /* internal buffer entry (free) */ 62 int dummy[2]; /* align-16 */ 63 Ipp8u k1[MBS_RIJ128]; /* k1 subkey */ 64 Ipp8u k2[MBS_RIJ128]; /* k2 subkey */ 65 Ipp8u mBuffer[MBS_RIJ128];/* buffer */ 66 Ipp8u mMAC[MBS_RIJ128]; /* intermediate digest */ 67 __ALIGN16 /* aligned AES context */ 68 IppsRijndael128Spec mCipherCtx; 69 }; 70 71 /* alignment */ 72 //#define CMACRIJ_ALIGNMENT (RIJ_ALIGNMENT) 73 #define AESCMAC_ALIGNMENT (RIJ_ALIGNMENT) 74 75 /* 76 // Useful macros 77 */ 78 #define CMAC_ID(stt) ((stt)->idCtx) 79 #define CMAC_INDX(stt) ((stt)->index) 80 #define CMAC_K1(stt) ((stt)->k1) 81 #define CMAC_K2(stt) ((stt)->k2) 82 #define CMAC_BUFF(stt) ((stt)->mBuffer) 83 #define CMAC_MAC(stt) ((stt)->mMAC) 84 #define CMAC_CIPHER(stt) ((stt)->mCipherCtx) 85 86 /* valid context ID */ 87 #define VALID_AESCMAC_ID(ctx) (CMAC_ID((ctx))==idCtxCMAC) 88 89 #endif /* _PCP_CMAC_H */ 90