{"action":"created","comment":{"url":"https://api.github.com/repos/cisco/libsrtp/pulls/comments/100137370","pull_request_review_id":20834497,"id":100137370,"diff_hunk":"@@ -0,0 +1,488 @@\n+<a name=\"introduction-to-libsrtp\"></a>\n+# Introduction to libSRTP\n+\n+This package provides an implementation of the Secure Real-time\n+Transport Protocol (SRTP), the Universal Security Transform (UST), and\n+a supporting cryptographic kernel. The SRTP API is documented in include/srtp.h,\n+and the library is in libsrtp2.a (after compilation).\n+\n+This document describes libSRTP, the Open Source Secure RTP library\n+from Cisco Systems, Inc. RTP is the Real-time Transport Protocol, an\n+IETF standard for the transport of real-time data such as telephony,\n+audio, and video, defined by [RFC 3550](https://www.ietf.org/rfc/rfc3550.txt).\n+Secure RTP (SRTP) is an RTP profile for providing confidentiality to RTP data\n+and authentication to the RTP header and payload. SRTP is an IETF Standard,\n+defined in [RFC 3711](https://www.ietf.org/rfc/rfc3711.txt), and was developed\n+in the IETF Audio/Video Transport (AVT) Working Group. This library supports\n+all of the mandatory features of SRTP, but not all of the optional features. See\n+the [Supported Features](#license) section for more detailed information.\n+\n+This document is also used to generate the documentation files in the /doc/\n+folder where a more detailed reference to the libSRTP API and related functions\n+can be created (requires installing doxygen.). The reference material is created\n+automatically from comments embedded in some of the C header files. The\n+documentation is organized into modules in order to improve its clarity. These\n+modules do not directly correspond to files. An underlying cryptographic kernel\n+provides much of the basic functionality of libSRTP but is mostly undocumented\n+because it does its work behind the scenes.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"contents\"></a>\n+## Contents\n+\n+- [Introduction to libSRTP](#introduction-to-libsrtp)\n+   - [Contents](#contents)\n+- [License and Disclaimer](#license-and-disclaimer)\n+- [libSRTP Overview](#libsrtp-overview)\n+  - [Secure RTP Background](#secure-rtp-background)\n+  - [Supported Features](#supported-features)\n+  - [Implementation Notes](#implementation-notes)\n+- [Installing and Building libSRTP](#installing-and-building-libsrtp)\n+- [Applications](#applications)\n+  - [Example Code](#example-code)\n+- [ISMA Encryption Support](#isma-encryption-support)\n+- [Credits](#credits)\n+- [References](#references)\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"license-and-disclaimer\"></a>\n+# License and Disclaimer\n+\n+libSRTP is distributed under the following license, which is included\n+in the source code distribution. It is reproduced in the manual in\n+case you got the library from another source.\n+\n+> Copyright (c) 2001-2005 Cisco Systems, Inc.  All rights reserved.\n+>\n+> Redistribution and use in source and binary forms, with or without\n+> modification, are permitted provided that the following conditions\n+> are met:\n+>\n+> - Redistributions of source code must retain the above copyright\n+>   notice, this list of conditions and the following disclaimer.\n+> - Redistributions in binary form must reproduce the above copyright\n+>   notice, this list of conditions and the following disclaimer in\n+>   the documentation and/or other materials provided with the distribution.\n+> - Neither the name of the Cisco Systems, Inc. nor the names of its\n+>   contributors may be used to endorse or promote products derived\n+>   from this software without specific prior written permission.\n+>\n+> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+> \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+> LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS\n+> FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE\n+> COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n+> INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES\n+> (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\n+> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)\n+> HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,\n+> STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n+> ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED\n+> OF THE POSSIBILITY OF SUCH DAMAGE.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"libsrtp-overview\"></a>\n+# libSRTP Overview\n+\n+libSRTP provides functions for protecting RTP and RTCP.  RTP packets\n+can be encrypted and authenticated (`using the srtp_protect()`\n+function), turning them into SRTP packets. Similarly, SRTP packets\n+can be decrypted and have their authentication verified (using the\n+srtp_unprotect() function), turning them into RTP packets. Similar\n+functions apply security to RTCP packets.\n+\n+The typedef `srtp_stream_t` points to a structure holding all of the\n+state associated with an SRTP stream, including the keys and\n+parameters for cipher and message authentication functions and the\n+anti-replay data. A particular `srtp_stream_t` holds the information\n+needed to protect a particular RTP and RTCP stream. This datatype\n+is intentionally opaque in order to better seperate the libSRTP\n+API from its implementation.\n+\n+Within an SRTP session, there can be multiple streams, each\n+originating from a particular sender. Each source uses a distinct\n+stream context to protect the RTP and RTCP stream that it is\n+originating. The typedef `srtp_t` points to a structure holding all of\n+the state associated with an SRTP session. There can be multiple\n+stream contexts associated with a single `srtp_t`. A stream context\n+cannot exist indepent from an `srtp_t`, though of course an `srtp_t` can\n+be created that contains only a single stream context. A device\n+participating in an SRTP session must have a stream context for each\n+source in that session, so that it can process the data that it\n+receives from each sender.\n+\n+In libSRTP, a session is created using the function `srtp_create()`.\n+The policy to be implemented in the session is passed into this\n+function as an `srtp_policy_t` structure. A single one of these\n+structures describes the policy of a single stream. These structures\n+can also be linked together to form an entire session policy. A linked\n+list of `srtp_policy_t` structures is equivalent to a session policy.\n+In such a policy, we refer to a single srtp_policy_t as an *element*.\n+\n+An `srtp_policy_t` strucutre contains two `crypto_policy_t` structures\n+that describe the cryptograhic policies for RTP and RTCP, as well as\n+the SRTP master key and the SSRC value. The SSRC describes what to\n+protect (e.g. which stream), and the `crypto_policy_t` structures\n+describe how to protect it. The key is contained in a policy element\n+because it simplifies the interface to the library. In many cases, it\n+is desirable to use the same cryptographic policies across all of the\n+streams in a session, but to use a distinct key for each stream. A\n+`crypto_policy_t` structure can be initialized by using either the\n+`crypto_policy_set_rtp_default()` or `crypto_policy_set_rtcp_default()`\n+functions, which set a crypto policy structure to the default policies\n+for RTP and RTCP protection, respectively.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"secure-rtp-background\"></a>\n+## Secure RTP Background\n+\n+In this section we review SRTP and introduce some terms that are used\n+in libSRTP. An RTP session is defined by a pair of destination\n+transport addresses, that is, a network address plus a pair of UDP\n+ports for RTP and RTCP. RTCP, the RTP control protocol, is used to\n+coordinate between the participants in an RTP session, e.g. to provide\n+feedback from receivers to senders. An *SRTP session* is\n+similarly defined; it is just an RTP session for which the SRTP\n+profile is being used. An SRTP session consists of the traffic sent\n+to the SRTP or SRTCP destination transport addresses. Each\n+participant in a session is identified by a synchronization source\n+(SSRC) identifier. Some participants may not send any SRTP traffic;\n+they are called receivers, even though they send out SRTCP traffic,\n+such as receiver reports.\n+\n+RTP allows multiple sources to send RTP and RTCP traffic during the\n+same session. The synchronization source identifier (SSRC) is used to\n+distinguish these sources. In libSRTP, we call the SRTP and SRTCP\n+traffic from a particular source a *stream*. Each stream has its own\n+SSRC, sequence number, rollover counter, and other data. A particular\n+choice of options, cryptographic mechanisms, and keys is called a\n+*policy*. Each stream within a session can have a distinct policy\n+applied to it. A session policy is a collection of stream policies.\n+\n+A single policy can be used for all of the streams in a given session,\n+though the case in which a single *key* is shared across multiple\n+streams requires care. When key sharing is used, the SSRC values that\n+identify the streams **must** be distinct. This requirement can be\n+enforced by using the convention that each SRTP and SRTCP key is used\n+for encryption by only a single sender. In other words, the key is\n+shared only across streams that originate from a particular device (of\n+course, other SRTP participants will need to use the key for\n+decryption). libSRTP supports this enforcement by detecting the case\n+in which a key is used for both inbound and outbound data.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"supported-features\"></a>\n+## Supported Features\n+\n+This library supports all of the mandatory-to-implement features of\n+SRTP (as defined by the most recent Internet Draft). Some of these\n+features can be selected (or de-selected) at run time by setting an\n+appropriate policy; this is done using the structure `srtp_policy_t`.\n+Some other behaviors of the protocol can be adapted by defining an\n+approriate event handler for the exceptional events; see the SRTPevents\n+section in the generated documentation.\n+\n+Some options that are not included in the specification are supported.\n+Most notably, the TMMH authentication function is included, though it\n+was removed from the SRTP Internet Draft during the summer of 2002.\n+\n+Some options that are described in the SRTP specification are not\n+supported. This includes\n+\n+- the Master Key Index (MKI),\n+- key derivation rates other than zero,\n+- the cipher F8,\n+- anti-replay lists with sizes other than 128,\n+- the use of the packet index to select between master keys.\n+\n+The user should be aware that it is possible to misuse this libary,\n+and that the result may be that the security level it provides is\n+inadequate. If you are implementing a feature using this library, you\n+will want to read the Security Considerations section of the Internet\n+Draft. In addition, it is important that you read and understand the\n+terms outlined in the [License and Disclaimer](#license-and-disclaimer) section.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"implementation-notes\"></a>\n+## Implementation Notes\n+\n+  * The `srtp_protect()` function assumes that the buffer holding the\n+    rtp packet has enough storage allocated that the authentication\n+    tag can be written to the end of that packet. If this assumption\n+    is not valid, memory corruption will ensue.\n+\n+  * Automated tests for the crypto functions are provided through\n+    the `cipher_type_self_test()` and `auth_type_self_test()` functions.\n+    These functions should be used to test each port of this code\n+    to a new platform.\n+\n+  * Replay protection is contained in the crypto engine, and\n+    tests for it are provided.\n+\n+  * This implementation provides calls to initialize, protect, and\n+    unprotect RTP packets, and makes as few as possible assumptions\n+    about how these functions will be called. For example, the\n+    caller is not expected to provide packets in order (though if\n+    they're called more than 65k out of sequence, synchronization\n+    will be lost).\n+\n+  * The sequence number in the rtp packet is used as the low 16 bits\n+    of the sender's local packet index. Note that RTP will start its\n+    sequence number in a random place, and the SRTP layer just jumps\n+    forward to that number at its first invocation. An earlier\n+    version of this library used initial sequence numbers that are\n+    less than 32,768; this trick is no longer required as the\n+    `rdbx_estimate_index(...)` function has been made smarter.\n+\n+  * The replay window is 128 bits in length, and is hard-coded to this\n+    value for now.\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"installing-and-building-libsrtp\"></a>\n+# Installing and Building libSRTP\n+\n+To install libSRTP, download the latest release of the distribution\n+from [github](https://github.com/cisco/libsrtp/releases). You probably\n+want to get the most recent release. Unpack the distribution and\n+extract the source files; the directory into which the source files\n+will go is named `libsrtp-A-B-C` where `A` is the version number, `B` is the\n+major release number and `C` is the minor release number.\n+\n+libSRTP uses the GNU `autoconf` and `make` utilities (BSD make will not work; if\n+both versions of make are on your platform, you can invoke GNU make as\n+`gmake`.). In the `libsrtp` directory, run the configure script and then\n+make:\n+\n+~~~.txt\n+./configure [ options ]\n+make\n+~~~\n+\n+The configure script accepts the following options:\n+\n+Option                    | Description\n+---------                 | -------\n+\\-\\-help                  | provides a usage summary\n+\\-\\-disable-debug         | compiles libSRTP without the runtime dynamic debugging system\n+\\-\\-enable-generic-aesicm | in changes for ismacryp\n+\\-\\-enable-syslog         | use syslog for error reporting.\n+\\-\\-disable-stdout        | diables stdout for error reporting.\n+\\-\\-enable-console        | use `/dev/console` for error reporting\n+\\-\\-enable-openssl        | use OpenSSL crypto primitives\n+\\-\\-with-openssl-dir      | Specify location of OpenSSL installation\n+\\-\\-enable-openssl-kdf use| OpenSSL SRTP KDF algorithm\n+\\-\\-gdoi                  | use GDOI key management (disabled at present)\n+\n+By default, dynamic debugging is enabled and stdout is used for\n+debugging. You can use the configure options to have the debugging\n+output sent to syslog or the system console. Alternatively, you can\n+define `ERR_REPORTING_FILE` in `include/conf.h` to be any other\n+file that can be opened by libSRTP, and debug messages will be sent to\n+it.\n+\n+This package has been tested on the following platforms: Mac OS X\n+(powerpc-apple-darwin1.4), Cygwin (i686-pc-cygwin), Solaris\n+(sparc-sun-solaris2.6), RedHat Linux 7.1 and 9 (i686-pc-linux), and\n+OpenBSD (sparc-unknown-openbsd2.7).\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"applications\"></a>\n+# Applications\n+\n+Several test drivers and a simple and portable srtp application are\n+included in the `test/` subdirectory.\n+\n+Test driver     | Function tested\n+---------       | -------\n+kernel_driver   | crypto kernel (ciphers, auth funcs, rng)\n+srtp_driver\t    | srtp in-memory tests (does not use the network)\n+rdbx_driver\t    | rdbx (extended replay database)\n+roc_driver\t    | extended sequence number functions\n+replay_driver\t  | replay database\n+cipher_driver\t  | ciphers\n+auth_driver\t    | hash functions\n+\n+The app `rtpw` is a simple rtp application which reads words from\n+`/usr/dict/words` and then sends them out one at a time using [s]rtp.\n+Manual srtp keying uses the -k option; automated key management\n+using gdoi will be added later.\n+\n+usage:\n+~~~.txt\n+rtpw [[-d <debug>]* [-k|b <key> [-a][-e <key size>][-g]] [-s | -r] dest_ip dest_port] | [-l]\n+~~~\n+\n+Either the -s (sender) or -r (receiver) option must be chosen.  The\n+values `dest_ip`, `dest_port` are the IP address and UDP port to which\n+the dictionary will be sent, respectively.\n+\n+The options are:\n+\n+Option         | Description\n+---------      | -------\n+  -s           | (S)RTP sender - causes app to send words\n+  -r           | (S)RTP receive - causes app to receive words\n+  -k <key>     | use SRTP master key <key>, where the key is a hexadecimal (without the leading \"0x\")\n+  -b <key>     | same as -k but with base64 encoded key\n+  -e <keysize> | encrypt/decrypt (for data confidentiality) (requires use of -k option as well) (use 128, 192, or 256 for keysize)\n+  -g           | use AES-GCM mode (must be used with -e)\n+  -a           | message authentication (requires use of -k option as well)\n+  -l           | list the available debug modules\n+  -d <debug>   | turn on debugging for module <debug>\n+\n+In order to get random 30-byte values for use as key/salt pairs , you\n+can use the following bash function to format the output of\n+`/dev/random` (where that device is available).\n+\n+~~~.txt\n+function randhex() {\n+   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 }'\n+}\n+~~~\n+\n+An example of an SRTP session using two rtpw programs follows:\n+\n+~~~.txt\n+set k=c1eec3717da76195bb878578790af71c4ee9f859e197a414a78d5abc7451\n+\n+[sh1]$ test/rtpw -s -k $k -e 128 -a 0.0.0.0 9999\n+Security services: confidentiality message authentication\n+set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451\n+setting SSRC to 2078917053\n+sending word: A\n+sending word: a\n+sending word: aa\n+sending word: aal\n+...\n+\n+[sh2]$ test/rtpw -r -k $k -e 128 -a 0.0.0.0 9999\n+security services: confidentiality message authentication\n+set master key/salt to C1EEC3717DA76195BB878578790AF71C/4EE9F859E197A414A78D5ABC7451\n+19 octets received from SSRC 2078917053 word: A\n+19 octets received from SSRC 2078917053 word: a\n+20 octets received from SSRC 2078917053 word: aa\n+21 octets received from SSRC 2078917053 word: aal\n+...\n+~~~\n+\n+--------------------------------------------------------------------------------\n+\n+<a name=\"example-code\"></a>\n+## Example Code\n+\n+This section provides a simple example of how to use libSRTP. The\n+example code lacks error checking, but is functional. Here we assume\n+that the value ssrc is already set to describe the SSRC of the stream\n+that we are sending, and that the functions `get_rtp_packet()` and\n+`send_srtp_packet()` are available to us. The former puts an RTP packet\n+into the buffer and returns the number of octets written to that\n+buffer. The latter sends the RTP packet in the buffer, given the\n+length as its second argument.\n+\n+~~~.c\n+srtp_t session;\n+srtp_policy_t policy;\n+uint8_t key[30];\n+\n+// initialize libSRTP\n+srtp_init();\n+\n+// set policy to describe a policy for an SRTP stream\n+crypto_policy_set_rtp_default(&policy.rtp);\n+crypto_policy_set_rtcp_default(&policy.rtcp);\n+policy.ssrc = ssrc;\n+policy.key  = key;\n+policy.next = NULL;\n+\n+// set key to random value\n+crypto_get_random(key, 30);","path":"README.md","position":406,"original_position":406,"commit_id":"8acaa4f926c924eadff0c62a5e052c1517033886","original_commit_id":"8acaa4f926c924eadff0c62a5e052c1517033886","user":{"login":"thisisG","id":5999908,"avatar_url":"https://avatars.githubusercontent.com/u/5999908?v=3","gravatar_id":"","url":"https://api.github.com/users/thisisG","html_url":"https://github.com/thisisG","followers_url":"https://api.github.com/users/thisisG/followers","following_url":"https://api.github.com/users/thisisG/following{/other_user}","gists_url":"https://api.github.com/users/thisisG/gists{/gist_id}","starred_url":"https://api.github.com/users/thisisG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thisisG/subscriptions","organizations_url":"https://api.github.com/users/thisisG/orgs","repos_url":"https://api.github.com/users/thisisG/repos","events_url":"https://api.github.com/users/thisisG/events{/privacy}","received_events_url":"https://api.github.com/users/thisisG/received_events","type":"User","site_admin":false},"body":"Need new alternative here I think - this is removed","created_at":"2017-02-08T18:39:03Z","updated_at":"2017-02-08T18:39:03Z","html_url":"https://github.com/cisco/libsrtp/pull/248#discussion_r100137370","pull_request_url":"https://api.github.com/repos/cisco/libsrtp/pulls/248","_links":{"self":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/comments/100137370"},"html":{"href":"https://github.com/cisco/libsrtp/pull/248#discussion_r100137370"},"pull_request":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/248"}}},"pull_request":{"url":"https://api.github.com/repos/cisco/libsrtp/pulls/248","id":105276529,"html_url":"https://github.com/cisco/libsrtp/pull/248","diff_url":"https://github.com/cisco/libsrtp/pull/248.diff","patch_url":"https://github.com/cisco/libsrtp/pull/248.patch","issue_url":"https://api.github.com/repos/cisco/libsrtp/issues/248","number":248,"state":"open","locked":false,"title":"New README.md that integrates intro, credits and references from /doc/","user":{"login":"thisisG","id":5999908,"avatar_url":"https://avatars.githubusercontent.com/u/5999908?v=3","gravatar_id":"","url":"https://api.github.com/users/thisisG","html_url":"https://github.com/thisisG","followers_url":"https://api.github.com/users/thisisG/followers","following_url":"https://api.github.com/users/thisisG/following{/other_user}","gists_url":"https://api.github.com/users/thisisG/gists{/gist_id}","starred_url":"https://api.github.com/users/thisisG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thisisG/subscriptions","organizations_url":"https://api.github.com/users/thisisG/orgs","repos_url":"https://api.github.com/users/thisisG/repos","events_url":"https://api.github.com/users/thisisG/events{/privacy}","received_events_url":"https://api.github.com/users/thisisG/received_events","type":"User","site_admin":false},"body":"So this is version 0.01 of the new README, now in Markdown.\r\n\r\nThe README.md file is also used as the main page for the generated documentation that now works\r\nagain (I have however not started replacing references in the source code, that is on some TODO list.).\r\n\r\nThe documentation now generates html and xml instead of LaTeX due to issues with getting the\r\nright dependencies working. The Doxygen file was updated to a more recent version (1.8.11) and\r\nis now the only dependency for generating the documentation (other than make).\r\n\r\nDocumentation can now be built with\r\n\r\n`make libsrtp2doc`\r\n\r\nin the root folder, or with\r\n\r\n`make`\r\n\r\nwhen in the /doc/ folder.\r\n\r\nIn order to get the docs up to speed I thought it'd be a decent idea to crowdsource the editing\r\na bit.\r\n\r\nI will start marking things down for \"this sounds outdated\" and start replacing items that are clearly\r\nout of date or not applicable any longer. Feel free to mark down (heh...) stuff for\r\nchecking/removal/editing or, if applicable, push changes you feel are required to this branch.","created_at":"2017-02-08T18:31:21Z","updated_at":"2017-02-08T18:39:03Z","closed_at":null,"merged_at":null,"merge_commit_sha":"fb4cac33fbf31453ff674308c08c22f9ac1567bd","assignee":null,"assignees":[],"milestone":{"url":"https://api.github.com/repos/cisco/libsrtp/milestones/3","html_url":"https://github.com/cisco/libsrtp/milestone/3","labels_url":"https://api.github.com/repos/cisco/libsrtp/milestones/3/labels","id":2204416,"number":3,"title":"Version 2.1.0","description":null,"creator":{"login":"pabuhler","id":15016732,"avatar_url":"https://avatars.githubusercontent.com/u/15016732?v=3","gravatar_id":"","url":"https://api.github.com/users/pabuhler","html_url":"https://github.com/pabuhler","followers_url":"https://api.github.com/users/pabuhler/followers","following_url":"https://api.github.com/users/pabuhler/following{/other_user}","gists_url":"https://api.github.com/users/pabuhler/gists{/gist_id}","starred_url":"https://api.github.com/users/pabuhler/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pabuhler/subscriptions","organizations_url":"https://api.github.com/users/pabuhler/orgs","repos_url":"https://api.github.com/users/pabuhler/repos","events_url":"https://api.github.com/users/pabuhler/events{/privacy}","received_events_url":"https://api.github.com/users/pabuhler/received_events","type":"User","site_admin":false},"open_issues":15,"closed_issues":4,"state":"open","created_at":"2016-12-19T12:27:51Z","updated_at":"2017-02-08T18:35:33Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/cisco/libsrtp/pulls/248/commits","review_comments_url":"https://api.github.com/repos/cisco/libsrtp/pulls/248/comments","review_comment_url":"https://api.github.com/repos/cisco/libsrtp/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cisco/libsrtp/issues/248/comments","statuses_url":"https://api.github.com/repos/cisco/libsrtp/statuses/8acaa4f926c924eadff0c62a5e052c1517033886","head":{"label":"thisisG:docs_to_markdown","ref":"docs_to_markdown","sha":"8acaa4f926c924eadff0c62a5e052c1517033886","user":{"login":"thisisG","id":5999908,"avatar_url":"https://avatars.githubusercontent.com/u/5999908?v=3","gravatar_id":"","url":"https://api.github.com/users/thisisG","html_url":"https://github.com/thisisG","followers_url":"https://api.github.com/users/thisisG/followers","following_url":"https://api.github.com/users/thisisG/following{/other_user}","gists_url":"https://api.github.com/users/thisisG/gists{/gist_id}","starred_url":"https://api.github.com/users/thisisG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thisisG/subscriptions","organizations_url":"https://api.github.com/users/thisisG/orgs","repos_url":"https://api.github.com/users/thisisG/repos","events_url":"https://api.github.com/users/thisisG/events{/privacy}","received_events_url":"https://api.github.com/users/thisisG/received_events","type":"User","site_admin":false},"repo":{"id":79783514,"name":"libsrtp","full_name":"thisisG/libsrtp","owner":{"login":"thisisG","id":5999908,"avatar_url":"https://avatars.githubusercontent.com/u/5999908?v=3","gravatar_id":"","url":"https://api.github.com/users/thisisG","html_url":"https://github.com/thisisG","followers_url":"https://api.github.com/users/thisisG/followers","following_url":"https://api.github.com/users/thisisG/following{/other_user}","gists_url":"https://api.github.com/users/thisisG/gists{/gist_id}","starred_url":"https://api.github.com/users/thisisG/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/thisisG/subscriptions","organizations_url":"https://api.github.com/users/thisisG/orgs","repos_url":"https://api.github.com/users/thisisG/repos","events_url":"https://api.github.com/users/thisisG/events{/privacy}","received_events_url":"https://api.github.com/users/thisisG/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/thisisG/libsrtp","description":"Library for SRTP (Secure Realtime Transport Protocol) ","fork":true,"url":"https://api.github.com/repos/thisisG/libsrtp","forks_url":"https://api.github.com/repos/thisisG/libsrtp/forks","keys_url":"https://api.github.com/repos/thisisG/libsrtp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/thisisG/libsrtp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/thisisG/libsrtp/teams","hooks_url":"https://api.github.com/repos/thisisG/libsrtp/hooks","issue_events_url":"https://api.github.com/repos/thisisG/libsrtp/issues/events{/number}","events_url":"https://api.github.com/repos/thisisG/libsrtp/events","assignees_url":"https://api.github.com/repos/thisisG/libsrtp/assignees{/user}","branches_url":"https://api.github.com/repos/thisisG/libsrtp/branches{/branch}","tags_url":"https://api.github.com/repos/thisisG/libsrtp/tags","blobs_url":"https://api.github.com/repos/thisisG/libsrtp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/thisisG/libsrtp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/thisisG/libsrtp/git/refs{/sha}","trees_url":"https://api.github.com/repos/thisisG/libsrtp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/thisisG/libsrtp/statuses/{sha}","languages_url":"https://api.github.com/repos/thisisG/libsrtp/languages","stargazers_url":"https://api.github.com/repos/thisisG/libsrtp/stargazers","contributors_url":"https://api.github.com/repos/thisisG/libsrtp/contributors","subscribers_url":"https://api.github.com/repos/thisisG/libsrtp/subscribers","subscription_url":"https://api.github.com/repos/thisisG/libsrtp/subscription","commits_url":"https://api.github.com/repos/thisisG/libsrtp/commits{/sha}","git_commits_url":"https://api.github.com/repos/thisisG/libsrtp/git/commits{/sha}","comments_url":"https://api.github.com/repos/thisisG/libsrtp/comments{/number}","issue_comment_url":"https://api.github.com/repos/thisisG/libsrtp/issues/comments{/number}","contents_url":"https://api.github.com/repos/thisisG/libsrtp/contents/{+path}","compare_url":"https://api.github.com/repos/thisisG/libsrtp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/thisisG/libsrtp/merges","archive_url":"https://api.github.com/repos/thisisG/libsrtp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/thisisG/libsrtp/downloads","issues_url":"https://api.github.com/repos/thisisG/libsrtp/issues{/number}","pulls_url":"https://api.github.com/repos/thisisG/libsrtp/pulls{/number}","milestones_url":"https://api.github.com/repos/thisisG/libsrtp/milestones{/number}","notifications_url":"https://api.github.com/repos/thisisG/libsrtp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/thisisG/libsrtp/labels{/name}","releases_url":"https://api.github.com/repos/thisisG/libsrtp/releases{/id}","deployments_url":"https://api.github.com/repos/thisisG/libsrtp/deployments","created_at":"2017-01-23T08:08:50Z","updated_at":"2017-01-23T08:08:53Z","pushed_at":"2017-02-08T18:19:16Z","git_url":"git://github.com/thisisG/libsrtp.git","ssh_url":"git@github.com:thisisG/libsrtp.git","clone_url":"https://github.com/thisisG/libsrtp.git","svn_url":"https://github.com/thisisG/libsrtp","homepage":null,"size":4632,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"cisco:master","ref":"master","sha":"98895c249116de3f2e7848341ce60d63f0918963","user":{"login":"cisco","id":1376999,"avatar_url":"https://avatars.githubusercontent.com/u/1376999?v=3","gravatar_id":"","url":"https://api.github.com/users/cisco","html_url":"https://github.com/cisco","followers_url":"https://api.github.com/users/cisco/followers","following_url":"https://api.github.com/users/cisco/following{/other_user}","gists_url":"https://api.github.com/users/cisco/gists{/gist_id}","starred_url":"https://api.github.com/users/cisco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cisco/subscriptions","organizations_url":"https://api.github.com/users/cisco/orgs","repos_url":"https://api.github.com/users/cisco/repos","events_url":"https://api.github.com/users/cisco/events{/privacy}","received_events_url":"https://api.github.com/users/cisco/received_events","type":"Organization","site_admin":false},"repo":{"id":9087423,"name":"libsrtp","full_name":"cisco/libsrtp","owner":{"login":"cisco","id":1376999,"avatar_url":"https://avatars.githubusercontent.com/u/1376999?v=3","gravatar_id":"","url":"https://api.github.com/users/cisco","html_url":"https://github.com/cisco","followers_url":"https://api.github.com/users/cisco/followers","following_url":"https://api.github.com/users/cisco/following{/other_user}","gists_url":"https://api.github.com/users/cisco/gists{/gist_id}","starred_url":"https://api.github.com/users/cisco/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cisco/subscriptions","organizations_url":"https://api.github.com/users/cisco/orgs","repos_url":"https://api.github.com/users/cisco/repos","events_url":"https://api.github.com/users/cisco/events{/privacy}","received_events_url":"https://api.github.com/users/cisco/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/cisco/libsrtp","description":"Library for SRTP (Secure Realtime Transport Protocol) ","fork":false,"url":"https://api.github.com/repos/cisco/libsrtp","forks_url":"https://api.github.com/repos/cisco/libsrtp/forks","keys_url":"https://api.github.com/repos/cisco/libsrtp/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cisco/libsrtp/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cisco/libsrtp/teams","hooks_url":"https://api.github.com/repos/cisco/libsrtp/hooks","issue_events_url":"https://api.github.com/repos/cisco/libsrtp/issues/events{/number}","events_url":"https://api.github.com/repos/cisco/libsrtp/events","assignees_url":"https://api.github.com/repos/cisco/libsrtp/assignees{/user}","branches_url":"https://api.github.com/repos/cisco/libsrtp/branches{/branch}","tags_url":"https://api.github.com/repos/cisco/libsrtp/tags","blobs_url":"https://api.github.com/repos/cisco/libsrtp/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cisco/libsrtp/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cisco/libsrtp/git/refs{/sha}","trees_url":"https://api.github.com/repos/cisco/libsrtp/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cisco/libsrtp/statuses/{sha}","languages_url":"https://api.github.com/repos/cisco/libsrtp/languages","stargazers_url":"https://api.github.com/repos/cisco/libsrtp/stargazers","contributors_url":"https://api.github.com/repos/cisco/libsrtp/contributors","subscribers_url":"https://api.github.com/repos/cisco/libsrtp/subscribers","subscription_url":"https://api.github.com/repos/cisco/libsrtp/subscription","commits_url":"https://api.github.com/repos/cisco/libsrtp/commits{/sha}","git_commits_url":"https://api.github.com/repos/cisco/libsrtp/git/commits{/sha}","comments_url":"https://api.github.com/repos/cisco/libsrtp/comments{/number}","issue_comment_url":"https://api.github.com/repos/cisco/libsrtp/issues/comments{/number}","contents_url":"https://api.github.com/repos/cisco/libsrtp/contents/{+path}","compare_url":"https://api.github.com/repos/cisco/libsrtp/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cisco/libsrtp/merges","archive_url":"https://api.github.com/repos/cisco/libsrtp/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cisco/libsrtp/downloads","issues_url":"https://api.github.com/repos/cisco/libsrtp/issues{/number}","pulls_url":"https://api.github.com/repos/cisco/libsrtp/pulls{/number}","milestones_url":"https://api.github.com/repos/cisco/libsrtp/milestones{/number}","notifications_url":"https://api.github.com/repos/cisco/libsrtp/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cisco/libsrtp/labels{/name}","releases_url":"https://api.github.com/repos/cisco/libsrtp/releases{/id}","deployments_url":"https://api.github.com/repos/cisco/libsrtp/deployments","created_at":"2013-03-28T22:08:25Z","updated_at":"2017-02-07T09:35:34Z","pushed_at":"2017-02-08T18:31:22Z","git_url":"git://github.com/cisco/libsrtp.git","ssh_url":"git@github.com:cisco/libsrtp.git","clone_url":"https://github.com/cisco/libsrtp.git","svn_url":"https://github.com/cisco/libsrtp","homepage":null,"size":4552,"stargazers_count":277,"watchers_count":277,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":144,"mirror_url":null,"open_issues_count":27,"forks":144,"open_issues":27,"watchers":277,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/248"},"html":{"href":"https://github.com/cisco/libsrtp/pull/248"},"issue":{"href":"https://api.github.com/repos/cisco/libsrtp/issues/248"},"comments":{"href":"https://api.github.com/repos/cisco/libsrtp/issues/248/comments"},"review_comments":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/248/comments"},"review_comment":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cisco/libsrtp/pulls/248/commits"},"statuses":{"href":"https://api.github.com/repos/cisco/libsrtp/statuses/8acaa4f926c924eadff0c62a5e052c1517033886"}}}}
{"actor":{"display_login":"thisisG"}}