1 16 17 package de.schlichtherle.crypto.io.raes; 18 19 import de.schlichtherle.key.AesKeyProvider; 20 import de.schlichtherle.key.KeyProvider; 21 import de.schlichtherle.key.UnknownKeyException; 22 import de.schlichtherle.key.KeyManager; 23 24 51 public class KeyManagerRaesParameters implements RaesParametersAgent { 52 53 private final String cPath; 54 55 61 public KeyManagerRaesParameters(String cPath) { 62 this.cPath = cPath; 63 } 64 65 public RaesParameters getParameters(Class type) { 66 return new Type0(); 67 } 68 69 73 private class Type0 implements Type0RaesParameters { 74 public char[] getOpenPasswd() throws RaesKeyException { 75 final KeyProvider provider = KeyManager.getInstance() 77 .getKeyProvider(cPath, AesKeyProvider.class); 78 try { 79 final Object key = provider.getOpenKey(); 80 if (key instanceof byte[]) 81 return PKCS12BytesToChars((byte[]) key); 82 else 83 return (char[]) key; 84 } catch (UnknownKeyException failure) { 85 throw new RaesKeyException(failure); 86 } 87 } 88 89 public void invalidOpenPasswd() { 90 final KeyProvider provider = KeyManager.getInstance() 92 .getKeyProvider(cPath, AesKeyProvider.class); 93 provider.invalidOpenKey(); 94 } 95 96 public char[] getCreatePasswd() throws RaesKeyException { 97 final KeyProvider provider = KeyManager.getInstance() 99 .getKeyProvider(cPath, AesKeyProvider.class); 100 try { 101 final Object key = provider.getCreateKey(); 102 if (key instanceof byte[]) 103 return PKCS12BytesToChars((byte[]) key); 104 else 105 return (char[]) key; 106 } catch (UnknownKeyException failure) { 107 throw new RaesKeyException(failure); 108 } 109 } 110 111 public int getKeyStrength() { 112 final KeyProvider provider = KeyManager.getInstance() 114 .getKeyProvider(cPath, AesKeyProvider.class); 115 if (provider instanceof AesKeyProvider) { 116 return ((AesKeyProvider) provider).getKeyStrength(); 117 } else { 118 return KEY_STRENGTH_256; } 120 } 121 122 public void setKeyStrength(int keyStrength) { 123 final KeyProvider provider = KeyManager.getInstance() 125 .getKeyProvider(cPath, AesKeyProvider.class); 126 if (provider instanceof AesKeyProvider) { 127 ((AesKeyProvider) provider).setKeyStrength(keyStrength); 128 } 129 } 130 } 131 132 static { 133 assert Type0RaesParameters.KEY_STRENGTH_128 == AesKeyProvider.KEY_STRENGTH_128; 135 assert Type0RaesParameters.KEY_STRENGTH_192 == AesKeyProvider.KEY_STRENGTH_192; 136 assert Type0RaesParameters.KEY_STRENGTH_256 == AesKeyProvider.KEY_STRENGTH_256; 137 } 138 139 145 private static char[] PKCS12BytesToChars(final byte[] bytes) { 146 150 int len = bytes.length; 154 len >>= 1; 155 char[] chars = new char[len]; 156 for (int i = 0, off = 0; i < len; i++) 157 chars[i] = (char) (bytes[off++] << 8 | bytes[off++] & 0xFF); 159 return chars; 160 } 161 } 162 | Popular Tags |