{"action":"created","comment":{"url":"https://api.github.com/repos/openssl/openssl/pulls/comments/185519047","pull_request_review_id":116924125,"id":185519047,"diff_hunk":"@@ -28,111 +36,415 @@\n #  error \"Unsupported seeding method configured; must be os\"\n # endif\n \n-/*\n- * Use 32-bit pointers almost everywhere.  Define the type to which to cast a\n- * pointer passed to an external function.\n- */\n+/* We need to make sure we have the right size pointer in some cases */\n # if __INITIAL_POINTER_SIZE == 64\n-#  define PTR_T __void_ptr64\n #  pragma pointer_size save\n #  pragma pointer_size 32\n-# else\n-#  define PTR_T void *\n+# endif\n+typedef uint32_t *uint32_t__ptr32;\n+# if __INITIAL_POINTER_SIZE == 64\n+#  pragma pointer_size restore\n # endif\n \n-static struct items_data_st {\n+struct item_st {\n     short length, code;         /* length is number of bytes */\n-} items_data[] = {\n-    {4, JPI$_BUFIO},\n-    {4, JPI$_CPUTIM},\n-    {4, JPI$_DIRIO},\n-    {4, JPI$_IMAGECOUNT},\n-    {8, JPI$_LAST_LOGIN_I},\n-    {8, JPI$_LOGINTIM},\n-    {4, JPI$_PAGEFLTS},\n-    {4, JPI$_PID},\n-    {4, JPI$_PPGCNT},\n-    {4, JPI$_WSPEAK},\n-    {4, JPI$_FINALEXC},\n-    {0, 0}\n };\n \n+static const struct item_st DVI_item_data[] = {\n+    {4,   DVI$_ERRCNT},\n+    {4,   DVI$_REFCNT},\n+};\n+\n+static const struct item_st JPI_item_data[] = {\n+    {4,   JPI$_BUFIO},\n+    {4,   JPI$_CPUTIM},\n+    {4,   JPI$_DIRIO},\n+    {4,   JPI$_IMAGECOUNT},\n+    {4,   JPI$_PAGEFLTS},\n+    {4,   JPI$_PID},\n+    {4,   JPI$_PPGCNT},\n+    {4,   JPI$_WSPEAK},\n+    /*\n+     * Note: the direct result is just a 32-bit address.  However, it points\n+     * to a list of 4 32-bit words, so we make extra space for them so we can\n+     * do in-place replacement of values\n+     */\n+    {16,  JPI$_FINALEXC},\n+};\n+\n+static const struct item_st JPI_item_data_64bit[] = {\n+    {8,   JPI$_LAST_LOGIN_I},\n+    {8,   JPI$_LOGINTIM},\n+};\n+\n+static const struct item_st RMI_item_data[] = {\n+    {4,   RMI$_COLPG},\n+    {4,   RMI$_MWAIT},\n+    {4,   RMI$_CEF},\n+    {4,   RMI$_PFW},\n+    {4,   RMI$_LEF},\n+    {4,   RMI$_LEFO},\n+    {4,   RMI$_HIB},\n+    {4,   RMI$_HIBO},\n+    {4,   RMI$_SUSP},\n+    {4,   RMI$_SUSPO},\n+    {4,   RMI$_FPG},\n+    {4,   RMI$_COM},\n+    {4,   RMI$_COMO},\n+    {4,   RMI$_CUR},\n+#if defined __alpha\n+    {4,   RMI$_FRLIST},\n+    {4,   RMI$_MODLIST},\n+#endif\n+    {4,   RMI$_FAULTS},\n+    {4,   RMI$_PREADS},\n+    {4,   RMI$_PWRITES},\n+    {4,   RMI$_PWRITIO},\n+    {4,   RMI$_PREADIO},\n+    {4,   RMI$_GVALFLTS},\n+    {4,   RMI$_WRTINPROG},\n+    {4,   RMI$_FREFLTS},\n+    {4,   RMI$_DZROFLTS},\n+    {4,   RMI$_SYSFAULTS},\n+    {4,   RMI$_ISWPCNT},\n+    {4,   RMI$_DIRIO},\n+    {4,   RMI$_BUFIO},\n+    {4,   RMI$_MBREADS},\n+    {4,   RMI$_MBWRITES},\n+    {4,   RMI$_LOGNAM},\n+    {4,   RMI$_FCPCALLS},\n+    {4,   RMI$_FCPREAD},\n+    {4,   RMI$_FCPWRITE},\n+    {4,   RMI$_FCPCACHE},\n+    {4,   RMI$_FCPCPU},\n+    {4,   RMI$_FCPHIT},\n+    {4,   RMI$_FCPSPLIT},\n+    {4,   RMI$_FCPFAULT},\n+    {4,   RMI$_ENQNEW},\n+    {4,   RMI$_ENQCVT},\n+    {4,   RMI$_DEQ},\n+    {4,   RMI$_BLKAST},\n+    {4,   RMI$_ENQWAIT},\n+    {4,   RMI$_ENQNOTQD},\n+    {4,   RMI$_DLCKSRCH},\n+    {4,   RMI$_DLCKFND},\n+    {4,   RMI$_NUMLOCKS},\n+    {4,   RMI$_NUMRES},\n+    {4,   RMI$_ARRLOCPK},\n+    {4,   RMI$_DEPLOCPK},\n+    {4,   RMI$_ARRTRAPK},\n+    {4,   RMI$_TRCNGLOS},\n+    {4,   RMI$_RCVBUFFL},\n+    {4,   RMI$_ENQNEWLOC},\n+    {4,   RMI$_ENQNEWIN},\n+    {4,   RMI$_ENQNEWOUT},\n+    {4,   RMI$_ENQCVTLOC},\n+    {4,   RMI$_ENQCVTIN},\n+    {4,   RMI$_ENQCVTOUT},\n+    {4,   RMI$_DEQLOC},\n+    {4,   RMI$_DEQIN},\n+    {4,   RMI$_DEQOUT},\n+    {4,   RMI$_BLKLOC},\n+    {4,   RMI$_BLKIN},\n+    {4,   RMI$_BLKOUT},\n+    {4,   RMI$_DIRIN},\n+    {4,   RMI$_DIROUT},\n+    /* We currently get a fault when trying these.  TODO: To be figured out. */\n+#if 0\n+    {140, RMI$_MSCP_EVERYTHING},   /* 35 32-bit words */\n+    {152, RMI$_DDTM_ALL},          /* 38 32-bit words */\n+    {80,  RMI$_TMSCP_EVERYTHING}   /* 20 32-bit words */\n+#endif\n+    {4,   RMI$_LPZ_PAGCNT},\n+    {4,   RMI$_LPZ_HITS},\n+    {4,   RMI$_LPZ_MISSES},\n+    {4,   RMI$_LPZ_EXPCNT},\n+    {4,   RMI$_LPZ_ALLOCF},\n+    {4,   RMI$_LPZ_ALLOC2},\n+    {4,   RMI$_ACCESS},\n+    {4,   RMI$_ALLOC},\n+    {4,   RMI$_FCPCREATE},\n+    {4,   RMI$_VOLWAIT},\n+    {4,   RMI$_FCPTURN},\n+    {4,   RMI$_FCPERASE},\n+    {4,   RMI$_OPENS},\n+    {4,   RMI$_FIDHIT},\n+    {4,   RMI$_FIDMISS},\n+    {4,   RMI$_FILHDR_HIT},\n+    {4,   RMI$_DIRFCB_HIT},\n+    {4,   RMI$_DIRFCB_MISS},\n+    {4,   RMI$_DIRDATA_HIT},\n+    {4,   RMI$_EXTHIT},\n+    {4,   RMI$_EXTMISS},\n+    {4,   RMI$_QUOHIT},\n+    {4,   RMI$_QUOMISS},\n+    {4,   RMI$_STORAGMAP_HIT},\n+    {4,   RMI$_VOLLCK},\n+    {4,   RMI$_SYNCHLCK},\n+    {4,   RMI$_SYNCHWAIT},\n+    {4,   RMI$_ACCLCK},\n+    {4,   RMI$_XQPCACHEWAIT},\n+    {4,   RMI$_DIRDATA_MISS},\n+    {4,   RMI$_FILHDR_MISS},\n+    {4,   RMI$_STORAGMAP_MISS},\n+    {4,   RMI$_PROCCNTMAX},\n+    {4,   RMI$_PROCBATCNT},\n+    {4,   RMI$_PROCINTCNT},\n+    {4,   RMI$_PROCNETCNT},\n+    {4,   RMI$_PROCSWITCHCNT},\n+    {4,   RMI$_PROCBALSETCNT},\n+    {4,   RMI$_PROCLOADCNT},\n+    {4,   RMI$_BADFLTS},\n+    {4,   RMI$_EXEFAULTS},\n+    {4,   RMI$_HDRINSWAPS},\n+    {4,   RMI$_HDROUTSWAPS},\n+    {4,   RMI$_IOPAGCNT},\n+    {4,   RMI$_ISWPCNTPG},\n+    {4,   RMI$_OSWPCNT},\n+    {4,   RMI$_OSWPCNTPG},\n+    {4,   RMI$_RDFAULTS},\n+    {4,   RMI$_TRANSFLTS},\n+    {4,   RMI$_WRTFAULTS},\n+#if defined __alpha\n+    {4,   RMI$_USERPAGES},\n+#endif\n+    {4,   RMI$_VMSPAGES},\n+    {4,   RMI$_TTWRITES},\n+    {4,   RMI$_BUFOBJPAG},\n+    {4,   RMI$_BUFOBJPAGPEAK},\n+    {4,   RMI$_BUFOBJPAGS01},\n+    {4,   RMI$_BUFOBJPAGS2},\n+    {4,   RMI$_BUFOBJPAGMAXS01},\n+    {4,   RMI$_BUFOBJPAGMAXS2},\n+    {4,   RMI$_BUFOBJPAGPEAKS01},\n+    {4,   RMI$_BUFOBJPAGPEAKS2},\n+    {4,   RMI$_BUFOBJPGLTMAXS01},\n+    {4,   RMI$_BUFOBJPGLTMAXS2},\n+    {4,   RMI$_DLCK_INCMPLT},\n+    {4,   RMI$_DLCKMSGS_IN},\n+    {4,   RMI$_DLCKMSGS_OUT},\n+    {4,   RMI$_MCHKERRS},\n+    {4,   RMI$_MEMERRS},\n+};\n+\n+static const struct item_st RMI_item_data_64bit[] = {\n+#if defined __ia64\n+    {8,   RMI$_FRLIST},\n+    {8,   RMI$_MODLIST},\n+#endif\n+    {8,   RMI$_LCKMGR_REQCNT},\n+    {8,   RMI$_LCKMGR_REQTIME},\n+    {8,   RMI$_LCKMGR_SPINCNT},\n+    {8,   RMI$_LCKMGR_SPINTIME},\n+    {8,   RMI$_CPUINTSTK},\n+    {8,   RMI$_CPUMPSYNCH},\n+    {8,   RMI$_CPUKERNEL},\n+    {8,   RMI$_CPUEXEC},\n+    {8,   RMI$_CPUSUPER},\n+    {8,   RMI$_CPUUSER},\n+#if defined __ia64\n+    {8,   RMI$_USERPAGES},\n+#endif\n+    {8,   RMI$_TQETOTAL},\n+    {8,   RMI$_TQESYSUB},\n+    {8,   RMI$_TQEUSRTIMR},\n+    {8,   RMI$_TQEUSRWAKE},\n+};\n+\n+static const struct item_st SYI_item_data[] = {\n+    {4,   SYI$_PAGEFILE_FREE},\n+};\n+\n+/*\n+ * Input:\n+ * items_data           - an array of lengths and codes\n+ * items_data_num       - number of elements in that array\n+ *\n+ * Output:\n+ * items                - pre-allocated ILE3 array to be filled.\n+ *                        It's assume to have items_data_num elements plus\n+ *                        one extra for the terminating NULL element\n+ * databuffer           - pre-allocated 32-bit word array.\n+ *\n+ * Returns the number of bytes used in databuffer\n+ */\n+static size_t prepare_item_list(const struct item_st *items_input,\n+                                size_t items_input_num,\n+                                ILE3 *items,\n+                                uint32_t__ptr32 databuffer)\n+{\n+    const struct item_st *pitems_input;\n+    ILE3 *pitems;\n+    size_t data_sz = 0;\n+\n+    for (pitems_input = items_input, pitems = items;\n+         items_input_num-- > 0;\n+         pitems_input++, pitems++) {\n+\n+        /* Special treatment of JPI$_FINALEXC */\n+        if (pitems->ile3$w_code == JPI$_FINALEXC)\n+            pitems->ile3$w_length = 4;\n+        else\n+            pitems->ile3$w_length = pitems_input->length;\n+\n+        pitems->ile3$w_code = pitems_input->code;\n+        pitems->ile3$ps_bufaddr = databuffer;\n+        pitems->ile3$ps_retlen_addr = 0;\n+\n+        databuffer += pitems_input->length / sizeof(*databuffer);\n+        data_sz += pitems_input->length;\n+    }\n+    /* Terminating NULL entry */\n+    pitems->ile3$w_length = pitems->ile3$w_code = 0;\n+\n+    return data_sz;\n+}\n+\n+static void massage_JPI(ILE3 *items)\n+{\n+    /*\n+     * Special treatment of JPI$_FINALEXC\n+     * The result of that item's data buffer is a 32-bit address to a list of\n+     * 4 32-bit words.\n+     */\n+    for (; items->ile3$w_length != 0; items++) {\n+        if (items->ile3$w_code == JPI$_FINALEXC) {\n+            uint32_t *data = items->ile3$ps_bufaddr;\n+            uint32_t *ptr = (uint32_t *)*data;\n+            size_t j;\n+\n+            /*\n+             * We know we made space for 4 32-bit words, so we can do in-place\n+             * replacement.\n+             */\n+            for (j = 0; j < 4; j++)\n+                data[j] = ptr[j];\n+\n+            break;\n+        }\n+    }\n+}\n+\n /*\n  * This number expresses how many bits of data contain 1 bit of entropy.\n  *\n- * For the moment, we assume about 0.5 entropy bits per data bit, or 1\n- * bit of entropy per 2 data bits.\n+ * For the moment, we assume about 0.05 entropy bits per data bit, or 1\n+ * bit of entropy per 20 data bits.\n  */\n-#define ENTROPY_FACTOR  2\n+#define ENTROPY_FACTOR  20\n \n size_t rand_pool_acquire_entropy(RAND_POOL *pool)\n {\n-    /* determine the number of items in the JPI array */\n-    struct items_data_st item_entry;\n-    size_t item_entry_count = OSSL_NELEM(items_data);\n-    /* Create the 32-bit JPI itemlist array to hold item_data content */\n-    struct {\n-        uint16_t length, code;\n-        uint32_t *buffer;\n-        uint32_t *retlen;\n-    } item[item_entry_count], *pitem;\n-    struct items_data_st *pitems_data;\n-    /* 8 bytes (two longs) per entry max */\n-    uint32_t data_buffer[(item_entry_count * 2) + 4];\n-    uint32_t iosb[2];\n-    uint32_t sys_time[2];\n-    uint32_t *ptr;\n-    size_t i, j ;\n-    size_t tmp_length   = 0;\n+    ILE3 JPI_items_64bit[OSSL_NELEM(JPI_item_data) + 1];\n+    ILE3 RMI_items_64bit[OSSL_NELEM(RMI_item_data) + 1];\n+    uint32_t data_buffer_64bit[OSSL_NELEM(JPI_item_data_64bit) * 2\n+                               + OSSL_NELEM(RMI_item_data_64bit) * 2];\n+    size_t total_length_64bit = 0;\n+    ILE3 DVI_items[OSSL_NELEM(DVI_item_data) + 1];\n+    ILE3 JPI_items[OSSL_NELEM(JPI_item_data) + 1];\n+    ILE3 RMI_items[OSSL_NELEM(RMI_item_data) + 1];\n+    ILE3 SYI_items[OSSL_NELEM(SYI_item_data) + 1];\n+    uint32_t data_buffer[OSSL_NELEM(DVI_item_data)\n+                         + OSSL_NELEM(JPI_item_data)\n+                         + OSSL_NELEM(RMI_item_data)\n+                         + OSSL_NELEM(SYI_item_data)\n+                         + 4 /* For JPI$_FINALEXC */ ];\n     size_t total_length = 0;\n     size_t bytes_needed = rand_pool_bytes_needed(pool, ENTROPY_FACTOR);\n     size_t bytes_remaining = rand_pool_bytes_remaining(pool);\n \n-    /* Setup itemlist for GETJPI */\n-    pitems_data = items_data;\n-    for (pitem = item; pitems_data->length != 0; pitem++) {\n-        pitem->length = pitems_data->length;\n-        pitem->code   = pitems_data->code;\n-        pitem->buffer = &data_buffer[total_length];\n-        pitem->retlen = 0;\n-        /* total_length is in longwords */\n-        total_length += pitems_data->length / 4;\n-        pitems_data++;\n-    }\n-    pitem->length = pitem->code = 0;\n+    /* Take all the 64-bit items first, to avoid possible alignment problems */\n+    total_length_64bit +=\n+        prepare_item_list(JPI_item_data_64bit, OSSL_NELEM(JPI_item_data_64bit),\n+                          JPI_items_64bit,\n+                          &data_buffer_64bit[total_length_64bit]);\n+    total_length_64bit +=\n+        prepare_item_list(RMI_item_data_64bit, OSSL_NELEM(RMI_item_data_64bit),\n+                          RMI_items_64bit,\n+                          &data_buffer_64bit[total_length_64bit]);\n+    /* Now the 32-bit items */\n+    total_length += prepare_item_list(DVI_item_data, OSSL_NELEM(DVI_item_data),\n+                                      DVI_items, &data_buffer[total_length]);","path":"crypto/rand/rand_vms.c","position":411,"original_position":411,"commit_id":"28cc610367925b3f5f7ae0c883e137d03978ea5d","original_commit_id":"28cc610367925b3f5f7ae0c883e137d03978ea5d","user":{"login":"dot-asm","id":9038069,"avatar_url":"https://avatars2.githubusercontent.com/u/9038069?v=4","gravatar_id":"","url":"https://api.github.com/users/dot-asm","html_url":"https://github.com/dot-asm","followers_url":"https://api.github.com/users/dot-asm/followers","following_url":"https://api.github.com/users/dot-asm/following{/other_user}","gists_url":"https://api.github.com/users/dot-asm/gists{/gist_id}","starred_url":"https://api.github.com/users/dot-asm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dot-asm/subscriptions","organizations_url":"https://api.github.com/users/dot-asm/orgs","repos_url":"https://api.github.com/users/dot-asm/repos","events_url":"https://api.github.com/users/dot-asm/events{/privacy}","received_events_url":"https://api.github.com/users/dot-asm/received_events","type":"User","site_admin":false},"body":"Wait a sec! total_length is in bytes, so where would &data_buffer[total_length] point? There ought to be your crash. I mean maybe it wasn't about alignment after all...","created_at":"2018-05-02T14:38:20Z","updated_at":"2018-05-02T14:38:20Z","html_url":"https://github.com/openssl/openssl/pull/6151#discussion_r185519047","pull_request_url":"https://api.github.com/repos/openssl/openssl/pulls/6151","author_association":"OWNER","_links":{"self":{"href":"https://api.github.com/repos/openssl/openssl/pulls/comments/185519047"},"html":{"href":"https://github.com/openssl/openssl/pull/6151#discussion_r185519047"},"pull_request":{"href":"https://api.github.com/repos/openssl/openssl/pulls/6151"}}},"pull_request":{"url":"https://api.github.com/repos/openssl/openssl/pulls/6151","id":185333673,"html_url":"https://github.com/openssl/openssl/pull/6151","diff_url":"https://github.com/openssl/openssl/pull/6151.diff","patch_url":"https://github.com/openssl/openssl/pull/6151.patch","issue_url":"https://api.github.com/repos/openssl/openssl/issues/6151","number":6151,"state":"open","locked":false,"title":"VMS: modernise rand_pool_acquire_entropy","user":{"login":"levitte","id":698918,"avatar_url":"https://avatars1.githubusercontent.com/u/698918?v=4","gravatar_id":"","url":"https://api.github.com/users/levitte","html_url":"https://github.com/levitte","followers_url":"https://api.github.com/users/levitte/followers","following_url":"https://api.github.com/users/levitte/following{/other_user}","gists_url":"https://api.github.com/users/levitte/gists{/gist_id}","starred_url":"https://api.github.com/users/levitte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/levitte/subscriptions","organizations_url":"https://api.github.com/users/levitte/orgs","repos_url":"https://api.github.com/users/levitte/repos","events_url":"https://api.github.com/users/levitte/events{/privacy}","received_events_url":"https://api.github.com/users/levitte/received_events","type":"User","site_admin":false},"body":"Stop redefining structures that are already defined in system\r\nheaders.  This also means we can stop setting the pointer size\r\nglobally, because the system structures will have the correct pointer\r\nsizes either way.  The only exception is passing the right pointer\r\nsize to a function.\r\n\r\nStop trying to twist things around with rand(), that's the job of the\r\nDRBG that we feed.\r\n\r\nStop assuming the location of the JPI$_FINALEXC item, look it up\r\ninstead.\r\n\r\nSignal an exception if the sys$getjpiw call fails (it means the item\r\nlist isn't set up right, so works as an assertion, but using VMS\r\nmethodology).\r\n\r\nAdd more items that could serve as entropy source.","created_at":"2018-05-02T04:38:33Z","updated_at":"2018-05-02T14:38:20Z","closed_at":null,"merged_at":null,"merge_commit_sha":"db458bddaf634798959ac97d0918f7791e6a75fc","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":872237503,"url":"https://api.github.com/repos/openssl/openssl/labels/1.1.1","name":"1.1.1","color":"bfdadc","default":false},{"id":441165144,"url":"https://api.github.com/repos/openssl/openssl/labels/master","name":"master","color":"bfdadc","default":false}],"milestone":null,"commits_url":"https://api.github.com/repos/openssl/openssl/pulls/6151/commits","review_comments_url":"https://api.github.com/repos/openssl/openssl/pulls/6151/comments","review_comment_url":"https://api.github.com/repos/openssl/openssl/pulls/comments{/number}","comments_url":"https://api.github.com/repos/openssl/openssl/issues/6151/comments","statuses_url":"https://api.github.com/repos/openssl/openssl/statuses/28cc610367925b3f5f7ae0c883e137d03978ea5d","head":{"label":"levitte:VMS-modernise-rand-gathering","ref":"VMS-modernise-rand-gathering","sha":"28cc610367925b3f5f7ae0c883e137d03978ea5d","user":{"login":"levitte","id":698918,"avatar_url":"https://avatars1.githubusercontent.com/u/698918?v=4","gravatar_id":"","url":"https://api.github.com/users/levitte","html_url":"https://github.com/levitte","followers_url":"https://api.github.com/users/levitte/followers","following_url":"https://api.github.com/users/levitte/following{/other_user}","gists_url":"https://api.github.com/users/levitte/gists{/gist_id}","starred_url":"https://api.github.com/users/levitte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/levitte/subscriptions","organizations_url":"https://api.github.com/users/levitte/orgs","repos_url":"https://api.github.com/users/levitte/repos","events_url":"https://api.github.com/users/levitte/events{/privacy}","received_events_url":"https://api.github.com/users/levitte/received_events","type":"User","site_admin":false},"repo":{"id":22960861,"name":"openssl","full_name":"levitte/openssl","owner":{"login":"levitte","id":698918,"avatar_url":"https://avatars1.githubusercontent.com/u/698918?v=4","gravatar_id":"","url":"https://api.github.com/users/levitte","html_url":"https://github.com/levitte","followers_url":"https://api.github.com/users/levitte/followers","following_url":"https://api.github.com/users/levitte/following{/other_user}","gists_url":"https://api.github.com/users/levitte/gists{/gist_id}","starred_url":"https://api.github.com/users/levitte/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/levitte/subscriptions","organizations_url":"https://api.github.com/users/levitte/orgs","repos_url":"https://api.github.com/users/levitte/repos","events_url":"https://api.github.com/users/levitte/events{/privacy}","received_events_url":"https://api.github.com/users/levitte/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/levitte/openssl","description":null,"fork":true,"url":"https://api.github.com/repos/levitte/openssl","forks_url":"https://api.github.com/repos/levitte/openssl/forks","keys_url":"https://api.github.com/repos/levitte/openssl/keys{/key_id}","collaborators_url":"https://api.github.com/repos/levitte/openssl/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/levitte/openssl/teams","hooks_url":"https://api.github.com/repos/levitte/openssl/hooks","issue_events_url":"https://api.github.com/repos/levitte/openssl/issues/events{/number}","events_url":"https://api.github.com/repos/levitte/openssl/events","assignees_url":"https://api.github.com/repos/levitte/openssl/assignees{/user}","branches_url":"https://api.github.com/repos/levitte/openssl/branches{/branch}","tags_url":"https://api.github.com/repos/levitte/openssl/tags","blobs_url":"https://api.github.com/repos/levitte/openssl/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/levitte/openssl/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/levitte/openssl/git/refs{/sha}","trees_url":"https://api.github.com/repos/levitte/openssl/git/trees{/sha}","statuses_url":"https://api.github.com/repos/levitte/openssl/statuses/{sha}","languages_url":"https://api.github.com/repos/levitte/openssl/languages","stargazers_url":"https://api.github.com/repos/levitte/openssl/stargazers","contributors_url":"https://api.github.com/repos/levitte/openssl/contributors","subscribers_url":"https://api.github.com/repos/levitte/openssl/subscribers","subscription_url":"https://api.github.com/repos/levitte/openssl/subscription","commits_url":"https://api.github.com/repos/levitte/openssl/commits{/sha}","git_commits_url":"https://api.github.com/repos/levitte/openssl/git/commits{/sha}","comments_url":"https://api.github.com/repos/levitte/openssl/comments{/number}","issue_comment_url":"https://api.github.com/repos/levitte/openssl/issues/comments{/number}","contents_url":"https://api.github.com/repos/levitte/openssl/contents/{+path}","compare_url":"https://api.github.com/repos/levitte/openssl/compare/{base}...{head}","merges_url":"https://api.github.com/repos/levitte/openssl/merges","archive_url":"https://api.github.com/repos/levitte/openssl/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/levitte/openssl/downloads","issues_url":"https://api.github.com/repos/levitte/openssl/issues{/number}","pulls_url":"https://api.github.com/repos/levitte/openssl/pulls{/number}","milestones_url":"https://api.github.com/repos/levitte/openssl/milestones{/number}","notifications_url":"https://api.github.com/repos/levitte/openssl/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/levitte/openssl/labels{/name}","releases_url":"https://api.github.com/repos/levitte/openssl/releases{/id}","deployments_url":"https://api.github.com/repos/levitte/openssl/deployments","created_at":"2014-08-14T16:32:56Z","updated_at":"2017-07-15T16:59:17Z","pushed_at":"2018-05-02T14:22:55Z","git_url":"git://github.com/levitte/openssl.git","ssh_url":"git@github.com:levitte/openssl.git","clone_url":"https://github.com/levitte/openssl.git","svn_url":"https://github.com/levitte/openssl","homepage":"","size":148339,"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":1,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"openssl:master","ref":"master","sha":"6ebb49f3f9c9333611192561979bb799fa1eb76d","user":{"login":"openssl","id":3279138,"avatar_url":"https://avatars2.githubusercontent.com/u/3279138?v=4","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://avatars2.githubusercontent.com/u/3279138?v=4","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":"2018-05-02T09:14:03Z","pushed_at":"2018-05-02T14:22:59Z","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":146800,"stargazers_count":6976,"watchers_count":6976,"language":"C","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":3410,"mirror_url":null,"archived":false,"open_issues_count":362,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":3410,"open_issues":362,"watchers":6976,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/openssl/openssl/pulls/6151"},"html":{"href":"https://github.com/openssl/openssl/pull/6151"},"issue":{"href":"https://api.github.com/repos/openssl/openssl/issues/6151"},"comments":{"href":"https://api.github.com/repos/openssl/openssl/issues/6151/comments"},"review_comments":{"href":"https://api.github.com/repos/openssl/openssl/pulls/6151/comments"},"review_comment":{"href":"https://api.github.com/repos/openssl/openssl/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/openssl/openssl/pulls/6151/commits"},"statuses":{"href":"https://api.github.com/repos/openssl/openssl/statuses/28cc610367925b3f5f7ae0c883e137d03978ea5d"}},"author_association":"OWNER"}}
{"actor":{"display_login":"dot-asm"}}