Java Code Examples for org.whispersystems.libsignal.util.ByteUtil#highBitsToInt()
The following examples show how to use
org.whispersystems.libsignal.util.ByteUtil#highBitsToInt() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: KeyExchangeMessage.java From Silence with GNU General Public License v3.0 | 5 votes |
public KeyExchangeMessage(byte[] serialized) throws InvalidMessageException, InvalidVersionException, LegacyMessageException { try { byte[][] parts = ByteUtil.split(serialized, 1, serialized.length - 1); this.version = ByteUtil.highBitsToInt(parts[0][0]); this.supportedVersion = ByteUtil.lowBitsToInt(parts[0][0]); if (this.version < CiphertextMessage.CURRENT_VERSION) { throw new LegacyMessageException("Unsupported legacy version: " + this.version); } if (this.version > CiphertextMessage.CURRENT_VERSION) { throw new InvalidVersionException("Unknown version: " + this.version); } SignalProtos.KeyExchangeMessage message = SignalProtos.KeyExchangeMessage.parseFrom(parts[1]); if (!message.hasId() || !message.hasBaseKey() || !message.hasRatchetKey() || !message.hasIdentityKey() || !message.hasBaseKeySignature()) { throw new InvalidMessageException("Some required fields missing!"); } this.sequence = message.getId() >> 5; this.flags = message.getId() & 0x1f; this.serialized = serialized; this.baseKey = Curve.decodePoint(message.getBaseKey().toByteArray(), 0); this.baseKeySignature = message.getBaseKeySignature().toByteArray(); this.ratchetKey = Curve.decodePoint(message.getRatchetKey().toByteArray(), 0); this.identityKey = new IdentityKey(message.getIdentityKey().toByteArray(), 0); } catch (InvalidKeyException | IOException e) { throw new InvalidMessageException(e); } }
Example 2
Source File: SenderKeyDistributionMessage.java From libsignal-protocol-java with GNU General Public License v3.0 | 5 votes |
public SenderKeyDistributionMessage(byte[] serialized) throws LegacyMessageException, InvalidMessageException { try { byte[][] messageParts = ByteUtil.split(serialized, 1, serialized.length - 1); byte version = messageParts[0][0]; byte[] message = messageParts[1]; if (ByteUtil.highBitsToInt(version) < CiphertextMessage.CURRENT_VERSION) { throw new LegacyMessageException("Legacy message: " + ByteUtil.highBitsToInt(version)); } if (ByteUtil.highBitsToInt(version) > CURRENT_VERSION) { throw new InvalidMessageException("Unknown version: " + ByteUtil.highBitsToInt(version)); } SignalProtos.SenderKeyDistributionMessage distributionMessage = SignalProtos.SenderKeyDistributionMessage.parseFrom(message); if (!distributionMessage.hasId() || !distributionMessage.hasIteration() || !distributionMessage.hasChainKey() || !distributionMessage.hasSigningKey()) { throw new InvalidMessageException("Incomplete message."); } this.serialized = serialized; this.id = distributionMessage.getId(); this.iteration = distributionMessage.getIteration(); this.chainKey = distributionMessage.getChainKey().toByteArray(); this.signatureKey = Curve.decodePoint(distributionMessage.getSigningKey().toByteArray(), 0); } catch (InvalidProtocolBufferException | InvalidKeyException e) { throw new InvalidMessageException(e); } }
Example 3
Source File: PreKeySignalMessage.java From libsignal-protocol-java with GNU General Public License v3.0 | 5 votes |
public PreKeySignalMessage(byte[] serialized) throws InvalidMessageException, InvalidVersionException { try { this.version = ByteUtil.highBitsToInt(serialized[0]); if (this.version > CiphertextMessage.CURRENT_VERSION) { throw new InvalidVersionException("Unknown version: " + this.version); } if (this.version < CiphertextMessage.CURRENT_VERSION) { throw new LegacyMessageException("Legacy version: " + this.version); } SignalProtos.PreKeySignalMessage preKeyWhisperMessage = SignalProtos.PreKeySignalMessage.parseFrom(ByteString.copyFrom(serialized, 1, serialized.length-1)); if (!preKeyWhisperMessage.hasSignedPreKeyId() || !preKeyWhisperMessage.hasBaseKey() || !preKeyWhisperMessage.hasIdentityKey() || !preKeyWhisperMessage.hasMessage()) { throw new InvalidMessageException("Incomplete message."); } this.serialized = serialized; this.registrationId = preKeyWhisperMessage.getRegistrationId(); this.preKeyId = preKeyWhisperMessage.hasPreKeyId() ? Optional.of(preKeyWhisperMessage.getPreKeyId()) : Optional.<Integer>absent(); this.signedPreKeyId = preKeyWhisperMessage.hasSignedPreKeyId() ? preKeyWhisperMessage.getSignedPreKeyId() : -1; this.baseKey = Curve.decodePoint(preKeyWhisperMessage.getBaseKey().toByteArray(), 0); this.identityKey = new IdentityKey(Curve.decodePoint(preKeyWhisperMessage.getIdentityKey().toByteArray(), 0)); this.message = new SignalMessage(preKeyWhisperMessage.getMessage().toByteArray()); } catch (InvalidProtocolBufferException | InvalidKeyException | LegacyMessageException e) { throw new InvalidMessageException(e); } }
Example 4
Source File: SenderKeyMessage.java From libsignal-protocol-java with GNU General Public License v3.0 | 5 votes |
public SenderKeyMessage(byte[] serialized) throws InvalidMessageException, LegacyMessageException { try { byte[][] messageParts = ByteUtil.split(serialized, 1, serialized.length - 1 - SIGNATURE_LENGTH, SIGNATURE_LENGTH); byte version = messageParts[0][0]; byte[] message = messageParts[1]; byte[] signature = messageParts[2]; if (ByteUtil.highBitsToInt(version) < 3) { throw new LegacyMessageException("Legacy message: " + ByteUtil.highBitsToInt(version)); } if (ByteUtil.highBitsToInt(version) > CURRENT_VERSION) { throw new InvalidMessageException("Unknown version: " + ByteUtil.highBitsToInt(version)); } SignalProtos.SenderKeyMessage senderKeyMessage = SignalProtos.SenderKeyMessage.parseFrom(message); if (!senderKeyMessage.hasId() || !senderKeyMessage.hasIteration() || !senderKeyMessage.hasCiphertext()) { throw new InvalidMessageException("Incomplete message."); } this.serialized = serialized; this.messageVersion = ByteUtil.highBitsToInt(version); this.keyId = senderKeyMessage.getId(); this.iteration = senderKeyMessage.getIteration(); this.ciphertext = senderKeyMessage.getCiphertext().toByteArray(); } catch (InvalidProtocolBufferException | ParseException e) { throw new InvalidMessageException(e); } }
Example 5
Source File: SignalMessage.java From libsignal-protocol-java with GNU General Public License v3.0 | 5 votes |
public SignalMessage(byte[] serialized) throws InvalidMessageException, LegacyMessageException { try { byte[][] messageParts = ByteUtil.split(serialized, 1, serialized.length - 1 - MAC_LENGTH, MAC_LENGTH); byte version = messageParts[0][0]; byte[] message = messageParts[1]; byte[] mac = messageParts[2]; if (ByteUtil.highBitsToInt(version) < CURRENT_VERSION) { throw new LegacyMessageException("Legacy message: " + ByteUtil.highBitsToInt(version)); } if (ByteUtil.highBitsToInt(version) > CURRENT_VERSION) { throw new InvalidMessageException("Unknown version: " + ByteUtil.highBitsToInt(version)); } SignalProtos.SignalMessage whisperMessage = SignalProtos.SignalMessage.parseFrom(message); if (!whisperMessage.hasCiphertext() || !whisperMessage.hasCounter() || !whisperMessage.hasRatchetKey()) { throw new InvalidMessageException("Incomplete message."); } this.serialized = serialized; this.senderRatchetKey = Curve.decodePoint(whisperMessage.getRatchetKey().toByteArray(), 0); this.messageVersion = ByteUtil.highBitsToInt(version); this.counter = whisperMessage.getCounter(); this.previousCounter = whisperMessage.getPreviousCounter(); this.ciphertext = whisperMessage.getCiphertext().toByteArray(); } catch (InvalidProtocolBufferException | InvalidKeyException | ParseException e) { throw new InvalidMessageException(e); } }
Example 6
Source File: SignalMessage.java From libsignal-protocol-java with GNU General Public License v3.0 | 4 votes |
public static boolean isLegacy(byte[] message) { return message != null && message.length >= 1 && ByteUtil.highBitsToInt(message[0]) != CiphertextMessage.CURRENT_VERSION; }