{"action":"created","comment":{"url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments/195407148","pull_request_review_id":128769827,"id":195407148,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDE5NTQwNzE0OA==","diff_hunk":"@@ -1410,8 +1273,221 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl )\n     }\n #endif /* MBEDTLS_SSL_PROTO_DTLS */\n \n-    buf += mbedtls_ssl_hs_hdr_len( ssl );\n-    msg_len -= mbedtls_ssl_hs_hdr_len( ssl );\n+    *dst = ssl->in_msg;\n+    *dstlen = msg_len;\n+\n+    return( SSL_CLIENT_HELLO_V3 );\n+}\n+\n+#if defined(MBEDTLS_SSL_SRV_SUPPORT_SSLV2_CLIENT_HELLO)\n+static int ssl_client_hello_v2_parse( mbedtls_ssl_context *ssl,\n+                                      unsigned char *buf,\n+                                      size_t buflen )\n+{\n+    int ret, got_common_suite;\n+    unsigned int i, j;\n+    unsigned int ciph_len, sess_len, chal_len;\n+    unsigned char *p;\n+    const int *ciphersuites;\n+    const mbedtls_ssl_ciphersuite_t *ciphersuite_info;\n+\n+    /*\n+     *    0  .   1   ciphersuitelist length\n+     *    2  .   3   session id length\n+     *    4  .   5   challenge length\n+     *    6  .  ..   ciphersuitelist\n+     *   ..  .  ..   session id\n+     *   ..  .  ..   challenge\n+     */\n+    MBEDTLS_SSL_DEBUG_BUF( 4, \"record contents\", buf, buflen );\n+\n+    ciph_len = ( buf[0] << 8 ) | buf[1];\n+    sess_len = ( buf[2] << 8 ) | buf[3];\n+    chal_len = ( buf[4] << 8 ) | buf[5];\n+\n+    MBEDTLS_SSL_DEBUG_MSG( 3, ( \"ciph_len: %d, sess_len: %d, chal_len: %d\",\n+                   ciph_len, sess_len, chal_len ) );\n+\n+    /*\n+     * Make sure each parameter length is valid\n+     */\n+    if( ciph_len < 3 || ( ciph_len % 3 ) != 0 )\n+    {\n+        MBEDTLS_SSL_DEBUG_MSG( 1, ( \"bad client hello message\" ) );\n+        return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+    }\n+\n+    if( sess_len > 32 )\n+    {\n+        MBEDTLS_SSL_DEBUG_MSG( 1, ( \"bad client hello message\" ) );\n+        return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+    }\n+\n+    if( chal_len < 8 || chal_len > 32 )\n+    {\n+        MBEDTLS_SSL_DEBUG_MSG( 1, ( \"bad client hello message\" ) );\n+        return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+    }\n+\n+    if( buflen != 6 + ciph_len + sess_len + chal_len )\n+    {\n+        MBEDTLS_SSL_DEBUG_MSG( 1, ( \"bad client hello message\" ) );\n+        return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+    }\n+\n+    MBEDTLS_SSL_DEBUG_BUF( 3, \"client hello, ciphersuitelist\",\n+                   buf + 6, ciph_len );\n+    MBEDTLS_SSL_DEBUG_BUF( 3, \"client hello, session id\",\n+                   buf + 6 + ciph_len, sess_len );\n+    MBEDTLS_SSL_DEBUG_BUF( 3, \"client hello, challenge\",\n+                   buf + 6 + ciph_len + sess_len, chal_len );\n+\n+    p = buf + 6 + ciph_len;\n+    ssl->session_negotiate->id_len = sess_len;\n+    memset( ssl->session_negotiate->id, 0,\n+            sizeof( ssl->session_negotiate->id ) );\n+    memcpy( ssl->session_negotiate->id, p, ssl->session_negotiate->id_len );\n+\n+    p += sess_len;\n+    memset( ssl->handshake->randbytes, 0, 64 );\n+    memcpy( ssl->handshake->randbytes + 32 - chal_len, p, chal_len );\n+\n+    /*\n+     * Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV\n+     */\n+    for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 )\n+    {\n+        if( p[0] == 0 && p[1] == 0 && p[2] == MBEDTLS_SSL_EMPTY_RENEGOTIATION_INFO )\n+        {\n+            MBEDTLS_SSL_DEBUG_MSG( 3, ( \"received TLS_EMPTY_RENEGOTIATION_INFO \" ) );\n+#if defined(MBEDTLS_SSL_RENEGOTIATION)\n+            if( ssl->renego_status == MBEDTLS_SSL_RENEGOTIATION_IN_PROGRESS )\n+            {\n+                MBEDTLS_SSL_DEBUG_MSG( 1, ( \"received RENEGOTIATION SCSV \"\n+                                    \"during renegotiation\" ) );\n+\n+                ssl->send_alert = MBEDTLS_SSL_ALERT_LEVEL_FATAL;\n+                ssl->alert_type = MBEDTLS_SSL_ALERT_MSG_HANDSHAKE_FAILURE;\n+                return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+            }\n+#endif /* MBEDTLS_SSL_RENEGOTIATION */\n+            ssl->secure_renegotiation = MBEDTLS_SSL_SECURE_RENEGOTIATION;\n+            break;\n+        }\n+    }\n+\n+#if defined(MBEDTLS_SSL_FALLBACK_SCSV)\n+    for( i = 0, p = buf + 6; i < ciph_len; i += 3, p += 3 )\n+    {\n+        if( p[0] == 0 &&\n+            p[1] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE >> 8 ) & 0xff ) &&\n+            p[2] == (unsigned char)( ( MBEDTLS_SSL_FALLBACK_SCSV_VALUE      ) & 0xff ) )\n+        {\n+            MBEDTLS_SSL_DEBUG_MSG( 3, ( \"received FALLBACK_SCSV\" ) );\n+\n+            if( ssl->minor_ver < ssl->conf->max_minor_ver )\n+            {\n+                MBEDTLS_SSL_DEBUG_MSG( 1, ( \"inapropriate fallback\" ) );\n+\n+                ssl->send_alert = MBEDTLS_SSL_ALERT_LEVEL_FATAL;\n+                ssl->alert_type = MBEDTLS_SSL_ALERT_MSG_INAPROPRIATE_FALLBACK;\n+                return( MBEDTLS_ERR_SSL_BAD_HS_CLIENT_HELLO );\n+            }\n+\n+            break;\n+        }\n+    }\n+#endif /* MBEDTLS_SSL_FALLBACK_SCSV */\n+\n+    got_common_suite = 0;\n+    ciphersuites = ssl->conf->ciphersuite_list[ssl->minor_ver];\n+    ciphersuite_info = NULL;\n+#if defined(MBEDTLS_SSL_SRV_RESPECT_CLIENT_PREFERENCE)\n+    for( j = 0, p = buf + 6; j < ciph_len; j += 3, p += 3 )","path":"library/ssl_srv.c","position":641,"original_position":641,"commit_id":"0d1d8012940c7d297fc5131956d6deb1c0118e86","original_commit_id":"0d1d8012940c7d297fc5131956d6deb1c0118e86","user":{"login":"AndrzejKurek","id":29195988,"node_id":"MDQ6VXNlcjI5MTk1OTg4","avatar_url":"https://avatars0.githubusercontent.com/u/29195988?v=4","gravatar_id":"","url":"https://api.github.com/users/AndrzejKurek","html_url":"https://github.com/AndrzejKurek","followers_url":"https://api.github.com/users/AndrzejKurek/followers","following_url":"https://api.github.com/users/AndrzejKurek/following{/other_user}","gists_url":"https://api.github.com/users/AndrzejKurek/gists{/gist_id}","starred_url":"https://api.github.com/users/AndrzejKurek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/AndrzejKurek/subscriptions","organizations_url":"https://api.github.com/users/AndrzejKurek/orgs","repos_url":"https://api.github.com/users/AndrzejKurek/repos","events_url":"https://api.github.com/users/AndrzejKurek/events{/privacy}","received_events_url":"https://api.github.com/users/AndrzejKurek/received_events","type":"User","site_admin":false},"body":"buf+6 is used commonly here and above; It could be extracted to a variable","created_at":"2018-06-14T12:44:15Z","updated_at":"2018-06-14T12:44:15Z","html_url":"https://github.com/ARMmbed/mbedtls/pull/1634#discussion_r195407148","pull_request_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments/195407148"},"html":{"href":"https://github.com/ARMmbed/mbedtls/pull/1634#discussion_r195407148"},"pull_request":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634"}}},"pull_request":{"url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634","id":188441970,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg4NDQxOTcw","html_url":"https://github.com/ARMmbed/mbedtls/pull/1634","diff_url":"https://github.com/ARMmbed/mbedtls/pull/1634.diff","patch_url":"https://github.com/ARMmbed/mbedtls/pull/1634.patch","issue_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/1634","number":1634,"state":"open","locked":false,"title":"Handshake layer restructuring","user":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"body":"**Summary:** This PR restructures various routines in the SSL/TLS handshake logic implementation. While standalone and hopefully beneficial in its own right, it is mainly meant to pave the way for subsequent changes in the record layer implementation.\r\n\r\n**State:** \r\nThe following table lists the functions that need to be looked at and potentially reworked and indicates which one have already been dealt with. Note that not every function necessarily leads to changes, but this needs to be independently evaluated for each of them.\r\n- [x] Client, incoming `ServerHello` (originally `ssl_parse_server_hello()`)\r\n- [x] Client, incoming `CertificateRequest` (originally `ssl_parse_certificate_request()`)\r\n- [x] Client, incoming `ServerHelloDone` (originally `ssl_parse_server_hello_done()`)\r\n- [x] Client/Server, outgoing `Certificate` (originally `mbedtls_ssl_write_certificate()`)\r\n- [x] Client, outgoing `CertificateVerify` (originally `ssl_write_certificate_verify()`)\r\n- [x] Server, incoming `CertificateVerify` (originally `ssl_parse_certificate_verify()`)\r\n- [x] Client/Server, outgoing `Finished` (originally `mbedtls_ssl_write_finished()`)\r\n- [x] Server, outgoing `ServerHello` (originally `ssl_write_server_hello()`)\r\n- [x] Client/Server, incoming server `Certificate` (originally `mbedtls_ssl_parse_certificate()`)\r\n- [x] Client, incoming `ServerKeyExchange` (originally `ssl_parse_server_key_exchange()`)\r\n- [x] Server, outgoing `CertificateRequest` (originally `ssl_write_certificate_request()`)\r\n- [x] Client, outgoing `ClientKeyExchange` (originally `ssl_write_client_key_exchange()`)\r\n- [x] Client/Server, outgoing `ChangeCipherSpec` (originally `mbedtls_ssl_write_change_cipher_spec()`)\r\n- [x] Client/Server, incoming `ChangeCipherSpec` (originally `mbedtls_ssl_parse_change_cipher_spec()`)\r\n- [x] Client, incoming `SessionTicket` (originally `ssl_parse_new_session_ticket()`)\r\n- [x] Client/Server, incoming `Finished` (originally `mbedtls_ssl_parse_finished()`)\r\n- [x] Server, incoming `ClientHello` (originally `ssl_parse_client_hello()`)\r\n- [x] Server, outgoing `ServerKeyExchange` (originally `ssl_write_server_key_exchange()`)\r\n- [x] Server, outgoing `ServerHelloDone` (originally `ssl_write_server_hello_done()`)\r\n- [x] Server, incoming `ClientKeyExchange` (originally `ssl_parse_client_key_exchange()`)\r\n- [x] Server, outgoing `SessionTicket` (originally `ssl_write_new_session_ticket()`).\r\n- [x] Client, outgoing `ClientHello` (originally `ssl_write_client_hello()`).\r\n\r\n**Review suggestion:**\r\n* I have been going to the code function by function and moved the various parts of the previously monolithic message handling functions into the respective sub-routines, mostly in a single commit. I suggest that reviewers do the same, comparing old and new code side by side. Looking at the diffs doesn't seem very transparent instead.\r\n* The incoming certificate handling was among the most complex functions to adapt, and for this I have followed the different approach of gradually commenting out the previous code and adding the commented parts in the correct place in the new code. This should be convenient to review, and it is hopefully easy to track that nothing got lost.\r\n\r\n**Notes**\r\n* The PR increases the line count through the introduction of a large number of  small, static helper functions. I expect the compiler to be smart enough to inline these - the resulting binary should therefore be similar in size and structure to the original one, but this needs to be checked.","created_at":"2018-05-16T13:56:51Z","updated_at":"2018-06-14T12:44:15Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b611ea3c52031fbcf6da7230f47dac4addd64ec8","assignee":null,"assignees":[],"requested_reviewers":[{"login":"mpg","id":60640,"node_id":"MDQ6VXNlcjYwNjQw","avatar_url":"https://avatars0.githubusercontent.com/u/60640?v=4","gravatar_id":"","url":"https://api.github.com/users/mpg","html_url":"https://github.com/mpg","followers_url":"https://api.github.com/users/mpg/followers","following_url":"https://api.github.com/users/mpg/following{/other_user}","gists_url":"https://api.github.com/users/mpg/gists{/gist_id}","starred_url":"https://api.github.com/users/mpg/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/mpg/subscriptions","organizations_url":"https://api.github.com/users/mpg/orgs","repos_url":"https://api.github.com/users/mpg/repos","events_url":"https://api.github.com/users/mpg/events{/privacy}","received_events_url":"https://api.github.com/users/mpg/received_events","type":"User","site_admin":false}],"requested_teams":[],"labels":[{"id":937147638,"node_id":"MDU6TGFiZWw5MzcxNDc2Mzg=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/component:%20TLS","name":"component: TLS","color":"CEE3F6","default":false},{"id":19280386,"node_id":"MDU6TGFiZWwxOTI4MDM4Ng==","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/enhancement","name":"enhancement","color":"84b6eb","default":true},{"id":408190313,"node_id":"MDU6TGFiZWw0MDgxOTAzMTM=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/mbed%20TLS%20team","name":"mbed TLS team","color":"66e0ff","default":false},{"id":435765575,"node_id":"MDU6TGFiZWw0MzU3NjU1NzU=","url":"https://api.github.com/repos/ARMmbed/mbedtls/labels/needs%20work","name":"needs work","color":"fbca04","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634/commits","review_comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634/comments","review_comment_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments{/number}","comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/1634/comments","statuses_url":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/0d1d8012940c7d297fc5131956d6deb1c0118e86","head":{"label":"hanno-arm:handshake_logic_restructure","ref":"handshake_logic_restructure","sha":"0d1d8012940c7d297fc5131956d6deb1c0118e86","user":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"repo":{"id":87815731,"node_id":"MDEwOlJlcG9zaXRvcnk4NzgxNTczMQ==","name":"mbedtls","full_name":"hanno-arm/mbedtls","owner":{"login":"hanno-arm","id":26892988,"node_id":"MDQ6VXNlcjI2ODkyOTg4","avatar_url":"https://avatars1.githubusercontent.com/u/26892988?v=4","gravatar_id":"","url":"https://api.github.com/users/hanno-arm","html_url":"https://github.com/hanno-arm","followers_url":"https://api.github.com/users/hanno-arm/followers","following_url":"https://api.github.com/users/hanno-arm/following{/other_user}","gists_url":"https://api.github.com/users/hanno-arm/gists{/gist_id}","starred_url":"https://api.github.com/users/hanno-arm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hanno-arm/subscriptions","organizations_url":"https://api.github.com/users/hanno-arm/orgs","repos_url":"https://api.github.com/users/hanno-arm/repos","events_url":"https://api.github.com/users/hanno-arm/events{/privacy}","received_events_url":"https://api.github.com/users/hanno-arm/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/hanno-arm/mbedtls","description":"An open source, portable, easy to use, readable and flexible SSL library","fork":true,"url":"https://api.github.com/repos/hanno-arm/mbedtls","forks_url":"https://api.github.com/repos/hanno-arm/mbedtls/forks","keys_url":"https://api.github.com/repos/hanno-arm/mbedtls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/hanno-arm/mbedtls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/hanno-arm/mbedtls/teams","hooks_url":"https://api.github.com/repos/hanno-arm/mbedtls/hooks","issue_events_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues/events{/number}","events_url":"https://api.github.com/repos/hanno-arm/mbedtls/events","assignees_url":"https://api.github.com/repos/hanno-arm/mbedtls/assignees{/user}","branches_url":"https://api.github.com/repos/hanno-arm/mbedtls/branches{/branch}","tags_url":"https://api.github.com/repos/hanno-arm/mbedtls/tags","blobs_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/refs{/sha}","trees_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/hanno-arm/mbedtls/statuses/{sha}","languages_url":"https://api.github.com/repos/hanno-arm/mbedtls/languages","stargazers_url":"https://api.github.com/repos/hanno-arm/mbedtls/stargazers","contributors_url":"https://api.github.com/repos/hanno-arm/mbedtls/contributors","subscribers_url":"https://api.github.com/repos/hanno-arm/mbedtls/subscribers","subscription_url":"https://api.github.com/repos/hanno-arm/mbedtls/subscription","commits_url":"https://api.github.com/repos/hanno-arm/mbedtls/commits{/sha}","git_commits_url":"https://api.github.com/repos/hanno-arm/mbedtls/git/commits{/sha}","comments_url":"https://api.github.com/repos/hanno-arm/mbedtls/comments{/number}","issue_comment_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues/comments{/number}","contents_url":"https://api.github.com/repos/hanno-arm/mbedtls/contents/{+path}","compare_url":"https://api.github.com/repos/hanno-arm/mbedtls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/hanno-arm/mbedtls/merges","archive_url":"https://api.github.com/repos/hanno-arm/mbedtls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/hanno-arm/mbedtls/downloads","issues_url":"https://api.github.com/repos/hanno-arm/mbedtls/issues{/number}","pulls_url":"https://api.github.com/repos/hanno-arm/mbedtls/pulls{/number}","milestones_url":"https://api.github.com/repos/hanno-arm/mbedtls/milestones{/number}","notifications_url":"https://api.github.com/repos/hanno-arm/mbedtls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/hanno-arm/mbedtls/labels{/name}","releases_url":"https://api.github.com/repos/hanno-arm/mbedtls/releases{/id}","deployments_url":"https://api.github.com/repos/hanno-arm/mbedtls/deployments","created_at":"2017-04-10T13:44:55Z","updated_at":"2017-04-10T13:45:00Z","pushed_at":"2018-06-08T11:17:11Z","git_url":"git://github.com/hanno-arm/mbedtls.git","ssh_url":"git@github.com:hanno-arm/mbedtls.git","clone_url":"https://github.com/hanno-arm/mbedtls.git","svn_url":"https://github.com/hanno-arm/mbedtls","homepage":"https://tls.mbed.org","size":26886,"stargazers_count":0,"watchers_count":0,"language":"C","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"development"}},"base":{"label":"ARMmbed:development","ref":"development","sha":"eb6ed719e3691c93d14fb30e4f6046c8fd0145ad","user":{"login":"ARMmbed","id":8916057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg5MTYwNTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8916057?v=4","gravatar_id":"","url":"https://api.github.com/users/ARMmbed","html_url":"https://github.com/ARMmbed","followers_url":"https://api.github.com/users/ARMmbed/followers","following_url":"https://api.github.com/users/ARMmbed/following{/other_user}","gists_url":"https://api.github.com/users/ARMmbed/gists{/gist_id}","starred_url":"https://api.github.com/users/ARMmbed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ARMmbed/subscriptions","organizations_url":"https://api.github.com/users/ARMmbed/orgs","repos_url":"https://api.github.com/users/ARMmbed/repos","events_url":"https://api.github.com/users/ARMmbed/events{/privacy}","received_events_url":"https://api.github.com/users/ARMmbed/received_events","type":"Organization","site_admin":false},"repo":{"id":6687936,"node_id":"MDEwOlJlcG9zaXRvcnk2Njg3OTM2","name":"mbedtls","full_name":"ARMmbed/mbedtls","owner":{"login":"ARMmbed","id":8916057,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg5MTYwNTc=","avatar_url":"https://avatars3.githubusercontent.com/u/8916057?v=4","gravatar_id":"","url":"https://api.github.com/users/ARMmbed","html_url":"https://github.com/ARMmbed","followers_url":"https://api.github.com/users/ARMmbed/followers","following_url":"https://api.github.com/users/ARMmbed/following{/other_user}","gists_url":"https://api.github.com/users/ARMmbed/gists{/gist_id}","starred_url":"https://api.github.com/users/ARMmbed/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ARMmbed/subscriptions","organizations_url":"https://api.github.com/users/ARMmbed/orgs","repos_url":"https://api.github.com/users/ARMmbed/repos","events_url":"https://api.github.com/users/ARMmbed/events{/privacy}","received_events_url":"https://api.github.com/users/ARMmbed/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/ARMmbed/mbedtls","description":"An open source, portable, easy to use, readable and flexible SSL library","fork":false,"url":"https://api.github.com/repos/ARMmbed/mbedtls","forks_url":"https://api.github.com/repos/ARMmbed/mbedtls/forks","keys_url":"https://api.github.com/repos/ARMmbed/mbedtls/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ARMmbed/mbedtls/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ARMmbed/mbedtls/teams","hooks_url":"https://api.github.com/repos/ARMmbed/mbedtls/hooks","issue_events_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/events{/number}","events_url":"https://api.github.com/repos/ARMmbed/mbedtls/events","assignees_url":"https://api.github.com/repos/ARMmbed/mbedtls/assignees{/user}","branches_url":"https://api.github.com/repos/ARMmbed/mbedtls/branches{/branch}","tags_url":"https://api.github.com/repos/ARMmbed/mbedtls/tags","blobs_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/refs{/sha}","trees_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/{sha}","languages_url":"https://api.github.com/repos/ARMmbed/mbedtls/languages","stargazers_url":"https://api.github.com/repos/ARMmbed/mbedtls/stargazers","contributors_url":"https://api.github.com/repos/ARMmbed/mbedtls/contributors","subscribers_url":"https://api.github.com/repos/ARMmbed/mbedtls/subscribers","subscription_url":"https://api.github.com/repos/ARMmbed/mbedtls/subscription","commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/commits{/sha}","git_commits_url":"https://api.github.com/repos/ARMmbed/mbedtls/git/commits{/sha}","comments_url":"https://api.github.com/repos/ARMmbed/mbedtls/comments{/number}","issue_comment_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues/comments{/number}","contents_url":"https://api.github.com/repos/ARMmbed/mbedtls/contents/{+path}","compare_url":"https://api.github.com/repos/ARMmbed/mbedtls/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ARMmbed/mbedtls/merges","archive_url":"https://api.github.com/repos/ARMmbed/mbedtls/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ARMmbed/mbedtls/downloads","issues_url":"https://api.github.com/repos/ARMmbed/mbedtls/issues{/number}","pulls_url":"https://api.github.com/repos/ARMmbed/mbedtls/pulls{/number}","milestones_url":"https://api.github.com/repos/ARMmbed/mbedtls/milestones{/number}","notifications_url":"https://api.github.com/repos/ARMmbed/mbedtls/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ARMmbed/mbedtls/labels{/name}","releases_url":"https://api.github.com/repos/ARMmbed/mbedtls/releases{/id}","deployments_url":"https://api.github.com/repos/ARMmbed/mbedtls/deployments","created_at":"2012-11-14T13:13:13Z","updated_at":"2018-06-14T09:44:34Z","pushed_at":"2018-06-14T11:44:10Z","git_url":"git://github.com/ARMmbed/mbedtls.git","ssh_url":"git@github.com:ARMmbed/mbedtls.git","clone_url":"https://github.com/ARMmbed/mbedtls.git","svn_url":"https://github.com/ARMmbed/mbedtls","homepage":"https://tls.mbed.org","size":27797,"stargazers_count":1417,"watchers_count":1417,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":875,"mirror_url":null,"archived":false,"open_issues_count":470,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":875,"open_issues":470,"watchers":1417,"default_branch":"development"}},"_links":{"self":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634"},"html":{"href":"https://github.com/ARMmbed/mbedtls/pull/1634"},"issue":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/issues/1634"},"comments":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/issues/1634/comments"},"review_comments":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634/comments"},"review_comment":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/pulls/1634/commits"},"statuses":{"href":"https://api.github.com/repos/ARMmbed/mbedtls/statuses/0d1d8012940c7d297fc5131956d6deb1c0118e86"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"AndrzejKurek"}}