Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
libsrtp — SRTP (Secure Realtime Transport Protocol) के लिए लाइब्रेरी | Kitploit
उपकरण/GitHubGitHub/cisco/libsrtp
एन्क्रिप्शन/डिक्रिप्शन उपकरणनेटवर्क सुरक्षाक्रिप्टोग्राफीप्रमाणीकरण
GitHubcisco/libsrtp

libsrtp

SRTP (Secure Realtime Transport Protocol) के लिए लाइब्रेरी

रिपॉजिटरी देखें
1.4k5178 दिन पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

CMake Build CMake Release Autotools Build Autotools Build Coverity Scan Build Status OSS-Fuzz Status

libSRTP का परिचय

यह पैकेज सिक्योर रियल-टाइम ट्रांसपोर्ट प्रोटोकॉल (SRTP), यूनिवर्सल सिक्योरिटी ट्रांसफॉर्म (UST), और एक सहायक क्रिप्टोग्राफ़िक कर्नेल का कार्यान्वयन प्रदान करता है। SRTP API का दस्तावेज़ीकरण include/srtp.h में किया गया है, और लाइब्रेरी (संकलन के बाद) libsrtp2.a में है।

यह दस्तावेज़ libSRTP का वर्णन करता है, जो Cisco Systems, Inc. की ओपन सोर्स सिक्योर RTP लाइब्रेरी है। RTP रियल-टाइम ट्रांसपोर्ट प्रोटोकॉल है, जो टेलीफोनी, ऑडियो और वीडियो जैसे रियल-टाइम डेटा के परिवहन के लिए एक IETF मानक है, जिसे RFC 3550 द्वारा परिभाषित किया गया है। सिक्योर RTP (SRTP) RTP डेटा को गोपनीयता प्रदान करने और RTP हेडर और पेलोड को प्रमाणीकरण प्रदान करने के लिए एक RTP प्रोफ़ाइल है। SRTP एक IETF मानक है, जिसे RFC 3711 में परिभाषित किया गया है, और इसे IETF ऑडियो/वीडियो ट्रांसपोर्ट (AVT) कार्य समूह में विकसित किया गया था। यह लाइब्रेरी SRTP की सभी अनिवार्य विशेषताओं का समर्थन करती है, लेकिन सभी वैकल्पिक विशेषताओं का नहीं। अधिक विस्तृत जानकारी के लिए समर्थित विशेषताएँ अनुभाग देखें।

इस दस्तावेज़ का उपयोग /doc/ फ़ोल्डर में दस्तावेज़ीकरण फ़ाइलें उत्पन्न करने के लिए भी किया जाता है, जहाँ libSRTP API और संबंधित कार्यों के लिए एक अधिक विस्तृत संदर्भ बनाया जा सकता है (doxygen स्थापित करना आवश्यक है)। संदर्भ सामग्री कुछ C हेडर फ़ाइलों में एम्बेड की गई टिप्पणियों से स्वचालित रूप से बनाई जाती है। दस्तावेज़ीकरण को स्पष्टता में सुधार के लिए मॉड्यूल में व्यवस्थित किया गया है। ये मॉड्यूल सीधे तौर पर फ़ाइलों के अनुरूप नहीं होते हैं। एक अंतर्निहित क्रिप्टोग्राफ़िक कर्नेल libSRTP की अधिकांश बुनियादी कार्यक्षमता प्रदान करता है, लेकिन यह अधिकतर अप्रलेखित है क्योंकि यह पर्दे के पीछे अपना कार्य करता है।


संपर्क करें

  • [email protected] समाचार / घोषणाओं / चर्चाओं के लिए सामान्य मेलिंग सूची। यह एक खुली सूची है, साइन अप करने के लिए देखें https://lists.packetizer.com/mailman/listinfo/libsrtp।

  • [email protected] libsrtp रखरखाव टीम को सुरक्षा समस्याओं की सूचना देने के लिए। यह एक बंद सूची है, लेकिन कोई भी इसे संदेश भेज सकता है।


सामग्री

  • libSRTP का परिचय
  • संपर्क करें
    • सामग्री
  • लाइसेंस और अस्वीकरण
  • libSRTP अवलोकन
    • सुरक्षित RTP पृष्ठभूमि
    • समर्थित विशेषताएँ
    • कार्यान्वयन नोट
  • libSRTP की स्थापना और निर्माण
    • बिल्ड कॉन्फ़िगरेशन बदलना
    • Visual Studio का उपयोग करना
  • अनुप्रयोग
    • उदाहरण कोड
  • श्रेय
  • संदर्भ

लाइसेंस और अस्वीकरण

libSRTP निम्नलिखित लाइसेंस के अंतर्गत वितरित किया जाता है, जो स्रोत कोड वितरण में शामिल है। यदि आपने लाइब्रेरी किसी अन्य स्रोत से प्राप्त की है, तो इसे मैनुअल में पुन: प्रस्तुत किया गया है।

कॉपीराइट (c) 2001-2017 Cisco Systems, Inc. सर्वाधिकार सुरक्षित।

स्रोत और बाइनरी रूपों में पुनर्वितरण और उपयोग, बिना संशोधन के, अनुमत है बशर्ते कि निम्नलिखित शर्तें पूरी हों:

  • स्रोत कोड के पुनर्वितरण को उपरोक्त कॉपीराइट सूचना, शर्तों की यह सूची और निम्नलिखित अस्वीकरण बनाए रखना चाहिए।
  • बाइनरी रूप में पुनर्वितरण को उपरोक्त कॉपीराइट सूचना, शर्तों की यह सूची और निम्नलिखित अस्वीकरण को वितरण के साथ प्रदान किए गए दस्तावेज़ और/या अन्य सामग्रियों में पुन: प्रस्तुत करना चाहिए।
  • न तो Cisco Systems, Inc. का नाम और न ही इसके योगदानकर्ताओं के नाम किसी विशेष पूर्व लिखित अनुमति के बिना इस सॉफ़्टवेयर से व्युत्पन्न उत्पादों का समर्थन या प्रचार करने के लिए उपयोग किए जा सकते हैं।

यह सॉफ़्टवेयर कॉपीराइट धारकों और योगदानकर्ताओं द्वारा "जैसा है" प्रदान किया जाता है और किसी भी व्यक्त या निहित वारंटी, जिनमें शामिल हैं, लेकिन इन्हीं तक सीमित नहीं, व्यापारिकता और किसी विशेष उद्देश्य के लिए उपयुक्तता की निहित वारंटी तक सीमित, अस्वीकृत की जाती हैं। किसी भी स्थिति में कॉपीराइट धारक या योगदानकर्ता किसी भी प्रत्यक्ष, अप्रत्यक्ष, आकस्मिक, विशेष, अनुकरणीय या परिणामी क्षति के लिए उत्तरदायी नहीं होंगे (जिनमें शामिल हैं, लेकिन इन्हीं तक सीमित नहीं, वैकल्पिक वस्तुओं या सेवाओं की खरीद; उपयोग, डेटा या लाभ की हानि; या व्यवसाय में व्यवधान) चाहे वह किसी भी कारण से उत्पन्न हुई हों और किसी भी दायित्व सिद्धांत पर, चाहे अनुबंध में, कठोर दायित्व, या अपकृत्य (लापरवाही या अन्यथा सहित) में, इस सॉफ़्टवेयर के उपयोग से किसी भी तरह से उत्पन्न, भले ही सलाह दी गई हो ऐसी क्षति की संभावना के बारे में।


libSRTP अवलोकन

libSRTP RTP और RTCP की सुरक्षा के लिए फ़ंक्शन प्रदान करता है। RTP पैकेटों को एन्क्रिप्ट और प्रमाणित किया जा सकता है (srtp_protect() फ़ंक्शन का उपयोग करके), जिससे वे SRTP पैकेट बन जाते हैं। इसी तरह, SRTP पैकेटों को डिक्रिप्ट किया जा सकता है और उनके प्रमाणीकरण को सत्यापित किया जा सकता है (srtp_unprotect() फ़ंक्शन का उपयोग करके), जिससे वे RTP पैकेट बन जाते हैं। समान फ़ंक्शन RTCP पैकेटों पर सुरक्षा लागू करते हैं।

typedef srtp_stream_t एक संरचना की ओर इंगित करता है जो एक SRTP स्ट्रीम से जुड़ी सभी स्थिति रखती है, जिसमें सिफर और संदेश प्रमाणीकरण फ़ंक्शन के लिए कुंजियाँ और पैरामीटर और एंटी-रिप्ले डेटा शामिल हैं। एक विशेष srtp_stream_t एक विशेष RTP और RTCP स्ट्रीम की सुरक्षा के लिए आवश्यक जानकारी रखता है। यह डेटाटाइप जानबूझकर अपारदर्शी है ताकि libSRTP API को उसके कार्यान्वयन से बेहतर ढंग से अलग किया जा सके।

एक SRTP सत्र के भीतर, कई स्ट्रीम हो सकती हैं, जिनमें से प्रत्येक किसी विशेष प्रेषक से उत्पन्न होती है। प्रत्येक स्रोत अपनी उत्पन्न होने वाली RTP और RTCP स्ट्रीम की सुरक्षा के लिए एक अलग स्ट्रीम संदर्भ का उपयोग करता है। typedef srtp_t एक संरचना की ओर इंगित करता है जो एक SRTP सत्र से जुड़ी सभी स्थिति रखती है। एकल srtp_t के साथ कई स्ट्रीम संदर्भ जुड़े हो सकते हैं। एक स्ट्रीम संदर्भ srtp_t से स्वतंत्र रूप से अस्तित्व में नहीं रह सकता, हालाँकि निश्चित रूप से एक srtp_t बनाया जा सकता है जिसमें केवल एक ही स्ट्रीम संदर्भ हो। SRTP सत्र में भाग लेने वाले डिवाइस के पास उस सत्र में प्रत्येक स्रोत के लिए एक स्ट्रीम संदर्भ होना चाहिए, ताकि वह प्रत्येक प्रेषक से प्राप्त डेटा को संसाधित कर सके।

libSRTP में, एक सत्र srtp_create() फ़ंक्शन का उपयोग करके बनाया जाता है। सत्र में लागू की जाने वाली नीति इस फ़ंक्शन में एक अपारदर्शी srtp_policy_t हैंडल के रूप में पारित की जाती है। एक एकल नीति हैंडल एक स्ट्रीम नीति का वर्णन करता है। कई स्ट्रीम कॉन्फ़िगर करने के लिए, एक सत्र बनाएं और srtp_stream_add() के साथ अतिरिक्त नीतियां जोड़ें।

एक नीति हैंडल को srtp_policy_set_* फ़ंक्शनों के साथ कॉन्फ़िगर किया जाता है। न्यूनतम रूप से, इसमें SSRC चयन, प्रोफ़ाइल चयन, और कुंजी/सॉल्ट सामग्री शामिल है। प्रोफ़ाइल RTP/RTCP क्रिप्टो नीति सेटिंग्स कॉन्फ़िगर करती है, जबकि SSRC चयनकर्ता पहचानता है कि वह नीति कैसे और कहाँ लागू होती है।


सुरक्षित RTP पृष्ठभूमि

इस अनुभाग में हम SRTP की समीक्षा करते हैं और कुछ शब्दों का परिचय देते हैं जो libSRTP में उपयोग किए जाते हैं। एक RTP सत्र गंतव्य ट्रांसपोर्ट पतों की एक जोड़ी द्वारा परिभाषित किया जाता है, अर्थात एक नेटवर्क पता और RTP और RTCP के लिए UDP पोर्टों की एक जोड़ी। RTCP, RTP नियंत्रण प्रोटोकॉल, RTP सत्र में प्रतिभागियों के बीच समन्वय के लिए उपयोग किया जाता है, जैसे रिसीवर से प्रेषक तक फीडबैक प्रदान करना। एक SRTP सत्र समान रूप से परिभाषित किया गया है; यह केवल एक RTP सत्र है जिसके लिए SRTP प्रोफ़ाइल का उपयोग किया जा रहा है। एक SRTP सत्र में SRTP या SRTCP गंतव्य ट्रांसपोर्ट पतों पर भेजा गया ट्रैफ़िक शामिल होता है। सत्र में प्रत्येक प्रतिभागी की पहचान सिंक्रनाइज़ेशन स्रोत (SSRC) पहचानकर्ता द्वारा की जाती है। कुछ प्रतिभागी कोई SRTP ट्रैफ़िक नहीं भेज सकते हैं; उन्हें रिसीवर कहा जाता है, भले ही वे SRTCP ट्रैफ़िक भेजते हों, जैसे रिसीवर रिपोर्ट।

RTP कई स्रोतों को एक ही सत्र के दौरान RTP और RTCP ट्रैफ़िक भेजने की अनुमति देता है। इन स्रोतों को अलग करने के लिए सिंक्रनाइज़ेशन स्रोत पहचानकर्ता (SSRC) का उपयोग किया जाता है। libSRTP में, हम किसी विशेष स्रोत से SRTP और SRTCP ट्रैफ़िक को स्ट्रीम कहते हैं। प्रत्येक स्ट्रीम का अपना SSRC, अनुक्रम संख्या, रोलओवर काउंटर और अन्य डेटा होता है। विकल्पों, क्रिप्टोग्राफ़िक तंत्रों और कुंजियों का एक विशेष चयन नीति कहलाता है। एक सत्र के भीतर प्रत्येक स्ट्रीम पर एक अलग नीति लागू की जा सकती है।

एक एकल नीति का उपयोग किसी दिए गए सत्र में सभी स्ट्रीमों के लिए किया जा सकता है, हालाँकि जिस स्थिति में एक एकल कुंजी कई स्ट्रीमों में साझा की जाती है, उसमें सावधानी की आवश्यकता होती है। जब कुंजी साझाकरण का उपयोग किया जाता है, तो स्ट्रीमों की पहचान करने वाले SSRC मान अवश्य अलग-अलग होने चाहिए। इस आवश्यकता को इस परंपरा का उपयोग करके लागू किया जा सकता है कि प्रत्येक SRTP और SRTCP कुंजी का उपयोग केवल एक ही प्रेषक द्वारा एन्क्रिप्शन के लिए किया जाता है। दूसरे शब्दों में, कुंजी केवल उन स्ट्रीमों में साझा की जाती है जो किसी विशेष डिवाइस से उत्पन्न होती हैं (निश्चित रूप से, अन्य SRTP प्रतिभागियों को डिक्रिप्शन के लिए कुंजी का उपयोग करने की आवश्यकता होगी)। libSRTP उस स्थिति का पता लगाकर इस प्रवर्तन का समर्थन करता है जिसमें एक कुंजी का उपयोग इनबाउंड और आउटबाउंड दोनों डेटा के लिए किया जाता है।


समर्थित विशेषताएँ

यह लाइब्रेरी SRTP की सभी अनिवार्य-कार्यान्वयन विशेषताओं का समर्थन करती है (जैसा कि RFC 3711 में परिभाषित किया गया है)। इनमें से कुछ विशेषताओं को srtp_policy_t हैंडल का उपयोग करके उचित नीति निर्धारित करके रन टाइम पर चुना (या अचयनित) किया जा सकता है। प्रोटोकॉल के कुछ अन्य व्यवहारों को असाधारण घटनाओं के लिए उपयुक्त इवेंट हैंडलर परिभाषित करके अनुकूलित किया जा सकता है; उत्पन्न दस्तावेज़ीकरण में SRTPevents अनुभाग देखें।

SRTP विनिर्देश में वर्णित कुछ विकल्प समर्थित नहीं हैं। इनमें शामिल हैं

  • शून्य के अलावा अन्य कुंजी व्युत्पत्ति दरें,
  • सिफर F8,
  • मास्टर कुंजियों के बीच चयन करने के लिए पैकेट इंडेक्स का उपयोग।

उपयोगकर्ता को पता होना चाहिए कि इस लाइब्रेरी का दुरुपयोग करना संभव है, और परिणाम यह हो सकता है कि यह जो सुरक्षा स्तर प्रदान करती है वह अपर्याप्त हो। यदि आप इस लाइब्रेरी का उपयोग करके कोई सुविधा लागू कर रहे हैं, तो आप RFC 3711 का सुरक्षा विचार अनुभाग पढ़ना चाहेंगे। इसके अलावा, यह महत्वपूर्ण है कि आप लाइसेंस और अस्वीकरण अनुभाग में उल्लिखित शर्तों को पढ़ें और समझें।

यह लाइब्रेरी RFC 7714 में वर्णित AES-GCM प्रमाणित एन्क्रिप्शन विधियों का भी समर्थन करती है।


कार्यान्वयन नोट

  • यह कॉन्फ़िगर करना संभव है कि किस तृतीय-पक्ष (जैसे openssl/nss/etc) क्रिप्टो बैकएंड के साथ libSRTP बनाया जाएगा। यदि कोई तृतीय-पक्ष बैकएंड सेट नहीं है तो libSRTP एक आंतरिक कार्यान्वयन प्रदान करता है AES और Sha1 का। आंतरिक कार्यान्वयन केवल AES-128 और AES-256 का समर्थन करता है, इसलिए AES-192 या AES-GCM सिफर समूह का उपयोग करने के लिए एक तृतीय-पक्ष क्रिप्टो बैकएंड कॉन्फ़िगर किया जाना चाहिए। इस और प्रदर्शन कारणों से तृतीय-पक्ष क्रिप्टो बैकएंड का उपयोग करने की अत्यधिक अनुशंसा की जाती है।

  • srtp_protect() फ़ंक्शन मानता है कि RTP पैकेट रखने वाले बफ़र में पर्याप्त संग्रहण आवंटित है ताकि प्रमाणीकरण टैग उस पैकेट के अंत में लिखा जा सके। यदि यह धारणा मान्य नहीं है, तो मेमोरी भ्रष्टाचार होगा।

  • क्रिप्टो फ़ंक्शनों के लिए स्वचालित परीक्षण इनके माध्यम से प्रदान किए जाते हैं cipher_type_self_test() और auth_type_self_test() फ़ंक्शन। इन फ़ंक्शनों का उपयोग इस कोड के प्रत्येक पोर्ट को परीक्षण करने के लिए किया जाना चाहिए एक नए प्लेटफ़ॉर्म पर।

  • रीप्ले सुरक्षा क्रिप्टो इंजन में निहित है, और इसके लिए परीक्षण प्रदान किए जाते हैं।

  • यह कार्यान्वयन RTP पैकेटों को आरंभ करने, सुरक्षित करने और असुरक्षित करने के लिए कॉल प्रदान करता है, और इन फ़ंक्शनों को कैसे कॉल किया जाएगा, इस बारे में यथासंभव कम धारणाएँ बनाता है। उदाहरण के लिए, कॉलर से क्रम में पैकेट प्रदान करने की अपेक्षा नहीं की जाती है (हालाँकि यदि वे क्रम से 65k से अधिक कॉल किए जाते हैं, तो सिंक्रनाइज़ेशन खो जाएगा)।

  • RTP पैकेट में अनुक्रम संख्या का उपयोग निम्न 16 बिट्स के रूप में किया जाता है प्रेषक के स्थानीय पैकेट इंडेक्स के। ध्यान दें कि RTP अपनी अनुक्रम संख्या एक यादृच्छिक स्थान से शुरू करेगा, और SRTP परत बस अपनी पहली इनवोकेशन पर उस संख्या तक आगे कूद जाती है। एक पुराने संस्करण में इस लाइब्रेरी ने प्रारंभिक अनुक्रम संख्याओं का उपयोग किया जो 32,768 से कम हैं; यह ट्रिक अब आवश्यक नहीं है क्योंकि rdbx_estimate_index(...) फ़ंक्शन को बेहतर बना दिया गया है संस्करण 1.0.1 तक।

  • (S)RTCP के लिए रीप्ले विंडो की लंबाई 128 बिट्स के रूप में हार्डकोडेड है।


libSRTP की स्थापना और निर्माण

libSRTP स्थापित करने के लिए, https://github.com/cisco/libsrtp/releases से वितरण का नवीनतम रिलीज़ डाउनलोड करें। आप शायद सबसे हालिया रिलीज़ प्राप्त करना चाहेंगे। वितरण को अनपैक करें और स्रोत फ़ाइलें निकालें; जिस निर्देशिका में स्रोत फ़ाइलें जाएंगी उसका नाम libsrtp-A-B-C है, जहाँ A संस्करण संख्या है, B प्रमुख रिलीज़ संख्या है और C लघु रिलीज़ संख्या है।

libSRTP GNU autoconf और make उपयोगिताओं का उपयोग करता है (BSD make काम नहीं करेगा; यदि make के दोनों संस्करण आपके प्लेटफ़ॉर्म पर हैं, तो आप GNU make को gmake के रूप में लागू कर सकते हैं।)। libsrtp निर्देशिका में, configure स्क्रिप्ट चलाएं और फिर make चलाएं:~~~.txt ./configure [ options ] make

root@kitploit:~
configure स्क्रिप्ट निम्नलिखित विकल्प स्वीकार करती है:

विकल्प                         | विवरण
-------------------------------|--------------------
\-\-help                   \-h | सहायता प्रदर्शित करें
\-\-enable-debug-logging       | सभी मॉड्यूलों में डीबग लॉगिंग सक्षम करें
\-\-enable-openssl             | OpenSSL क्रिप्टो इंजन सक्षम करें
\-\-enable-nss                 | NSS क्रिप्टो इंजन सक्षम करें
\-\-enable-openssl-kdf         | OpenSSL KDF एल्गोरिथ्म सक्षम करें
\-\-enable-log-stdout          | stdout पर लॉगिंग सक्षम करें
\-\-with-openssl-dir           | OpenSSL स्थापना का स्थान
\-\-with-nss-dir               | NSS स्थापना का स्थान
\-\-with-log-file              | लॉगिंग के लिए फ़ाइल का उपयोग करें

डिफ़ॉल्ट रूप से कोई लॉग आउटपुट नहीं होता है, लॉगिंग को stdout पर या किसी दिए गए फ़ाइल में
configure विकल्पों का उपयोग करके सक्षम किया जा सकता है।

इस पैकेज का परीक्षण निम्नलिखित प्लेटफार्मों पर किया गया है: Mac OS X
(powerpc-apple-darwin1.4), Cygwin (i686-pc-cygwin), Solaris
(sparc-sun-solaris2.6), RedHat Linux 7.1 और 9 (i686-pc-linux), तथा
OpenBSD (sparc-unknown-openbsd2.7).

--------------------------------------------------------------------------------

<a name="changing-build-configuration"></a>
## बिल्ड कॉन्फ़िगरेशन बदलना

ऊपर उल्लिखित `./configure` स्क्रिप्ट बनाने के लिए, libSRTP निम्न पर निर्भर करता है
[automake](https://www.gnu.org/software/automake/) टूलचेन। चूँकि
`./configure` को automake द्वारा `configure.in` से बनाया जाता है, यदि आप
`./configure` के कार्य करने के तरीके में परिवर्तन करते हैं (जैसे, नई लाइब्रेरी निर्भरता जोड़ने के लिए),
तो आपको `./configure` का पुनर्निर्माण करना होगा और अद्यतन संस्करण कमिट करना होगा। इसके अतिरिक्त,
automake के साथ ही, आपको `pkgconfig` उपकरण भी स्थापित करने होंगे।

उदाहरण के लिए, macOS पर:```
brew install automake pkgconfig
# Edit configure.in
autoremake -ivf
```
<a name="using-visual-studio"></a>
## Visual Studio का उपयोग करना

विंडोज़ पर Visual Studio का उपयोग CMake के माध्यम से किया जा सकता है। CMake यहाँ से डाउनलोड किया जा सकता है:
https://cmake.org/ । Visual Studio बिल्ड फ़ाइलें बनाने के लिए, उदाहरण के लिए निम्नलिखित
कमांड चलाएँ:```
# Create build subdirectory
mkdir build
cd build

# Make project files
cmake .. -G "Visual Studio 15 2017"

# Or for 64 bit project files
cmake .. -G "Visual Studio 15 2017 Win64"
```
<a name="using-meson"></a>
## Meson का उपयोग करना

Windows सहित सभी प्लेटफार्मों पर, [Meson](https://mesonbuild.com) का उपयोग करके बिल्ड किया जा सकता है।
Meson डाउनलोड करने के चरण यहाँ दिए गए हैं: https://mesonbuild.com/Getting-meson.html

Meson के साथ बिल्ड करने के लिए, आप कुछ इस प्रकार कर सकते हैं:```
# Setup the build subdirectory
meson setup --prefix=/path/to/prefix builddir

# Build the project
meson compile -C builddir

# Run tests
meson test -C builddir

# Optionally, install
meson install -C builddir
```
Visual Studio के साथ बनाने के लिए, उपरोक्त कमांड को Visual Studio
कमांड प्रॉम्प्ट के अंदर से चलाएँ, या एक Command Prompt के अंदर उचित तर्कों के साथ
`vcvarsall.bat` चलाएँ।

ध्यान दें कि आप उपरोक्त कमांड को उपयुक्त `ninja`
टारगेट से भी बदल सकते हैं: `ninja -C build`, `ninja -C build test`, `ninja -C build install`।

--------------------------------------------------------------------------------

<a name="applications"></a>
# अनुप्रयोग

कई परीक्षण ड्राइवर और एक सरल और पोर्टेबल srtp अनुप्रयोग
`test/` उपनिर्देशिका में शामिल हैं।

Test driver     | परीक्षित फ़ंक्शन
---------       | -------
kernel_driver   | क्रिप्टो कर्नेल (सिफर, प्रमाणीकरण फ़ंक्शन, RNG)
srtp_driver	    | srtp इन-मेमोरी परीक्षण (नेटवर्क का उपयोग नहीं करता)
rdbx_driver	    | rdbx (विस्तारित रिप्ले डेटाबेस)
roc_driver	    | विस्तारित अनुक्रम संख्या फ़ंक्शन
replay_driver	  | रिप्ले डेटाबेस
cipher_driver	  | सिफर
auth_driver	    | हैश फ़ंक्शन

ऐप `rtpw` एक सरल rtp अनुप्रयोग है जो शब्दों को पढ़ता है
`/usr/dict/words` से और फिर [s]rtp का उपयोग करके उन्हें एक-एक करके भेजता है।
मैन्युअल srtp कुंजीकरण -k विकल्प का उपयोग करता है; स्वचालित कुंजी प्रबंधन
gdoi का उपयोग करके बाद में जोड़ा जाएगा।

उपयोग:~~~.txt
rtpw [[-d <debug>]* [-k|b <key> [-a][-e <key size>][-g]] [-s | -r] dest_ip dest_port] | [-l]

या तो -s (प्रेषक) या -r (प्राप्तकर्ता) विकल्प चुना जाना चाहिए। dest_ip, dest_port मान क्रमशः वह IP पता और UDP पोर्ट हैं जिन पर डिक्शनरी भेजी जाएगी।

विकल्प निम्नलिखित हैं:

यादृच्छिक 30-बाइट मानों को key/salt जोड़ियों के रूप में उपयोग करने के लिए, आप /dev/random के आउटपुट को प्रारूपित करने के लिए निम्नलिखित bash फ़ंक्शन उपयोग कर सकते हैं (जहाँ वह डिवाइस उपलब्ध है)।~~~.txt function randhex() { cat /dev/random | od --read-bytes=32 --width=32 -x | awk '{ print $2 $3 $4 $5 $6 $7 $8 $9 $10 $11 $12 $13 $14 $15 $16 }' }

root@kitploit:~
दो rtpw प्रोग्रामों का उपयोग करते हुए एक SRTP सत्र का उदाहरण निम्नलिखित है:~~~.txt
set k=c1eec3717da76195bb878578790af71c4ee9f859e197a414a78d5abc7451

[sh1]$ test/rtpw -s -k $k -e 128 -a 0.0.0.0 9999
Security services: confidentiality message authentication
set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451
setting SSRC to 2078917053
sending word: A
sending word: a
sending word: aa
sending word: aal
...

[sh2]$ test/rtpw -r -k $k -e 128 -a 0.0.0.0 9999
security services: confidentiality message authentication
set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451
19 octets received from SSRC 2078917053 word: A
19 octets received from SSRC 2078917053 word: a
20 octets received from SSRC 2078917053 word: aa
21 octets received from SSRC 2078917053 word: aal
...

उदाहरण कोड

यह अनुभाग libSRTP का उपयोग करने का एक सरल उदाहरण प्रदान करता है। यहाँ हम मानते हैं कि फ़ंक्शन get_rtp_packet() और send_srtp_packet() हमारे लिए उपलब्ध हैं। पहला फ़ंक्शन RTP पैकेट को बफ़र में डालता है और उस बफ़र में लिखे गए ऑक्टेट की संख्या लौटाता है। दूसरा फ़ंक्शन बफ़र में मौजूद RTP पैकेट को भेजता है, जिसमें लंबाई उसका दूसरा तर्क होती है।~~~.c srtp_t session; srtp_policy_t policy;

// Set key/salt to predetermined values. uint8_t master_key[16] = {0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0A, 0x0B, 0x0C, 0x0D, 0x0E, 0x0F}; uint8_t master_salt[14] = {0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D};

// Initialize libSRTP. srtp_init();

// Create and configure an opaque policy handle. srtp_policy_create(&policy); srtp_policy_set_ssrc(policy, (srtp_ssrc_t){ssrc_any_outbound, 0}); srtp_policy_set_profile(policy, srtp_profile_aes128_cm_sha1_80); srtp_policy_add_key(policy, master_key, sizeof(master_key), master_salt, sizeof(master_salt), NULL, 0);

// Allocate and initialize the SRTP session. srtp_create(&session, policy);

srtp_policy_destroy(policy);

// Main loop: get RTP packets, send SRTP packets. while (1) { char rtp_buffer[2048]; size_t rtp_len; char srtp_buffer[2048]; size_t srtp_len = sizeof(srtp_buffer);

rtp_len = get_rtp_packet(rtp_buffer); srtp_protect(session, rtp_buffer, rtp_len, srtp_buffer, &srtp_len); send_srtp_packet(srtp_buffer, srtp_len); }

srtp_dealloc(session); srtp_shutdown();

root@kitploit:~
<a name="credits"></a>
# श्रेय

libSRTP का मूल कार्यान्वयन और दस्तावेज़ीकरण Cisco Systems, Inc. के David McGrew द्वारा Secure RTP के उपयोग, समझ और अंतर-संचालन को बढ़ावा देने के लिए लिखा गया था। Michael Jerris ने MSVC के अंतर्गत निर्माण के समर्थन में योगदान दिया। Andris Pavenis ने कई महत्वपूर्ण सुधारों में योगदान दिया। Brian West ने डायनामिक लिंकिंग सक्षम करने के लिए परिवर्तनों में योगदान दिया। Yves Shumann ने दस्तावेज़ीकरण बग्स की सूचना दी। Randell Jesup ने एक कार्यशील SRTCP कार्यान्वयन और अन्य सुधारों में योगदान दिया। Steve Underwood ने x86_64 पोर्टेबिलिटी परिवर्तनों में योगदान दिया। हम Fredrik Thulin, Brian Weis, Mark Baugher, Jeff Chan, Bill Simon, Douglas Smith, Bill May, Richard Preistley, Joe Tardo और अन्य लोगों को योगदान, टिप्पणियों और सुधारों के लिए धन्यवाद भी देते हैं।

यह संदर्भ सामग्री, जहाँ लागू हो, इस दस्तावेज़ीकरण में स्रोत कोड के स्वचालित दस्तावेज़ीकरण के लिए doxygen उपयोगिता का उपयोग करके उत्पन्न की गई थी।

कॉपीराइट 2001-2005 David A. McGrew, Cisco Systems, Inc.

--------------------------------------------------------------------------------

<a name="references"></a>
# संदर्भ

SRTP और ICM संदर्भ

सितंबर, 2005

- Secure RTP को [RFC 3711](https://tools.ietf.org/html/rfc3711) में परिभाषित किया गया है।
काउंटर मोड परिभाषा [अनुभाग 4.1.1](https://tools.ietf.org/html/rfc3711#section-4.1.1) में है।

- SHA-1 को [FIPS PUB 180-4](http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf) में परिभाषित किया गया है।

- HMAC को [RFC 2104](https://tools.ietf.org/html/rfc2104) में परिभाषित किया गया है
और HMAC-SHA1 परीक्षण वेक्टर उपलब्ध हैं
[RFC 2202](https://tools.ietf.org/html/rfc2202#section-3) में।
टूल डाउनलोड करें
विकल्पविवरण
-s(S)RTP प्रेषक - ऐप को शब्द भेजने देता है
-r(S)RTP प्राप्त - ऐप को शब्द प्राप्त करने देता है
-k SRTP मास्टर कुंजी उपयोग करें, जहाँ कुंजी हेक्साडेसिमल है (बिना "0x" उपसर्ग के)
-b -k जैसा ही लेकिन base64 एन्कोडेड कुंजी के साथ
-e एन्क्रिप्ट/डिक्रिप्ट (डेटा गोपनीयता के लिए) (-k विकल्प के उपयोग की भी आवश्यकता है) (keysize के लिए 128, 192, या 256 उपयोग करें)
-gAES-GCM मोड उपयोग करें (-e के साथ उपयोग किया जाना चाहिए)
-aसंदेश प्रमाणीकरण (-k विकल्प के उपयोग की भी आवश्यकता है)
-lउपलब्ध डीबग मॉड्यूल सूचीबद्ध करें
-d मॉड्यूल के लिए डीबगिंग चालू करें