{"action":"created","comment":{"url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/comments/179766374","pull_request_review_id":110073950,"id":179766374,"diff_hunk":"@@ -0,0 +1,879 @@\n+/* gost.c - an implementation of GOST Hash Function\n+ * based on the Russian Standard GOST R 34.11-94.\n+ * See also RFC 4357.\n+ *\n+ * Copyright: 2009-2012 Aleksey Kravchenko <rhash.admin@gmail.com>\n+ *\n+ * Permission is hereby granted,  free of charge,  to any person  obtaining a\n+ * copy of this software and associated documentation files (the \"Software\"),\n+ * to deal in the Software without restriction,  including without limitation\n+ * the rights to  use, copy, modify,  merge, publish, distribute, sublicense,\n+ * and/or sell copies  of  the Software,  and to permit  persons  to whom the\n+ * Software is furnished to do so.\n+ *\n+ * This program  is  distributed  in  the  hope  that it will be useful,  but\n+ * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n+ * or FITNESS FOR A PARTICULAR PURPOSE.  Use this program  at  your own risk!\n+ * https://github.com/rhash/RHash/blob/master/librhash/gost.c\n+ */\n+\n+#include <cstring>\n+#include \"../whirlpool/byte_order.h\"\n+#include \"gost.h\"\n+\n+extern unsigned rhash_gost_sbox[4][256];\n+extern unsigned rhash_gost_sbox_cryptpro[4][256];\n+\n+/**\n+ * Initialize algorithm context before calculaing hash\n+ * with test parameters set.\n+ *\n+ * @param ctx context to initialize\n+ */\n+void rhash_gost_init(gost_ctx *ctx)\n+{\n+    memset(ctx, 0, sizeof(gost_ctx));\n+}\n+\n+/**\n+ * Initialize GOST algorithm context with CryptoPro parameter set.\n+ *\n+ * @param ctx context to initialize\n+ */\n+void rhash_gost_cryptopro_init(gost_ctx *ctx)\n+{\n+    rhash_gost_init(ctx);\n+    ctx->cryptpro = 1;\n+}\n+\n+#if defined(__GNUC__) && defined(CPU_IA32) && !defined(__clang__) && !defined(RHASH_NO_ASM)\n+# define USE_GCC_ASM_IA32\n+#elif defined(__GNUC__) && defined(CPU_X64) && !defined(RHASH_NO_ASM)\n+# define USE_GCC_ASM_X64\n+#endif\n+\n+/*\n+ *  A macro that performs a full encryption round of GOST 28147-89.\n+ *  Temporary variables tmp assumed and variables r and l for left and right\n+ *  blocks.\n+ */\n+# define GOST_ENCRYPT_ROUND(key1, key2, sbox) \\\n+\ttmp = (key1) + r; \\\n+\tl ^= (sbox)[tmp & 0xff] ^ ((sbox) + 256)[(tmp >> 8) & 0xff] ^ \\\n+\t\t((sbox) + 512)[(tmp >> 16) & 0xff] ^ ((sbox) + 768)[tmp >> 24]; \\\n+\ttmp = (key2) + l; \\\n+\tr ^= (sbox)[tmp & 0xff] ^ ((sbox) + 256)[(tmp >> 8) & 0xff] ^ \\\n+\t\t((sbox) + 512)[(tmp >> 16) & 0xff] ^ ((sbox) + 768)[tmp >> 24];\n+\n+# define GOST_ENCRYPT_ROUND_L(key1, key2, sbox) \\\n+\ttmp = (key1) + r; \\\n+\tl ^= (sbox)[tmp & 0xff] ^ ((sbox) + 256)[(tmp >> 8) & 0xff] ^ \\\n+\t\t((sbox) + 512)[(tmp >> 16) & 0xff] ^ ((sbox) + 768)[tmp >> 24]; \\\n+\n+# define GOST_ENCRYPT_ROUND_R(key1, key2, sbox) \\\n+\ttmp = (key2) + l; \\\n+\tr ^= (sbox)[tmp & 0xff] ^ ((sbox) + 256)[(tmp >> 8) & 0xff] ^ \\\n+\t\t((sbox) + 512)[(tmp >> 16) & 0xff] ^ ((sbox) + 768)[tmp >> 24];\n+\n+/* encrypt a block with the given key */\n+/* ph4r05: round reduced version from the macro below */\n+void gost_encrypt_fnc(unsigned int * result, unsigned int i, const unsigned int * key, const unsigned int * hash,\n+                      const unsigned int * sbox, unsigned nr)\n+{\n+    unsigned l, r, tmp, jj;\n+    r = hash[i], l = hash[i + 1];\n+    for(jj = 0; jj < 12 && 2*jj < nr; ++jj){\n+        GOST_ENCRYPT_ROUND_L(key[(2 * jj + 0) % 8], key[(2 * jj + 1) % 8], sbox)\n+        if (2*jj + 1 < nr) {\n+            GOST_ENCRYPT_ROUND_R(key[(2 * jj + 0) % 8], key[(2 * jj + 1) % 8], sbox)\n+        }\n+    }\n+    for(jj = 12; jj < 16 && 2*jj < nr; ++jj){\n+        GOST_ENCRYPT_ROUND_L(key[2 * (16 - jj) - 1], key[2 * (16 - jj) - 2], sbox)\n+        if (2*jj + 1 < nr) {\n+            GOST_ENCRYPT_ROUND_R(key[2 * (16 - jj) - 1], key[2 * (16 - jj) - 2], sbox)\n+        }\n+    }\n+\n+    result[i] = l, result[i + 1] = r;\n+}\n+\n+/* encrypt a block with the given key */\n+# define GOST_ENCRYPT(result, i, key, hash, sbox, nr) \\\n+\tr = hash[i], l = hash[i + 1]; \\\n+\tGOST_ENCRYPT_ROUND(key[0], key[1], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[2], key[3], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[4], key[5], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[6], key[7], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[0], key[1], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[2], key[3], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[4], key[5], sbox) \\\n+    GOST_ENCRYPT_ROUND(key[6], key[7], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[0], key[1], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[2], key[3], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[4], key[5], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[6], key[7], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[7], key[6], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[5], key[4], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[3], key[2], sbox) \\\n+\tGOST_ENCRYPT_ROUND(key[1], key[0], sbox) \\\n+\tresult[i] = l, result[i + 1] = r;\n+\n+\n+/**\n+ * The core transformation. Process a 512-bit block.\n+ *\n+ * @param hash intermediate message hash\n+ * @param block the message block to process\n+ */\n+static void rhash_gost_block_compress(gost_ctx *ctx, const unsigned* block, unsigned nr)\n+{\n+    unsigned i;\n+    unsigned key[8], u[8], v[8], w[8], s[8];\n+    unsigned *sbox = (ctx->cryptpro ? (unsigned*)rhash_gost_sbox_cryptpro : (unsigned*)rhash_gost_sbox);\n+\n+    /* u := hash, v := <256-bit message block> */\n+    memcpy(u, ctx->hash, sizeof(u));\n+    memcpy(v, block, sizeof(v));\n+\n+    /* w := u xor v */\n+    w[0] = u[0] ^ v[0], w[1] = u[1] ^ v[1];\n+    w[2] = u[2] ^ v[2], w[3] = u[3] ^ v[3];\n+    w[4] = u[4] ^ v[4], w[5] = u[5] ^ v[5];\n+    w[6] = u[6] ^ v[6], w[7] = u[7] ^ v[7];\n+\n+    /* calculate keys, encrypt hash and store result to the s[] array */\n+    for (i = 0;; i += 2) {\n+        /* key generation: key_i := P(w) */\n+        key[0] = (w[0] & 0x000000ff) | ((w[2] & 0x000000ff) << 8) | ((w[4] & 0x000000ff) << 16) | ((w[6] & 0x000000ff) << 24);\n+        key[1] = ((w[0] & 0x0000ff00) >> 8) | (w[2] & 0x0000ff00) | ((w[4] & 0x0000ff00) << 8)  | ((w[6] & 0x0000ff00) << 16);\n+        key[2] = ((w[0] & 0x00ff0000) >> 16) | ((w[2] & 0x00ff0000) >> 8) | (w[4] & 0x00ff0000) | ((w[6] & 0x00ff0000) << 8);\n+        key[3] = ((w[0] & 0xff000000) >> 24) | ((w[2] & 0xff000000) >> 16) | ((w[4] & 0xff000000) >> 8) | (w[6] & 0xff000000);\n+        key[4] = (w[1] & 0x000000ff) | ((w[3] & 0x000000ff) << 8) | ((w[5] & 0x000000ff) << 16) | ((w[7] & 0x000000ff) << 24);\n+        key[5] = ((w[1] & 0x0000ff00) >> 8) | (w[3] & 0x0000ff00) | ((w[5] & 0x0000ff00) << 8)  | ((w[7] & 0x0000ff00) << 16);\n+        key[6] = ((w[1] & 0x00ff0000) >> 16) | ((w[3] & 0x00ff0000) >> 8) | (w[5] & 0x00ff0000) | ((w[7] & 0x00ff0000) << 8);\n+        key[7] = ((w[1] & 0xff000000) >> 24) | ((w[3] & 0xff000000) >> 16) | ((w[5] & 0xff000000) >> 8) | (w[7] & 0xff000000);\n+\n+        /* encryption: s_i := E_{key_i} (h_i) */\n+        {\n+//             unsigned l, r, tmp;\n+//             GOST_ENCRYPT(s, i, key, ctx->hash, sbox, nr);\n+            gost_encrypt_fnc(s, i, key, ctx->hash, sbox, nr);\n+        }\n+\n+        if (i == 0) {\n+            /* w:= A(u) ^ A^2(v) */\n+            w[0] = u[2] ^ v[4], w[1] = u[3] ^ v[5];\n+            w[2] = u[4] ^ v[6], w[3] = u[5] ^ v[7];\n+            w[4] = u[6] ^ (v[0] ^= v[2]);\n+            w[5] = u[7] ^ (v[1] ^= v[3]);\n+            w[6] = (u[0] ^= u[2]) ^ (v[2] ^= v[4]);\n+            w[7] = (u[1] ^= u[3]) ^ (v[3] ^= v[5]);\n+        } else if ((i & 2) != 0) {\n+            if (i == 6) break;\n+\n+            /* w := A^2(u) xor A^4(v) xor C_3; u := A(u) xor C_3 */\n+            /* C_3=0xff00ffff000000ffff0000ff00ffff0000ff00ff00ff00ffff00ff00ff00ff00 */\n+            u[2] ^= u[4] ^ 0x000000ff;\n+            u[3] ^= u[5] ^ 0xff00ffff;\n+            u[4] ^= 0xff00ff00;\n+            u[5] ^= 0xff00ff00;\n+            u[6] ^= 0x00ff00ff;\n+            u[7] ^= 0x00ff00ff;\n+            u[0] ^= 0x00ffff00;\n+            u[1] ^= 0xff0000ff;\n+\n+            w[0] = u[4] ^ v[0];\n+            w[2] = u[6] ^ v[2];\n+            w[4] = u[0] ^ (v[4] ^= v[6]);\n+            w[6] = u[2] ^ (v[6] ^= v[0]);\n+            w[1] = u[5] ^ v[1];\n+            w[3] = u[7] ^ v[3];\n+            w[5] = u[1] ^ (v[5] ^= v[7]);\n+            w[7] = u[3] ^ (v[7] ^= v[1]);\n+        } else {\n+            /* i==4 here */\n+            /* w:= A( A^2(u) xor C_3 ) xor A^6(v) */\n+            w[0] = u[6] ^ v[4], w[1] = u[7] ^ v[5];\n+            w[2] = u[0] ^ v[6], w[3] = u[1] ^ v[7];\n+            w[4] = u[2] ^ (v[0] ^= v[2]);\n+            w[5] = u[3] ^ (v[1] ^= v[3]);\n+            w[6] = (u[4] ^= u[6]) ^ (v[2] ^= v[4]);\n+            w[7] = (u[5] ^= u[7]) ^ (v[3] ^= v[5]);\n+        }\n+    }\n+\n+    /* step hash function: x(block, hash) := psi^61(hash xor psi(block xor psi^12(S))) */\n+\n+    /* 12 rounds of the LFSR and xor in <message block> */\n+    u[0] = block[0] ^ s[6];\n+    u[1] = block[1] ^ s[7];\n+    u[2] = block[2] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff) ^ (s[1] & 0xffff) ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[7] & 0xffff0000) ^ (s[7] >> 16);\n+    u[3] = block[3] ^ (s[0] & 0xffff) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^ (s[1] << 16) ^ (s[1] >> 16) ^\n+           (s[2] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[6] ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);\n+    u[4] = block[4] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[0] >> 16) ^\n+           (s[1] & 0xffff0000) ^ (s[1] >> 16) ^ (s[2] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >> 16) ^ (s[4] << 16) ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);\n+    u[5] = block[5] ^ (s[0] << 16) ^ (s[0] >> 16) ^ (s[0] & 0xffff0000) ^\n+           (s[1] & 0xffff) ^ s[2] ^ (s[2] >> 16) ^ (s[3] << 16) ^ (s[3] >> 16) ^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff0000) ^ (s[7] << 16) ^ (s[7] >> 16);\n+    u[6] = block[6] ^ s[0] ^ (s[1] >> 16) ^ (s[2] << 16) ^ s[3] ^ (s[3] >> 16)\n+           ^ (s[4] << 16) ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ s[6] ^ (s[6] << 16) ^ (s[6] >> 16) ^ (s[7] << 16);\n+    u[7] = block[7] ^ (s[0] & 0xffff0000) ^ (s[0] << 16) ^ (s[1] & 0xffff) ^\n+           (s[1] << 16) ^ (s[2] >> 16) ^ (s[3] << 16) ^ s[4] ^ (s[4] >> 16) ^ (s[5] << 16) ^ (s[5] >> 16) ^ (s[6] >> 16) ^ (s[7] & 0xffff) ^ (s[7] << 16) ^ (s[7] >> 16);\n+\n+    /* 1 round of the LFSR (a mixing transformation) and xor with <hash> */\n+    v[0] = ctx->hash[0] ^ (u[1] << 16) ^ (u[0] >> 16);\n+    v[1] = ctx->hash[1] ^ (u[2] << 16) ^ (u[1] >> 16);\n+    v[2] = ctx->hash[2] ^ (u[3] << 16) ^ (u[2] >> 16);\n+    v[3] = ctx->hash[3] ^ (u[4] << 16) ^ (u[3] >> 16);\n+    v[4] = ctx->hash[4] ^ (u[5] << 16) ^ (u[4] >> 16);\n+    v[5] = ctx->hash[5] ^ (u[6] << 16) ^ (u[5] >> 16);\n+    v[6] = ctx->hash[6] ^ (u[7] << 16) ^ (u[6] >> 16);\n+    v[7] = ctx->hash[7] ^ (u[0] & 0xffff0000) ^ (u[0] << 16) ^ (u[1] & 0xffff0000) ^ (u[1] << 16) ^ (u[6] << 16) ^ (u[7] & 0xffff0000) ^ (u[7] >> 16);\n+\n+    /* 61 rounds of LFSR, mixing up hash */\n+    ctx->hash[0] = (v[0] & 0xffff0000) ^ (v[0] << 16) ^ (v[0] >> 16) ^\n+                   (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^\n+                   (v[3] >> 16) ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[5] ^\n+                   (v[6] >> 16) ^ (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff);\n+    ctx->hash[1] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^\n+                   (v[1] & 0xffff) ^ v[2] ^ (v[2] >> 16) ^ (v[3] << 16) ^\n+                   (v[4] >> 16) ^ (v[5] << 16) ^ (v[6] << 16) ^ v[6] ^\n+                   (v[7] & 0xffff0000) ^ (v[7] >> 16);\n+    ctx->hash[2] = (v[0] & 0xffff) ^ (v[0] << 16) ^ (v[1] << 16) ^\n+                   (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^ (v[3] >> 16) ^\n+                   v[3] ^ (v[4] << 16) ^ (v[5] >> 16) ^ v[6] ^ (v[6] >> 16) ^\n+                   (v[7] & 0xffff) ^ (v[7] << 16) ^ (v[7] >> 16);\n+    ctx->hash[3] = (v[0] << 16) ^ (v[0] >> 16) ^ (v[0] & 0xffff0000) ^\n+                   (v[1] & 0xffff0000) ^ (v[1] >> 16) ^ (v[2] << 16) ^\n+                   (v[2] >> 16) ^ v[2] ^ (v[3] << 16) ^ (v[4] >> 16) ^ v[4] ^\n+                   (v[5] << 16) ^ (v[6] << 16) ^ (v[7] & 0xffff) ^ (v[7] >> 16);\n+    ctx->hash[4] = (v[0] >> 16) ^ (v[1] << 16) ^ v[1] ^ (v[2] >> 16) ^ v[2] ^\n+                   (v[3] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^\n+                   (v[5] >> 16) ^ v[5] ^ (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16);\n+    ctx->hash[5] = (v[0] << 16) ^ (v[0] & 0xffff0000) ^ (v[1] << 16) ^\n+                   (v[1] >> 16) ^ (v[1] & 0xffff0000) ^ (v[2] << 16) ^ v[2] ^\n+                   (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ (v[4] >> 16) ^ v[4] ^\n+                   (v[5] << 16) ^ (v[6] << 16) ^ (v[6] >> 16) ^ v[6] ^\n+                   (v[7] << 16) ^ (v[7] >> 16) ^ (v[7] & 0xffff0000);\n+    ctx->hash[6] = v[0] ^ v[2] ^ (v[2] >> 16) ^ v[3] ^ (v[3] << 16) ^ v[4] ^\n+                   (v[4] >> 16) ^ (v[5] << 16) ^ (v[5] >> 16) ^ v[5] ^\n+                   (v[6] << 16) ^ (v[6] >> 16) ^ v[6] ^ (v[7] << 16) ^ v[7];\n+    ctx->hash[7] = v[0] ^ (v[0] >> 16) ^ (v[1] << 16) ^ (v[1] >> 16) ^\n+                   (v[2] << 16) ^ (v[3] >> 16) ^ v[3] ^ (v[4] << 16) ^ v[4] ^\n+                   (v[5] >> 16) ^ v[5] ^ (v[6] << 16) ^ (v[6] >> 16) ^ (v[7] << 16) ^ v[7];\n+}\n+\n+/**\n+ * This function calculates hash value by 256-bit blocks.\n+ * It updates 256-bit check sum as follows:\n+ *    *(uint256_t)(ctx->sum) += *(uint256_t*)block;\n+ * and then updates intermediate hash value ctx->hash\n+ * by calling rhash_gost_block_compress().\n+ *\n+ * @param ctx algorithm context\n+ * @param block the 256-bit message block to process\n+ */\n+static void rhash_gost_compute_sum_and_hash(gost_ctx * ctx, const unsigned* block, unsigned nr)\n+{\n+#if IS_LITTLE_ENDIAN\n+    # define block_le block\n+# define LOAD_BLOCK_LE(i)\n+#else\n+    unsigned block_le[8]; /* tmp buffer for little endian number */\n+# define LOAD_BLOCK_LE(i) (block_le[i] = le2me_32(block[i]))\n+#endif\n+\n+    /* This optimization doesn't improve speed much,\n+    * and saves too little memory, but it was fun to write! =)  */","path":"streams/hash/others/hash_functions/gost/gost.cpp","position":287,"original_position":287,"commit_id":"5745db70d419ac66bfa334fbd9b0b67e91df0f7d","original_commit_id":"5745db70d419ac66bfa334fbd9b0b67e91df0f7d","user":{"login":"Bender250","id":3519476,"avatar_url":"https://avatars1.githubusercontent.com/u/3519476?v=4","gravatar_id":"","url":"https://api.github.com/users/Bender250","html_url":"https://github.com/Bender250","followers_url":"https://api.github.com/users/Bender250/followers","following_url":"https://api.github.com/users/Bender250/following{/other_user}","gists_url":"https://api.github.com/users/Bender250/gists{/gist_id}","starred_url":"https://api.github.com/users/Bender250/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Bender250/subscriptions","organizations_url":"https://api.github.com/users/Bender250/orgs","repos_url":"https://api.github.com/users/Bender250/repos","events_url":"https://api.github.com/users/Bender250/events{/privacy}","received_events_url":"https://api.github.com/users/Bender250/received_events","type":"User","site_admin":false},"body":"Who the fuck wrote this? :D\r\n\r\n(Yes, I see it in original code https://github.com/rhash/RHash/blob/master/librhash/gost.c#L291)","created_at":"2018-04-06T13:59:36Z","updated_at":"2018-04-06T13:59:36Z","html_url":"https://github.com/crocs-muni/CryptoStreams/pull/50#discussion_r179766374","pull_request_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50","author_association":"COLLABORATOR","_links":{"self":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/comments/179766374"},"html":{"href":"https://github.com/crocs-muni/CryptoStreams/pull/50#discussion_r179766374"},"pull_request":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50"}}},"pull_request":{"url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50","id":179637213,"html_url":"https://github.com/crocs-muni/CryptoStreams/pull/50","diff_url":"https://github.com/crocs-muni/CryptoStreams/pull/50.diff","patch_url":"https://github.com/crocs-muni/CryptoStreams/pull/50.patch","issue_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/50","number":50,"state":"open","locked":false,"title":"Hashes added: Gost, Ripemd160, Tiger, Whirlpool","user":{"login":"ph4r05","id":1052761,"avatar_url":"https://avatars2.githubusercontent.com/u/1052761?v=4","gravatar_id":"","url":"https://api.github.com/users/ph4r05","html_url":"https://github.com/ph4r05","followers_url":"https://api.github.com/users/ph4r05/followers","following_url":"https://api.github.com/users/ph4r05/following{/other_user}","gists_url":"https://api.github.com/users/ph4r05/gists{/gist_id}","starred_url":"https://api.github.com/users/ph4r05/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ph4r05/subscriptions","organizations_url":"https://api.github.com/users/ph4r05/orgs","repos_url":"https://api.github.com/users/ph4r05/repos","events_url":"https://api.github.com/users/ph4r05/events{/privacy}","received_events_url":"https://api.github.com/users/ph4r05/received_events","type":"User","site_admin":false},"body":"","created_at":"2018-04-05T10:42:44Z","updated_at":"2018-04-06T13:59:36Z","closed_at":null,"merged_at":null,"merge_commit_sha":"14d1f93c51c67aad446b3e5ed8fcdb578bf8ffd7","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50/commits","review_comments_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50/comments","review_comment_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/comments{/number}","comments_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/50/comments","statuses_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/statuses/5745db70d419ac66bfa334fbd9b0b67e91df0f7d","head":{"label":"ph4r05:hashes","ref":"hashes","sha":"5745db70d419ac66bfa334fbd9b0b67e91df0f7d","user":{"login":"ph4r05","id":1052761,"avatar_url":"https://avatars2.githubusercontent.com/u/1052761?v=4","gravatar_id":"","url":"https://api.github.com/users/ph4r05","html_url":"https://github.com/ph4r05","followers_url":"https://api.github.com/users/ph4r05/followers","following_url":"https://api.github.com/users/ph4r05/following{/other_user}","gists_url":"https://api.github.com/users/ph4r05/gists{/gist_id}","starred_url":"https://api.github.com/users/ph4r05/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ph4r05/subscriptions","organizations_url":"https://api.github.com/users/ph4r05/orgs","repos_url":"https://api.github.com/users/ph4r05/repos","events_url":"https://api.github.com/users/ph4r05/events{/privacy}","received_events_url":"https://api.github.com/users/ph4r05/received_events","type":"User","site_admin":false},"repo":{"id":124235304,"name":"eacirc-streams","full_name":"ph4r05/eacirc-streams","owner":{"login":"ph4r05","id":1052761,"avatar_url":"https://avatars2.githubusercontent.com/u/1052761?v=4","gravatar_id":"","url":"https://api.github.com/users/ph4r05","html_url":"https://github.com/ph4r05","followers_url":"https://api.github.com/users/ph4r05/followers","following_url":"https://api.github.com/users/ph4r05/following{/other_user}","gists_url":"https://api.github.com/users/ph4r05/gists{/gist_id}","starred_url":"https://api.github.com/users/ph4r05/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ph4r05/subscriptions","organizations_url":"https://api.github.com/users/ph4r05/orgs","repos_url":"https://api.github.com/users/ph4r05/repos","events_url":"https://api.github.com/users/ph4r05/events{/privacy}","received_events_url":"https://api.github.com/users/ph4r05/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/ph4r05/eacirc-streams","description":"Crypto round reduced functions collection","fork":true,"url":"https://api.github.com/repos/ph4r05/eacirc-streams","forks_url":"https://api.github.com/repos/ph4r05/eacirc-streams/forks","keys_url":"https://api.github.com/repos/ph4r05/eacirc-streams/keys{/key_id}","collaborators_url":"https://api.github.com/repos/ph4r05/eacirc-streams/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/ph4r05/eacirc-streams/teams","hooks_url":"https://api.github.com/repos/ph4r05/eacirc-streams/hooks","issue_events_url":"https://api.github.com/repos/ph4r05/eacirc-streams/issues/events{/number}","events_url":"https://api.github.com/repos/ph4r05/eacirc-streams/events","assignees_url":"https://api.github.com/repos/ph4r05/eacirc-streams/assignees{/user}","branches_url":"https://api.github.com/repos/ph4r05/eacirc-streams/branches{/branch}","tags_url":"https://api.github.com/repos/ph4r05/eacirc-streams/tags","blobs_url":"https://api.github.com/repos/ph4r05/eacirc-streams/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/ph4r05/eacirc-streams/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/ph4r05/eacirc-streams/git/refs{/sha}","trees_url":"https://api.github.com/repos/ph4r05/eacirc-streams/git/trees{/sha}","statuses_url":"https://api.github.com/repos/ph4r05/eacirc-streams/statuses/{sha}","languages_url":"https://api.github.com/repos/ph4r05/eacirc-streams/languages","stargazers_url":"https://api.github.com/repos/ph4r05/eacirc-streams/stargazers","contributors_url":"https://api.github.com/repos/ph4r05/eacirc-streams/contributors","subscribers_url":"https://api.github.com/repos/ph4r05/eacirc-streams/subscribers","subscription_url":"https://api.github.com/repos/ph4r05/eacirc-streams/subscription","commits_url":"https://api.github.com/repos/ph4r05/eacirc-streams/commits{/sha}","git_commits_url":"https://api.github.com/repos/ph4r05/eacirc-streams/git/commits{/sha}","comments_url":"https://api.github.com/repos/ph4r05/eacirc-streams/comments{/number}","issue_comment_url":"https://api.github.com/repos/ph4r05/eacirc-streams/issues/comments{/number}","contents_url":"https://api.github.com/repos/ph4r05/eacirc-streams/contents/{+path}","compare_url":"https://api.github.com/repos/ph4r05/eacirc-streams/compare/{base}...{head}","merges_url":"https://api.github.com/repos/ph4r05/eacirc-streams/merges","archive_url":"https://api.github.com/repos/ph4r05/eacirc-streams/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/ph4r05/eacirc-streams/downloads","issues_url":"https://api.github.com/repos/ph4r05/eacirc-streams/issues{/number}","pulls_url":"https://api.github.com/repos/ph4r05/eacirc-streams/pulls{/number}","milestones_url":"https://api.github.com/repos/ph4r05/eacirc-streams/milestones{/number}","notifications_url":"https://api.github.com/repos/ph4r05/eacirc-streams/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/ph4r05/eacirc-streams/labels{/name}","releases_url":"https://api.github.com/repos/ph4r05/eacirc-streams/releases{/id}","deployments_url":"https://api.github.com/repos/ph4r05/eacirc-streams/deployments","created_at":"2018-03-07T12:50:21Z","updated_at":"2018-03-24T14:15:47Z","pushed_at":"2018-04-05T10:36:57Z","git_url":"git://github.com/ph4r05/eacirc-streams.git","ssh_url":"git@github.com:ph4r05/eacirc-streams.git","clone_url":"https://github.com/ph4r05/eacirc-streams.git","svn_url":"https://github.com/ph4r05/eacirc-streams","homepage":"","size":14658,"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":null,"forks":1,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"crocs-muni:master","ref":"master","sha":"bad7f1b8e899710ac9e47decc241ab9bc10c4330","user":{"login":"crocs-muni","id":9287104,"avatar_url":"https://avatars2.githubusercontent.com/u/9287104?v=4","gravatar_id":"","url":"https://api.github.com/users/crocs-muni","html_url":"https://github.com/crocs-muni","followers_url":"https://api.github.com/users/crocs-muni/followers","following_url":"https://api.github.com/users/crocs-muni/following{/other_user}","gists_url":"https://api.github.com/users/crocs-muni/gists{/gist_id}","starred_url":"https://api.github.com/users/crocs-muni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crocs-muni/subscriptions","organizations_url":"https://api.github.com/users/crocs-muni/orgs","repos_url":"https://api.github.com/users/crocs-muni/repos","events_url":"https://api.github.com/users/crocs-muni/events{/privacy}","received_events_url":"https://api.github.com/users/crocs-muni/received_events","type":"Organization","site_admin":false},"repo":{"id":84541435,"name":"CryptoStreams","full_name":"crocs-muni/CryptoStreams","owner":{"login":"crocs-muni","id":9287104,"avatar_url":"https://avatars2.githubusercontent.com/u/9287104?v=4","gravatar_id":"","url":"https://api.github.com/users/crocs-muni","html_url":"https://github.com/crocs-muni","followers_url":"https://api.github.com/users/crocs-muni/followers","following_url":"https://api.github.com/users/crocs-muni/following{/other_user}","gists_url":"https://api.github.com/users/crocs-muni/gists{/gist_id}","starred_url":"https://api.github.com/users/crocs-muni/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/crocs-muni/subscriptions","organizations_url":"https://api.github.com/users/crocs-muni/orgs","repos_url":"https://api.github.com/users/crocs-muni/repos","events_url":"https://api.github.com/users/crocs-muni/events{/privacy}","received_events_url":"https://api.github.com/users/crocs-muni/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/crocs-muni/CryptoStreams","description":"Tool for generation of data from cryptoprimitives (block and stream ciphers, hash functions). Cryptoprimitives are round-reduced and the data can be configured for multiple testing scenarios.","fork":false,"url":"https://api.github.com/repos/crocs-muni/CryptoStreams","forks_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/forks","keys_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/keys{/key_id}","collaborators_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/teams","hooks_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/hooks","issue_events_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/events{/number}","events_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/events","assignees_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/assignees{/user}","branches_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/branches{/branch}","tags_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/tags","blobs_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/git/refs{/sha}","trees_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/git/trees{/sha}","statuses_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/statuses/{sha}","languages_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/languages","stargazers_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/stargazers","contributors_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/contributors","subscribers_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/subscribers","subscription_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/subscription","commits_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/commits{/sha}","git_commits_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/git/commits{/sha}","comments_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/comments{/number}","issue_comment_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/comments{/number}","contents_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/contents/{+path}","compare_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/compare/{base}...{head}","merges_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/merges","archive_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/downloads","issues_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues{/number}","pulls_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls{/number}","milestones_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/milestones{/number}","notifications_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/labels{/name}","releases_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/releases{/id}","deployments_url":"https://api.github.com/repos/crocs-muni/CryptoStreams/deployments","created_at":"2017-03-10T09:11:32Z","updated_at":"2018-04-06T13:48:56Z","pushed_at":"2018-04-05T16:48:35Z","git_url":"git://github.com/crocs-muni/CryptoStreams.git","ssh_url":"git@github.com:crocs-muni/CryptoStreams.git","clone_url":"https://github.com/crocs-muni/CryptoStreams.git","svn_url":"https://github.com/crocs-muni/CryptoStreams","homepage":"","size":14796,"stargazers_count":4,"watchers_count":4,"language":"C++","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":5,"mirror_url":null,"archived":false,"open_issues_count":11,"license":null,"forks":5,"open_issues":11,"watchers":4,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50"},"html":{"href":"https://github.com/crocs-muni/CryptoStreams/pull/50"},"issue":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/50"},"comments":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/issues/50/comments"},"review_comments":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50/comments"},"review_comment":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/pulls/50/commits"},"statuses":{"href":"https://api.github.com/repos/crocs-muni/CryptoStreams/statuses/5745db70d419ac66bfa334fbd9b0b67e91df0f7d"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"Bender250"}}