1 /* 2 * Copyright 2010-2016 The OpenSSL Project Authors. All Rights Reserved. 3 * 4 * Licensed under the OpenSSL license (the "License"). You may not use 5 * this file except in compliance with the License. You can obtain a copy 6 * in the file LICENSE in the source distribution or at 7 * https://www.openssl.org/source/license.html 8 */ 9 10 #include <stdio.h> 11 #include "internal/cryptlib.h" 12 #include <openssl/evp.h> 13 #include <openssl/cmac.h> 14 #include "crypto/asn1.h" 15 16 /* 17 * CMAC "ASN1" method. This is just here to indicate the maximum CMAC output 18 * length and to free up a CMAC key. 19 */ 20 21 static int cmac_size(const EVP_PKEY *pkey) 22 { 23 return EVP_MAX_BLOCK_LENGTH; 24 } 25 26 static void cmac_key_free(EVP_PKEY *pkey) 27 { 28 CMAC_CTX *cmctx = EVP_PKEY_get0(pkey); 29 CMAC_CTX_free(cmctx); 30 } 31 32 const EVP_PKEY_ASN1_METHOD cmac_asn1_meth = { 33 EVP_PKEY_CMAC, 34 EVP_PKEY_CMAC, 35 0, 36 37 "CMAC", 38 "OpenSSL CMAC method", 39 40 0, 0, 0, 0, 41 42 0, 0, 0, 43 44 cmac_size, 45 0, 0, 46 0, 0, 0, 0, 0, 0, 0, 47 48 cmac_key_free, 49 0, 50 0, 0 51 }; 52