{"action":"created","comment":{"url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/comments/72988938","id":72988938,"diff_hunk":"@@ -0,0 +1,429 @@\n+/*\n+ * partial PKCS15 emulation for CAC-II cards\n+ * only minimal use of the authentication cert and key\n+ *\n+ * Copyright (C) 2005,2006,2007,2008,2009,2010  \n+ *               Douglas E. Engert <deengert@anl.gov> \n+ *               2004, Nils Larsch <larsch@trustcenter.de>\n+ * Copyright (C) 2006, Identity Alliance, \n+ *               Thomas Harning <thomas.harning@identityalliance.com>\n+ * Copyright (C) 2007, EMC, Russell Larner <rlarner@rsa.com>\n+ * Copyright (C) 2016, Red Hat, Inc., Robert Relyea <rrelyea@redhat.com>\n+ *\n+ * This library is free software; you can redistribute it and/or\n+ * modify it under the terms of the GNU Lesser General Public\n+ * License as published by the Free Software Foundation; either\n+ * version 2.1 of the License, or (at your option) any later version.\n+ *\n+ * This library is distributed in the hope that it will be useful,\n+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\n+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU\n+ * Lesser General Public License for more details.\n+ *\n+ * You should have received a copy of the GNU Lesser General Public\n+ * License along with this library; if not, write to the Free Software\n+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA\n+ */\n+\n+#if HAVE_CONFIG_H\n+#include \"config.h\"\n+#endif\n+\n+#include <stdlib.h>\n+#include <string.h>\n+#include <stdio.h>\n+#include <ctype.h>\n+\n+#include \"internal.h\"\n+#include \"cardctl.h\"\n+#include \"asn1.h\"\n+#include \"pkcs15.h\"\n+\n+/* probably should get manufacturer ID from cuid */\n+#define MANU_ID\t\t\"Common Access Card\"\n+\n+int sc_pkcs15emu_cac_init_ex(sc_pkcs15_card_t *, sc_pkcs15emu_opt_t *);\n+\n+\n+\n+typedef struct pdata_st {\n+\tconst char *id;\n+\tconst char *label;\n+\tconst char *path;\n+\tint         ref;\n+\tint         type;\n+\tunsigned int maxlen;\n+\tunsigned int minlen;\n+\tunsigned int storedlen;\n+\tint         flags;\t\n+\tint         tries_left;\n+\tconst unsigned char  pad_char;\n+\tint         obj_flags;\n+} pindata; \n+\n+static int cac_detect_card(sc_pkcs15_card_t *p15card)\n+{\n+\tsc_card_t *card = p15card->card;\n+\n+\tSC_FUNC_CALLED(card->ctx, SC_LOG_DEBUG_VERBOSE);\n+\tif (card->type < SC_CARD_TYPE_CAC_GENERIC\n+\t\t|| card->type >= SC_CARD_TYPE_CAC_GENERIC+1000)\n+\t\treturn SC_ERROR_INVALID_CARD;\n+\treturn SC_SUCCESS;\n+}\n+\n+#define CAC_NUM_CERTS_AND_KEYS 10\n+\n+const char * cac_get_name(int type)\n+{\n+    switch (type) {\n+    case SC_CARD_TYPE_CAC_I: return (\"CAC I\");\n+    case SC_CARD_TYPE_CAC_II: return (\"CAC II\");\n+    default: break;\n+    }\n+    return (\"CAC\");\n+}\n+\n+/*\n+ * These could move to a helper file for other cards that wish to use usage as a way of getting flags\n+ */\n+\n+/* Only certain usages are valid for a given algorithm, return all the usages that the algorithm supports so we\n+ * can use it as a filter for all the public and private key usages */\n+static unsigned int\n+cac_alg_flags_from_algorithm(int algorithm)\n+{\n+\tswitch (algorithm) {\n+#ifdef SC_ALGORITHM_RSA\n+\tcase SC_ALGORITHM_RSA:\n+\t\treturn SC_PKCS15_PRKEY_USAGE_ENCRYPT | SC_PKCS15_PRKEY_USAGE_WRAP |\n+\t\t       SC_PKCS15_PRKEY_USAGE_VERIFY | SC_PKCS15_PRKEY_USAGE_VERIFYRECOVER |\n+\t\t       SC_PKCS15_PRKEY_USAGE_DECRYPT | SC_PKCS15_PRKEY_USAGE_UNWRAP |\n+\t\t       SC_PKCS15_PRKEY_USAGE_SIGN | SC_PKCS15_PRKEY_USAGE_SIGNRECOVER |\n+\t\t       SC_PKCS15_PRKEY_USAGE_NONREPUDIATION;\n+#endif\n+#ifdef SC_ALGORITHM_DSA\n+\tcase SC_ALGORITHM_DSA:\n+\t\treturn SC_PKCS15_PRKEY_USAGE_VERIFY| SC_PKCS15_PRKEY_USAGE_SIGN | \n+\t\t       SC_PKCS15_PRKEY_USAGE_NONREPUDIATION;\n+#endif\n+#ifdef SC_ALGORITHM_DH\n+\tcase SC_ALGORITHM_DH:\n+\t\treturn SC_PKCS15_PRKEY_USAGE_DERIVE ;\n+#endif\n+#ifdef SC_ALGORITHM_EC\n+\tcase SC_ALGORITHM_EC:\n+\t\treturn SC_PKCS15_PRKEY_USAGE_DERIVE | SC_PKCS15_PRKEY_USAGE_VERIFY|\n+\t\t       SC_PKCS15_PRKEY_USAGE_SIGN | SC_PKCS15_PRKEY_USAGE_NONREPUDIATION;\n+#endif\n+#ifdef SC_ALGORITHM_GOSTR3410\n+\tcase SC_ALGORITHM_GOSTR3410:\n+\t\treturn SC_PKCS15_PRKEY_USAGE_DERIVE | SC_PKCS15_PRKEY_USAGE_VERIFY|\n+\t\t       SC_PKCS15_PRKEY_USAGE_SIGN | SC_PKCS15_PRKEY_USAGE_NONREPUDIATION;\n+#endif\n+\t}\n+\treturn 0;\n+}\n+\n+\n+/* These are the cert key usage bits that map to various PKCS #11 (and thus PKCS #15) flags */\n+#define SC_CERT_USAGE_SIGNATURE 0x63ULL /* Signature, Non repudication, Cert Sign, Crl sign */\n+#define SC_CERT_USAGE_DERIVE    0x10ULL /* Key agreement */\n+#define SC_CERT_USAGE_UNWRAP\t0x14ULL /* Key encipherment, Key agreement */\n+#define SC_CERT_USAGE_DECRYPT\t0x88ULL /* Data encipherment, encipher */\n+#define SC_CERT_USAGE_NONREPUDIATION 0x02ULL","path":"src/libopensc/pkcs15-cac.c","position":126,"original_position":134,"commit_id":"56707424d78ac8644055828350d3a80d62f2cde2","original_commit_id":"69346d7a48ad895439f0647032e3996cadcc8606","user":{"login":"Jakuje","id":2694489,"avatar_url":"https://avatars.githubusercontent.com/u/2694489?v=3","gravatar_id":"","url":"https://api.github.com/users/Jakuje","html_url":"https://github.com/Jakuje","followers_url":"https://api.github.com/users/Jakuje/followers","following_url":"https://api.github.com/users/Jakuje/following{/other_user}","gists_url":"https://api.github.com/users/Jakuje/gists{/gist_id}","starred_url":"https://api.github.com/users/Jakuje/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jakuje/subscriptions","organizations_url":"https://api.github.com/users/Jakuje/orgs","repos_url":"https://api.github.com/users/Jakuje/repos","events_url":"https://api.github.com/users/Jakuje/events{/privacy}","received_events_url":"https://api.github.com/users/Jakuje/received_events","type":"User","site_admin":false},"body":"@dengert The PIV driver have the usage flags set based on the ID and on a hard-coded list in `pkcs15-piv.c` (knows all its possible objects that can be on the card and their attributes). There is no such table for CAC and the usage flags are derived from the X509 key usage flags.\r\n\r\nThis is what is one of the differences between PIV and CAC. It can be theoretically used in other cards, if we will move these constants and helper functions out of `pkcs15-cac.c`, but it would need somebody with a bit better overview about the whole project.","created_at":"2016-08-01T14:39:38Z","updated_at":"2016-08-01T14:39:38Z","html_url":"https://github.com/OpenSC/OpenSC/pull/841#discussion_r72988938","pull_request_url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841","_links":{"self":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/comments/72988938"},"html":{"href":"https://github.com/OpenSC/OpenSC/pull/841#discussion_r72988938"},"pull_request":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841"}}},"pull_request":{"url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841","id":78650854,"html_url":"https://github.com/OpenSC/OpenSC/pull/841","diff_url":"https://github.com/OpenSC/OpenSC/pull/841.diff","patch_url":"https://github.com/OpenSC/OpenSC/pull/841.patch","issue_url":"https://api.github.com/repos/OpenSC/OpenSC/issues/841","number":841,"state":"open","locked":false,"title":"adding a CAC support into OpenSC","user":{"login":"Jakuje","id":2694489,"avatar_url":"https://avatars.githubusercontent.com/u/2694489?v=3","gravatar_id":"","url":"https://api.github.com/users/Jakuje","html_url":"https://github.com/Jakuje","followers_url":"https://api.github.com/users/Jakuje/followers","following_url":"https://api.github.com/users/Jakuje/following{/other_user}","gists_url":"https://api.github.com/users/Jakuje/gists{/gist_id}","starred_url":"https://api.github.com/users/Jakuje/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jakuje/subscriptions","organizations_url":"https://api.github.com/users/Jakuje/orgs","repos_url":"https://api.github.com/users/Jakuje/repos","events_url":"https://api.github.com/users/Jakuje/events{/privacy}","received_events_url":"https://api.github.com/users/Jakuje/received_events","type":"User","site_admin":false},"body":"During last months we worked on the CAC support in OpenSC. Some of the code is based on the PIV driver, the rest is completely new to work flawlessly with CAC.\r\n\r\nWe tested the code with both CAC emulator ([libcacard](https://github.com/SPICE/libcacard) in qemu) and real CAC1 and CAC2 cards with positive results (used [testsuite](https://github.com/Jakuje/OpenSC/tree/jjelen-testsuite/src/tests/p11test)).\r\n\r\nNotes about related changes in the shared code:\r\n\r\n* `pkcs15-cert.c`: changed `parse_x509_cert` to handle extensions correctly. The code attempted to handle extensions assuming extensions were ordered. The only extension it handled was crl's, but the handling was wrong and I didn't find any actual use of the crl code. I've changed it to cache all the extensions and then provided accessors functions to read a specific extension. I needed this to read the key Usage, but the extension fetching code can work with any extension (though the caller will need to parse the result. I also added code that parses DN and returns a specifically requested DN component. I needed this to get the Common Name for the certificate Subject. This gives the token a 'unique' name rather than some generic name (like CAC-I or CAC-II). Both of these can be used to enhance the piv support as well. \r\n\r\nThe patch is rebased on the current master and should apply. I noticed that there was some change in coding style (or finally applied?) in eb21c41e. Let me know if I should also reflect these changes or not. Any other feedback is welcomed.","created_at":"2016-07-25T09:28:46Z","updated_at":"2016-08-01T14:39:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"5bae6c015e17f7cdb4e9d036c3cefb3d5a80480b","assignee":null,"assignees":[],"milestone":null,"commits_url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841/commits","review_comments_url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841/comments","review_comment_url":"https://api.github.com/repos/OpenSC/OpenSC/pulls/comments{/number}","comments_url":"https://api.github.com/repos/OpenSC/OpenSC/issues/841/comments","statuses_url":"https://api.github.com/repos/OpenSC/OpenSC/statuses/56707424d78ac8644055828350d3a80d62f2cde2","head":{"label":"Jakuje:jjelen-cac","ref":"jjelen-cac","sha":"56707424d78ac8644055828350d3a80d62f2cde2","user":{"login":"Jakuje","id":2694489,"avatar_url":"https://avatars.githubusercontent.com/u/2694489?v=3","gravatar_id":"","url":"https://api.github.com/users/Jakuje","html_url":"https://github.com/Jakuje","followers_url":"https://api.github.com/users/Jakuje/followers","following_url":"https://api.github.com/users/Jakuje/following{/other_user}","gists_url":"https://api.github.com/users/Jakuje/gists{/gist_id}","starred_url":"https://api.github.com/users/Jakuje/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jakuje/subscriptions","organizations_url":"https://api.github.com/users/Jakuje/orgs","repos_url":"https://api.github.com/users/Jakuje/repos","events_url":"https://api.github.com/users/Jakuje/events{/privacy}","received_events_url":"https://api.github.com/users/Jakuje/received_events","type":"User","site_admin":false},"repo":{"id":54477045,"name":"OpenSC","full_name":"Jakuje/OpenSC","owner":{"login":"Jakuje","id":2694489,"avatar_url":"https://avatars.githubusercontent.com/u/2694489?v=3","gravatar_id":"","url":"https://api.github.com/users/Jakuje","html_url":"https://github.com/Jakuje","followers_url":"https://api.github.com/users/Jakuje/followers","following_url":"https://api.github.com/users/Jakuje/following{/other_user}","gists_url":"https://api.github.com/users/Jakuje/gists{/gist_id}","starred_url":"https://api.github.com/users/Jakuje/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/Jakuje/subscriptions","organizations_url":"https://api.github.com/users/Jakuje/orgs","repos_url":"https://api.github.com/users/Jakuje/repos","events_url":"https://api.github.com/users/Jakuje/events{/privacy}","received_events_url":"https://api.github.com/users/Jakuje/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/Jakuje/OpenSC","description":"Open source smart card tools and middleware. PKCS#11/MiniDriver/Tokend","fork":true,"url":"https://api.github.com/repos/Jakuje/OpenSC","forks_url":"https://api.github.com/repos/Jakuje/OpenSC/forks","keys_url":"https://api.github.com/repos/Jakuje/OpenSC/keys{/key_id}","collaborators_url":"https://api.github.com/repos/Jakuje/OpenSC/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/Jakuje/OpenSC/teams","hooks_url":"https://api.github.com/repos/Jakuje/OpenSC/hooks","issue_events_url":"https://api.github.com/repos/Jakuje/OpenSC/issues/events{/number}","events_url":"https://api.github.com/repos/Jakuje/OpenSC/events","assignees_url":"https://api.github.com/repos/Jakuje/OpenSC/assignees{/user}","branches_url":"https://api.github.com/repos/Jakuje/OpenSC/branches{/branch}","tags_url":"https://api.github.com/repos/Jakuje/OpenSC/tags","blobs_url":"https://api.github.com/repos/Jakuje/OpenSC/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/Jakuje/OpenSC/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/Jakuje/OpenSC/git/refs{/sha}","trees_url":"https://api.github.com/repos/Jakuje/OpenSC/git/trees{/sha}","statuses_url":"https://api.github.com/repos/Jakuje/OpenSC/statuses/{sha}","languages_url":"https://api.github.com/repos/Jakuje/OpenSC/languages","stargazers_url":"https://api.github.com/repos/Jakuje/OpenSC/stargazers","contributors_url":"https://api.github.com/repos/Jakuje/OpenSC/contributors","subscribers_url":"https://api.github.com/repos/Jakuje/OpenSC/subscribers","subscription_url":"https://api.github.com/repos/Jakuje/OpenSC/subscription","commits_url":"https://api.github.com/repos/Jakuje/OpenSC/commits{/sha}","git_commits_url":"https://api.github.com/repos/Jakuje/OpenSC/git/commits{/sha}","comments_url":"https://api.github.com/repos/Jakuje/OpenSC/comments{/number}","issue_comment_url":"https://api.github.com/repos/Jakuje/OpenSC/issues/comments{/number}","contents_url":"https://api.github.com/repos/Jakuje/OpenSC/contents/{+path}","compare_url":"https://api.github.com/repos/Jakuje/OpenSC/compare/{base}...{head}","merges_url":"https://api.github.com/repos/Jakuje/OpenSC/merges","archive_url":"https://api.github.com/repos/Jakuje/OpenSC/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/Jakuje/OpenSC/downloads","issues_url":"https://api.github.com/repos/Jakuje/OpenSC/issues{/number}","pulls_url":"https://api.github.com/repos/Jakuje/OpenSC/pulls{/number}","milestones_url":"https://api.github.com/repos/Jakuje/OpenSC/milestones{/number}","notifications_url":"https://api.github.com/repos/Jakuje/OpenSC/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/Jakuje/OpenSC/labels{/name}","releases_url":"https://api.github.com/repos/Jakuje/OpenSC/releases{/id}","deployments_url":"https://api.github.com/repos/Jakuje/OpenSC/deployments","created_at":"2016-03-22T13:25:48Z","updated_at":"2016-03-22T13:25:50Z","pushed_at":"2016-08-01T07:24:28Z","git_url":"git://github.com/Jakuje/OpenSC.git","ssh_url":"git@github.com:Jakuje/OpenSC.git","clone_url":"https://github.com/Jakuje/OpenSC.git","svn_url":"https://github.com/Jakuje/OpenSC","homepage":"https://github.com/OpenSC/OpenSC/wiki","size":10601,"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":"OpenSC:master","ref":"master","sha":"eb21c41e533d218589580ca999dbb6d9eb4c6371","user":{"login":"OpenSC","id":895249,"avatar_url":"https://avatars.githubusercontent.com/u/895249?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenSC","html_url":"https://github.com/OpenSC","followers_url":"https://api.github.com/users/OpenSC/followers","following_url":"https://api.github.com/users/OpenSC/following{/other_user}","gists_url":"https://api.github.com/users/OpenSC/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenSC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenSC/subscriptions","organizations_url":"https://api.github.com/users/OpenSC/orgs","repos_url":"https://api.github.com/users/OpenSC/repos","events_url":"https://api.github.com/users/OpenSC/events{/privacy}","received_events_url":"https://api.github.com/users/OpenSC/received_events","type":"Organization","site_admin":false},"repo":{"id":1999692,"name":"OpenSC","full_name":"OpenSC/OpenSC","owner":{"login":"OpenSC","id":895249,"avatar_url":"https://avatars.githubusercontent.com/u/895249?v=3","gravatar_id":"","url":"https://api.github.com/users/OpenSC","html_url":"https://github.com/OpenSC","followers_url":"https://api.github.com/users/OpenSC/followers","following_url":"https://api.github.com/users/OpenSC/following{/other_user}","gists_url":"https://api.github.com/users/OpenSC/gists{/gist_id}","starred_url":"https://api.github.com/users/OpenSC/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OpenSC/subscriptions","organizations_url":"https://api.github.com/users/OpenSC/orgs","repos_url":"https://api.github.com/users/OpenSC/repos","events_url":"https://api.github.com/users/OpenSC/events{/privacy}","received_events_url":"https://api.github.com/users/OpenSC/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/OpenSC/OpenSC","description":"Open source smart card tools and middleware. PKCS#11/MiniDriver/Tokend","fork":false,"url":"https://api.github.com/repos/OpenSC/OpenSC","forks_url":"https://api.github.com/repos/OpenSC/OpenSC/forks","keys_url":"https://api.github.com/repos/OpenSC/OpenSC/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OpenSC/OpenSC/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OpenSC/OpenSC/teams","hooks_url":"https://api.github.com/repos/OpenSC/OpenSC/hooks","issue_events_url":"https://api.github.com/repos/OpenSC/OpenSC/issues/events{/number}","events_url":"https://api.github.com/repos/OpenSC/OpenSC/events","assignees_url":"https://api.github.com/repos/OpenSC/OpenSC/assignees{/user}","branches_url":"https://api.github.com/repos/OpenSC/OpenSC/branches{/branch}","tags_url":"https://api.github.com/repos/OpenSC/OpenSC/tags","blobs_url":"https://api.github.com/repos/OpenSC/OpenSC/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OpenSC/OpenSC/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OpenSC/OpenSC/git/refs{/sha}","trees_url":"https://api.github.com/repos/OpenSC/OpenSC/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OpenSC/OpenSC/statuses/{sha}","languages_url":"https://api.github.com/repos/OpenSC/OpenSC/languages","stargazers_url":"https://api.github.com/repos/OpenSC/OpenSC/stargazers","contributors_url":"https://api.github.com/repos/OpenSC/OpenSC/contributors","subscribers_url":"https://api.github.com/repos/OpenSC/OpenSC/subscribers","subscription_url":"https://api.github.com/repos/OpenSC/OpenSC/subscription","commits_url":"https://api.github.com/repos/OpenSC/OpenSC/commits{/sha}","git_commits_url":"https://api.github.com/repos/OpenSC/OpenSC/git/commits{/sha}","comments_url":"https://api.github.com/repos/OpenSC/OpenSC/comments{/number}","issue_comment_url":"https://api.github.com/repos/OpenSC/OpenSC/issues/comments{/number}","contents_url":"https://api.github.com/repos/OpenSC/OpenSC/contents/{+path}","compare_url":"https://api.github.com/repos/OpenSC/OpenSC/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OpenSC/OpenSC/merges","archive_url":"https://api.github.com/repos/OpenSC/OpenSC/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OpenSC/OpenSC/downloads","issues_url":"https://api.github.com/repos/OpenSC/OpenSC/issues{/number}","pulls_url":"https://api.github.com/repos/OpenSC/OpenSC/pulls{/number}","milestones_url":"https://api.github.com/repos/OpenSC/OpenSC/milestones{/number}","notifications_url":"https://api.github.com/repos/OpenSC/OpenSC/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OpenSC/OpenSC/labels{/name}","releases_url":"https://api.github.com/repos/OpenSC/OpenSC/releases{/id}","deployments_url":"https://api.github.com/repos/OpenSC/OpenSC/deployments","created_at":"2011-07-05T09:45:08Z","updated_at":"2016-07-30T16:45:23Z","pushed_at":"2016-08-01T07:24:29Z","git_url":"git://github.com/OpenSC/OpenSC.git","ssh_url":"git@github.com:OpenSC/OpenSC.git","clone_url":"https://github.com/OpenSC/OpenSC.git","svn_url":"https://github.com/OpenSC/OpenSC","homepage":"https://github.com/OpenSC/OpenSC/wiki","size":16556,"stargazers_count":495,"watchers_count":495,"language":"C","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":254,"mirror_url":null,"open_issues_count":37,"forks":254,"open_issues":37,"watchers":495,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841"},"html":{"href":"https://github.com/OpenSC/OpenSC/pull/841"},"issue":{"href":"https://api.github.com/repos/OpenSC/OpenSC/issues/841"},"comments":{"href":"https://api.github.com/repos/OpenSC/OpenSC/issues/841/comments"},"review_comments":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841/comments"},"review_comment":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/OpenSC/OpenSC/pulls/841/commits"},"statuses":{"href":"https://api.github.com/repos/OpenSC/OpenSC/statuses/56707424d78ac8644055828350d3a80d62f2cde2"}}}}
{"actor":{"display_login":"Jakuje"}}