{"action":"created","comment":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/comments/50607448","id":50607448,"diff_hunk":"@@ -303,209 +304,186 @@ extern \"C\" int32_t CryptoNative_SslSessionReused(SSL* ssl)\n     return SSL_session_reused(ssl) == 1;\n }\n \n-/*\n-The values used in OpenSSL for SSL_CIPHER algorithm_enc.\n-*/\n-enum class SSL_CipherAlgorithm : int64_t\n-{\n-    SSL_DES = 1,\n-    SSL_3DES = 2,\n-    SSL_RC4 = 4,\n-    SSL_RC2 = 8,\n-    SSL_IDEA = 16,\n-    SSL_eNULL = 32,\n-    SSL_AES128 = 64,\n-    SSL_AES256 = 128,\n-    SSL_CAMELLIA128 = 256,\n-    SSL_CAMELLIA256 = 512,\n-    SSL_eGOST2814789CNT = 1024,\n-    SSL_SEED = 2048,\n-    SSL_AES128GCM = 4096,\n-    SSL_AES256GCM = 8192\n-};\n-\n-static CipherAlgorithmType MapCipherAlgorithmType(const SSL_CIPHER* cipher)\n-{\n-    unsigned long enc = cipher->algorithm_enc;\n-\n-    SSL_CipherAlgorithm sslEnc = static_cast<SSL_CipherAlgorithm>(enc);\n-    switch (sslEnc)\n-    {\n-        case SSL_CipherAlgorithm::SSL_DES:\n-            return CipherAlgorithmType::Des;\n-\n-        case SSL_CipherAlgorithm::SSL_3DES:\n-            return CipherAlgorithmType::TripleDes;\n-\n-        case SSL_CipherAlgorithm::SSL_RC4:\n-            return CipherAlgorithmType::Rc4;\n-\n-        case SSL_CipherAlgorithm::SSL_RC2:\n-            return CipherAlgorithmType::Rc2;\n-\n-        case SSL_CipherAlgorithm::SSL_eNULL:\n-            return CipherAlgorithmType::Null;\n+static CipherAlgorithmType MapCipherAlgorithmType(const char* encryption, size_t encryptionLength)\n+{\n+    if (strncmp(encryption, \"DES(56)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Des;\n+    if (strncmp(encryption, \"3DES(168)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::TripleDes;\n+    if (strncmp(encryption, \"RC4(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Rc4;\n+    if (strncmp(encryption, \"RC2(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Rc2;\n+    if (strncmp(encryption, \"None\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Null;\n+    if (strncmp(encryption, \"IDEA(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::SSL_IDEA;\n+    if (strncmp(encryption, \"SEED(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::SSL_SEED;\n+    if (strncmp(encryption, \"AES(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Aes128;\n+    if (strncmp(encryption, \"AES(256)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Aes256;\n+    if (strncmp(encryption, \"Camellia(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::SSL_CAMELLIA128;\n+    if (strncmp(encryption, \"Camellia(256)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::SSL_CAMELLIA256;\n+    if (strncmp(encryption, \"GOST89(256)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::SSL_eGOST2814789CNT;\n+    if (strncmp(encryption, \"AESGCM(128)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Aes128;\n+    if (strncmp(encryption, \"AESGCM(256)\", encryptionLength) == 0)\n+        return CipherAlgorithmType::Aes256;\n \n-        case SSL_CipherAlgorithm::SSL_IDEA:\n-            return CipherAlgorithmType::SSL_IDEA;\n-\n-        case SSL_CipherAlgorithm::SSL_SEED:\n-            return CipherAlgorithmType::SSL_SEED;\n-\n-        case SSL_CipherAlgorithm::SSL_AES128:\n-            return CipherAlgorithmType::Aes128;\n-\n-        case SSL_CipherAlgorithm::SSL_AES256:\n-            return CipherAlgorithmType::Aes256;\n-\n-        case SSL_CipherAlgorithm::SSL_CAMELLIA128:\n-            return CipherAlgorithmType::SSL_CAMELLIA128;\n-\n-        case SSL_CipherAlgorithm::SSL_CAMELLIA256:\n-            return CipherAlgorithmType::SSL_CAMELLIA256;\n+    return CipherAlgorithmType::None;\n+}\n \n-        case SSL_CipherAlgorithm::SSL_eGOST2814789CNT:\n-            return CipherAlgorithmType::SSL_eGOST2814789CNT;\n+static ExchangeAlgorithmType MapExchangeAlgorithmType(const char* keyExchange, size_t keyExchangeLength)\n+{\n+    if (strncmp(keyExchange, \"RSA\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::RsaKeyX;\n+    if (strncmp(keyExchange, \"DH/RSA\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::DiffieHellman;\n+    if (strncmp(keyExchange, \"DH/DSS\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::DiffieHellman;\n+    if (strncmp(keyExchange, \"DH\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::DiffieHellman;\n+    if (strncmp(keyExchange, \"KRB5\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_kKRB5;\n+    if (strncmp(keyExchange, \"ECDH/RSA\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_ECDH;\n+    if (strncmp(keyExchange, \"ECDH/ECDSA\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_ECDSA;\n+    if (strncmp(keyExchange, \"ECDH\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_ECDSA;\n+    if (strncmp(keyExchange, \"PSK\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_kPSK;\n+    if (strncmp(keyExchange, \"GOST\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_kGOST;\n+    if (strncmp(keyExchange, \"SRP\", keyExchangeLength) == 0)\n+        return ExchangeAlgorithmType::SSL_kSRP;\n \n-        case SSL_CipherAlgorithm::SSL_AES128GCM:\n-            return CipherAlgorithmType::Aes128;\n+    return ExchangeAlgorithmType::None;\n+}\n \n-        case SSL_CipherAlgorithm::SSL_AES256GCM:\n-            return CipherAlgorithmType::Aes256;\n+static void GetHashAlgorithmTypeAndSize(const char* mac, size_t macLength, HashAlgorithmType& dataHashAlg, DataHashSize& hashKeySize)\n+{\n+    if (strncmp(mac, \"MD5\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::Md5;\n+        hashKeySize = DataHashSize::MD5_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"SHA1\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::Sha1;\n+        hashKeySize = DataHashSize::SHA1_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"GOST94\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::SSL_GOST94;\n+        hashKeySize = DataHashSize::GOST_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"GOST89\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::SSL_GOST89;\n+        hashKeySize = DataHashSize::GOST_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"SHA256\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::SSL_SHA256;\n+        hashKeySize = DataHashSize::SHA256_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"SHA384\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::SSL_SHA384;\n+        hashKeySize = DataHashSize::SHA384_HashKeySize;\n+        return;\n+    }\n+    if (strncmp(mac, \"AEAD\", macLength) == 0)\n+    {\n+        dataHashAlg = HashAlgorithmType::SSL_AEAD;\n+        hashKeySize = DataHashSize::Default;\n+        return;\n     }\n \n-    return CipherAlgorithmType::None;\n+    dataHashAlg = HashAlgorithmType::None;\n+    hashKeySize = DataHashSize::Default;\n }\n \n /*\n-The values used in OpenSSL for SSL_CIPHER algorithm_mkey.\n+Given a keyName string like \"Enc=XXX\", parses the description string and returns the\n+'XXX' into value and valueLength return variables.\n+\n+Returns a value indicating whether the pattern starting with keyName was found in description.\n */\n-enum class SSL_KeyExchangeAlgorithm : int64_t\n-{\n-    SSL_kRSA = 1,\n-    /* DH cert, RSA CA cert */\n-    SSL_kDHr = 2,\n-    /* DH cert, DSA CA cert */\n-    SSL_kDHd = 4,\n-    /* tmp DH key no DH cert */\n-    SSL_kEDH = 8,\n-    /* Kerberos5 key exchange */\n-    SSL_kKRB5 = 16,\n-    /* ECDH cert, RSA CA cert */\n-    SSL_kECDHr = 32,\n-    /* ECDH cert, ECDSA CA cert */\n-    SSL_kECDHe = 64,\n-    SSL_kEECDH = 128,\n-    SSL_kPSK = 256,\n-    SSL_kGOST = 512,\n-    SSL_kSRP = 1024,\n-};\n-\n-static ExchangeAlgorithmType MapExchangeAlgorithmType(const SSL_CIPHER* cipher)\n-{\n-    unsigned long mkey = cipher->algorithm_mkey;\n-\n-    SSL_KeyExchangeAlgorithm sslMkey = static_cast<SSL_KeyExchangeAlgorithm>(mkey);\n-    switch (sslMkey)\n+static bool GetDescriptionValue(const char* description, const char* keyName, size_t keyNameLength, const char** value, size_t& valueLength)\n+{\n+    // search for keyName in description\n+    const char* keyNameStart = strstr(description, keyName);\n+    if (keyNameStart != nullptr)\n     {\n-        case SSL_KeyExchangeAlgorithm::SSL_kRSA:\n-            return ExchangeAlgorithmType::RsaKeyX;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kDHr:\n-            return ExchangeAlgorithmType::DiffieHellman;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kDHd:\n-            return ExchangeAlgorithmType::DiffieHellman;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kEDH:\n-            return ExchangeAlgorithmType::DiffieHellman;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kKRB5:\n-            return ExchangeAlgorithmType::SSL_kKRB5;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kECDHr:\n-            return ExchangeAlgorithmType::SSL_ECDH;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kECDHe:\n-            return ExchangeAlgorithmType::SSL_ECDSA;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kEECDH:\n-            return ExchangeAlgorithmType::SSL_ECDSA;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kPSK:\n-            return ExchangeAlgorithmType::SSL_kPSK;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kGOST:\n-            return ExchangeAlgorithmType::SSL_kGOST;\n-\n-        case SSL_KeyExchangeAlgorithm::SSL_kSRP:\n-            return ExchangeAlgorithmType::SSL_kSRP;\n+        // set valueStart to the begining of the value\n+        const char* valueStart = keyNameStart + keyNameLength;\n+        size_t index = 0;\n+\n+        // the value ends when we hit a space or the end of the string\n+        while (valueStart[index] != ' ' && valueStart[index] != '\\0')\n+        {\n+            index++;\n+        }\n+\n+        *value = valueStart;\n+        valueLength = index;\n+        return true;\n     }\n \n-    return ExchangeAlgorithmType::None;\n+    return false;\n }\n \n /*\n-The values used in OpenSSL for SSL_CIPHER algorithm_mac.\n+Parses the Kx, Enc, and Mac values out of the SSL_CIPHER_description and\n+maps the values to the corresponding .NET enum value.\n */\n-enum class SSL_DataHashAlgorithm : int64_t\n-{\n-    SSL_MD5 = 1,\n-    SSL_SHA1 = 2,\n-    SSL_GOST94 = 4,\n-    SSL_GOST89MAC = 8,\n-    SSL_SHA256 = 16,\n-    SSL_SHA384 = 32,\n-    SSL_AEAD = 64\n-};\n+static bool GetSslConnectionInfoFromDescription(const SSL_CIPHER* cipher,\n+                                                CipherAlgorithmType& dataCipherAlg,\n+                                                ExchangeAlgorithmType& keyExchangeAlg,\n+                                                HashAlgorithmType& dataHashAlg,\n+                                                DataHashSize& hashKeySize)\n+{\n+    const int descriptionLength = 256;\n+    char description[descriptionLength] = {};\n+    SSL_CIPHER_description(cipher, description, descriptionLength - 1); // ensure description is NULL-terminiated","path":"src/Native/System.Security.Cryptography.Native/pal_ssl.cpp","position":303,"original_position":303,"commit_id":"f66cae5070e271c984a614b124c6a1439cbbe7bd","original_commit_id":"f66cae5070e271c984a614b124c6a1439cbbe7bd","user":{"login":"eerhardt","id":8291187,"avatar_url":"https://avatars.githubusercontent.com/u/8291187?v=3","gravatar_id":"","url":"https://api.github.com/users/eerhardt","html_url":"https://github.com/eerhardt","followers_url":"https://api.github.com/users/eerhardt/followers","following_url":"https://api.github.com/users/eerhardt/following{/other_user}","gists_url":"https://api.github.com/users/eerhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/eerhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eerhardt/subscriptions","organizations_url":"https://api.github.com/users/eerhardt/orgs","repos_url":"https://api.github.com/users/eerhardt/repos","events_url":"https://api.github.com/users/eerhardt/events{/privacy}","received_events_url":"https://api.github.com/users/eerhardt/received_events","type":"User","site_admin":false},"body":"thanks  - fixed.","created_at":"2016-01-23T00:00:49Z","updated_at":"2016-01-23T00:00:49Z","html_url":"https://github.com/dotnet/corefx/pull/5608#discussion_r50607448","pull_request_url":"https://api.github.com/repos/dotnet/corefx/pulls/5608","_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments/50607448"},"html":{"href":"https://github.com/dotnet/corefx/pull/5608#discussion_r50607448"},"pull_request":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/5608"}}},"pull_request":{"url":"https://api.github.com/repos/dotnet/corefx/pulls/5608","id":56833725,"html_url":"https://github.com/dotnet/corefx/pull/5608","diff_url":"https://github.com/dotnet/corefx/pull/5608.diff","patch_url":"https://github.com/dotnet/corefx/pull/5608.patch","issue_url":"https://api.github.com/repos/dotnet/corefx/issues/5608","number":5608,"state":"open","locked":false,"title":"SSL_KeyExchangeAlgorithm values may no longer match OpenSSL","user":{"login":"eerhardt","id":8291187,"avatar_url":"https://avatars.githubusercontent.com/u/8291187?v=3","gravatar_id":"","url":"https://api.github.com/users/eerhardt","html_url":"https://github.com/eerhardt","followers_url":"https://api.github.com/users/eerhardt/followers","following_url":"https://api.github.com/users/eerhardt/following{/other_user}","gists_url":"https://api.github.com/users/eerhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/eerhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eerhardt/subscriptions","organizations_url":"https://api.github.com/users/eerhardt/orgs","repos_url":"https://api.github.com/users/eerhardt/repos","events_url":"https://api.github.com/users/eerhardt/events{/privacy}","received_events_url":"https://api.github.com/users/eerhardt/received_events","type":"User","site_admin":false},"body":"We copied some internal/private integer values from OpenSSL that weren't in a public header. We used them to compare against the algorithm fields in a SSL_CIPHER object to tell which type of encryption, key exchange and hash algorithms were being used.\r\n\r\nRecently, OpenSSL did some cleanup of their values and moved the values around, which means our values are now out of sync.\r\n\r\nInstead of using the algorithm fields, we now call SSL_CIPHER_description and parse the returned string for the needed information. This will have to do for now on older OpenSSL versions until we get public methods from OpenSSL to get this information. Two of the three are currently in the latest/unreleased master branch.\r\n\r\nFix #5253 and #4074\r\n\r\n@bartonjs @vijaykota @shrutigarg ","created_at":"2016-01-22T01:04:28Z","updated_at":"2016-01-23T00:00:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4c80927389f046ee8d8b0ef9bff3a73fa2cc0606","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/dotnet/corefx/pulls/5608/commits","review_comments_url":"https://api.github.com/repos/dotnet/corefx/pulls/5608/comments","review_comment_url":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}","comments_url":"https://api.github.com/repos/dotnet/corefx/issues/5608/comments","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/f66cae5070e271c984a614b124c6a1439cbbe7bd","head":{"label":"eerhardt:Fix5253","ref":"Fix5253","sha":"f66cae5070e271c984a614b124c6a1439cbbe7bd","user":{"login":"eerhardt","id":8291187,"avatar_url":"https://avatars.githubusercontent.com/u/8291187?v=3","gravatar_id":"","url":"https://api.github.com/users/eerhardt","html_url":"https://github.com/eerhardt","followers_url":"https://api.github.com/users/eerhardt/followers","following_url":"https://api.github.com/users/eerhardt/following{/other_user}","gists_url":"https://api.github.com/users/eerhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/eerhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eerhardt/subscriptions","organizations_url":"https://api.github.com/users/eerhardt/orgs","repos_url":"https://api.github.com/users/eerhardt/repos","events_url":"https://api.github.com/users/eerhardt/events{/privacy}","received_events_url":"https://api.github.com/users/eerhardt/received_events","type":"User","site_admin":false},"repo":{"id":38781378,"name":"corefx","full_name":"eerhardt/corefx","owner":{"login":"eerhardt","id":8291187,"avatar_url":"https://avatars.githubusercontent.com/u/8291187?v=3","gravatar_id":"","url":"https://api.github.com/users/eerhardt","html_url":"https://github.com/eerhardt","followers_url":"https://api.github.com/users/eerhardt/followers","following_url":"https://api.github.com/users/eerhardt/following{/other_user}","gists_url":"https://api.github.com/users/eerhardt/gists{/gist_id}","starred_url":"https://api.github.com/users/eerhardt/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/eerhardt/subscriptions","organizations_url":"https://api.github.com/users/eerhardt/orgs","repos_url":"https://api.github.com/users/eerhardt/repos","events_url":"https://api.github.com/users/eerhardt/events{/privacy}","received_events_url":"https://api.github.com/users/eerhardt/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/eerhardt/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":true,"url":"https://api.github.com/repos/eerhardt/corefx","forks_url":"https://api.github.com/repos/eerhardt/corefx/forks","keys_url":"https://api.github.com/repos/eerhardt/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/eerhardt/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/eerhardt/corefx/teams","hooks_url":"https://api.github.com/repos/eerhardt/corefx/hooks","issue_events_url":"https://api.github.com/repos/eerhardt/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/eerhardt/corefx/events","assignees_url":"https://api.github.com/repos/eerhardt/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/eerhardt/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/eerhardt/corefx/tags","blobs_url":"https://api.github.com/repos/eerhardt/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/eerhardt/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/eerhardt/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/eerhardt/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/eerhardt/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/eerhardt/corefx/languages","stargazers_url":"https://api.github.com/repos/eerhardt/corefx/stargazers","contributors_url":"https://api.github.com/repos/eerhardt/corefx/contributors","subscribers_url":"https://api.github.com/repos/eerhardt/corefx/subscribers","subscription_url":"https://api.github.com/repos/eerhardt/corefx/subscription","commits_url":"https://api.github.com/repos/eerhardt/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/eerhardt/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/eerhardt/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/eerhardt/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/eerhardt/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/eerhardt/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/eerhardt/corefx/merges","archive_url":"https://api.github.com/repos/eerhardt/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/eerhardt/corefx/downloads","issues_url":"https://api.github.com/repos/eerhardt/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/eerhardt/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/eerhardt/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/eerhardt/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/eerhardt/corefx/labels{/name}","releases_url":"https://api.github.com/repos/eerhardt/corefx/releases{/id}","deployments_url":"https://api.github.com/repos/eerhardt/corefx/deployments","created_at":"2015-07-08T21:38:15Z","updated_at":"2016-01-20T21:29:59Z","pushed_at":"2016-01-22T23:55:22Z","git_url":"git://github.com/eerhardt/corefx.git","ssh_url":"git@github.com:eerhardt/corefx.git","clone_url":"https://github.com/eerhardt/corefx.git","svn_url":"https://github.com/eerhardt/corefx","homepage":"http://dotnet.github.io/core/","size":46275,"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":"dotnet:master","ref":"master","sha":"219d71f9437254b8e03c363fde49d74a3802d035","user":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"repo":{"id":26295345,"name":"corefx","full_name":"dotnet/corefx","owner":{"login":"dotnet","id":9141961,"avatar_url":"https://avatars.githubusercontent.com/u/9141961?v=3","gravatar_id":"","url":"https://api.github.com/users/dotnet","html_url":"https://github.com/dotnet","followers_url":"https://api.github.com/users/dotnet/followers","following_url":"https://api.github.com/users/dotnet/following{/other_user}","gists_url":"https://api.github.com/users/dotnet/gists{/gist_id}","starred_url":"https://api.github.com/users/dotnet/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dotnet/subscriptions","organizations_url":"https://api.github.com/users/dotnet/orgs","repos_url":"https://api.github.com/users/dotnet/repos","events_url":"https://api.github.com/users/dotnet/events{/privacy}","received_events_url":"https://api.github.com/users/dotnet/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/dotnet/corefx","description":"This repo contains the .NET Core foundational libraries, called CoreFX. It includes classes for collections, file systems, console, XML, async and many others.","fork":false,"url":"https://api.github.com/repos/dotnet/corefx","forks_url":"https://api.github.com/repos/dotnet/corefx/forks","keys_url":"https://api.github.com/repos/dotnet/corefx/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dotnet/corefx/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dotnet/corefx/teams","hooks_url":"https://api.github.com/repos/dotnet/corefx/hooks","issue_events_url":"https://api.github.com/repos/dotnet/corefx/issues/events{/number}","events_url":"https://api.github.com/repos/dotnet/corefx/events","assignees_url":"https://api.github.com/repos/dotnet/corefx/assignees{/user}","branches_url":"https://api.github.com/repos/dotnet/corefx/branches{/branch}","tags_url":"https://api.github.com/repos/dotnet/corefx/tags","blobs_url":"https://api.github.com/repos/dotnet/corefx/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dotnet/corefx/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dotnet/corefx/git/refs{/sha}","trees_url":"https://api.github.com/repos/dotnet/corefx/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dotnet/corefx/statuses/{sha}","languages_url":"https://api.github.com/repos/dotnet/corefx/languages","stargazers_url":"https://api.github.com/repos/dotnet/corefx/stargazers","contributors_url":"https://api.github.com/repos/dotnet/corefx/contributors","subscribers_url":"https://api.github.com/repos/dotnet/corefx/subscribers","subscription_url":"https://api.github.com/repos/dotnet/corefx/subscription","commits_url":"https://api.github.com/repos/dotnet/corefx/commits{/sha}","git_commits_url":"https://api.github.com/repos/dotnet/corefx/git/commits{/sha}","comments_url":"https://api.github.com/repos/dotnet/corefx/comments{/number}","issue_comment_url":"https://api.github.com/repos/dotnet/corefx/issues/comments{/number}","contents_url":"https://api.github.com/repos/dotnet/corefx/contents/{+path}","compare_url":"https://api.github.com/repos/dotnet/corefx/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dotnet/corefx/merges","archive_url":"https://api.github.com/repos/dotnet/corefx/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dotnet/corefx/downloads","issues_url":"https://api.github.com/repos/dotnet/corefx/issues{/number}","pulls_url":"https://api.github.com/repos/dotnet/corefx/pulls{/number}","milestones_url":"https://api.github.com/repos/dotnet/corefx/milestones{/number}","notifications_url":"https://api.github.com/repos/dotnet/corefx/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dotnet/corefx/labels{/name}","releases_url":"https://api.github.com/repos/dotnet/corefx/releases{/id}","deployments_url":"https://api.github.com/repos/dotnet/corefx/deployments","created_at":"2014-11-06T23:42:48Z","updated_at":"2016-01-22T18:03:18Z","pushed_at":"2016-01-22T23:55:24Z","git_url":"git://github.com/dotnet/corefx.git","ssh_url":"git@github.com:dotnet/corefx.git","clone_url":"https://github.com/dotnet/corefx.git","svn_url":"https://github.com/dotnet/corefx","homepage":"http://dotnet.github.io/","size":56014,"stargazers_count":8982,"watchers_count":8982,"language":"C#","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":2064,"mirror_url":null,"open_issues_count":821,"forks":2064,"open_issues":821,"watchers":8982,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/5608"},"html":{"href":"https://github.com/dotnet/corefx/pull/5608"},"issue":{"href":"https://api.github.com/repos/dotnet/corefx/issues/5608"},"comments":{"href":"https://api.github.com/repos/dotnet/corefx/issues/5608/comments"},"review_comments":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/5608/comments"},"review_comment":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/dotnet/corefx/pulls/5608/commits"},"statuses":{"href":"https://api.github.com/repos/dotnet/corefx/statuses/f66cae5070e271c984a614b124c6a1439cbbe7bd"}}}}