@Override public int hashCode() { int result = kvno; if (getKeyType() != null) { result = 31 * result + getKeyType().hashCode(); } if (getKeyData() != null) { result = 31 * result + Arrays.hashCode(getKeyData()); } return result; } }
@Override public EncryptionKey deserialize(JsonElement jsonElement, Type type, JsonDeserializationContext jsonDeserializationContext) throws JsonParseException { JsonObject jsonObject = (JsonObject) jsonElement; EncryptionKey encryptionKey = new EncryptionKey(); try { encryptionKey.decode(HexUtil.hex2bytes(jsonObject.get("key").getAsString())); } catch (IOException e) { LOG.error("Fail to decode encryption key. " + e); } encryptionKey.setKvno(jsonObject.get("kvno").getAsInt()); return encryptionKey; }
public EncryptionKey(EncryptionType keyType, byte[] keyData, int kvno) { this(); setKeyType(keyType); setKeyData(keyData); setKvno(kvno); }
/** * Encrypt with the encryption key and key usage. * * @param plainText The plain test * @param key The encryption key * @param usage The key usage * @return The encrypted data * @throws KrbException e */ public static EncryptedData encrypt(byte[] plainText, EncryptionKey key, KeyUsage usage) throws KrbException { EncTypeHandler handler = getEncHandler(key.getKeyType()); byte[] cipher = handler.encrypt(plainText, key.getKeyData(), usage.getValue()); EncryptedData ed = new EncryptedData(); ed.setCipher(cipher); ed.setEType(key.getKeyType()); if (key.getKvno() > 0) { ed.setKvno(key.getKvno()); } return ed; }
/** * Dump a keytab: list all principals. * * @param keytabFile the keytab file * @throws IOException IO problems */ private void dumpKeytab(File keytabFile) throws IOException { title("Examining keytab %s", keytabFile); File kt = keytabFile.getCanonicalFile(); verifyFileIsValid(kt, CAT_KERBEROS, "keytab"); Keytab loadKeytab = Keytab.loadKeytab(kt); List<PrincipalName> principals = loadKeytab.getPrincipals(); println("keytab principal count: %d", principals.size()); int entrySize = 0; for (PrincipalName princ : principals) { List<KeytabEntry> entries = loadKeytab.getKeytabEntries(princ); entrySize = entrySize + entries.size(); for (KeytabEntry entry : entries) { EncryptionKey key = entry.getKey(); println(" %s: version=%d expires=%s encryption=%s", entry.getPrincipal(), entry.getKvno(), entry.getTimestamp(), key.getKeyType()); } } println("keytab entry count: %d", entrySize); endln(); }
public static EncryptionKey[] convertKerberosKeyToEncryptionKey(KerberosKey[] krbKeys) { if (krbKeys == null) { return null; } EncryptionKey[] keys = new EncryptionKey[krbKeys.length]; int i = 0; for (KerberosKey krbKey : krbKeys) { keys[i++] = new EncryptionKey(krbKey.getKeyType(), krbKey.getEncoded()); } return keys; }
public byte[] calculateCheckSum(byte[] header, byte[] data, int offset, int len, int keyUsage) throws GSSException { int totalLen = len + (header == null ? 0 : header.length); byte[] buffer = new byte[totalLen]; System.arraycopy(data, offset, buffer, 0, len); if (header != null) { System.arraycopy(header, 0, buffer, len, header.length); } try { return CheckSumHandler.getCheckSumHandler(checkSumTypeDef) .checksumWithKey(buffer, encKey.getKeyData(), keyUsage); } catch (KrbException e) { throw new GSSException(GSSException.FAILURE, -1, "Exception in checksum calculation:" + e.getMessage()); } }
try (PreparedStatement preKey = connection.prepareStatement(stmKey)) { preKey.setString(1, entry.getKey().getName()); preKey.setInt(2, entry.getValue().getKvno()); preKey.setBlob(3, new SerialBlob(entry.getValue().getKeyData())); preKey.setString(4, principalName); preKey.executeUpdate();
KeysInfo(KrbIdentity identity) throws KrbException { Map<EncryptionType, EncryptionKey> keymap = identity.getKeys(); this.etypes = new String[keymap.size()]; this.keys = new byte[keymap.size()][]; this.kvnos = new String[keymap.size()]; int i = 0; for (Map.Entry<EncryptionType, EncryptionKey> entryKey : keymap.entrySet()) { etypes[i] = entryKey.getKey().getValue() + ""; try { keys[i] = entryKey.getValue().encode(); } catch (IOException e) { throw new KrbException("encode key failed", e); } kvnos[i] = entryKey.getValue().getKvno() + ""; i++; } }
@Override public JsonElement serialize(EncryptionKey encryptionKey, Type type, JsonSerializationContext jsonSerializationContext) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("kvno", encryptionKey.getKvno()); try { jsonObject.addProperty("key", HexUtil.bytesToHex(KrbCodec.encode(encryptionKey))); } catch (KrbException e) { throw new RuntimeException(e); } return jsonObject; } }
public static List<EncryptionKey> generateKeys( List<EncryptionType> encryptionTypes) throws KrbException { List<EncryptionKey> results = new ArrayList<>(encryptionTypes.size()); for (EncryptionType eType : encryptionTypes) { EncryptionKey encKey = EncryptionHandler.random2Key(eType); encKey.setKvno(1); results.add(encKey); } return results; }
/** * Encrypt with the encryption key and key usage. * * @param plainText The plain test * @param key The encryption key * @param usage The key usage * @return The encrypted data * @throws KrbException e */ public static EncryptedData encrypt(byte[] plainText, EncryptionKey key, KeyUsage usage) throws KrbException { EncTypeHandler handler = getEncHandler(key.getKeyType()); byte[] cipher = handler.encrypt(plainText, key.getKeyData(), usage.getValue()); EncryptedData ed = new EncryptedData(); ed.setCipher(cipher); ed.setEType(key.getKeyType()); if (key.getKvno() > 0) { ed.setKvno(key.getKvno()); } return ed; }
public void addKeys(List<EncryptionKey> encKeys) { for (final EncryptionKey key : encKeys) { keys.put(key.getKeyType(), key); } }
/** * Random to key. * * @param eType The encryption type * @param randomBytes The random bytes * @return The encryption key * @throws KrbException e */ public static EncryptionKey random2Key(EncryptionType eType, byte[] randomBytes) throws KrbException { EncTypeHandler handler = getEncHandler(eType); byte[] randomBytes1 = randomBytes; byte[] keyBytes = handler.random2Key(randomBytes1); return new EncryptionKey(eType, keyBytes); }
if ((outputIndex & 1) != 0) { sb.append("(0x"); sb.append(HexUtil.bytesToHex(entry.getKey().getKeyData())); sb.append(")");
try (PreparedStatement preKey = connection.prepareStatement(stmKey)) { preKey.setString(1, entry.getKey().getName()); preKey.setInt(2, entry.getValue().getKvno()); preKey.setBlob(3, new SerialBlob(entry.getValue().getKeyData())); preKey.setString(4, principalName); preKey.executeUpdate();
KeysInfo(KrbIdentity identity) throws KrbException { Map<EncryptionType, EncryptionKey> keymap = identity.getKeys(); this.etypes = new String[keymap.size()]; this.keys = new byte[keymap.size()][]; this.kvnos = new String[keymap.size()]; int i = 0; for (Map.Entry<EncryptionType, EncryptionKey> entryKey : keymap.entrySet()) { etypes[i] = entryKey.getKey().getValue() + ""; try { keys[i] = entryKey.getValue().encode(); } catch (IOException e) { throw new KrbException("encode key failed", e); } kvnos[i] = entryKey.getValue().getKvno() + ""; i++; } }
@Override public JsonElement serialize(EncryptionKey encryptionKey, Type type, JsonSerializationContext jsonSerializationContext) { JsonObject jsonObject = new JsonObject(); jsonObject.addProperty("kvno", encryptionKey.getKvno()); try { jsonObject.addProperty("key", HexUtil.bytesToHex(KrbCodec.encode(encryptionKey))); } catch (KrbException e) { throw new RuntimeException(e); } return jsonObject; } }
public static List<EncryptionKey> generateKeys( String principal, String passwd, List<EncryptionType> encryptionTypes) throws KrbException { List<EncryptionKey> results = new ArrayList<>(encryptionTypes.size()); for (EncryptionType eType : encryptionTypes) { EncryptionKey encKey = EncryptionHandler.string2Key( principal, passwd, eType); encKey.setKvno(1); results.add(encKey); } return results; }
public EncryptionKey(EncryptionType keyType, byte[] keyData, int kvno) { this(); setKeyType(keyType); setKeyData(keyData); setKvno(kvno); }