{"action":"created","comment":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/62879771","id":62879771,"diff_hunk":"@@ -0,0 +1,323 @@\n+/*\n+ * Copyright (C) 2016 Bas Stottelaar <basstottelaar@gmail.com>\n+ *\n+ * This file is subject to the terms and conditions of the GNU Lesser\n+ * General Public License v2.1. See the file LICENSE in the top level\n+ * directory for more details.\n+ */\n+\n+/**\n+ * @defgroup    drivers_periph_hwcrypt Hardware Crypto\n+ * @ingroup     drivers_periph\n+ * @brief       Low-level hardware crypto peripheral driver\n+ *\n+ * Modern CPUs may be equipped with a hardware crypto peripheral to speed up\n+ * cryptographical operations such as (as)symmetric ciphers and hashing\n+ * algorithms. With no or little intervention, the CPU can typically execute\n+ * more operations than the software alternative.\n+ *\n+ * This driver provides an abstract for the different ciphers and hashes that\n+ * may be supported. Using HAVE_HWCRYPTO_xxx defines, software can choose to\n+ * use the hardware crypto alternative, or fall back to a software variant.\n+ *\n+ * Current interface is optimized for (as)symmetric block ciphers and block\n+ * hashes.\n+ *\n+ * All operations block until they are finished. Operations may change the\n+ * internal peripheral state (e.g. load the key, keep the digest interally),\n+ * therefore must be used to control mutual exclusive access.\n+ *\n+ * @{\n+ * @file\n+ * @brief       Low-level hardware crypto driver interface definitions\n+ *\n+ * @author      Bas Stottelaar <basstottelaar@gmail.com>\n+ */\n+\n+#ifndef HWCRYPTO_H\n+#define HWCRYPTO_H\n+\n+#include <stdint.h>\n+\n+#include \"periph_cpu.h\"\n+#include \"periph_conf.h\"\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+/* guard file in case no HWCRYPTO device is defined */\n+#if HWCRYPTO_NUMOF\n+\n+/**\n+ * @brief   Supported ciphers.\n+ *\n+ * Define HAVE_HWCRYPTO_xxx in your CPUs periph_cpu.h if needed.\n+ *\n+ * Extend at will.\n+ */\n+typedef enum {\n+#ifdef HAVE_HWCRYPTO_AES128\n+    HWCRYPTO_AES128,                  /**< AES128 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_AES256\n+    HWCRYPTO_AES256,                  /**< AES256 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_DES\n+    HWCRYPTO_DES,                     /**< DES cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_3DES\n+    HWCRYPTO_3DES,                    /**< 3DES cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_TWOFISH\n+    HWCRYPTO_TWOFISH,                 /**< Two-fish cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_RSA512\n+    HWCRYPTO_RSA512,                  /**< RSA512 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_RSA1024\n+    HWCRYPTO_RSA1024,                 /**< RSA1024 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_RSA2048\n+    HWCRYPTO_RSA2048,                 /**< RSA2048 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_ECC128\n+    HWCRYPTO_ECC128,                  /**< ECC128 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_ECC192\n+    HWCRYPTO_ECC192,                  /**< ECC192 cipher */\n+#endif\n+#ifdef HAVE_HWCRYPTO_ECC256\n+    HWCRYPTO_ECC256,                  /**< ECC256 cipher */\n+#endif\n+    HWCRYPT_CIPHER_NULL,\n+} hwcrypto_cipher_t;\n+\n+/**\n+ * @brief   Supported hashing algorithms.\n+ *\n+ * Define HAVE_HWCRYPTO_xxx in your CPUs periph_cpu.h if needed.\n+ *\n+ * Extend at will.\n+ */\n+typedef enum {\n+#ifdef HAVE_HWCRYPTO_MD4\n+    HWCRYPTO_MD4,                     /**< MD4 hashing algorithm */\n+#endif\n+#ifdef HAVE_HWCRYPTO_MD5\n+    HWCRYPTO_MD5,                     /**< MD5 hashing algorithm */\n+#endif\n+#ifdef HAVE_HWCRYPTO_SHA1\n+    HWCRYPTO_SHA1,                    /**< SHA1 hashing algorithm */\n+#endif\n+#ifdef HAVE_HWCRYPTO_SHA256\n+    HWCRYPTO_SHA256,                  /**< SHA256 hashing algorithm */\n+#endif\n+    HWCRYPT_HASH_NULL\n+} hwcrypto_hash_t;\n+\n+/**\n+ * @brief   Default cipher context type for ciphers with keys up to 256 bits.\n+ *\n+ * The context should store the selected cipher. If needed, the context should\n+ * provide a buffer to store a key.\n+ *\n+ * For performance reasons, the default context type aligns the key.\n+ */\n+#ifndef HAVE_HWCRYPTO_CIPHER_CONTEXT_T\n+typedef struct {\n+    hwcrypto_cipher_t cipher;                       /**< selected cipher method */\n+    uint8_t __attribute__ ((aligned)) key[32];      /**< context for up to 256-bit key */","path":"drivers/include/periph/hwcrypto.h","position":130,"original_position":130,"commit_id":"7b05094eb974d7212663869bc0078a8f357ff279","original_commit_id":"7b05094eb974d7212663869bc0078a8f357ff279","user":{"login":"basilfx","id":815976,"avatar_url":"https://avatars.githubusercontent.com/u/815976?v=3","gravatar_id":"","url":"https://api.github.com/users/basilfx","html_url":"https://github.com/basilfx","followers_url":"https://api.github.com/users/basilfx/followers","following_url":"https://api.github.com/users/basilfx/following{/other_user}","gists_url":"https://api.github.com/users/basilfx/gists{/gist_id}","starred_url":"https://api.github.com/users/basilfx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/basilfx/subscriptions","organizations_url":"https://api.github.com/users/basilfx/orgs","repos_url":"https://api.github.com/users/basilfx/repos","events_url":"https://api.github.com/users/basilfx/events{/privacy}","received_events_url":"https://api.github.com/users/basilfx/received_events","type":"User","site_admin":false},"body":"According to [this](https://gcc.gnu.org/onlinedocs/gcc-4.0.2/gcc/Type-Attributes.html):\r\n\r\n\"Alternatively, you can leave out the alignment factor and just ask the compiler to align a type to the maximum useful alignment for the target machine you are compiling for.\"","created_at":"2016-05-11T16:23:40Z","updated_at":"2016-05-11T16:23:40Z","html_url":"https://github.com/RIOT-OS/RIOT/pull/5429#discussion_r62879771","pull_request_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429","_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments/62879771"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/5429#discussion_r62879771"},"pull_request":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429"}}},"pull_request":{"url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429","id":69589644,"html_url":"https://github.com/RIOT-OS/RIOT/pull/5429","diff_url":"https://github.com/RIOT-OS/RIOT/pull/5429.diff","patch_url":"https://github.com/RIOT-OS/RIOT/pull/5429.patch","issue_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/5429","number":5429,"state":"open","locked":false,"title":"periph: hwcrypto: initial draft for hardware crypto support","user":{"login":"basilfx","id":815976,"avatar_url":"https://avatars.githubusercontent.com/u/815976?v=3","gravatar_id":"","url":"https://api.github.com/users/basilfx","html_url":"https://github.com/basilfx","followers_url":"https://api.github.com/users/basilfx/followers","following_url":"https://api.github.com/users/basilfx/following{/other_user}","gists_url":"https://api.github.com/users/basilfx/gists{/gist_id}","starred_url":"https://api.github.com/users/basilfx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/basilfx/subscriptions","organizations_url":"https://api.github.com/users/basilfx/orgs","repos_url":"https://api.github.com/users/basilfx/repos","events_url":"https://api.github.com/users/basilfx/events{/privacy}","received_events_url":"https://api.github.com/users/basilfx/received_events","type":"User","site_admin":false},"body":"TL;DR; draft for hardware crypto driver interface, request for comments or close it :-)\r\n\r\nSome MCUs contain hardware peripherals to speed-up cryptographic operations (ciphers + hashes). While RIOT-OS has support for several ciphers and hashes, there is no hardware support. The crypto API needs an overhaul (see #4798) and I think this PR would help to redesign it. Then a new crypto API could use this to replace software implementations if desired (similar to how xtimer covers the timer peripheral).\r\n\r\nThis PR proposes a new driver interface (`hwcrypto`, in line with `hwrng`) that should abstract the crypto peripherals across multiple MCUs. Some design considerations:\r\n\r\n* Multiple ciphers and hashes may be supported, but defining a single encrypt/decrypt/update/finalize per cipher or hash seems overrated. A single encrypt/decrypt + update/finalize should cover them all.\r\n* Peripherals may have state. For instance, using AES, one may load the key directly into the peripheral register instead of storing it in a context. Due to this, locking must be used to ensure mutual exclusive access.\r\n* To save power, crypto peripherals can be turned off and turned on when needed (this could invalidate a context/state of a peripheral).\r\n* An encrypt or decrypt method may support larger block sizes, so it can process larger blocks of data without CPU intervention.\r\n\r\nI implemented the current specification for the EFM32 Gemstone MCU (unpolished code): https://gist.github.com/basilfx/bb59ce9b14a81e94e3836960373c6c8a\r\n\r\nCommit 05511e0 contains the specification, 7b05094 is an example application comparing the software versus hardware implementations. On my STK3401A (EFM32), this gives me the following result (AES is ~4x faster, SHA256 ~3x faster):\r\n\r\n```\r\nmain(): This is RIOT! (Version: 2016.07-devel-110-g4a133-MacBook-Pro-van-Bas.local)\r\nStarting benchmarks.\r\nCRYPTO 3DES: 2786 ops in 10 seconds.\r\nCRYPTO AES128: 225474 ops in 10 seconds.\r\nCRYPTO TWOFISH: 12332 ops in 10 seconds.\r\nCRYPTO SHA256: 123354 ops in 10 seconds.\r\nHWCRYPTO AES128: 1431591 ops in 10 seconds.\r\nHWCRYPTO AES256: 1247614 ops in 10 seconds.\r\nHWCRYPTO SHA1: 354406 ops in 10 seconds.\r\nHWCRYPTO SHA256: 346080 ops in 10 seconds.\r\nBenchmarks done!\r\n```\r\n\r\nI still have some design questions:\r\n* Some peripherals need aligned buffers (also for performance). How to enforce?\r\n* What about cipher modes, should software take care?\r\n* Single encrypt/decrypt method? My current implementation differs by only a boolean.\r\n* What about stream ciphers?\r\n\r\nVia this PR, I want to ask for comments to improve this interface. It's my first attempt on designing a peripheral interface, so I definitely think it can be improved. I also understand if this PR is not in the (current) scope, but I just want to give it a shot :-)","created_at":"2016-05-10T22:38:48Z","updated_at":"2016-05-11T16:23:40Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5a7274e10c15ea8c89ebb844572f1b808fea6ee1","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429/commits","review_comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429/comments","review_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/5429/comments","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/7b05094eb974d7212663869bc0078a8f357ff279","head":{"label":"basilfx:feature/hwcrypto","ref":"feature/hwcrypto","sha":"7b05094eb974d7212663869bc0078a8f357ff279","user":{"login":"basilfx","id":815976,"avatar_url":"https://avatars.githubusercontent.com/u/815976?v=3","gravatar_id":"","url":"https://api.github.com/users/basilfx","html_url":"https://github.com/basilfx","followers_url":"https://api.github.com/users/basilfx/followers","following_url":"https://api.github.com/users/basilfx/following{/other_user}","gists_url":"https://api.github.com/users/basilfx/gists{/gist_id}","starred_url":"https://api.github.com/users/basilfx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/basilfx/subscriptions","organizations_url":"https://api.github.com/users/basilfx/orgs","repos_url":"https://api.github.com/users/basilfx/repos","events_url":"https://api.github.com/users/basilfx/events{/privacy}","received_events_url":"https://api.github.com/users/basilfx/received_events","type":"User","site_admin":false},"repo":{"id":45756594,"name":"RIOT","full_name":"basilfx/RIOT","owner":{"login":"basilfx","id":815976,"avatar_url":"https://avatars.githubusercontent.com/u/815976?v=3","gravatar_id":"","url":"https://api.github.com/users/basilfx","html_url":"https://github.com/basilfx","followers_url":"https://api.github.com/users/basilfx/followers","following_url":"https://api.github.com/users/basilfx/following{/other_user}","gists_url":"https://api.github.com/users/basilfx/gists{/gist_id}","starred_url":"https://api.github.com/users/basilfx/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/basilfx/subscriptions","organizations_url":"https://api.github.com/users/basilfx/orgs","repos_url":"https://api.github.com/users/basilfx/repos","events_url":"https://api.github.com/users/basilfx/events{/privacy}","received_events_url":"https://api.github.com/users/basilfx/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/basilfx/RIOT","description":"RIOT -  The friendly OS for IoT","fork":true,"url":"https://api.github.com/repos/basilfx/RIOT","forks_url":"https://api.github.com/repos/basilfx/RIOT/forks","keys_url":"https://api.github.com/repos/basilfx/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/basilfx/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/basilfx/RIOT/teams","hooks_url":"https://api.github.com/repos/basilfx/RIOT/hooks","issue_events_url":"https://api.github.com/repos/basilfx/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/basilfx/RIOT/events","assignees_url":"https://api.github.com/repos/basilfx/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/basilfx/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/basilfx/RIOT/tags","blobs_url":"https://api.github.com/repos/basilfx/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/basilfx/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/basilfx/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/basilfx/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/basilfx/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/basilfx/RIOT/languages","stargazers_url":"https://api.github.com/repos/basilfx/RIOT/stargazers","contributors_url":"https://api.github.com/repos/basilfx/RIOT/contributors","subscribers_url":"https://api.github.com/repos/basilfx/RIOT/subscribers","subscription_url":"https://api.github.com/repos/basilfx/RIOT/subscription","commits_url":"https://api.github.com/repos/basilfx/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/basilfx/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/basilfx/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/basilfx/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/basilfx/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/basilfx/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/basilfx/RIOT/merges","archive_url":"https://api.github.com/repos/basilfx/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/basilfx/RIOT/downloads","issues_url":"https://api.github.com/repos/basilfx/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/basilfx/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/basilfx/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/basilfx/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/basilfx/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/basilfx/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/basilfx/RIOT/deployments","created_at":"2015-11-07T22:01:27Z","updated_at":"2016-01-31T00:01:26Z","pushed_at":"2016-05-10T22:13:58Z","git_url":"git://github.com/basilfx/RIOT.git","ssh_url":"git@github.com:basilfx/RIOT.git","clone_url":"https://github.com/basilfx/RIOT.git","svn_url":"https://github.com/basilfx/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":27331,"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":"RIOT-OS:master","ref":"master","sha":"efb16ba761d72d251c2ff540c8c98c11ef79736d","user":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"repo":{"id":7370241,"name":"RIOT","full_name":"RIOT-OS/RIOT","owner":{"login":"RIOT-OS","id":3079480,"avatar_url":"https://avatars.githubusercontent.com/u/3079480?v=3","gravatar_id":"","url":"https://api.github.com/users/RIOT-OS","html_url":"https://github.com/RIOT-OS","followers_url":"https://api.github.com/users/RIOT-OS/followers","following_url":"https://api.github.com/users/RIOT-OS/following{/other_user}","gists_url":"https://api.github.com/users/RIOT-OS/gists{/gist_id}","starred_url":"https://api.github.com/users/RIOT-OS/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/RIOT-OS/subscriptions","organizations_url":"https://api.github.com/users/RIOT-OS/orgs","repos_url":"https://api.github.com/users/RIOT-OS/repos","events_url":"https://api.github.com/users/RIOT-OS/events{/privacy}","received_events_url":"https://api.github.com/users/RIOT-OS/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/RIOT-OS/RIOT","description":"RIOT -  The friendly OS for IoT","fork":false,"url":"https://api.github.com/repos/RIOT-OS/RIOT","forks_url":"https://api.github.com/repos/RIOT-OS/RIOT/forks","keys_url":"https://api.github.com/repos/RIOT-OS/RIOT/keys{/key_id}","collaborators_url":"https://api.github.com/repos/RIOT-OS/RIOT/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/RIOT-OS/RIOT/teams","hooks_url":"https://api.github.com/repos/RIOT-OS/RIOT/hooks","issue_events_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/events{/number}","events_url":"https://api.github.com/repos/RIOT-OS/RIOT/events","assignees_url":"https://api.github.com/repos/RIOT-OS/RIOT/assignees{/user}","branches_url":"https://api.github.com/repos/RIOT-OS/RIOT/branches{/branch}","tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/tags","blobs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/refs{/sha}","trees_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/trees{/sha}","statuses_url":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/{sha}","languages_url":"https://api.github.com/repos/RIOT-OS/RIOT/languages","stargazers_url":"https://api.github.com/repos/RIOT-OS/RIOT/stargazers","contributors_url":"https://api.github.com/repos/RIOT-OS/RIOT/contributors","subscribers_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscribers","subscription_url":"https://api.github.com/repos/RIOT-OS/RIOT/subscription","commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/commits{/sha}","git_commits_url":"https://api.github.com/repos/RIOT-OS/RIOT/git/commits{/sha}","comments_url":"https://api.github.com/repos/RIOT-OS/RIOT/comments{/number}","issue_comment_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues/comments{/number}","contents_url":"https://api.github.com/repos/RIOT-OS/RIOT/contents/{+path}","compare_url":"https://api.github.com/repos/RIOT-OS/RIOT/compare/{base}...{head}","merges_url":"https://api.github.com/repos/RIOT-OS/RIOT/merges","archive_url":"https://api.github.com/repos/RIOT-OS/RIOT/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/RIOT-OS/RIOT/downloads","issues_url":"https://api.github.com/repos/RIOT-OS/RIOT/issues{/number}","pulls_url":"https://api.github.com/repos/RIOT-OS/RIOT/pulls{/number}","milestones_url":"https://api.github.com/repos/RIOT-OS/RIOT/milestones{/number}","notifications_url":"https://api.github.com/repos/RIOT-OS/RIOT/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/RIOT-OS/RIOT/labels{/name}","releases_url":"https://api.github.com/repos/RIOT-OS/RIOT/releases{/id}","deployments_url":"https://api.github.com/repos/RIOT-OS/RIOT/deployments","created_at":"2012-12-29T20:38:40Z","updated_at":"2016-05-11T13:39:26Z","pushed_at":"2016-05-11T13:28:01Z","git_url":"git://github.com/RIOT-OS/RIOT.git","ssh_url":"git@github.com:RIOT-OS/RIOT.git","clone_url":"https://github.com/RIOT-OS/RIOT.git","svn_url":"https://github.com/RIOT-OS/RIOT","homepage":"https://github.com/RIOT-OS/RIOT/wiki","size":91964,"stargazers_count":760,"watchers_count":760,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":544,"mirror_url":null,"open_issues_count":473,"forks":544,"open_issues":473,"watchers":760,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429"},"html":{"href":"https://github.com/RIOT-OS/RIOT/pull/5429"},"issue":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/5429"},"comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/issues/5429/comments"},"review_comments":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429/comments"},"review_comment":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/pulls/5429/commits"},"statuses":{"href":"https://api.github.com/repos/RIOT-OS/RIOT/statuses/7b05094eb974d7212663869bc0078a8f357ff279"}}}}