Class OmemoKeyUtil<T_IdKeyPair,T_IdKey,T_PreKey,T_SigPreKey,T_Sess,T_ECPub,T_Bundle>
- java.lang.Object
-
- org.jivesoftware.smackx.omemo.util.OmemoKeyUtil<T_IdKeyPair,T_IdKey,T_PreKey,T_SigPreKey,T_Sess,T_ECPub,T_Bundle>
-
- Type Parameters:
T_IdKeyPair
- IdentityKeyPair classT_IdKey
- IdentityKey classT_PreKey
- PreKey classT_SigPreKey
- SignedPreKey classT_Sess
- Session classT_ECPub
- Elliptic Curve PublicKey classT_Bundle
- Bundle class
- Direct Known Subclasses:
SignalOmemoKeyUtil
public abstract class OmemoKeyUtil<T_IdKeyPair,T_IdKey,T_PreKey,T_SigPreKey,T_Sess,T_ECPub,T_Bundle> extends java.lang.Object
Class that is used to convert bytes to keys and vice versa.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description class
OmemoKeyUtil.Bundle
Bundle related methods.
-
Field Summary
Fields Modifier and Type Field Description OmemoKeyUtil.Bundle
BUNDLE
-
Constructor Summary
Constructors Constructor Description OmemoKeyUtil()
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static int
addInBounds(int value, int added)
Add integers modulo MAX_VALUE.abstract T_Bundle
bundleFromOmemoBundle(OmemoBundleElement bundle, OmemoDevice contact, int keyId)
Build a crypto-lib specific PreKeyBundle (T_Bundle) using a PreKey from the OmemoBundleElement 'bundle'.abstract T_ECPub
ellipticCurvePublicKeyFromBytes(byte[] data)
Deserialize an elliptic curve public key from bytes.abstract T_IdKeyPair
generateOmemoIdentityKeyPair()
Generate a new IdentityKeyPair.abstract java.util.TreeMap<java.lang.Integer,T_PreKey>
generateOmemoPreKeys(int startId, int count)
Generate 'count' new PreKeys beginning with id 'startId'.abstract T_SigPreKey
generateOmemoSignedPreKey(T_IdKeyPair identityKeyPair, int signedPreKeyId)
Generate a new signed preKey.abstract OmemoFingerprint
getFingerprintOfIdentityKey(T_IdKey identityKey)
Return the fingerprint of an identityKey.abstract OmemoFingerprint
getFingerprintOfIdentityKeyPair(T_IdKeyPair identityKeyPair)
Returns the fingerprint of the public key of an identityKeyPair.abstract byte[]
identityKeyForBundle(T_IdKey identityKey)
Prepare an identityKey for transport in an OmemoBundleElement (serialize it).abstract T_IdKey
identityKeyFromBytes(byte[] data)
Deserialize an identityKey from a byte array.abstract T_IdKey
identityKeyFromPair(T_IdKeyPair pair)
Extract the public identityKey from an identityKeyPair.abstract T_IdKeyPair
identityKeyPairFromBytes(byte[] data)
Deserialize an identityKeyPair from a byte array.abstract byte[]
identityKeyPairToBytes(T_IdKeyPair identityKeyPair)
serialize an identityKeyPair into bytes.abstract byte[]
identityKeyToBytes(T_IdKey identityKey)
Serialize an identityKey into bytes.abstract byte[]
preKeyForBundle(T_PreKey preKey)
Prepare a preKey for transport in an OmemoBundleElement.abstract T_PreKey
preKeyFromBytes(byte[] bytes)
Deserialize a preKey from a byte array.T_ECPub
preKeyPublicFromBytes(byte[] data)
Deserialize a public preKey from bytes.abstract byte[]
preKeyPublicKeyForBundle(T_ECPub preKey)
Prepare an elliptic curve preKey for transport in an OmemoBundleElement.java.util.HashMap<java.lang.Integer,byte[]>
preKeyPublicKeysForBundle(java.util.TreeMap<java.lang.Integer,T_PreKey> preKeyHashMap)
Prepare a whole bunche of preKeys for transport.abstract byte[]
preKeyToBytes(T_PreKey preKey)
Serialize a preKey into a byte array.abstract T_Sess
rawSessionFromBytes(byte[] data)
Deserialize a raw OMEMO Session from bytes.abstract byte[]
rawSessionToBytes(T_Sess session)
Serialize a raw OMEMO session into a byte array.abstract T_SigPreKey
signedPreKeyFromBytes(byte[] data)
Deserialize a signedPreKey from a byte array.abstract int
signedPreKeyIdFromKey(T_SigPreKey signedPreKey)
return the id of the given signedPreKey.abstract byte[]
signedPreKeyPublicForBundle(T_SigPreKey signedPreKey)
Prepare a public signedPreKey for transport in a bundle.T_ECPub
signedPreKeyPublicFromBytes(byte[] data)
Deserialize a public signedPreKey from bytes.abstract byte[]
signedPreKeySignatureFromKey(T_SigPreKey signedPreKey)
Extract the signature from a signedPreKey.abstract byte[]
signedPreKeyToBytes(T_SigPreKey sigPreKey)
Serialize a signedPreKey into a byte array.
-
-
-
Field Detail
-
BUNDLE
public final OmemoKeyUtil.Bundle BUNDLE
-
-
Constructor Detail
-
OmemoKeyUtil
public OmemoKeyUtil()
-
-
Method Detail
-
identityKeyPairFromBytes
public abstract T_IdKeyPair identityKeyPairFromBytes(byte[] data) throws CorruptedOmemoKeyException
Deserialize an identityKeyPair from a byte array.- Parameters:
data
- byte array- Returns:
- IdentityKeyPair (T_IdKeyPair)
- Throws:
CorruptedOmemoKeyException
- if the key is damaged of malformed
-
identityKeyFromBytes
public abstract T_IdKey identityKeyFromBytes(byte[] data) throws CorruptedOmemoKeyException
Deserialize an identityKey from a byte array.- Parameters:
data
- byte array- Returns:
- identityKey (T_IdKey)
- Throws:
CorruptedOmemoKeyException
- if the key is damaged or malformed
-
identityKeyToBytes
public abstract byte[] identityKeyToBytes(T_IdKey identityKey)
Serialize an identityKey into bytes.- Parameters:
identityKey
- idKey- Returns:
- byte array representation of the identity key.
-
ellipticCurvePublicKeyFromBytes
public abstract T_ECPub ellipticCurvePublicKeyFromBytes(byte[] data) throws CorruptedOmemoKeyException
Deserialize an elliptic curve public key from bytes.- Parameters:
data
- bytes- Returns:
- elliptic curve public key (T_ECPub)
- Throws:
CorruptedOmemoKeyException
- if the key is damaged or malformed
-
preKeyPublicFromBytes
public T_ECPub preKeyPublicFromBytes(byte[] data) throws CorruptedOmemoKeyException
Deserialize a public preKey from bytes.- Parameters:
data
- preKey as bytes- Returns:
- deserialized preKey
- Throws:
CorruptedOmemoKeyException
- if the key is damaged or malformed
-
preKeyToBytes
public abstract byte[] preKeyToBytes(T_PreKey preKey)
Serialize a preKey into a byte array.- Parameters:
preKey
- preKey- Returns:
- byte[]
-
preKeyFromBytes
public abstract T_PreKey preKeyFromBytes(byte[] bytes) throws java.io.IOException
Deserialize a preKey from a byte array.- Parameters:
bytes
- byte array- Returns:
- deserialized preKey
- Throws:
java.io.IOException
- when something goes wrong
-
generateOmemoPreKeys
public abstract java.util.TreeMap<java.lang.Integer,T_PreKey> generateOmemoPreKeys(int startId, int count)
Generate 'count' new PreKeys beginning with id 'startId'. These preKeys are published and can be used by contacts to establish sessions with us.- Parameters:
startId
- start idcount
- how many keys do we want to generate- Returns:
- Map of new preKeys
-
generateOmemoSignedPreKey
public abstract T_SigPreKey generateOmemoSignedPreKey(T_IdKeyPair identityKeyPair, int signedPreKeyId) throws CorruptedOmemoKeyException
Generate a new signed preKey.- Parameters:
identityKeyPair
- identityKeyPair used to sign the preKeysignedPreKeyId
- id that the preKey will have- Returns:
- deserialized signed preKey
- Throws:
CorruptedOmemoKeyException
- when the identityKeyPair is invalid
-
signedPreKeyPublicFromBytes
public T_ECPub signedPreKeyPublicFromBytes(byte[] data) throws CorruptedOmemoKeyException
Deserialize a public signedPreKey from bytes.- Parameters:
data
- bytes- Returns:
- deserialized signed preKey
- Throws:
CorruptedOmemoKeyException
- if the key is damaged or malformed
-
signedPreKeyFromBytes
public abstract T_SigPreKey signedPreKeyFromBytes(byte[] data) throws java.io.IOException
Deserialize a signedPreKey from a byte array.- Parameters:
data
- byte array- Returns:
- deserialized signed preKey
- Throws:
java.io.IOException
- when something goes wrong
-
signedPreKeyToBytes
public abstract byte[] signedPreKeyToBytes(T_SigPreKey sigPreKey)
Serialize a signedPreKey into a byte array.- Parameters:
sigPreKey
- signedPreKey- Returns:
- byte array
-
bundleFromOmemoBundle
public abstract T_Bundle bundleFromOmemoBundle(OmemoBundleElement bundle, OmemoDevice contact, int keyId) throws CorruptedOmemoKeyException
Build a crypto-lib specific PreKeyBundle (T_Bundle) using a PreKey from the OmemoBundleElement 'bundle'. The PreKeyBundle will contain the identityKey, signedPreKey and signature, as well as a preKey from the OmemoBundleElement.- Parameters:
bundle
- OmemoBundleElementcontact
- Contact that the bundle belongs tokeyId
- id of the preKey that will be selected from the OmemoBundleElement and that the PreKeyBundle will contain- Returns:
- PreKeyBundle (T_PreKey)
- Throws:
CorruptedOmemoKeyException
- if some key is damaged or malformed
-
signedPreKeySignatureFromKey
public abstract byte[] signedPreKeySignatureFromKey(T_SigPreKey signedPreKey)
Extract the signature from a signedPreKey.- Parameters:
signedPreKey
- signedPreKey- Returns:
- signature as byte array
-
generateOmemoIdentityKeyPair
public abstract T_IdKeyPair generateOmemoIdentityKeyPair()
Generate a new IdentityKeyPair. We should always have only one pair and usually keep this for a long time.- Returns:
- deserialized identity key pair
-
signedPreKeyIdFromKey
public abstract int signedPreKeyIdFromKey(T_SigPreKey signedPreKey)
return the id of the given signedPreKey.- Parameters:
signedPreKey
- key- Returns:
- id of the key
-
identityKeyPairToBytes
public abstract byte[] identityKeyPairToBytes(T_IdKeyPair identityKeyPair)
serialize an identityKeyPair into bytes.- Parameters:
identityKeyPair
- identityKeyPair- Returns:
- byte array
-
identityKeyFromPair
public abstract T_IdKey identityKeyFromPair(T_IdKeyPair pair)
Extract the public identityKey from an identityKeyPair.- Parameters:
pair
- keyPair- Returns:
- public key of the pair
-
identityKeyForBundle
public abstract byte[] identityKeyForBundle(T_IdKey identityKey)
Prepare an identityKey for transport in an OmemoBundleElement (serialize it).- Parameters:
identityKey
- identityKey that will be transported- Returns:
- key as byte array
-
preKeyPublicKeyForBundle
public abstract byte[] preKeyPublicKeyForBundle(T_ECPub preKey)
Prepare an elliptic curve preKey for transport in an OmemoBundleElement.- Parameters:
preKey
- key- Returns:
- key as byte array
-
preKeyForBundle
public abstract byte[] preKeyForBundle(T_PreKey preKey)
Prepare a preKey for transport in an OmemoBundleElement.- Parameters:
preKey
- preKey- Returns:
- key as byte array
-
preKeyPublicKeysForBundle
public java.util.HashMap<java.lang.Integer,byte[]> preKeyPublicKeysForBundle(java.util.TreeMap<java.lang.Integer,T_PreKey> preKeyHashMap)
Prepare a whole bunche of preKeys for transport.- Parameters:
preKeyHashMap
- HashMap of preKeys- Returns:
- HashMap of byte arrays but with the same keyIds as key
-
signedPreKeyPublicForBundle
public abstract byte[] signedPreKeyPublicForBundle(T_SigPreKey signedPreKey)
Prepare a public signedPreKey for transport in a bundle.- Parameters:
signedPreKey
- signedPreKey- Returns:
- signedPreKey as byte array
-
getFingerprintOfIdentityKey
public abstract OmemoFingerprint getFingerprintOfIdentityKey(T_IdKey identityKey)
Return the fingerprint of an identityKey.- Parameters:
identityKey
- identityKey- Returns:
- fingerprint of the key
-
getFingerprintOfIdentityKeyPair
public abstract OmemoFingerprint getFingerprintOfIdentityKeyPair(T_IdKeyPair identityKeyPair)
Returns the fingerprint of the public key of an identityKeyPair.- Parameters:
identityKeyPair
- IdentityKeyPair.- Returns:
- fingerprint of the public key.
-
rawSessionFromBytes
public abstract T_Sess rawSessionFromBytes(byte[] data) throws java.io.IOException
Deserialize a raw OMEMO Session from bytes.- Parameters:
data
- bytes- Returns:
- raw OMEMO Session
- Throws:
java.io.IOException
- when something goes wrong
-
rawSessionToBytes
public abstract byte[] rawSessionToBytes(T_Sess session)
Serialize a raw OMEMO session into a byte array.- Parameters:
session
- raw session- Returns:
- byte array
-
addInBounds
public static int addInBounds(int value, int added)
Add integers modulo MAX_VALUE.- Parameters:
value
- base integeradded
- value that is added to the base value- Returns:
- (value plus added) modulo Integer.MAX_VALUE
-
-