1 /* lib/crypto/builtin/camellia/camellia.h - Camellia version 1.2.0 */ 2 /* 3 * Copyright (c) 2006,2007,2009 4 * NTT (Nippon Telegraph and Telephone Corporation) . All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer as 11 * the first lines of this file unmodified. 12 * 2. Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * 16 * THIS SOFTWARE IS PROVIDED BY NTT ``AS IS'' AND ANY EXPRESS OR 17 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 18 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * IN NO EVENT SHALL NTT BE LIABLE FOR ANY DIRECT, INDIRECT, 20 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 21 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 22 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 23 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 26 */ 27 28 #ifndef HEADER_CAMELLIA_H 29 #define HEADER_CAMELLIA_H 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #include <stdint.h> 36 37 #define CAMELLIA_BLOCK_SIZE 16 38 #define CAMELLIA_TABLE_BYTE_LEN 272 39 #define CAMELLIA_TABLE_WORD_LEN (CAMELLIA_TABLE_BYTE_LEN / 4) 40 41 #ifndef BLOCK_SIZE 42 #define BLOCK_SIZE CAMELLIA_BLOCK_SIZE 43 #endif 44 45 typedef unsigned int KEY_TABLE_TYPE[CAMELLIA_TABLE_WORD_LEN]; 46 47 /* u32 must be 32bit word */ 48 typedef uint32_t u32; 49 typedef uint8_t u8; 50 51 /* For the Kerberos 5 tree, hide the Camellia symbol names. */ 52 #define camellia_setup128 k5_camellia_setup128 53 #define camellia_setup192 k5_camellia_setup192 54 #define camellia_setup256 k5_camellia_setup256 55 #define camellia_encrypt128 k5_camellia_encrypt128 56 #define camellia_decrypt128 k5_camellia_decrypt128 57 #define camellia_encrypt256 k5_camellia_encrypt256 58 #define camellia_decrypt256 k5_camellia_decrypt256 59 #define Camellia_Ekeygen k5_Camellia_Ekeygen 60 #define Camellia_EncryptBlock k5_Camellia_EncryptBlock 61 #define Camellia_DecryptBlock k5_Camellia_DecryptBlock 62 63 void camellia_setup128(const unsigned char *key, u32 *subkey); 64 void camellia_setup192(const unsigned char *key, u32 *subkey); 65 void camellia_setup256(const unsigned char *key, u32 *subkey); 66 void camellia_encrypt128(const u32 *subkey, u32 *io); 67 void camellia_decrypt128(const u32 *subkey, u32 *io); 68 void camellia_encrypt256(const u32 *subkey, u32 *io); 69 void camellia_decrypt256(const u32 *subkey, u32 *io); 70 71 void Camellia_Ekeygen(const int keyBitLength, 72 const unsigned char *rawKey, 73 KEY_TABLE_TYPE keyTable); 74 75 void Camellia_EncryptBlock(const int keyBitLength, 76 const unsigned char *plaintext, 77 const KEY_TABLE_TYPE keyTable, 78 unsigned char *cipherText); 79 80 void Camellia_DecryptBlock(const int keyBitLength, 81 const unsigned char *cipherText, 82 const KEY_TABLE_TYPE keyTable, 83 unsigned char *plaintext); 84 85 86 typedef uint16_t cam_fret; /* type for function return value */ 87 #define camellia_good 1 88 #define camellia_bad 1 89 #ifndef CAMELLIA_DLL /* implement normal or DLL functions */ 90 #define cam_rval cam_fret 91 #else 92 #define cam_rval cam_fret __declspec(dllexport) _stdcall 93 #endif 94 95 typedef struct /* the Camellia context for encryption */ 96 { 97 uint32_t k_sch[CAMELLIA_TABLE_WORD_LEN]; /* the encryption key schedule */ 98 int keybitlen; /* bitlength of key */ 99 } camellia_ctx; 100 101 102 /* for Kerberos 5 tree -- hide names! */ 103 #define camellia_blk_len krb5int_camellia_blk_len 104 #define camellia_enc_key krb5int_camellia_enc_key 105 #define camellia_enc_blk krb5int_camellia_enc_blk 106 #define camellia_dec_key krb5int_camellia_dec_key 107 #define camellia_dec_blk krb5int_camellia_dec_blk 108 109 cam_rval camellia_blk_len(unsigned int blen, camellia_ctx cx[1]); 110 cam_rval camellia_enc_key(const unsigned char in_key[], unsigned int klen, 111 camellia_ctx cx[1]); 112 cam_rval camellia_enc_blk(const unsigned char in_blk[], 113 unsigned char out_blk[], 114 const camellia_ctx cx[1]); 115 cam_rval camellia_dec_key(const unsigned char in_key[], unsigned int klen, 116 camellia_ctx cx[1]); 117 cam_rval camellia_dec_blk(const unsigned char in_blk[], 118 unsigned char out_blk[], 119 const camellia_ctx cx[1]); 120 121 #ifdef __cplusplus 122 } 123 #endif 124 125 #endif /* HEADER_CAMELLIA_H */ 126