示例#1
0
		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);
			}
		}
示例#2
0
		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();
		}