1392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL 2392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * project 2010. 3392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */ 4392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* ==================================================================== 5392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Copyright (c) 2010 The OpenSSL Project. All rights reserved. 6392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 7392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * Redistribution and use in source and binary forms, with or without 8392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * modification, are permitted provided that the following conditions 9392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * are met: 10392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 11392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 1. Redistributions of source code must retain the above copyright 12392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * notice, this list of conditions and the following disclaimer. 13392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 14392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 2. Redistributions in binary form must reproduce the above copyright 15392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * notice, this list of conditions and the following disclaimer in 16392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * the documentation and/or other materials provided with the 17392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * distribution. 18392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 19392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 3. All advertising materials mentioning features or use of this 20392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * software must display the following acknowledgment: 21392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * "This product includes software developed by the OpenSSL Project 22392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 23392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 24392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 25392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * endorse or promote products derived from this software without 26392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * prior written permission. For written permission, please contact 27392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * licensing@OpenSSL.org. 28392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 29392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 5. Products derived from this software may not be called "OpenSSL" 30392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * nor may "OpenSSL" appear in their names without prior written 31392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * permission of the OpenSSL Project. 32392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 33392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 6. Redistributions of any form whatsoever must retain the following 34392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * acknowledgment: 35392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * "This product includes software developed by the OpenSSL Project 36392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 37392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * 38392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 39392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 40392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 41392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 42392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 43392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 44392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 45392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 46392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 47392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 48392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 49392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * OF THE POSSIBILITY OF SUCH DAMAGE. 50392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * ==================================================================== 51392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */ 52392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 53392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <stdio.h> 54392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "cryptlib.h" 55392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <openssl/evp.h> 56392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include <openssl/cmac.h> 57392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom#include "asn1_locl.h" 58392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 59392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom/* CMAC "ASN1" method. This is just here to indicate the 60392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * maximum CMAC output length and to free up a CMAC 61392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom * key. 62392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom */ 63392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 64392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic int cmac_size(const EVP_PKEY *pkey) 65392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom { 66392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom return EVP_MAX_BLOCK_LENGTH; 67392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom } 68392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 69392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromstatic void cmac_key_free(EVP_PKEY *pkey) 70392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom { 71392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom CMAC_CTX *cmctx = (CMAC_CTX *)pkey->pkey.ptr; 72392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom if (cmctx) 73392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom CMAC_CTX_free(cmctx); 74392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom } 75392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 76392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstromconst EVP_PKEY_ASN1_METHOD cmac_asn1_meth = 77392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom { 78392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom EVP_PKEY_CMAC, 79392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom EVP_PKEY_CMAC, 80392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0, 81392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 82392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom "CMAC", 83392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom "OpenSSL CMAC method", 84392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 85392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0,0,0,0, 86392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 87392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0,0,0, 88392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 89392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmac_size, 90392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0, 91392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0,0,0,0,0,0,0, 92392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 93392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom cmac_key_free, 94392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0, 95392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 0,0 96392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom }; 97392aa7cc7d2b122614c5393c3e357da07fd07af3Brian Carlstrom 98