16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * aes.h
36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * header file for the AES block cipher
56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * David A. McGrew
76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Cisco Systems, Inc.
86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
96ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Copyright (c) 2001-2006, Cisco Systems, Inc.
136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * All rights reserved.
146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Redistribution and use in source and binary forms, with or without
166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * modification, are permitted provided that the following conditions
176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * are met:
186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions of source code must retain the above copyright
206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   notice, this list of conditions and the following disclaimer.
216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Redistributions in binary form must reproduce the above
236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   copyright notice, this list of conditions and the following
246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   disclaimer in the documentation and/or other materials provided
256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   with the distribution.
266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   Neither the name of the Cisco Systems, Inc. nor the names of its
286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   contributors may be used to endorse or promote products derived
296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *   from this software without specific prior written permission.
306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE.
436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org *
446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#ifndef _AES_H
476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#define _AES_H
486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "config.h"
506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "datatypes.h"
526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "gf2_8.h"
536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#include "err.h"
546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* aes internals */
566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgtypedef struct {
586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  v128_t round[15];
596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org  int num_rounds;
606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org} aes_expanded_key_t;
616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgerr_status_t
636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_expand_encryption_key(const uint8_t *key,
646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org			  int key_len,
656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org			  aes_expanded_key_t *expanded_key);
666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgerr_status_t
686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_expand_decryption_key(const uint8_t *key,
696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org			  int key_len,
706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org			  aes_expanded_key_t *expanded_key);
716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_encrypt(v128_t *plaintext, const aes_expanded_key_t *exp_key);
746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_decrypt(v128_t *plaintext, const aes_expanded_key_t *exp_key);
776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#if 0
796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/*
806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * internal functions
816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */
826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_init_sbox(void);
856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgvoid
876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgaes_compute_tables(void);
886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif
896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org
906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org#endif /* _AES_H */
91