Class SrpTelegramEncryption
- java.lang.Object
-
- de.bsvrz.dav.daf.communication.srpAuthentication.SrpTelegramEncryption
-
public class SrpTelegramEncryption extends java.lang.Object
Klasse, die die Verschlüsselung von Telegrammen nach einer erfolgreichen SRP-Authentifikation ermöglicht. In Konstruktor der Klasse wird der SRP-Sitzungsschlüssel übergeben (oder zwei Schlüssel bei Dav-Dav-Verbindungen), daraus berechnet diese Klasse je einen AES-Schlüssel für beide Richtungen sowie GCM-Noncen gemäß RFC5288. Jeder Kommunikationspartner sollte eine Instanz dieser Klasse (pro Verbindung) erzeugen und kann dann mitencrypt(byte[])
Daten vor dem Versand verschlüsseln und mitdecrypt(byte[])
empfangene Daten entschlüsseln. Es ist wichtig, dass die Reihenfolge der Telegramme beibehalten wird und kein Telegramm ausgelassen wird, da die GCM-Noncen durch einen einfachen Zähler realisiert werden, der auf beiden Seiten der Verbindung denselben Wert annehmen muss. Diese Klasse ist nur eingeschränkt threadsafe, es dürfen nicht mehrere Verschlüsselungen oder Entschlüsselungen gleichzeitig durchgeführt werden, was allerdings sowieso verboten ist, da es eine fest definierte Telegramm-Reihenfolge geben muss. Es ist kein Problem, parallel eine Verschlüsselung und eine Entschlüsselung durchzuführen.
-
-
Constructor Summary
Constructors Constructor Description SrpTelegramEncryption(byte[] sessionKey, boolean isClient, SrpCryptoParameter srpCryptoParameter)
Erstellt eine neue SrpTelegramEncryption-Instanz für eine Verbindung.
-
Method Summary
Modifier and Type Method Description static byte[]
computeHash(int outputMinimumSize, java.lang.String hashAlgorithm, byte[] data)
Berechnet einen Hashwert der angegebenen Länge aus den übergebenen Datenbyte[]
decrypt(byte[] telegram)
Entschlüsselt ein Telegramm von der Gegenseitebyte[]
encrypt(byte[] telegram)
Verschlüsselt ein Telegramm zum Versand an die Gegenseitejava.lang.String
getCipherName()
Gibt den Namen der verwendeten Verschlüsselung zurückstatic void
increment(byte[] bytes)
Inkrementiert ein Byte-Array wie einen Integer.
-
-
-
Constructor Detail
-
SrpTelegramEncryption
public SrpTelegramEncryption(byte[] sessionKey, boolean isClient, SrpCryptoParameter srpCryptoParameter) throws SrpNotSupportedException
Erstellt eine neue SrpTelegramEncryption-Instanz für eine Verbindung. Der AES-Key wird aus dem Sitzungsschlüssel bestimmt.- Parameters:
sessionKey
- Sitzungsschlüssel (z.B. aus SRP-Authentifizierung)isClient
- Handelt es sich hierbei um den Client?srpCryptoParameter
- Cryptographische Verschlüsselungsparameter- Throws:
SrpNotSupportedException
-
-
Method Detail
-
encrypt
public byte[] encrypt(byte[] telegram) throws java.io.IOException
Verschlüsselt ein Telegramm zum Versand an die Gegenseite- Parameters:
telegram
- Telegramm- Returns:
- Verschlüsselte Daten
- Throws:
java.io.IOException
- Fehler beim Verschlüsseln
-
decrypt
public byte[] decrypt(byte[] telegram) throws java.io.IOException
Entschlüsselt ein Telegramm von der Gegenseite- Parameters:
telegram
- Verschlüsselte Daten- Returns:
- Entschlüsseltes Telegramm
- Throws:
java.io.IOException
- Fehler beim Entschlüsseln
-
increment
public static void increment(byte[] bytes)
Inkrementiert ein Byte-Array wie einen Integer. Der erste Wert den Arrays ist am signifikantesten.- Parameters:
bytes
- Byte-Array
-
computeHash
public static byte[] computeHash(int outputMinimumSize, java.lang.String hashAlgorithm, byte[] data) throws java.security.NoSuchAlgorithmException, java.security.DigestException
Berechnet einen Hashwert der angegebenen Länge aus den übergebenen Daten- Parameters:
outputMinimumSize
- Mindestlänge in Bytes des Ergebniswerts. Das zurückgegebene Array kann größer sein, aber nicht kleiner.hashAlgorithm
- Algorithmus zum Hashendata
- Byte-Array, das zu hashende Daten enthält. Leere Arrays sind nicht zulässig.- Returns:
- Byte-Array mit Hashwerten
- Throws:
java.security.NoSuchAlgorithmException
- Der Algorithmus existiert nichtjava.security.DigestException
- Fehler beim Hashwert berechnen
-
getCipherName
public java.lang.String getCipherName()
Gibt den Namen der verwendeten Verschlüsselung zurück- Returns:
- Name der Verschlüsselung
-
-