| OLD | NEW |
| 1 /* crypto/camellia/camellia_locl.h -*- mode:C; c-file-style: "eay" -*- */ | 1 /* crypto/camellia/camellia_locl.h -*- mode:C; c-file-style: "eay" -*- */ |
| 2 /* ==================================================================== | 2 /* ==================================================================== |
| 3 * Copyright 2006 NTT (Nippon Telegraph and Telephone Corporation) . | 3 * Copyright 2006 NTT (Nippon Telegraph and Telephone Corporation) . |
| 4 * ALL RIGHTS RESERVED. | 4 * ALL RIGHTS RESERVED. |
| 5 * | 5 * |
| 6 * Intellectual Property information for Camellia: | 6 * Intellectual Property information for Camellia: |
| 7 * http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html | 7 * http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html |
| 8 * | 8 * |
| 9 * News Release for Announcement of Camellia open source: | 9 * News Release for Announcement of Camellia open source: |
| 10 * http://www.ntt.co.jp/news/news06e/0604/060413a.html | 10 * http://www.ntt.co.jp/news/news06e/0604/060413a.html |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, | 61 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, |
| 62 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) | 62 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) |
| 63 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED | 63 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED |
| 64 * OF THE POSSIBILITY OF SUCH DAMAGE. | 64 * OF THE POSSIBILITY OF SUCH DAMAGE. |
| 65 * ==================================================================== | 65 * ==================================================================== |
| 66 */ | 66 */ |
| 67 | 67 |
| 68 #ifndef HEADER_CAMELLIA_LOCL_H | 68 #ifndef HEADER_CAMELLIA_LOCL_H |
| 69 #define HEADER_CAMELLIA_LOCL_H | 69 #define HEADER_CAMELLIA_LOCL_H |
| 70 | 70 |
| 71 #include "openssl/e_os2.h" | 71 typedef unsigned int u32; |
| 72 #include <stdio.h> | 72 typedef unsigned char u8; |
| 73 #include <stdlib.h> | |
| 74 #include <string.h> | |
| 75 | 73 |
| 76 typedef unsigned char u8; | 74 int Camellia_Ekeygen(int keyBitLength, const u8 *rawKey, KEY_TABLE_TYPE keyTable
); |
| 77 typedef unsigned int u32; | 75 void Camellia_EncryptBlock_Rounds(int grandRounds, const u8 plaintext[], |
| 78 | 76 » » const KEY_TABLE_TYPE keyTable, u8 ciphertext[]); |
| 79 #ifdef __cplusplus | 77 void Camellia_DecryptBlock_Rounds(int grandRounds, const u8 ciphertext[], |
| 80 extern "C" { | 78 » » const KEY_TABLE_TYPE keyTable, u8 plaintext[]); |
| 81 #endif | 79 void Camellia_EncryptBlock(int keyBitLength, const u8 plaintext[], |
| 82 | 80 » » const KEY_TABLE_TYPE keyTable, u8 ciphertext[]); |
| 83 #if defined(_MSC_VER) && (defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X6
4)) | 81 void Camellia_DecryptBlock(int keyBitLength, const u8 ciphertext[], |
| 84 # define SWAP(x) ( _lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xff00ff00 ) | 82 » » const KEY_TABLE_TYPE keyTable, u8 plaintext[]); |
| 85 # define GETU32(p) SWAP(*((u32 *)(p))) | |
| 86 # define PUTU32(ct, st) { *((u32 *)(ct)) = SWAP((st)); } | |
| 87 # define CAMELLIA_SWAP4(x) (x = ( _lrotl(x, 8) & 0x00ff00ff | _lrotr(x, 8) & 0xf
f00ff00) ) | |
| 88 | |
| 89 #else /* not windows */ | |
| 90 # define GETU32(pt) (((u32)(pt)[0] << 24) \ | |
| 91 » ^ ((u32)(pt)[1] << 16) \ | |
| 92 » ^ ((u32)(pt)[2] << 8) \ | |
| 93 » ^ ((u32)(pt)[3])) | |
| 94 | |
| 95 # define PUTU32(ct, st) { (ct)[0] = (u8)((st) >> 24); \ | |
| 96 » (ct)[1] = (u8)((st) >> 16); \ | |
| 97 » (ct)[2] = (u8)((st) >> 8); \ | |
| 98 » (ct)[3] = (u8)(st); } | |
| 99 | |
| 100 #if (defined (__GNUC__) && (defined(__x86_64__) || defined(__x86_64))) | |
| 101 #define CAMELLIA_SWAP4(x) \ | |
| 102 do{\ | |
| 103 asm("bswap %1" : "+r" (x));\ | |
| 104 }while(0) | |
| 105 #else | |
| 106 #define CAMELLIA_SWAP4(x) \ | |
| 107 do{\ | |
| 108 x = ((u32)x << 16) + ((u32)x >> 16);\ | |
| 109 x = (((u32)x & 0xff00ff) << 8) + (((u32)x >> 8) & 0xff00ff);\ | |
| 110 } while(0) | |
| 111 #endif | |
| 112 #endif | |
| 113 | |
| 114 #define COPY4WORD(dst, src)» \ | |
| 115 » do»» » \ | |
| 116 » » {» » \ | |
| 117 » » (dst)[0]=(src)[0];»» \ | |
| 118 » » (dst)[1]=(src)[1];»» \ | |
| 119 » » (dst)[2]=(src)[2];»» \ | |
| 120 » » (dst)[3]=(src)[3];»» \ | |
| 121 » » }while(0) | |
| 122 | |
| 123 #define SWAP4WORD(word)»» » » \ | |
| 124 do» » » » » » \ | |
| 125 » {» » » » » \ | |
| 126 » CAMELLIA_SWAP4((word)[0]);» » » \ | |
| 127 » CAMELLIA_SWAP4((word)[1]);» » » \ | |
| 128 » CAMELLIA_SWAP4((word)[2]);» » » \ | |
| 129 » CAMELLIA_SWAP4((word)[3]);» » » \ | |
| 130 » }while(0) | |
| 131 | |
| 132 #define XOR4WORD(a, b)/* a = a ^ b */» » \ | |
| 133 do» » » » » » \ | |
| 134 » {» » » » » \ | |
| 135 » (a)[0]^=(b)[0];»» » » \ | |
| 136 » (a)[1]^=(b)[1];»» » » \ | |
| 137 » (a)[2]^=(b)[2];»» » » \ | |
| 138 » (a)[3]^=(b)[3];»» » » \ | |
| 139 » }while(0) | |
| 140 | |
| 141 #define XOR4WORD2(a, b, c)/* a = b ^ c */» \ | |
| 142 do» » » » » » \ | |
| 143 » {» » » » » \ | |
| 144 » (a)[0]=(b)[0]^(c)[0];» » » \ | |
| 145 » (a)[1]=(b)[1]^(c)[1];» » » » \ | |
| 146 » (a)[2]=(b)[2]^(c)[2];» » » » \ | |
| 147 » (a)[3]=(b)[3]^(c)[3];» » » » \ | |
| 148 » }while(0) | |
| 149 | |
| 150 | |
| 151 void camellia_setup128(const u8 *key, u32 *subkey); | |
| 152 void camellia_setup192(const u8 *key, u32 *subkey); | |
| 153 void camellia_setup256(const u8 *key, u32 *subkey); | |
| 154 | |
| 155 void camellia_encrypt128(const u32 *subkey, u32 *io); | |
| 156 void camellia_decrypt128(const u32 *subkey, u32 *io); | |
| 157 void camellia_encrypt256(const u32 *subkey, u32 *io); | |
| 158 void camellia_decrypt256(const u32 *subkey, u32 *io); | |
| 159 | |
| 160 #ifdef __cplusplus | |
| 161 } | |
| 162 #endif | |
| 163 | |
| 164 #endif /* #ifndef HEADER_CAMELLIA_LOCL_H */ | 83 #endif /* #ifndef HEADER_CAMELLIA_LOCL_H */ |
| 165 | |
| OLD | NEW |