* #40116: Switch to 2.3.0 libzrtpcpp version
diff --git a/jni/libzrtp/sources/src/libzrtpcpp/ZrtpPacketDHPart.h b/jni/libzrtp/sources/src/libzrtpcpp/ZrtpPacketDHPart.h
new file mode 100644
index 0000000..d0ea4ba
--- /dev/null
+++ b/jni/libzrtp/sources/src/libzrtpcpp/ZrtpPacketDHPart.h
@@ -0,0 +1,120 @@
+/*
+  Copyright (C) 2006-2007 Werner Dittmann
+
+  This program is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  This program is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with this program.  If not, see <http://www.gnu.org/licenses/>.
+*/
+
+#ifndef _ZRTPPACKETDHPART_H_
+#define _ZRTPPACKETDHPART_H_
+
+/**
+ * @file ZrtpPacketDHPart.h
+ * @brief The ZRTP DHPart message
+ *
+ * @ingroup GNU_ZRTP
+ * @{
+ */
+
+#include <libzrtpcpp/ZrtpPacketBase.h>
+
+/**
+ * Implement the DHPart packet.
+ *
+ * The ZRTP message DHPart. The implementation sends this
+ * to exchange the Diffie-Helman public keys and the shared
+ * secrets between the two parties.
+ *
+ * @author Werner Dittmann <Werner.Dittmann@t-online.de>
+ */
+
+class __EXPORT ZrtpPacketDHPart : public ZrtpPacketBase {
+
+ protected:
+    uint8_t *pv;                ///< points to public key value inside DH message
+    DHPart_t* DHPartHeader;     ///< points to DH message structure
+    int32_t dhLength;           ///< length of DH message, DH message has variable length
+
+ public:
+    /// Creates a DHPart packet no data, must use setPubKeyType(...)
+    ZrtpPacketDHPart();
+
+    /// Creates a DHPart packet with default data and a give public key type
+    ZrtpPacketDHPart(const char* pkt);
+
+    /// Creates a DHPart packet from received data
+    ZrtpPacketDHPart(uint8_t* data);
+
+    /// Standard destructor
+    virtual ~ZrtpPacketDHPart();
+
+    /// Get pointer to public key value, variable length byte array
+    uint8_t* getPv()             { return pv; }
+
+    /// Get pointer to first retained secretd id, fixed length byte array
+    uint8_t* getRs1Id()          { return DHPartHeader->rs1Id; };
+
+    /// Get pointer to second retained secretd id, fixed length byte array
+    uint8_t* getRs2Id()          { return DHPartHeader->rs2Id; };
+
+    /// Get pointer to additional retained secretd id, fixed length byte array
+    uint8_t* getAuxSecretId()    { return DHPartHeader->auxSecretId; };
+
+    /// Get pointer to PBX retained secretd id, fixed length byte array
+    uint8_t* getPbxSecretId()    { return DHPartHeader->pbxSecretId; };
+
+    /// Get pointer to first hash (H1) for hash chain, fixed length byte array
+    uint8_t* getH1()             { return DHPartHeader->hashH1; };
+
+    /// Get pointer to HMAC, fixed length byte array
+    uint8_t* getHMAC()           { return pv+dhLength; };
+
+    /// Setpublic key value, variable length byte array
+    void setPv(uint8_t* text)         { memcpy(pv, text, dhLength); };
+
+    /// Set first retained secretd id, fixed length byte array
+    void setRs1Id(uint8_t* text)      { memcpy(DHPartHeader->rs1Id, text, sizeof(DHPartHeader->rs1Id)); };
+
+    /// Set second retained secretd id, fixed length byte array
+    void setRs2Id(uint8_t* text)      { memcpy(DHPartHeader->rs2Id, text, sizeof(DHPartHeader->rs2Id)); };
+
+    /// Set additional retained secretd id, fixed length byte array
+    void setAuxSecretId(uint8_t* t)   { memcpy(DHPartHeader->auxSecretId, t, sizeof(DHPartHeader->auxSecretId)); };
+
+    /// Set PBX retained secretd id, fixed length byte array
+    void setPbxSecretId(uint8_t* t)   { memcpy(DHPartHeader->pbxSecretId,t, sizeof(DHPartHeader->pbxSecretId)); };
+
+    /// Set first hash (H1) of hash chain, fixed length byte array
+    void setH1(uint8_t* t)            { memcpy(DHPartHeader->hashH1, t, sizeof(DHPartHeader->hashH1)); };
+
+    /// Set key agreement type, fixed size character array
+    void setPubKeyType(const char* pkt);
+
+    /// Set first MAC, fixed length byte array
+    void setHMAC(uint8_t* t)          { memcpy(pv+dhLength, t, 2*ZRTP_WORD_SIZE); };
+
+ private:
+    void initialize();
+    // SupportedPubKeys pktype;
+     // DHPart packet is of variable length. It maximum size is 141 words:
+     // - 13 words fixed sizze
+     // - up to 128 words variable part, depending on DH algorithm
+     //   leads to a maximum of 4*141=564 bytes.
+     uint8_t data[768];       // large enough to hold a full blown DHPart packet
+};
+
+/**
+ * @}
+ */
+#endif // ZRTPPACKETDHPART
+