Make cache_timer_thread() joinable.
[pwmd.git] / src / cipher.c
blob148e90a6ca7c96c2b35574744e56425819331069
1 /*
2 Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012
3 Ben Kibbey <bjk@luxsci.net>
5 This file is part of pwmd.
7 Pwmd is free software: you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation, either version 2 of the License, or
10 (at your option) any later version.
12 Pwmd is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with Pwmd. If not, see <http://www.gnu.org/licenses/>.
20 #include <gcrypt.h>
21 #include "cipher.h"
23 unsigned gcrypt_to_cipher(int n)
25 if (n == GCRY_CIPHER_AES128)
26 return PWMD_CIPHER_AES128;
27 else if (n == GCRY_CIPHER_AES192)
28 return PWMD_CIPHER_AES192;
29 else if (n == GCRY_CIPHER_AES256)
30 return PWMD_CIPHER_AES256;
31 else if (n == GCRY_CIPHER_SERPENT128)
32 return PWMD_CIPHER_SERPENT128;
33 else if (n == GCRY_CIPHER_SERPENT192)
34 return PWMD_CIPHER_SERPENT192;
35 else if (n == GCRY_CIPHER_SERPENT256)
36 return PWMD_CIPHER_SERPENT256;
37 else if (n == GCRY_CIPHER_CAMELLIA128)
38 return PWMD_CIPHER_CAMELLIA128;
39 else if (n == GCRY_CIPHER_CAMELLIA192)
40 return PWMD_CIPHER_CAMELLIA192;
41 else if (n == GCRY_CIPHER_CAMELLIA256)
42 return PWMD_CIPHER_CAMELLIA256;
43 else if (n == GCRY_CIPHER_BLOWFISH)
44 return PWMD_CIPHER_BLOWFISH;
45 else if (n == GCRY_CIPHER_3DES)
46 return PWMD_CIPHER_3DES;
47 else if (n == GCRY_CIPHER_CAST5)
48 return PWMD_CIPHER_CAST5;
49 else if (n == GCRY_CIPHER_TWOFISH)
50 return PWMD_CIPHER_TWOFISH;
51 else if (n == GCRY_CIPHER_TWOFISH128)
52 return PWMD_CIPHER_TWOFISH128;
54 return PWMD_CIPHER_AES256;
57 int cipher_to_gcrypt(int flags)
59 if (flags < 0)
60 return flags;
62 if (flags & PWMD_CIPHER_AES128)
63 return GCRY_CIPHER_AES128;
64 else if (flags & PWMD_CIPHER_AES192)
65 return GCRY_CIPHER_AES192;
66 else if (flags & PWMD_CIPHER_AES256)
67 return GCRY_CIPHER_AES256;
68 else if (flags & PWMD_CIPHER_SERPENT128)
69 return GCRY_CIPHER_SERPENT128;
70 else if (flags & PWMD_CIPHER_SERPENT192)
71 return GCRY_CIPHER_SERPENT192;
72 else if (flags & PWMD_CIPHER_SERPENT256)
73 return GCRY_CIPHER_SERPENT256;
74 else if (flags & PWMD_CIPHER_CAMELLIA128)
75 return GCRY_CIPHER_CAMELLIA128;
76 else if (flags & PWMD_CIPHER_CAMELLIA192)
77 return GCRY_CIPHER_CAMELLIA192;
78 else if (flags & PWMD_CIPHER_CAMELLIA256)
79 return GCRY_CIPHER_CAMELLIA256;
80 else if (flags & PWMD_CIPHER_BLOWFISH)
81 return GCRY_CIPHER_BLOWFISH;
82 else if (flags & PWMD_CIPHER_3DES)
83 return GCRY_CIPHER_3DES;
84 else if (flags & PWMD_CIPHER_CAST5)
85 return GCRY_CIPHER_CAST5;
86 else if (flags & PWMD_CIPHER_TWOFISH)
87 return GCRY_CIPHER_TWOFISH;
88 else if (flags & PWMD_CIPHER_TWOFISH128)
89 return GCRY_CIPHER_TWOFISH128;
91 return -1;
94 int cipher_string_to_cipher(const char *str)
96 int flags = 0;
98 if (!strcasecmp(str, "aes128"))
99 flags = PWMD_CIPHER_AES128;
100 else if (!strcasecmp(str, "aes192"))
101 flags = PWMD_CIPHER_AES192;
102 else if (!strcasecmp(str, "aes256"))
103 flags = PWMD_CIPHER_AES256;
104 else if (!strcasecmp(str, "serpent128"))
105 flags = PWMD_CIPHER_SERPENT128;
106 else if (!strcasecmp(str, "serpent192"))
107 flags = PWMD_CIPHER_SERPENT192;
108 else if (!strcasecmp(str, "serpent256"))
109 flags = PWMD_CIPHER_SERPENT256;
110 else if (!strcasecmp(str, "camellia128"))
111 flags = PWMD_CIPHER_CAMELLIA128;
112 else if (!strcasecmp(str, "camellia192"))
113 flags = PWMD_CIPHER_CAMELLIA192;
114 else if (!strcasecmp(str, "camellia256"))
115 flags = PWMD_CIPHER_CAMELLIA256;
116 else if (!strcasecmp(str, "blowfish"))
117 flags = PWMD_CIPHER_BLOWFISH;
118 else if (!strcasecmp(str, "cast5"))
119 flags = PWMD_CIPHER_CAST5;
120 else if (!strcasecmp(str, "3des"))
121 flags = PWMD_CIPHER_3DES;
122 else if (!strcasecmp(str, "twofish256"))
123 flags = PWMD_CIPHER_TWOFISH;
124 else if (!strcasecmp(str, "twofish128"))
125 flags = PWMD_CIPHER_TWOFISH128;
126 else
127 return -1;
129 return flags;
132 int cipher_string_to_gcrypt(const char *str)
134 return cipher_to_gcrypt(cipher_string_to_cipher(str));
137 uint64_t set_cipher_flag(uint64_t flags, int algo)
139 // Clear all previous cipher bits but keep the flags.
140 flags &= ~((uint16_t)((uint32_t)(flags&0xFFFFFFFF)));
141 flags |= gcrypt_to_cipher(algo);
142 return flags;