{"action":"created","comment":{"url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/comments/202018786","pull_request_review_id":136630690,"id":202018786,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMjAxODc4Ng==","diff_hunk":"@@ -0,0 +1,197 @@\n+<?php\n+/**\n+ * @see       https://github.com/zendframework/zend-crypt for the canonical source repository\n+ * @copyright Copyright (c) 2005-2018 Zend Technologies USA Inc. (https://www.zend.com)\n+ * @license   https://github.com/zendframework/zend-crypt/blob/master/LICENSE.md New BSD License\n+ */\n+\n+namespace Zend\\Crypt\\Password;\n+\n+use Traversable;\n+use Zend\\Stdlib\\ArrayUtils;\n+\n+use const PASSWORD_ARGON2I;\n+use const PHP_VERSION_ID;\n+\n+use function is_array;\n+use function password_hash;\n+use function password_verify;\n+use function strtolower;\n+\n+/**\n+ * Argon2i algorithm using password_hash() function of PHP\n+ */\n+class Argon2i implements PasswordInterface\n+{\n+    /**\n+     * Maximum memory (in kibibytes) that may be used to compute the Argon2 hash\n+     *\n+     * @var int|null\n+     */\n+    protected $memoryCost;\n+\n+    /**\n+     * Maximum amount of time it may take to compute the Argon2 hash\n+     *\n+     * @var int|null\n+     */\n+    protected $timeCost;\n+\n+    /**\n+     * Number of threads to use for computing the Argon2 hash\n+     *\n+     * @var int|null\n+     */\n+    protected $threads;\n+\n+    /**\n+     * @var string\n+     */\n+    protected $salt;\n+\n+    /**\n+     * Constructor\n+     *\n+     * @param array|Traversable $options\n+     * @throws Exception\\InvalidArgumentException\n+     */\n+    public function __construct($options = [])\n+    {\n+        if (PHP_VERSION_ID < 70200) {\n+            throw new Exception\\InvalidArgumentException(\n+                'The Argon2i password hash is only nativly available on PHP7.2+'\n+            );\n+        }\n+\n+        if (! empty($options)) {\n+            if ($options instanceof Traversable) {\n+                $options = ArrayUtils::iteratorToArray($options);\n+            }\n+\n+            if (! is_array($options)) {\n+                throw new Exception\\InvalidArgumentException(\n+                    'The options parameter must be an array or a Traversable'\n+                );\n+            }\n+\n+            foreach ($options as $key => $value) {\n+                switch (strtolower($key)) {\n+                    case 'memory_cost':\n+                        $this->setMemoryCost($value);\n+                        break;\n+                    case 'time_cost':\n+                        $this->setTimeCost($value);\n+                        break;\n+                    case 'threads':\n+                        $this->setThreads($value);\n+                        break;\n+                }\n+            }\n+        }\n+    }\n+\n+    /**\n+     * Returns the maximum memory (in kibibytes) that may be used to compute the Argon2 hash\n+     *\n+     * @return int\n+     */\n+    public function getMemoryCost()\n+    {\n+        return $this->memoryCost;\n+    }\n+\n+    /**\n+     * Sets the maximum memory (in kibibytes) that may be used to compute the Argon2 hash\n+     *\n+     * @param int $memoryCost\n+     *\n+     * @return Argon2i\n+     */\n+    public function setMemoryCost($memoryCost)","path":"src/Password/Argon2i.php","position":108,"original_position":110,"commit_id":"e9e52d7d3e7648dfb31b1454546de97b4ca17d92","original_commit_id":"d4117fb315376378b7dde6584b2bd2fb6a29194c","user":{"login":"ezimuel","id":475967,"node_id":"MDQ6VXNlcjQ3NTk2Nw==","avatar_url":"https://avatars2.githubusercontent.com/u/475967?v=4","gravatar_id":"","url":"https://api.github.com/users/ezimuel","html_url":"https://github.com/ezimuel","followers_url":"https://api.github.com/users/ezimuel/followers","following_url":"https://api.github.com/users/ezimuel/following{/other_user}","gists_url":"https://api.github.com/users/ezimuel/gists{/gist_id}","starred_url":"https://api.github.com/users/ezimuel/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ezimuel/subscriptions","organizations_url":"https://api.github.com/users/ezimuel/orgs","repos_url":"https://api.github.com/users/ezimuel/repos","events_url":"https://api.github.com/users/ezimuel/events{/privacy}","received_events_url":"https://api.github.com/users/ezimuel/received_events","type":"User","site_admin":false},"body":"@Ocramius I think we still need this in order to be compliant with the previous implementations like `Zend\\Crypt\\Password\\Bcrypt`, `Zend\\Crypt\\Password\\BcryptSha` and `Zend\\Crypt\\Password\\Apache`.\r\nEven, because we can add some check on setter to verify that the parameter is correct with a detailed error message if not. IMHO, this is actually one of the advantages to use a wrapper class like `Argon2i` instead of the PHP bult-in function.\r\n","created_at":"2018-07-12T12:39:53Z","updated_at":"2018-07-12T12:50:43Z","html_url":"https://github.com/zendframework/zend-crypt/pull/58#discussion_r202018786","pull_request_url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/comments/202018786"},"html":{"href":"https://github.com/zendframework/zend-crypt/pull/58#discussion_r202018786"},"pull_request":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58"}},"in_reply_to_id":187007726},"pull_request":{"url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58","id":186607036,"node_id":"MDExOlB1bGxSZXF1ZXN0MTg2NjA3MDM2","html_url":"https://github.com/zendframework/zend-crypt/pull/58","diff_url":"https://github.com/zendframework/zend-crypt/pull/58.diff","patch_url":"https://github.com/zendframework/zend-crypt/pull/58.patch","issue_url":"https://api.github.com/repos/zendframework/zend-crypt/issues/58","number":58,"state":"open","locked":false,"title":"Add Argon2i for password hashing","user":{"login":"MatthiasKuehneEllerhold","id":19988979,"node_id":"MDQ6VXNlcjE5OTg4OTc5","avatar_url":"https://avatars3.githubusercontent.com/u/19988979?v=4","gravatar_id":"","url":"https://api.github.com/users/MatthiasKuehneEllerhold","html_url":"https://github.com/MatthiasKuehneEllerhold","followers_url":"https://api.github.com/users/MatthiasKuehneEllerhold/followers","following_url":"https://api.github.com/users/MatthiasKuehneEllerhold/following{/other_user}","gists_url":"https://api.github.com/users/MatthiasKuehneEllerhold/gists{/gist_id}","starred_url":"https://api.github.com/users/MatthiasKuehneEllerhold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatthiasKuehneEllerhold/subscriptions","organizations_url":"https://api.github.com/users/MatthiasKuehneEllerhold/orgs","repos_url":"https://api.github.com/users/MatthiasKuehneEllerhold/repos","events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/events{/privacy}","received_events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/received_events","type":"User","site_admin":false},"body":"This PR adds an extra class for the argon2i password hash algorithm introduced with PHP7.2.\r\n\r\nThere are some open questions with this:\r\n1. Do we really want to have 1 new class for each algorithm PHP addes? \"Argon2id\" is just around the corner...\r\n\r\n2. PHP's `password_verify()` accepts currently both Bcrypt and Argon2i hashes. So basically you could either use the `Bcrypt` class or the `Argon2i` class to verify either hashes. \r\nThis makes it pretty easy to migrate users from Bcrypt to Argon2i: \r\n* Use the new `Argon2i` class as the dependency\r\n* old bcrypt passwords are still verified correctly\r\n* new password will be created with argon2i\r\n\r\n3. Do we need a wrapper function for `password_needs_rehash()` ? This would mean we need some kind of inter-class upgrade path (from class `Bcrypt` to `Argon2i` in future php-versions).\r\nAlthough we dont know WHY `password_needs_rehash()` returns false: is it because of the algorithm or the cost value(s)? \r\n\r\n4. This class is marked as PHP7.2+ only (it throws an exception in the constructor). Do we want to provide fallbacks of some kind for older PHP Versions?\r\n\r\n5. Other than the algorithm no other PHP7.2+ specific features were used in this class (e. g. scalar type hints and return types) because a syntax error is much more heavy and harder to catch than a constructor-exception (Pre 7.0). \r\nShould type hints and return types get added because its a PHP7.2+ class anyway?","created_at":"2018-05-08T11:39:34Z","updated_at":"2018-07-12T12:50:43Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cad9a1fe5f6ffb2cf46c0b1099d6ad920dc88187","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58/commits","review_comments_url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58/comments","review_comment_url":"https://api.github.com/repos/zendframework/zend-crypt/pulls/comments{/number}","comments_url":"https://api.github.com/repos/zendframework/zend-crypt/issues/58/comments","statuses_url":"https://api.github.com/repos/zendframework/zend-crypt/statuses/e9e52d7d3e7648dfb31b1454546de97b4ca17d92","head":{"label":"MatthiasKuehneEllerhold:add-argon2i","ref":"add-argon2i","sha":"e9e52d7d3e7648dfb31b1454546de97b4ca17d92","user":{"login":"MatthiasKuehneEllerhold","id":19988979,"node_id":"MDQ6VXNlcjE5OTg4OTc5","avatar_url":"https://avatars3.githubusercontent.com/u/19988979?v=4","gravatar_id":"","url":"https://api.github.com/users/MatthiasKuehneEllerhold","html_url":"https://github.com/MatthiasKuehneEllerhold","followers_url":"https://api.github.com/users/MatthiasKuehneEllerhold/followers","following_url":"https://api.github.com/users/MatthiasKuehneEllerhold/following{/other_user}","gists_url":"https://api.github.com/users/MatthiasKuehneEllerhold/gists{/gist_id}","starred_url":"https://api.github.com/users/MatthiasKuehneEllerhold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatthiasKuehneEllerhold/subscriptions","organizations_url":"https://api.github.com/users/MatthiasKuehneEllerhold/orgs","repos_url":"https://api.github.com/users/MatthiasKuehneEllerhold/repos","events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/events{/privacy}","received_events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/received_events","type":"User","site_admin":false},"repo":{"id":132595910,"node_id":"MDEwOlJlcG9zaXRvcnkxMzI1OTU5MTA=","name":"zend-crypt","full_name":"MatthiasKuehneEllerhold/zend-crypt","owner":{"login":"MatthiasKuehneEllerhold","id":19988979,"node_id":"MDQ6VXNlcjE5OTg4OTc5","avatar_url":"https://avatars3.githubusercontent.com/u/19988979?v=4","gravatar_id":"","url":"https://api.github.com/users/MatthiasKuehneEllerhold","html_url":"https://github.com/MatthiasKuehneEllerhold","followers_url":"https://api.github.com/users/MatthiasKuehneEllerhold/followers","following_url":"https://api.github.com/users/MatthiasKuehneEllerhold/following{/other_user}","gists_url":"https://api.github.com/users/MatthiasKuehneEllerhold/gists{/gist_id}","starred_url":"https://api.github.com/users/MatthiasKuehneEllerhold/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MatthiasKuehneEllerhold/subscriptions","organizations_url":"https://api.github.com/users/MatthiasKuehneEllerhold/orgs","repos_url":"https://api.github.com/users/MatthiasKuehneEllerhold/repos","events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/events{/privacy}","received_events_url":"https://api.github.com/users/MatthiasKuehneEllerhold/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MatthiasKuehneEllerhold/zend-crypt","description":"Cryptographic component from Zend Framework","fork":true,"url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt","forks_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/forks","keys_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/teams","hooks_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/hooks","issue_events_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/issues/events{/number}","events_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/events","assignees_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/assignees{/user}","branches_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/branches{/branch}","tags_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/tags","blobs_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/git/refs{/sha}","trees_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/statuses/{sha}","languages_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/languages","stargazers_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/stargazers","contributors_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/contributors","subscribers_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/subscribers","subscription_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/subscription","commits_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/commits{/sha}","git_commits_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/git/commits{/sha}","comments_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/comments{/number}","issue_comment_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/issues/comments{/number}","contents_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/contents/{+path}","compare_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/merges","archive_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/downloads","issues_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/issues{/number}","pulls_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/pulls{/number}","milestones_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/milestones{/number}","notifications_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/labels{/name}","releases_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/releases{/id}","deployments_url":"https://api.github.com/repos/MatthiasKuehneEllerhold/zend-crypt/deployments","created_at":"2018-05-08T10:56:55Z","updated_at":"2018-05-08T10:56:57Z","pushed_at":"2018-05-09T11:27:10Z","git_url":"git://github.com/MatthiasKuehneEllerhold/zend-crypt.git","ssh_url":"git@github.com:MatthiasKuehneEllerhold/zend-crypt.git","clone_url":"https://github.com/MatthiasKuehneEllerhold/zend-crypt.git","svn_url":"https://github.com/MatthiasKuehneEllerhold/zend-crypt","homepage":"","size":2977,"stargazers_count":0,"watchers_count":0,"language":"PHP","has_issues":false,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"zendframework:develop","ref":"develop","sha":"648572902a199834858d4f2513ebe4ca3f249970","user":{"login":"zendframework","id":296074,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjA3NA==","avatar_url":"https://avatars2.githubusercontent.com/u/296074?v=4","gravatar_id":"","url":"https://api.github.com/users/zendframework","html_url":"https://github.com/zendframework","followers_url":"https://api.github.com/users/zendframework/followers","following_url":"https://api.github.com/users/zendframework/following{/other_user}","gists_url":"https://api.github.com/users/zendframework/gists{/gist_id}","starred_url":"https://api.github.com/users/zendframework/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zendframework/subscriptions","organizations_url":"https://api.github.com/users/zendframework/orgs","repos_url":"https://api.github.com/users/zendframework/repos","events_url":"https://api.github.com/users/zendframework/events{/privacy}","received_events_url":"https://api.github.com/users/zendframework/received_events","type":"Organization","site_admin":false},"repo":{"id":35280790,"node_id":"MDEwOlJlcG9zaXRvcnkzNTI4MDc5MA==","name":"zend-crypt","full_name":"zendframework/zend-crypt","owner":{"login":"zendframework","id":296074,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI5NjA3NA==","avatar_url":"https://avatars2.githubusercontent.com/u/296074?v=4","gravatar_id":"","url":"https://api.github.com/users/zendframework","html_url":"https://github.com/zendframework","followers_url":"https://api.github.com/users/zendframework/followers","following_url":"https://api.github.com/users/zendframework/following{/other_user}","gists_url":"https://api.github.com/users/zendframework/gists{/gist_id}","starred_url":"https://api.github.com/users/zendframework/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/zendframework/subscriptions","organizations_url":"https://api.github.com/users/zendframework/orgs","repos_url":"https://api.github.com/users/zendframework/repos","events_url":"https://api.github.com/users/zendframework/events{/privacy}","received_events_url":"https://api.github.com/users/zendframework/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/zendframework/zend-crypt","description":"Cryptographic component from Zend Framework","fork":false,"url":"https://api.github.com/repos/zendframework/zend-crypt","forks_url":"https://api.github.com/repos/zendframework/zend-crypt/forks","keys_url":"https://api.github.com/repos/zendframework/zend-crypt/keys{/key_id}","collaborators_url":"https://api.github.com/repos/zendframework/zend-crypt/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/zendframework/zend-crypt/teams","hooks_url":"https://api.github.com/repos/zendframework/zend-crypt/hooks","issue_events_url":"https://api.github.com/repos/zendframework/zend-crypt/issues/events{/number}","events_url":"https://api.github.com/repos/zendframework/zend-crypt/events","assignees_url":"https://api.github.com/repos/zendframework/zend-crypt/assignees{/user}","branches_url":"https://api.github.com/repos/zendframework/zend-crypt/branches{/branch}","tags_url":"https://api.github.com/repos/zendframework/zend-crypt/tags","blobs_url":"https://api.github.com/repos/zendframework/zend-crypt/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/zendframework/zend-crypt/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/zendframework/zend-crypt/git/refs{/sha}","trees_url":"https://api.github.com/repos/zendframework/zend-crypt/git/trees{/sha}","statuses_url":"https://api.github.com/repos/zendframework/zend-crypt/statuses/{sha}","languages_url":"https://api.github.com/repos/zendframework/zend-crypt/languages","stargazers_url":"https://api.github.com/repos/zendframework/zend-crypt/stargazers","contributors_url":"https://api.github.com/repos/zendframework/zend-crypt/contributors","subscribers_url":"https://api.github.com/repos/zendframework/zend-crypt/subscribers","subscription_url":"https://api.github.com/repos/zendframework/zend-crypt/subscription","commits_url":"https://api.github.com/repos/zendframework/zend-crypt/commits{/sha}","git_commits_url":"https://api.github.com/repos/zendframework/zend-crypt/git/commits{/sha}","comments_url":"https://api.github.com/repos/zendframework/zend-crypt/comments{/number}","issue_comment_url":"https://api.github.com/repos/zendframework/zend-crypt/issues/comments{/number}","contents_url":"https://api.github.com/repos/zendframework/zend-crypt/contents/{+path}","compare_url":"https://api.github.com/repos/zendframework/zend-crypt/compare/{base}...{head}","merges_url":"https://api.github.com/repos/zendframework/zend-crypt/merges","archive_url":"https://api.github.com/repos/zendframework/zend-crypt/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/zendframework/zend-crypt/downloads","issues_url":"https://api.github.com/repos/zendframework/zend-crypt/issues{/number}","pulls_url":"https://api.github.com/repos/zendframework/zend-crypt/pulls{/number}","milestones_url":"https://api.github.com/repos/zendframework/zend-crypt/milestones{/number}","notifications_url":"https://api.github.com/repos/zendframework/zend-crypt/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/zendframework/zend-crypt/labels{/name}","releases_url":"https://api.github.com/repos/zendframework/zend-crypt/releases{/id}","deployments_url":"https://api.github.com/repos/zendframework/zend-crypt/deployments","created_at":"2015-05-08T13:27:53Z","updated_at":"2018-06-14T08:03:27Z","pushed_at":"2018-05-30T16:02:15Z","git_url":"git://github.com/zendframework/zend-crypt.git","ssh_url":"git@github.com:zendframework/zend-crypt.git","clone_url":"https://github.com/zendframework/zend-crypt.git","svn_url":"https://github.com/zendframework/zend-crypt","homepage":"","size":3691,"stargazers_count":68,"watchers_count":68,"language":"PHP","has_issues":true,"has_projects":true,"has_downloads":false,"has_wiki":false,"has_pages":true,"forks_count":41,"mirror_url":null,"archived":false,"open_issues_count":4,"license":{"key":"other","name":"Other","spdx_id":null,"url":null,"node_id":"MDc6TGljZW5zZTA="},"forks":41,"open_issues":4,"watchers":68,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58"},"html":{"href":"https://github.com/zendframework/zend-crypt/pull/58"},"issue":{"href":"https://api.github.com/repos/zendframework/zend-crypt/issues/58"},"comments":{"href":"https://api.github.com/repos/zendframework/zend-crypt/issues/58/comments"},"review_comments":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58/comments"},"review_comment":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/zendframework/zend-crypt/pulls/58/commits"},"statuses":{"href":"https://api.github.com/repos/zendframework/zend-crypt/statuses/e9e52d7d3e7648dfb31b1454546de97b4ca17d92"}},"author_association":"NONE"}}
{"actor":{"display_login":"ezimuel"}}