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 |