{"action":"created","comment":{"url":"https://api.github.com/repos/openssl/openssl/pulls/comments/55293676","id":55293676,"diff_hunk":"@@ -0,0 +1,310 @@\n+/*\n+ * BLAKE2 reference source code package - reference C implementations\n+ *\n+ * Copyright 2012, Samuel Neves <sneves@dei.uc.pt>.\n+ * You may use this under the terms of the CC0, the OpenSSL Licence, or the\n+ * Apache Public License 2.0, at your option.  The terms of these licenses can\n+ * be found at:\n+ *\n+ * - OpenSSL license   : https://www.openssl.org/source/license.html\n+ * - Apache 2.0        : http://www.apache.org/licenses/LICENSE-2.0\n+ * - CC0 1.0 Universal : http://creativecommons.org/publicdomain/zero/1.0\n+ *\n+ * More information about the BLAKE2 hash function can be found at\n+ * https://blake2.net.\n+ *\n+ */\n+\n+/* crypto/blake2/blake2b.c */\n+\n+#include <stdint.h>\n+#include <string.h>\n+#include <stdio.h>\n+#include <openssl/crypto.h>\n+\n+#include \"internal/blake2_locl.h\"\n+#include \"blake2_impl.h\"\n+\n+static const uint64_t blake2b_IV[8] =\n+{\n+    0x6a09e667f3bcc908ULL, 0xbb67ae8584caa73bULL,\n+    0x3c6ef372fe94f82bULL, 0xa54ff53a5f1d36f1ULL,\n+    0x510e527fade682d1ULL, 0x9b05688c2b3e6c1fULL,\n+    0x1f83d9abfb41bd6bULL, 0x5be0cd19137e2179ULL\n+};\n+\n+static const uint8_t blake2b_sigma[12][16] =\n+{\n+    {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,\n+    { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 } ,\n+    { 11,  8, 12,  0,  5,  2, 15, 13, 10, 14,  3,  6,  7,  1,  9,  4 } ,\n+    {  7,  9,  3,  1, 13, 12, 11, 14,  2,  6,  5, 10,  4,  0, 15,  8 } ,\n+    {  9,  0,  5,  7,  2,  4, 10, 15, 14,  1, 11, 12,  6,  8,  3, 13 } ,\n+    {  2, 12,  6, 10,  0, 11,  8,  3,  4, 13,  7,  5, 15, 14,  1,  9 } ,\n+    { 12,  5,  1, 15, 14, 13,  4, 10,  0,  7,  6,  3,  9,  2,  8, 11 } ,\n+    { 13, 11,  7, 14, 12,  1,  3,  9,  5,  0, 15,  4,  8,  6,  2, 10 } ,\n+    {  6, 15, 14,  9, 11,  3,  0,  8, 12,  2, 13,  7,  1,  4, 10,  5 } ,\n+    { 10,  2,  8,  4,  7,  6,  1,  5, 15, 11,  9, 14,  3, 12, 13 , 0 } ,\n+    {  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15 } ,\n+    { 14, 10,  4,  8,  9, 15, 13,  6,  1, 12,  0,  2, 11,  7,  5,  3 }\n+};\n+\n+\n+static inline void blake2b_set_lastnode(BLAKE2B_CTX *S)\n+{\n+    S->f[1] = -1;\n+}\n+\n+/* Some helper functions, not necessarily useful */\n+static inline void blake2b_set_lastblock(BLAKE2B_CTX *S)\n+{\n+    if(S->last_node) {\n+        blake2b_set_lastnode(S);\n+    }\n+    S->f[0] = -1;\n+}\n+\n+static inline void blake2b_increment_counter(BLAKE2B_CTX *S,\n+                                             const uint64_t inc)\n+{\n+    S->t[0] += inc;\n+    S->t[1] += (S->t[0] < inc);\n+}\n+\n+static inline void blake2b_init0(BLAKE2B_CTX *S)\n+{\n+    int i;\n+    memset(S, 0, sizeof(BLAKE2B_CTX));\n+\n+    for(i = 0; i < 8; ++i) {\n+        S->h[i] = blake2b_IV[i];\n+    }\n+}\n+\n+/* init xors IV with input parameter block */\n+static int blake2b_init_param(BLAKE2B_CTX *S, const BLAKE2B_PARAM *P)\n+{\n+    size_t i;\n+    const uint8_t *p = (const uint8_t *)(P);\n+    blake2b_init0(S);\n+\n+    /* The param struct is carefully hand packed, and should be 64 bytes on\n+     * every platform. */\n+    OPENSSL_assert(sizeof(BLAKE2B_PARAM) == 64);\n+    /* IV XOR ParamBlock */\n+    for(i = 0; i < 8; ++i) {\n+        S->h[i] ^= load64(p + sizeof(S->h[i]) * i);\n+    }\n+    return 1;\n+}\n+\n+int BLAKE2b_Init(BLAKE2B_CTX *c) {\n+    BLAKE2B_PARAM P[1];\n+    P->digest_length = BLAKE2B_DIGEST_LENGTH;\n+    P->key_length    = 0;\n+    P->fanout        = 1;\n+    P->depth         = 1;\n+    store32(&P->leaf_length, 0);\n+    store64(&P->node_offset, 0);\n+    P->node_depth    = 0;\n+    P->inner_length  = 0;\n+    memset(P->reserved, 0, sizeof(P->reserved));\n+    memset(P->salt,     0, sizeof(P->salt));\n+    memset(P->personal, 0, sizeof(P->personal));\n+    return blake2b_init_param(c, P);\n+}\n+\n+int BLAKE2b_InitKey(BLAKE2B_CTX *c, const void *key, size_t keylen) {\n+    BLAKE2B_PARAM P[1];\n+    uint8_t block[BLAKE2B_BLOCKBYTES];\n+\n+    if (!key || !keylen || keylen > BLAKE2B_KEYBYTES) {\n+        return 0;\n+    }\n+\n+    P->digest_length = BLAKE2B_DIGEST_LENGTH;\n+    P->key_length    = keylen;\n+    P->fanout        = 1;\n+    P->depth         = 1;\n+    store32(&P->leaf_length, 0);\n+    store64(&P->node_offset, 0);\n+    P->node_depth    = 0;\n+    P->inner_length  = 0;\n+    memset(P->reserved, 0, sizeof(P->reserved));\n+    memset(P->salt,     0, sizeof(P->salt));\n+    memset(P->personal, 0, sizeof(P->personal));\n+\n+    if(!blake2b_init_param(c, P)) {\n+        return 0;\n+    }\n+\n+    memset(block, 0, BLAKE2B_BLOCKBYTES);\n+    memcpy(block, key, keylen);\n+    BLAKE2b_Update(c, block, BLAKE2B_BLOCKBYTES);\n+    OPENSSL_cleanse(block, BLAKE2B_BLOCKBYTES); /* Burn the key from stack */\n+    return 1;\n+}\n+\n+static void blake2b_compress(BLAKE2B_CTX *S,\n+                            const uint8_t block[BLAKE2B_BLOCKBYTES])\n+{\n+    uint64_t m[16];\n+    uint64_t v[16];\n+    int i;\n+\n+    for(i = 0; i < 16; ++i) {\n+        m[i] = load64(block + i * sizeof(m[i]));\n+    }\n+\n+    for(i = 0; i < 8; ++i) {\n+        v[i] = S->h[i];\n+    }\n+\n+    v[8]  = blake2b_IV[0];\n+    v[9]  = blake2b_IV[1];\n+    v[10] = blake2b_IV[2];\n+    v[11] = blake2b_IV[3];\n+    v[12] = S->t[0] ^ blake2b_IV[4];\n+    v[13] = S->t[1] ^ blake2b_IV[5];\n+    v[14] = S->f[0] ^ blake2b_IV[6];\n+    v[15] = S->f[1] ^ blake2b_IV[7];\n+#define G(r,i,a,b,c,d) \\\n+    do { \\\n+        a = a + b + m[blake2b_sigma[r][2*i+0]]; \\\n+        d = rotr64(d ^ a, 32); \\\n+        c = c + d; \\\n+        b = rotr64(b ^ c, 24); \\\n+        a = a + b + m[blake2b_sigma[r][2*i+1]]; \\\n+        d = rotr64(d ^ a, 16); \\\n+        c = c + d; \\\n+        b = rotr64(b ^ c, 63); \\\n+    } while(0)\n+#define ROUND(r)  \\\n+    do { \\\n+        G(r,0,v[ 0],v[ 4],v[ 8],v[12]); \\\n+        G(r,1,v[ 1],v[ 5],v[ 9],v[13]); \\\n+        G(r,2,v[ 2],v[ 6],v[10],v[14]); \\\n+        G(r,3,v[ 3],v[ 7],v[11],v[15]); \\\n+        G(r,4,v[ 0],v[ 5],v[10],v[15]); \\\n+        G(r,5,v[ 1],v[ 6],v[11],v[12]); \\\n+        G(r,6,v[ 2],v[ 7],v[ 8],v[13]); \\\n+        G(r,7,v[ 3],v[ 4],v[ 9],v[14]); \\\n+    } while(0)\n+    ROUND(0);\n+    ROUND(1);\n+    ROUND(2);\n+    ROUND(3);\n+    ROUND(4);\n+    ROUND(5);\n+    ROUND(6);\n+    ROUND(7);\n+    ROUND(8);\n+    ROUND(9);\n+    ROUND(10);\n+    ROUND(11);\n+\n+    for(i = 0; i < 8; ++i) {\n+        S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];\n+    }\n+\n+#undef G\n+#undef ROUND\n+}\n+\n+int BLAKE2b_Update(BLAKE2B_CTX *c, const void *data, size_t datalen) {\n+    const uint8_t *in = data;\n+    size_t left, fill;\n+\n+    while(datalen > 0) {\n+        left = c->buflen;\n+        fill = 2 * BLAKE2B_BLOCKBYTES - left;\n+        if(datalen > fill) {","path":"crypto/blake2/blake2b.c","position":221,"original_position":221,"commit_id":"790f00e0884c0e53e12de9906412fba65a9ccd33","original_commit_id":"790f00e0884c0e53e12de9906412fba65a9ccd33","user":{"login":"waywardgeek","id":350306,"avatar_url":"https://avatars.githubusercontent.com/u/350306?v=3","gravatar_id":"","url":"https://api.github.com/users/waywardgeek","html_url":"https://github.com/waywardgeek","followers_url":"https://api.github.com/users/waywardgeek/followers","following_url":"https://api.github.com/users/waywardgeek/following{/other_user}","gists_url":"https://api.github.com/users/waywardgeek/gists{/gist_id}","starred_url":"https://api.github.com/users/waywardgeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waywardgeek/subscriptions","organizations_url":"https://api.github.com/users/waywardgeek/orgs","repos_url":"https://api.github.com/users/waywardgeek/repos","events_url":"https://api.github.com/users/waywardgeek/events{/privacy}","received_events_url":"https://api.github.com/users/waywardgeek/received_events","type":"User","site_admin":false},"body":"On Sat, Mar 5, 2016 at 12:53 PM, Kurt Roeckx <notifications@github.com>\nwrote:\n\n> In crypto/blake2/blake2b.c\n> <https://github.com/openssl/openssl/pull/566#discussion_r55127766>:\n>\n> > +    for(i = 0; i < 8; ++i) {\n> > +        S->h[i] = S->h[i] ^ v[i] ^ v[i + 8];\n> > +    }\n> > +\n> > +#undef G\n> > +#undef ROUND\n> > +}\n> > +\n> > +int BLAKE2b_Update(BLAKE2B_CTX *c, const void *data, size_t datalen) {\n> > +    const uint8_t *in = data;\n> > +    size_t left, fill;\n> > +\n> > +    while(datalen > 0) {\n> > +        left = c->buflen;\n> > +        fill = 2 * BLAKE2B_BLOCKBYTES - left;\n> > +        if(datalen > fill) {\n>\n> This should be >=\n>\n\nI implemented your other suggestion: reducing the input buffer size by 2X.\nWith that change, it is important that this be > 0 so that we do not\ncompress the last block, which is hashed differently.\n","created_at":"2016-03-07T23:41:13Z","updated_at":"2016-03-07T23:41:13Z","html_url":"https://github.com/openssl/openssl/pull/566#discussion_r55293676","pull_request_url":"https://api.github.com/repos/openssl/openssl/pulls/566","_links":{"self":{"href":"https://api.github.com/repos/openssl/openssl/pulls/comments/55293676"},"html":{"href":"https://github.com/openssl/openssl/pull/566#discussion_r55293676"},"pull_request":{"href":"https://api.github.com/repos/openssl/openssl/pulls/566"}}},"pull_request":{"url":"https://api.github.com/repos/openssl/openssl/pulls/566","id":56341063,"html_url":"https://github.com/openssl/openssl/pull/566","diff_url":"https://github.com/openssl/openssl/pull/566.diff","patch_url":"https://github.com/openssl/openssl/pull/566.patch","issue_url":"https://api.github.com/repos/openssl/openssl/issues/566","number":566,"state":"open","locked":false,"title":"Blake2","user":{"login":"waywardgeek","id":350306,"avatar_url":"https://avatars.githubusercontent.com/u/350306?v=3","gravatar_id":"","url":"https://api.github.com/users/waywardgeek","html_url":"https://github.com/waywardgeek","followers_url":"https://api.github.com/users/waywardgeek/followers","following_url":"https://api.github.com/users/waywardgeek/following{/other_user}","gists_url":"https://api.github.com/users/waywardgeek/gists{/gist_id}","starred_url":"https://api.github.com/users/waywardgeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waywardgeek/subscriptions","organizations_url":"https://api.github.com/users/waywardgeek/orgs","repos_url":"https://api.github.com/users/waywardgeek/repos","events_url":"https://api.github.com/users/waywardgeek/events{/privacy}","received_events_url":"https://api.github.com/users/waywardgeek/received_events","type":"User","site_admin":false},"body":"This set of changes adds initial BLAKE2 support to OpenSSL.  The BLAKE2s is a 32-bit friendly 256-bit hash, while BLAKE2b is a 64-bit friendly 512-bit hash.  The point of BLAKE2 is extremely fast secure hashing, even faster than MD5 on modern desktop CPUs with SSE instructions, as well as on ARM NEON processors.\r\n\r\nThis PR integrates, with the authors' permission, the portable reference code from blake2.net, licensed under the OpenSSL license.  EVP support is included, and test vectors for BLAKE2b and BLAKE2s have been added to tests/evptests.txt.\r\n\r\n","created_at":"2016-01-18T13:17:05Z","updated_at":"2016-03-07T23:41:13Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1c647b7bde6b0e514977b0b7c7971784805e7a97","assignee":{"login":"richsalz","id":7332500,"avatar_url":"https://avatars.githubusercontent.com/u/7332500?v=3","gravatar_id":"","url":"https://api.github.com/users/richsalz","html_url":"https://github.com/richsalz","followers_url":"https://api.github.com/users/richsalz/followers","following_url":"https://api.github.com/users/richsalz/following{/other_user}","gists_url":"https://api.github.com/users/richsalz/gists{/gist_id}","starred_url":"https://api.github.com/users/richsalz/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/richsalz/subscriptions","organizations_url":"https://api.github.com/users/richsalz/orgs","repos_url":"https://api.github.com/users/richsalz/repos","events_url":"https://api.github.com/users/richsalz/events{/privacy}","received_events_url":"https://api.github.com/users/richsalz/received_events","type":"User","site_admin":false},"milestone":null,"commits_url":"https://api.github.com/repos/openssl/openssl/pulls/566/commits","review_comments_url":"https://api.github.com/repos/openssl/openssl/pulls/566/comments","review_comment_url":"https://api.github.com/repos/openssl/openssl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openssl/openssl/issues/566/comments","statuses_url":"https://api.github.com/repos/openssl/openssl/statuses/790f00e0884c0e53e12de9906412fba65a9ccd33","head":{"label":"waywardgeek:blake2","ref":"blake2","sha":"790f00e0884c0e53e12de9906412fba65a9ccd33","user":{"login":"waywardgeek","id":350306,"avatar_url":"https://avatars.githubusercontent.com/u/350306?v=3","gravatar_id":"","url":"https://api.github.com/users/waywardgeek","html_url":"https://github.com/waywardgeek","followers_url":"https://api.github.com/users/waywardgeek/followers","following_url":"https://api.github.com/users/waywardgeek/following{/other_user}","gists_url":"https://api.github.com/users/waywardgeek/gists{/gist_id}","starred_url":"https://api.github.com/users/waywardgeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waywardgeek/subscriptions","organizations_url":"https://api.github.com/users/waywardgeek/orgs","repos_url":"https://api.github.com/users/waywardgeek/repos","events_url":"https://api.github.com/users/waywardgeek/events{/privacy}","received_events_url":"https://api.github.com/users/waywardgeek/received_events","type":"User","site_admin":false},"repo":{"id":49778363,"name":"openssl","full_name":"waywardgeek/openssl","owner":{"login":"waywardgeek","id":350306,"avatar_url":"https://avatars.githubusercontent.com/u/350306?v=3","gravatar_id":"","url":"https://api.github.com/users/waywardgeek","html_url":"https://github.com/waywardgeek","followers_url":"https://api.github.com/users/waywardgeek/followers","following_url":"https://api.github.com/users/waywardgeek/following{/other_user}","gists_url":"https://api.github.com/users/waywardgeek/gists{/gist_id}","starred_url":"https://api.github.com/users/waywardgeek/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/waywardgeek/subscriptions","organizations_url":"https://api.github.com/users/waywardgeek/orgs","repos_url":"https://api.github.com/users/waywardgeek/repos","events_url":"https://api.github.com/users/waywardgeek/events{/privacy}","received_events_url":"https://api.github.com/users/waywardgeek/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/waywardgeek/openssl","description":"TLS/SSL and crypto library","fork":true,"url":"https://api.github.com/repos/waywardgeek/openssl","forks_url":"https://api.github.com/repos/waywardgeek/openssl/forks","keys_url":"https://api.github.com/repos/waywardgeek/openssl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/waywardgeek/openssl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/waywardgeek/openssl/teams","hooks_url":"https://api.github.com/repos/waywardgeek/openssl/hooks","issue_events_url":"https://api.github.com/repos/waywardgeek/openssl/issues/events{/number}","events_url":"https://api.github.com/repos/waywardgeek/openssl/events","assignees_url":"https://api.github.com/repos/waywardgeek/openssl/assignees{/user}","branches_url":"https://api.github.com/repos/waywardgeek/openssl/branches{/branch}","tags_url":"https://api.github.com/repos/waywardgeek/openssl/tags","blobs_url":"https://api.github.com/repos/waywardgeek/openssl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/waywardgeek/openssl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/waywardgeek/openssl/git/refs{/sha}","trees_url":"https://api.github.com/repos/waywardgeek/openssl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/waywardgeek/openssl/statuses/{sha}","languages_url":"https://api.github.com/repos/waywardgeek/openssl/languages","stargazers_url":"https://api.github.com/repos/waywardgeek/openssl/stargazers","contributors_url":"https://api.github.com/repos/waywardgeek/openssl/contributors","subscribers_url":"https://api.github.com/repos/waywardgeek/openssl/subscribers","subscription_url":"https://api.github.com/repos/waywardgeek/openssl/subscription","commits_url":"https://api.github.com/repos/waywardgeek/openssl/commits{/sha}","git_commits_url":"https://api.github.com/repos/waywardgeek/openssl/git/commits{/sha}","comments_url":"https://api.github.com/repos/waywardgeek/openssl/comments{/number}","issue_comment_url":"https://api.github.com/repos/waywardgeek/openssl/issues/comments{/number}","contents_url":"https://api.github.com/repos/waywardgeek/openssl/contents/{+path}","compare_url":"https://api.github.com/repos/waywardgeek/openssl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/waywardgeek/openssl/merges","archive_url":"https://api.github.com/repos/waywardgeek/openssl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/waywardgeek/openssl/downloads","issues_url":"https://api.github.com/repos/waywardgeek/openssl/issues{/number}","pulls_url":"https://api.github.com/repos/waywardgeek/openssl/pulls{/number}","milestones_url":"https://api.github.com/repos/waywardgeek/openssl/milestones{/number}","notifications_url":"https://api.github.com/repos/waywardgeek/openssl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/waywardgeek/openssl/labels{/name}","releases_url":"https://api.github.com/repos/waywardgeek/openssl/releases{/id}","deployments_url":"https://api.github.com/repos/waywardgeek/openssl/deployments","created_at":"2016-01-16T15:17:02Z","updated_at":"2016-01-16T15:17:13Z","pushed_at":"2016-03-01T01:10:27Z","git_url":"git://github.com/waywardgeek/openssl.git","ssh_url":"git@github.com:waywardgeek/openssl.git","clone_url":"https://github.com/waywardgeek/openssl.git","svn_url":"https://github.com/waywardgeek/openssl","homepage":"https://www.openssl.org","size":82407,"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":"openssl:master","ref":"master","sha":"edae9834b6eeeb7af8839187a6de82131991ec4b","user":{"login":"openssl","id":3279138,"avatar_url":"https://avatars.githubusercontent.com/u/3279138?v=3","gravatar_id":"","url":"https://api.github.com/users/openssl","html_url":"https://github.com/openssl","followers_url":"https://api.github.com/users/openssl/followers","following_url":"https://api.github.com/users/openssl/following{/other_user}","gists_url":"https://api.github.com/users/openssl/gists{/gist_id}","starred_url":"https://api.github.com/users/openssl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openssl/subscriptions","organizations_url":"https://api.github.com/users/openssl/orgs","repos_url":"https://api.github.com/users/openssl/repos","events_url":"https://api.github.com/users/openssl/events{/privacy}","received_events_url":"https://api.github.com/users/openssl/received_events","type":"Organization","site_admin":false},"repo":{"id":7634677,"name":"openssl","full_name":"openssl/openssl","owner":{"login":"openssl","id":3279138,"avatar_url":"https://avatars.githubusercontent.com/u/3279138?v=3","gravatar_id":"","url":"https://api.github.com/users/openssl","html_url":"https://github.com/openssl","followers_url":"https://api.github.com/users/openssl/followers","following_url":"https://api.github.com/users/openssl/following{/other_user}","gists_url":"https://api.github.com/users/openssl/gists{/gist_id}","starred_url":"https://api.github.com/users/openssl/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/openssl/subscriptions","organizations_url":"https://api.github.com/users/openssl/orgs","repos_url":"https://api.github.com/users/openssl/repos","events_url":"https://api.github.com/users/openssl/events{/privacy}","received_events_url":"https://api.github.com/users/openssl/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/openssl/openssl","description":"TLS/SSL and crypto library","fork":false,"url":"https://api.github.com/repos/openssl/openssl","forks_url":"https://api.github.com/repos/openssl/openssl/forks","keys_url":"https://api.github.com/repos/openssl/openssl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/openssl/openssl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/openssl/openssl/teams","hooks_url":"https://api.github.com/repos/openssl/openssl/hooks","issue_events_url":"https://api.github.com/repos/openssl/openssl/issues/events{/number}","events_url":"https://api.github.com/repos/openssl/openssl/events","assignees_url":"https://api.github.com/repos/openssl/openssl/assignees{/user}","branches_url":"https://api.github.com/repos/openssl/openssl/branches{/branch}","tags_url":"https://api.github.com/repos/openssl/openssl/tags","blobs_url":"https://api.github.com/repos/openssl/openssl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/openssl/openssl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/openssl/openssl/git/refs{/sha}","trees_url":"https://api.github.com/repos/openssl/openssl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/openssl/openssl/statuses/{sha}","languages_url":"https://api.github.com/repos/openssl/openssl/languages","stargazers_url":"https://api.github.com/repos/openssl/openssl/stargazers","contributors_url":"https://api.github.com/repos/openssl/openssl/contributors","subscribers_url":"https://api.github.com/repos/openssl/openssl/subscribers","subscription_url":"https://api.github.com/repos/openssl/openssl/subscription","commits_url":"https://api.github.com/repos/openssl/openssl/commits{/sha}","git_commits_url":"https://api.github.com/repos/openssl/openssl/git/commits{/sha}","comments_url":"https://api.github.com/repos/openssl/openssl/comments{/number}","issue_comment_url":"https://api.github.com/repos/openssl/openssl/issues/comments{/number}","contents_url":"https://api.github.com/repos/openssl/openssl/contents/{+path}","compare_url":"https://api.github.com/repos/openssl/openssl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/openssl/openssl/merges","archive_url":"https://api.github.com/repos/openssl/openssl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/openssl/openssl/downloads","issues_url":"https://api.github.com/repos/openssl/openssl/issues{/number}","pulls_url":"https://api.github.com/repos/openssl/openssl/pulls{/number}","milestones_url":"https://api.github.com/repos/openssl/openssl/milestones{/number}","notifications_url":"https://api.github.com/repos/openssl/openssl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/openssl/openssl/labels{/name}","releases_url":"https://api.github.com/repos/openssl/openssl/releases{/id}","deployments_url":"https://api.github.com/repos/openssl/openssl/deployments","created_at":"2013-01-15T22:34:48Z","updated_at":"2016-03-07T22:18:00Z","pushed_at":"2016-03-07T23:40:50Z","git_url":"git://github.com/openssl/openssl.git","ssh_url":"git@github.com:openssl/openssl.git","clone_url":"https://github.com/openssl/openssl.git","svn_url":"https://github.com/openssl/openssl","homepage":"https://www.openssl.org","size":91434,"stargazers_count":2244,"watchers_count":2244,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":1296,"mirror_url":null,"open_issues_count":141,"forks":1296,"open_issues":141,"watchers":2244,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openssl/openssl/pulls/566"},"html":{"href":"https://github.com/openssl/openssl/pull/566"},"issue":{"href":"https://api.github.com/repos/openssl/openssl/issues/566"},"comments":{"href":"https://api.github.com/repos/openssl/openssl/issues/566/comments"},"review_comments":{"href":"https://api.github.com/repos/openssl/openssl/pulls/566/comments"},"review_comment":{"href":"https://api.github.com/repos/openssl/openssl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openssl/openssl/pulls/566/commits"},"statuses":{"href":"https://api.github.com/repos/openssl/openssl/statuses/790f00e0884c0e53e12de9906412fba65a9ccd33"}}}}