internal byte[] EncryptIke1Data(ICryptoLibrary cryptoLibrary, Ike1Data ike1Data) { if (Status != MessageSessionStatusCode.inProgress) { throw new InvalidOperationException(); } var decryptedMessageData = MessageEncoderDecoder.EncodeIke1DataWithPadding(cryptoLibrary, ike1Data); var encryptedMessageData = new byte[decryptedMessageData.Length]; cryptoLibrary.ProcessAesCbcBlocks(true, _aesKey, _iv, decryptedMessageData, encryptedMessageData); Status = MessageSessionStatusCode.encryptionDecryptionCompleted; return(encryptedMessageData); }
internal byte[] EncryptShortSingleMessage(ICryptoLibrary cryptoLibrary, string messageText) { if (Status != MessageSessionStatusCode.inProgress) { throw new InvalidOperationException(); } var decryptedMessageData = MessageEncoderDecoder.EncodePlainTextMessageWithPadding_plainTextUtf8_256(cryptoLibrary, messageText); var encryptedMessageData = new byte[decryptedMessageData.Length]; cryptoLibrary.ProcessAesCbcBlocks(true, _aesKey, _iv, decryptedMessageData, encryptedMessageData); Status = MessageSessionStatusCode.encryptionDecryptionCompleted; return(encryptedMessageData); }
internal void DeriveKeys(ICryptoLibrary cryptoLibrary, byte[] sharedPingPongHmacKey, MessageStartPacket messageStart, byte[] directChannelSharedDhSecret) { if (Status != MessageSessionStatusCode.created) { throw new InvalidOperationException(); } BinaryProcedures.CreateBinaryWriter(out var msE, out var wE); messageStart.GetSignedFieldsForMessageHMAC(wE, false); wE.Write(sharedPingPongHmacKey); _iv = cryptoLibrary.GetHashSHA256(msE.ToArray()).Take(16).ToArray(); wE.Write(directChannelSharedDhSecret); _aesKey = cryptoLibrary.GetHashSHA256(msE.ToArray()); Status = MessageSessionStatusCode.inProgress; }
internal static LowLevelUdpResponseScanner GetScanner(uint messageId32, InviteSession session, MessageSessionStatusCode statusCode) { BinaryProcedures.CreateBinaryWriter(out var ms, out var w); w.Write((byte)PacketTypes.MessageAck); w.Write(messageId32); w.Write((byte)statusCode); return(new LowLevelUdpResponseScanner { ResponseFirstBytes = ms.ToArray(), OptionalFilter = (udpData) => { var msgAck = Decode(udpData); if (msgAck.MessageHMAC.Equals( session.GetMessageHMAC(msgAck.GetSignedFieldsForMessageHMAC) ) == false) { return false; } return true; } }); }