/src/strongswan/src/libstrongswan/crypto/crypters/crypter.c
Line | Count | Source |
1 | | /* |
2 | | * Copyright (C) 2005-2006 Martin Willi |
3 | | * Copyright (C) 2005 Jan Hutter |
4 | | * |
5 | | * Copyright (C) secunet Security Networks AG |
6 | | * |
7 | | * This program is free software; you can redistribute it and/or modify it |
8 | | * under the terms of the GNU General Public License as published by the |
9 | | * Free Software Foundation; either version 2 of the License, or (at your |
10 | | * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>. |
11 | | * |
12 | | * This program is distributed in the hope that it will be useful, but |
13 | | * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY |
14 | | * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
15 | | * for more details. |
16 | | */ |
17 | | |
18 | | #include <asn1/oid.h> |
19 | | |
20 | | #include "crypter.h" |
21 | | |
22 | | ENUM_BEGIN(encryption_algorithm_names, ENCR_DES_IV64, ENCR_DES_IV32, |
23 | | "DES_IV64", |
24 | | "DES_CBC", |
25 | | "3DES_CBC", |
26 | | "RC5_CBC", |
27 | | "IDEA_CBC", |
28 | | "CAST_CBC", |
29 | | "BLOWFISH_CBC", |
30 | | "3IDEA", |
31 | | "DES_IV32"); |
32 | | ENUM_NEXT(encryption_algorithm_names, ENCR_NULL, ENCR_AES_CCM_ICV16, ENCR_DES_IV32, |
33 | | "NULL", |
34 | | "AES_CBC", |
35 | | "AES_CTR", |
36 | | "AES_CCM_8", |
37 | | "AES_CCM_12", |
38 | | "AES_CCM_16"); |
39 | | ENUM_NEXT(encryption_algorithm_names, ENCR_AES_GCM_ICV8, ENCR_NULL_AUTH_AES_GMAC, ENCR_AES_CCM_ICV16, |
40 | | "AES_GCM_8", |
41 | | "AES_GCM_12", |
42 | | "AES_GCM_16", |
43 | | "NULL_AES_GMAC"); |
44 | | ENUM_NEXT(encryption_algorithm_names, ENCR_CAMELLIA_CBC, ENCR_CHACHA20_POLY1305, ENCR_NULL_AUTH_AES_GMAC, |
45 | | "CAMELLIA_CBC", |
46 | | "CAMELLIA_CTR", |
47 | | "CAMELLIA_CCM_8", |
48 | | "CAMELLIA_CCM_12", |
49 | | "CAMELLIA_CCM_16", |
50 | | "CHACHA20_POLY1305"); |
51 | | ENUM_NEXT(encryption_algorithm_names, ENCR_UNDEFINED, ENCR_AES_CFB, ENCR_CHACHA20_POLY1305, |
52 | | "UNDEFINED", |
53 | | "DES_ECB", |
54 | | "SERPENT_CBC", |
55 | | "TWOFISH_CBC", |
56 | | "RC2_CBC", |
57 | | "AES_ECB", |
58 | | "AES_CFB"); |
59 | | ENUM_END(encryption_algorithm_names, ENCR_AES_CFB); |
60 | | |
61 | | /* |
62 | | * Described in header. |
63 | | */ |
64 | | encryption_algorithm_t encryption_algorithm_from_oid(int oid, size_t *key_size) |
65 | 0 | { |
66 | 0 | encryption_algorithm_t alg; |
67 | 0 | size_t alg_key_size; |
68 | |
|
69 | 0 | switch (oid) |
70 | 0 | { |
71 | 0 | case OID_DES_CBC: |
72 | 0 | alg = ENCR_DES; |
73 | 0 | alg_key_size = 0; |
74 | 0 | break; |
75 | 0 | case OID_3DES_EDE_CBC: |
76 | 0 | alg = ENCR_3DES; |
77 | 0 | alg_key_size = 0; |
78 | 0 | break; |
79 | 0 | case OID_AES128_CBC: |
80 | 0 | alg = ENCR_AES_CBC; |
81 | 0 | alg_key_size = 128; |
82 | 0 | break; |
83 | 0 | case OID_AES192_CBC: |
84 | 0 | alg = ENCR_AES_CBC; |
85 | 0 | alg_key_size = 192; |
86 | 0 | break; |
87 | 0 | case OID_AES256_CBC: |
88 | 0 | alg = ENCR_AES_CBC; |
89 | 0 | alg_key_size = 256; |
90 | 0 | break; |
91 | 0 | case OID_CAMELLIA128_CBC: |
92 | 0 | alg = ENCR_CAMELLIA_CBC; |
93 | 0 | alg_key_size = 128; |
94 | 0 | break; |
95 | 0 | case OID_CAMELLIA192_CBC: |
96 | 0 | alg = ENCR_CAMELLIA_CBC; |
97 | 0 | alg_key_size = 192; |
98 | 0 | break; |
99 | 0 | case OID_CAMELLIA256_CBC: |
100 | 0 | alg = ENCR_CAMELLIA_CBC; |
101 | 0 | alg_key_size = 256; |
102 | 0 | break; |
103 | 0 | case OID_BLOWFISH_CBC: |
104 | 0 | alg = ENCR_BLOWFISH; |
105 | 0 | alg_key_size = 0; |
106 | 0 | break; |
107 | 0 | default: |
108 | 0 | alg = ENCR_UNDEFINED; |
109 | 0 | alg_key_size = 0; |
110 | 0 | } |
111 | 0 | if (key_size) |
112 | 0 | { |
113 | 0 | *key_size = alg_key_size; |
114 | 0 | } |
115 | 0 | return alg; |
116 | 0 | } |
117 | | |
118 | | /* |
119 | | * Described in header. |
120 | | */ |
121 | | int encryption_algorithm_to_oid(encryption_algorithm_t alg, size_t key_size) |
122 | 0 | { |
123 | 0 | int oid; |
124 | |
|
125 | 0 | switch(alg) |
126 | 0 | { |
127 | 0 | case ENCR_DES: |
128 | 0 | oid = OID_DES_CBC; |
129 | 0 | break; |
130 | 0 | case ENCR_3DES: |
131 | 0 | oid = OID_3DES_EDE_CBC; |
132 | 0 | break; |
133 | 0 | case ENCR_AES_CBC: |
134 | 0 | switch (key_size) |
135 | 0 | { |
136 | 0 | case 128: |
137 | 0 | oid = OID_AES128_CBC; |
138 | 0 | break; |
139 | 0 | case 192: |
140 | 0 | oid = OID_AES192_CBC; |
141 | 0 | break; |
142 | 0 | case 256: |
143 | 0 | oid = OID_AES256_CBC; |
144 | 0 | break; |
145 | 0 | default: |
146 | 0 | oid = OID_UNKNOWN; |
147 | 0 | } |
148 | 0 | break; |
149 | 0 | case ENCR_CAMELLIA_CBC: |
150 | 0 | switch (key_size) |
151 | 0 | { |
152 | 0 | case 128: |
153 | 0 | oid = OID_CAMELLIA128_CBC; |
154 | 0 | break; |
155 | 0 | case 192: |
156 | 0 | oid = OID_CAMELLIA192_CBC; |
157 | 0 | break; |
158 | 0 | case 256: |
159 | 0 | oid = OID_CAMELLIA256_CBC; |
160 | 0 | break; |
161 | 0 | default: |
162 | 0 | oid = OID_UNKNOWN; |
163 | 0 | } |
164 | 0 | break; |
165 | 0 | case ENCR_BLOWFISH: |
166 | 0 | oid = OID_BLOWFISH_CBC; |
167 | 0 | break; |
168 | 0 | default: |
169 | 0 | oid = OID_UNKNOWN; |
170 | 0 | } |
171 | 0 | return oid; |
172 | 0 | } |
173 | | |
174 | | /* |
175 | | * Described in header. |
176 | | */ |
177 | | bool encryption_algorithm_is_aead(encryption_algorithm_t alg) |
178 | 0 | { |
179 | 0 | switch (alg) |
180 | 0 | { |
181 | 0 | case ENCR_AES_CCM_ICV8: |
182 | 0 | case ENCR_AES_CCM_ICV12: |
183 | 0 | case ENCR_AES_CCM_ICV16: |
184 | 0 | case ENCR_AES_GCM_ICV8: |
185 | 0 | case ENCR_AES_GCM_ICV12: |
186 | 0 | case ENCR_AES_GCM_ICV16: |
187 | 0 | case ENCR_NULL_AUTH_AES_GMAC: |
188 | 0 | case ENCR_CAMELLIA_CCM_ICV8: |
189 | 0 | case ENCR_CAMELLIA_CCM_ICV12: |
190 | 0 | case ENCR_CAMELLIA_CCM_ICV16: |
191 | 0 | case ENCR_CHACHA20_POLY1305: |
192 | 0 | return TRUE; |
193 | 0 | default: |
194 | | return FALSE; |
195 | 0 | } |
196 | 0 | } |