Mercurial > 510Connectbot
comparison src/ch/ethz/ssh2/crypto/cipher/BlockCipherFactory.java @ 273:91a31873c42a ganymed
start conversion from trilead to ganymed
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Fri, 18 Jul 2014 11:21:46 -0700 |
parents | |
children | 071eccdff8ea |
comparison
equal
deleted
inserted
replaced
272:ce2f4e397703 | 273:91a31873c42a |
---|---|
1 /* | |
2 * Copyright (c) 2006-2011 Christian Plattner. All rights reserved. | |
3 * Please refer to the LICENSE.txt for licensing details. | |
4 */ | |
5 package ch.ethz.ssh2.crypto.cipher; | |
6 | |
7 import java.util.ArrayList; | |
8 import java.util.List; | |
9 import java.util.Vector; | |
10 | |
11 /** | |
12 * BlockCipherFactory. | |
13 * | |
14 * @author Christian Plattner | |
15 * @version $Id: BlockCipherFactory.java 86 2014-04-07 14:15:18Z dkocher@sudo.ch $ | |
16 */ | |
17 public class BlockCipherFactory | |
18 { | |
19 private static final class CipherEntry | |
20 { | |
21 String type; | |
22 int blocksize; | |
23 int keysize; | |
24 String cipherClass; | |
25 | |
26 public CipherEntry(String type, int blockSize, int keySize, String cipherClass) | |
27 { | |
28 this.type = type; | |
29 this.blocksize = blockSize; | |
30 this.keysize = keySize; | |
31 this.cipherClass = cipherClass; | |
32 } | |
33 } | |
34 | |
35 private static final List<CipherEntry> ciphers = new ArrayList<CipherEntry>(); | |
36 | |
37 static | |
38 { | |
39 /* Higher Priority First */ | |
40 ciphers.add(new CipherEntry("aes128-ctr", 16, 16, "ch.ethz.ssh2.crypto.cipher.AES")); | |
41 ciphers.add(new CipherEntry("aes192-ctr", 16, 24, "ch.ethz.ssh2.crypto.cipher.AES")); | |
42 ciphers.add(new CipherEntry("aes256-ctr", 16, 32, "ch.ethz.ssh2.crypto.cipher.AES")); | |
43 ciphers.add(new CipherEntry("blowfish-ctr", 8, 16, "ch.ethz.ssh2.crypto.cipher.BlowFish")); | |
44 | |
45 ciphers.add(new CipherEntry("aes128-cbc", 16, 16, "ch.ethz.ssh2.crypto.cipher.AES")); | |
46 ciphers.add(new CipherEntry("aes192-cbc", 16, 24, "ch.ethz.ssh2.crypto.cipher.AES")); | |
47 ciphers.add(new CipherEntry("aes256-cbc", 16, 32, "ch.ethz.ssh2.crypto.cipher.AES")); | |
48 ciphers.add(new CipherEntry("blowfish-cbc", 8, 16, "ch.ethz.ssh2.crypto.cipher.BlowFish")); | |
49 | |
50 ciphers.add(new CipherEntry("3des-ctr", 8, 24, "ch.ethz.ssh2.crypto.cipher.DESede")); | |
51 ciphers.add(new CipherEntry("3des-cbc", 8, 24, "ch.ethz.ssh2.crypto.cipher.DESede")); | |
52 } | |
53 | |
54 public static String[] getDefaultCipherList() | |
55 { | |
56 List<String> list = new ArrayList<String>(ciphers.size()); | |
57 for (CipherEntry ce : ciphers) | |
58 { | |
59 list.add(ce.type); | |
60 } | |
61 return list.toArray(new String[ciphers.size()]); | |
62 } | |
63 | |
64 public static void checkCipherList(String[] cipherCandidates) | |
65 { | |
66 for (String cipherCandidate : cipherCandidates) | |
67 { | |
68 getEntry(cipherCandidate); | |
69 } | |
70 } | |
71 | |
72 // @SuppressWarnings("rawtypes") | |
73 public static BlockCipher createCipher(String type, boolean encrypt, byte[] key, byte[] iv) | |
74 { | |
75 try | |
76 { | |
77 CipherEntry ce = getEntry(type); | |
78 Class<?> cc = Class.forName(ce.cipherClass); | |
79 BlockCipher bc = (BlockCipher) cc.newInstance(); | |
80 | |
81 if (type.endsWith("-cbc")) | |
82 { | |
83 bc.init(encrypt, key); | |
84 return new CBCMode(bc, iv, encrypt); | |
85 } | |
86 else if (type.endsWith("-ctr")) | |
87 { | |
88 bc.init(true, key); | |
89 return new CTRMode(bc, iv, encrypt); | |
90 } | |
91 throw new IllegalArgumentException("Cannot instantiate " + type); | |
92 } | |
93 catch (ClassNotFoundException e) | |
94 { | |
95 throw new IllegalArgumentException("Cannot instantiate " + type, e); | |
96 } | |
97 catch (InstantiationException e) | |
98 { | |
99 throw new IllegalArgumentException("Cannot instantiate " + type, e); | |
100 } | |
101 catch (IllegalAccessException e) | |
102 { | |
103 throw new IllegalArgumentException("Cannot instantiate " + type, e); | |
104 } | |
105 } | |
106 | |
107 private static CipherEntry getEntry(String type) | |
108 { | |
109 for (CipherEntry ce : ciphers) | |
110 { | |
111 if (ce.type.equals(type)) | |
112 { | |
113 return ce; | |
114 } | |
115 } | |
116 throw new IllegalArgumentException("Unkown algorithm " + type); | |
117 } | |
118 | |
119 public static int getBlockSize(String type) | |
120 { | |
121 CipherEntry ce = getEntry(type); | |
122 return ce.blocksize; | |
123 } | |
124 | |
125 public static int getKeySize(String type) | |
126 { | |
127 CipherEntry ce = getEntry(type); | |
128 return ce.keysize; | |
129 } | |
130 } |