Example #1
0
        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);
        }
Example #2
0
        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);
        }
Example #3
0
        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;
        }
Example #4
0
        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;
                }
            });
        }