private byte[] getCiphertext(uint version, MessageKeys messageKeys, byte[] plaintext) { try { if (version >= 3) { //cipher = getCipher(Cipher.ENCRYPT_MODE, messageKeys.getCipherKey(), messageKeys.getIv()); return Encrypt.aesCbcPkcs5(plaintext, messageKeys.getCipherKey(), messageKeys.getIv()); } else { //cipher = getCipher(Cipher.ENCRYPT_MODE, messageKeys.getCipherKey(), messageKeys.getCounter()); return Encrypt.aesCtr(plaintext, messageKeys.getCipherKey(), messageKeys.getCounter()); } } catch (/*IllegalBlockSizeException | BadPadding*/Exception e) { throw new Exception(e.Message); } }
private byte[] getPlaintext(uint version, MessageKeys messageKeys, byte[] cipherText) { try { //Cipher cipher; if (version >= 3) { //cipher = getCipher(Cipher.DECRYPT_MODE, messageKeys.getCipherKey(), messageKeys.getIv()); return Decrypt.aesCbcPkcs5(cipherText, messageKeys.getCipherKey(), messageKeys.getIv()); } else { //cipher = getCipher(Cipher.DECRYPT_MODE, messageKeys.getCipherKey(), messageKeys.getCounter()) return Decrypt.aesCtr(cipherText, messageKeys.getCipherKey(), messageKeys.getCounter()); } } catch (/*IllegalBlockSizeException | BadPadding*/Exception e) { throw new InvalidMessageException(e); } }
public void setMessageKeys(ECPublicKey senderEphemeral, MessageKeys messageKeys) { Pair<Chain, uint> chainAndIndex = getReceiverChain(senderEphemeral); Chain chain = chainAndIndex.first(); Chain.Types.MessageKey messageKeyStructure = Chain.Types.MessageKey.CreateBuilder() .SetCipherKey(ByteString.CopyFrom(messageKeys.getCipherKey()/*.getEncoded()*/)) .SetMacKey(ByteString.CopyFrom(messageKeys.getMacKey()/*.getEncoded()*/)) .SetIndex(messageKeys.getCounter()) .SetIv(ByteString.CopyFrom(messageKeys.getIv()/*.getIV()*/)) .Build(); Chain.Builder updatedChain = chain.ToBuilder().AddMessageKeys(messageKeyStructure); if (updatedChain.MessageKeysList.Count > MAX_MESSAGE_KEYS) { updatedChain.MessageKeysList.RemoveAt(0); } this.sessionStructure = this.sessionStructure.ToBuilder() .SetReceiverChains((int)chainAndIndex.second(), updatedChain.Build()) // TODO: conv .Build(); }