)]}'
{
  "log": [
    {
      "commit": "e4487ea288e9fea837995d9bc4608c8a4a253ec8",
      "tree": "dca512b8025bfdc8d858ceec8964ebb040b34055",
      "parents": [
        "42d8b7d7abe4ecab049e020c3836dae97660dd4d"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Mon Feb 29 17:43:54 2016 +0000"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Mar 01 18:56:14 2016 +0000"
      },
      "message": "More sensible return code for Credentials.deleteAll\n\nWas: result \u003d True iff nDeleted !\u003d 0\nNow: result \u003d True iff nDeleted \u003d\u003d nExisted\n\nThe most common reason you\u0027d want to delete all credentials under an\nalias is to be sure they no longer exist. The new contract gives a\nway to do this without multiple IPCs to the same service.\n\nBug: 27335182\nChange-Id: I8762b9b4fcc48037387dd805dbd0dbbe141d5b24\n"
    },
    {
      "commit": "c38eae5229a820966008ae1885af90cd27c265e7",
      "tree": "ed92f88bf2ce4e330e16805ae9f31105c760229f",
      "parents": [
        "f5725e6501f1d326e2b7ab3e9cee5ef4058858df"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Mon Feb 22 23:28:34 2016 +0000"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Mon Feb 22 20:38:00 2016 -0700"
      },
      "message": "Revert \"Revert \"Add option to allow key validity after fingerprint enrollment.\"\"\n\nThis reverts commit 512c132f49fc6e8e4fc119f4cf167d33b2393509.\n\nChange-Id: Iac381dfebcfe42f0468569eb2395ebeb97a95887\n"
    },
    {
      "commit": "512c132f49fc6e8e4fc119f4cf167d33b2393509",
      "tree": "cca39e8c48ecd981704b010f60e0f1ded698920e",
      "parents": [
        "ada0fc1b05902b11401094b15480377d1b6c5a35"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Mon Feb 22 22:59:34 2016 +0000"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Mon Feb 22 22:59:34 2016 +0000"
      },
      "message": "Revert \"Add option to allow key validity after fingerprint enrollment.\"\n\nThis reverts commit ada0fc1b05902b11401094b15480377d1b6c5a35.\n\nChange-Id: I934b6e6af49ab680af726c544f0193dfcb80054e\n"
    },
    {
      "commit": "ada0fc1b05902b11401094b15480377d1b6c5a35",
      "tree": "52dd4df1415d51b57ae6f57fb7edbb1a2d92f41d",
      "parents": [
        "0f900c02d9aafa9a98ff39ea7d661c1cdfbddcdb"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Fri Jan 29 08:32:07 2016 -0700"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Thu Feb 18 15:13:50 2016 -0700"
      },
      "message": "Add option to allow key validity after fingerprint enrollment.\n\nBug: 21563854\nChange-Id: I4f601e59fbfcd601e6a80ddcbc7b83ced6cc18c8\n"
    },
    {
      "commit": "adef49640d6339e6b4a6ad736c5815e35d9b8803",
      "tree": "d81f38b7d0964e32e9c94b3ded4c57c01712adbd",
      "parents": [
        "4dbf436cacf3278d607d4692a8596f35771b8567"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Fri Jan 29 07:07:16 2016 -0700"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Thu Feb 18 05:50:21 2016 -0700"
      },
      "message": "Add support for extending key validity while on body.\n\nBug: 21563854\nChange-Id: I3b622d2af77ec4ac3ba42407fc391112c153ef0f\n"
    },
    {
      "commit": "8d8c7477746c357d54f586fc92e8d422a4fc6441",
      "tree": "4f045715493d846d7b08b393c13fee3c312fa689",
      "parents": [
        "d1bbdeb86e5b6b83465440947dffc89de46a3f93"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Tue Feb 02 08:27:39 2016 -0700"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Mon Feb 08 19:29:54 2016 +0000"
      },
      "message": "Add attestation API to Android KeyStore.\n\nBug: 22914603\nChange-Id: I7c6162dc7a390aa48a2542494780959b01c23bd4\n"
    },
    {
      "commit": "bd0d4265bb1d4a136874f9212cf26f819c5c6b20",
      "tree": "0ac270b48d374aae09ef82ec5bee1657bf3ae28f",
      "parents": [
        "e35bde5291ed986dfe4d202a600a19154dae04ed",
        "b21416e2875973706d8b922428225194d9625875"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Feb 05 22:37:31 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Feb 05 22:37:31 2016 +0000"
      },
      "message": "Merge \"Fix typo in KeyInfo Javadoc.\" am: e8fbc20e12\nam: b21416e287\n\n* commit \u0027b21416e2875973706d8b922428225194d9625875\u0027:\n  Fix typo in KeyInfo Javadoc.\n"
    },
    {
      "commit": "d9dded5a46bb26f621d9da9334dd982217645e93",
      "tree": "77bd465a9e85a6e6815115ddb912d5da9e9e1bc7",
      "parents": [
        "31312ecfd2b701c6b9fdc34156e8a12df3022c25"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Feb 05 14:18:19 2016 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Feb 05 14:18:19 2016 -0800"
      },
      "message": "Fix typo in KeyInfo Javadoc.\n\nChange-Id: I801005a93aee71b93b3d6cf3f7c38361493ff203\n"
    },
    {
      "commit": "9498e8a8d2deb7b0a2e964d5d3c5d3b8747610e9",
      "tree": "698b310de6f10eda346e1700444dabc5dfda4d88",
      "parents": [
        "9e892f53dd489c824b6a39c45028f838123daa85"
      ],
      "author": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Mon Nov 30 09:51:33 2015 +0000"
      },
      "committer": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Fri Jan 15 16:14:57 2016 +0000"
      },
      "message": "Fix @code escapes\n\nThe body of {@code} must not be HTML escaped. This is one of\nseveral changes that fix the source in conjunction with a\ndoclava fix.\n\nBug: 25757239\n(cherry-picked from commit 71fbb81b14958b80fe55738607740c6630e4e9da)\n\nChange-Id: I19dafddc6501be6fee362c396ac5bbdc934ae39d\n"
    },
    {
      "commit": "3a435f03906778677b846baa7ebedadd3119e892",
      "tree": "807910c15ddf77dccd9bc713112725169284833a",
      "parents": [
        "026688070c8002911dc0a8f1fb487bf5bfed52d4"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Mon Dec 21 12:06:04 2015 +0000"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Mon Dec 21 12:09:20 2015 +0000"
      },
      "message": "Return null on getPrivateKey failure not exception\n\nAccording to documentation:\n\nReturns the {@code PrivateKey} for the requested alias, or null if\nthere is no result.\n\n@throws KeyChainException if the alias was valid but there was some\nproblem accessing it.\n\n@throws IllegalStateException if called from the main thread.\n\nIn this case the alias doesn\u0027t exist or isn\u0027t visible to the caller so\nthey should get null back instead of KeyChainException.\n\nChange-Id: Ied5603ac6aefbcef79050f24c2aa7ee8f386be0b\n"
    },
    {
      "commit": "fbc65644b9bda216699f5f1f883d6dfa2668e545",
      "tree": "cdbcaef4248f442402dcc74faebc4ab2b8c91cc9",
      "parents": [
        "f12288bda135ddf66073adce45e92ea8cc5d7450"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Mon Aug 03 16:21:22 2015 +0100"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Dec 08 16:40:56 2015 +0000"
      },
      "message": "DevicePolicy API to remove an installed KeyPair\n\nThe keypair is specified by alias and removed via a call to the\nKeyChainService, which will have installed the pair in the first place.\n\nBug: 22541933\nChange-Id: I37317e7c22e89816156e6e9a7abf4c5a59e8440a\n"
    },
    {
      "commit": "71fbb81b14958b80fe55738607740c6630e4e9da",
      "tree": "1f1be8961057d82b54b99637b8e6b423ff621575",
      "parents": [
        "355a74f2842b44b0ae07c5f982c50761d47d9ca0"
      ],
      "author": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Mon Nov 30 09:51:33 2015 +0000"
      },
      "committer": {
        "name": "Neil Fuller",
        "email": "nfuller@google.com",
        "time": "Wed Dec 02 14:24:11 2015 +0000"
      },
      "message": "Fix @code escapes\n\nThe body of {@code} must not be HTML escaped. This is one of\nseveral changes that fix the source in conjunction with a\ndoclava fix.\n\nBug: 25757239\nChange-Id: Ib38a0fa2dd2a3d68e467f78a812071e763d7e881\n"
    },
    {
      "commit": "7b0b9a1351df7fdcd9ea5d72fe5041186e3789fc",
      "tree": "d1c2c78464623ac5ab0ceb40e5af74d306de3a1d",
      "parents": [
        "fe341d43509e53d5fee56743c2b02e3e5337e4aa",
        "0540e1b127e03ecc97c32719ac79769d69c16aec"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Nov 25 19:23:55 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Nov 25 19:23:55 2015 +0000"
      },
      "message": "Merge \"Custom engineUpdate/engineDoFinal(ByteBuffer, ByteBuffer).\" am: e766e399c5 am: 4bc1904119\nam: 0540e1b127\n\n* commit \u00270540e1b127e03ecc97c32719ac79769d69c16aec\u0027:\n  Custom engineUpdate/engineDoFinal(ByteBuffer, ByteBuffer).\n"
    },
    {
      "commit": "d976c5a4ee0d093592a93ada6e5118dec6892e9b",
      "tree": "f78d7de5352cdd2f3fae5e5d1242484e156cbef9",
      "parents": [
        "9a83f115ade900a816f0fa2beae2cdd6f54bfc54"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Nov 24 17:22:27 2015 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Nov 24 17:22:27 2015 -0800"
      },
      "message": "Custom engineUpdate/engineDoFinal(ByteBuffer, ByteBuffer).\n\nThis makes Android Keystore\u0027s Cipher implementation use a custom\nimplementation of engineUpdate(ByteBuffer, ByteBuffer) and\nengineDoFinal(ByteBuffer, ByteBuffer). The implementation is\nexplicitly designed around the fact that Android Keystore transmits\ninput and receives output via Binder and thus there\u0027s no need to\nattempt any optimizations to avoid copying input and output.\n\nBug: 25863382\nChange-Id: I311072891f02f5e7a283628b51b8d6058b55231c\n"
    },
    {
      "commit": "8f49178b8fe5c0c9d1594052b39d7f24c966cf7d",
      "tree": "5ae94d6e4186efcaf67e198d8813d1a180960ea6",
      "parents": [
        "39d554b7aab31bd772ffa2a17fa4212b7fb60f7a",
        "00245ffce4d08fbb6aeaeba62b8a30ce234862fa"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Nov 17 23:14:38 2015 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Nov 17 23:14:38 2015 +0000"
      },
      "message": "Merge \"Insert Android Keystore JCA Provider at the correct position.\" am: 887d348d7e am: 5995579f5f\nam: 00245ffce4\n\n* commit \u002700245ffce4d08fbb6aeaeba62b8a30ce234862fa\u0027:\n  Insert Android Keystore JCA Provider at the correct position.\n"
    },
    {
      "commit": "8e028e6507ac3e112a3503aaf500eb07f69026bf",
      "tree": "07850a9e16a3e1c2de615015bdbf5166356748e2",
      "parents": [
        "3c54ed00f390e0ce9c555eb517594628b362705f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Nov 13 17:36:45 2015 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Nov 16 10:11:50 2015 -0800"
      },
      "message": "Insert Android Keystore JCA Provider at the correct position.\n\nSecurity.insertProviderAt uses 1-based positions whereas the\nAndroidKeyStoreProvider.install code was incorrectly passing in\n0-based positions, thus installing the AndroidKeyStoreBCWorkaround\nprovider one level higher than intended. This change fixes the issue\nin AndroidKeyStoreProvider.\n\nBug: 25399691\nChange-Id: I4a66bf37c0d151edb9a2349db9d91939064c0574\n"
    },
    {
      "commit": "2cea8d4b7b15888d80d89cc04fb6d109e1e812dd",
      "tree": "04b01b411958a10afeb35dbd65337f4e1af78933",
      "parents": [
        "733ca8ac78e7e6d24fe6f23f1d5a66a6d18c741a",
        "5bbf04803f050296a6deab10a3c7104743c4e38c"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Sep 10 22:37:50 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 10 22:37:50 2015 +0000"
      },
      "message": "Merge \"Allow uid to be passed for more operations\""
    },
    {
      "commit": "3876b1be27e3aefde9a72eb2e4f856e94fc5f946",
      "tree": "5783b18f074f1971a83a615ef805f5483f6cfb90",
      "parents": [
        "435acfc88917e3535462ea520b01d0868266acd2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Sep 09 14:55:03 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Sep 10 15:35:06 2015 -0700"
      },
      "message": "Support cross-UID access from AndroidKeyStore.\n\nThis is meant for exposing the pre-existing cross-UID access to keys\nbacked by the keystore service via higher-level JCA API. For example,\nthis lets system_server use Wi-Fi or VPN UID keys via JCA API.\n\nTo obtain a JCA AndroidKeyStore KeyStore for another UID, use the\nhidden system API AndroidKeyStoreProvider.getKeyStoreForUid(uid).\n\nTo generate a key owned by another UID, invoke setUid(uid) on\nKeyGenParameterSpec.Builder.\n\nThis CL does not change the security policy, such as which UID can\naccess/modify which UIDs\u0027 keys. The policy is that only certain system\nUIDs are permitted to access keys of certain other system UIDs.\n\nBug: 23978113\nChange-Id: Ie381530f41dc41c50d52f675fb9e68bc87c006de\n"
    },
    {
      "commit": "5bbf04803f050296a6deab10a3c7104743c4e38c",
      "tree": "b8671ab0d8c5cd02e2db75c38861c70e0a9a692e",
      "parents": [
        "20a17f4a1f0ea06bc5215a6f04f983a8cf23be18"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Sep 09 14:53:52 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Thu Sep 10 15:34:11 2015 -0700"
      },
      "message": "Allow uid to be passed for more operations\n\nThis expands get, getmtime, exportKey, getKeyCharacteristcs and begin to\naccept a uid to run as. This is only for system to use keys owned by\nWifi and VPN, and not something that can be used to do operations as\nanother arbitrary application.\n\nBug: 23978113\nChange-Id: I06aa089859edc934a5415e3b184b917d6d171ae2\n"
    },
    {
      "commit": "72245d7909763dd1ed4cf4082aa1042e0ea61f4d",
      "tree": "e5c5d1eec29b46e3d603f5d0f986843cddb60d58",
      "parents": [
        "4dbb37ae95bdf60d230777c6a5e8d53b932e9d40"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Aug 11 06:41:13 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Aug 11 11:36:09 2015 -0700"
      },
      "message": "Add more examples of generating/importing keys to Javadocs.\n\nBased on developer feedback, this updates Android Keystore Javadocs\nwith more examples of generating and importing keys of various\nalgorithms. This also clarifies that key use authorizations apply to\nsecret and private key and do no apply to public keys.\n\nBug: 23102874\nChange-Id: If0dc20fda4836fd23b9cd9c92490a04e71b19fc0\n"
    },
    {
      "commit": "75e51ec0b14e9c5363ad86a69fd7a764290a5cfb",
      "tree": "b1d18feb041f43d16b00a478b99c38cf54932a7d",
      "parents": [
        "730c0f6591b1c99699e9d0ecf36d696f7d87629f",
        "3ab1f04004c417397bfac8f061dc187b7b66109d"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Thu Jul 30 19:57:22 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 30 19:57:22 2015 +0000"
      },
      "message": "Merge \"Raw RSA Cipher relies on keymaster for padding and range checks.\" into mnc-dev"
    },
    {
      "commit": "e4928a2912297751108c7045ce3343ec63edcc01",
      "tree": "abd65971cc8d06e43eebc57bf70232b45c30ea72",
      "parents": [
        "350662197542d406df58aa65afddc9e23f9309d3"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jul 21 13:38:48 2015 -0700"
      },
      "committer": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Tue Jul 28 13:00:56 2015 -0600"
      },
      "message": "Keymaster digest/padding NONE no longer means ANY.\n\nThis adjusts the public API documentation to no longer say that\ndigest/padding NONE means any digest/padding. This also changes the\nimplementation of legacy key generation and import to explicitly\nlist which digests/paddings the generated/imported key is authorized\nfor. Previously, such keys were simply authorized for digest NONE and\npadding NONE.\n\nBug: 22556114\nChange-Id: Id02d9450a07de16ccb795b76b6de0006dd49dcca\n"
    },
    {
      "commit": "3ab1f04004c417397bfac8f061dc187b7b66109d",
      "tree": "a917f7df99f577caf3a2908a105e21561c141bf0",
      "parents": [
        "ada70be897fb7541129f1ab1f6faa94a80fca986"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 20 09:01:34 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jul 22 13:16:04 2015 -0700"
      },
      "message": "Raw RSA Cipher relies on keymaster for padding and range checks.\n\nThis makes Android Keystore\u0027s RSA/ECB/NoPadding Cipher implementation\nrely on the underlying keystore/keymaster to left-pad the input (if\nnecessary) and to reject invalid input. Prior to this change the\nCipher implementation attempted to do it itself, but wasn\u0027t doing it\nright anyway.\n\nThis fixes a regression where Android Keystore\u0027s raw RSA Cipher\n(\"RSA/ECB/NoPadding\") refused to encrypt plaintexts of the same length\n(in bytes) as RSA modulus which were nevertheless numerically smaller\nthan the RSA modulus.\n\nBug: 22599805\nChange-Id: I591a8115a574eaf8f6075f29b50d93a87532c5eb\n"
    },
    {
      "commit": "ada70be897fb7541129f1ab1f6faa94a80fca986",
      "tree": "4686db46b90b94925b7d73643a0616b0bba5354f",
      "parents": [
        "ff21279e2cbe0bdd9c41350b7a204cabf9370377",
        "a95550f8016bbb0dba086dbd73eec63e6cdbbe98"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jul 22 15:24:27 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 22 15:24:27 2015 +0000"
      },
      "message": "Merge \"Add KM_MIN_MAC_LENGTH tag to HMAC and AES-GCM keys.\" into mnc-dev"
    },
    {
      "commit": "5d586dd585a6663290b68abce433a75b5760fc5d",
      "tree": "0bff9f52339afa0a937210feace90ec2556c0946",
      "parents": [
        "23e19066de2caf1db1fa0759ac49a1118b59f7a5",
        "53d544a4b9964166f90f34b46f3866cafefb84e7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jul 21 19:50:47 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 21 19:50:50 2015 +0000"
      },
      "message": "Merge \"KM module may consume less input than provided by finish time.\" into mnc-dev"
    },
    {
      "commit": "a95550f8016bbb0dba086dbd73eec63e6cdbbe98",
      "tree": "e6912c5fdb0fc66d6a5fc7fe48d3e8c640270877",
      "parents": [
        "f7592b234acde62f0f0a93dad77284f12ca9980a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jul 16 16:32:23 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jul 16 16:52:51 2015 -0700"
      },
      "message": "Add KM_MIN_MAC_LENGTH tag to HMAC and AES-GCM keys.\n\nThis makes Android Keystore add the KM_MIN_MAC_LENGTH tag to generated\nand imported HMAC and AES-GCM keys. This tag specifies the minimum\nlength of the MAC/authentication tag authorized to be used for the\nkey.\n\nFor HMAC keys the minimum MAC length is set to the length of the\ndigest associated with the key (HMAC keys are authorized for exactly\none digest). For AES keys the minimum authetication tag length is set\nto 96 bit. This is the minimum supported by Android Keystore\u0027s AES-GCM\nimplementation.\n\nBug: 22337277\nChange-Id: Ic6e47cf084734d1592788dc58088889f7fff74eb\n"
    },
    {
      "commit": "53d544a4b9964166f90f34b46f3866cafefb84e7",
      "tree": "31072f3652496e693cc4791e49c4cdb713f8ba97",
      "parents": [
        "b09b84cafde5ac31f5ef5c79f7a78db540824471"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jul 15 17:15:08 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jul 16 14:18:49 2015 -0700"
      },
      "message": "KM module may consume less input than provided by finish time.\n\nKeymaster1 HAL permits the implementation of \"update\" operation to\nleave some input unconsumed by the time \"finish\" operation neeeds to\nbe invoked. This needs to be treated as \"invalid input\" error rather\nthan a \"can\u0027t happen\" exception.\n\nThis CL was confirmed to fix the issue by the vendor who encountered\nthe issue.\n\nBug: 22512100\nChange-Id: Ibb1a37d58f650d03605612559a154ce2416d147c\n"
    },
    {
      "commit": "c58153b2d7418f44f2b0e397478be808e91decef",
      "tree": "281c3d80d1265fa344fffe460d4e45509fba0e3e",
      "parents": [
        "532737df65330200dc55ae42d31140d19c4024be"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jul 08 09:31:23 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jul 16 09:59:51 2015 -0700"
      },
      "message": "HMAC keys are authorized for exactly one digest.\n\nThis is in preparation for enforcing the minimum length of MACs\nwhich in the case of HMAC keys generated or imported by Android\nKeystore will be set to the length of the digest for which the\nkey is authorized.\n\nBug: 22337277\nChange-Id: I0255d5ba184dabfb6b45d8f32ddadeb84ab7fc19\n"
    },
    {
      "commit": "6f2eb6d7a642b842976f5eeac2733b6f7e128711",
      "tree": "5c9185214b6bd76b2461911be4e5d13c6fb83b87",
      "parents": [
        "c021aaaf6bd085d7332a33232e8118bab50ecc1f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 13 15:26:17 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 13 15:26:17 2015 -0700"
      },
      "message": "Fix Android Keystore key factories to obey JCA contract.\n\nAndroid Keystore provider\u0027s KeyFactory and SecretKeyFactory\nimplementations were throwing UnsupportedOperationException instead of\nInvalidKeyException/InvalidKeySpecException from their\ntranslateKey/generateKey methods.\n\nBug: 22459811\nChange-Id: I6d5a5dc1bed724e858ad324d558b7480b9b848da\n"
    },
    {
      "commit": "d25093d2fd151638a108a110484e579cc1dcaf54",
      "tree": "d146d9a6adeefb7d7d1044285b50aa3bd21f5178",
      "parents": [
        "3aa1b1e5ec3a4e2074ea054b931cd68df45b43cf",
        "5c38e7918aea36ee8f516793d5641b05a8de710e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jul 08 19:32:02 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 08 19:32:32 2015 +0000"
      },
      "message": "Merge \"Reject AlgorithmParameters of wrong type.\" into mnc-dev"
    },
    {
      "commit": "5c38e7918aea36ee8f516793d5641b05a8de710e",
      "tree": "155a7595bf30947878248930c949b41bf391f22b",
      "parents": [
        "46c272d6bfc0dd5bbeeb536a9057fa18b754f9ba"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jul 07 15:39:10 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jul 07 15:39:10 2015 -0700"
      },
      "message": "Reject AlgorithmParameters of wrong type.\n\nThis makes Android Keystore Cipher implementations reject rather than\nignore AlgorithmParameters of wrong algorithm type. The danger in not\ndoing so is that a Cipher will produce output that does not actually\ndepend on the provided AlgorithmParameters.\n\nBug: 22330716\nChange-Id: Ifa9de2c74f2fe4b738a3731c895059dddd075a13\n"
    },
    {
      "commit": "024bce82292786f9b71da488f06a0bb35d029bbf",
      "tree": "313cdfb020a01b348aefe531f4cf058f44d4fde9",
      "parents": [
        "a5c82a6b2adfbad7ac9009fa6feba3e02dad0c04",
        "ca7aaeaeee616d9d1d557ee2fb19dd14783be1f0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jul 07 18:54:32 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 07 18:54:33 2015 +0000"
      },
      "message": "Merge \"Support loading AES keys with authorized digests.\" into mnc-dev"
    },
    {
      "commit": "ca7aaeaeee616d9d1d557ee2fb19dd14783be1f0",
      "tree": "3c01cc34d321b2c4122856d80b98dd0cd394b0cd",
      "parents": [
        "7fe86c4753e88058a7f1a1bf8d0302df9a64bd2e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 06 14:09:01 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 06 14:09:01 2015 -0700"
      },
      "message": "Support loading AES keys with authorized digests.\n\nDue to a bug, Android Keystore failed to load AES keys authorized for\nuse with one or more digests. This CL fixes this bug.\n\nBug: 22300737\nChange-Id: Ia49e27833dddb526565e4dc4977ed1e352e5836b\n"
    },
    {
      "commit": "b6e628644a981b8077b3755b9def4550ff4a46a0",
      "tree": "ab842adc8ff4b36e6372f73d9627f4a6254eb7c9",
      "parents": [
        "7fe86c4753e88058a7f1a1bf8d0302df9a64bd2e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 06 10:31:07 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jul 06 11:27:16 2015 -0700"
      },
      "message": "Avoid IllegalStateException when generating/importing keys.\n\nThis avoids IllegalStateException when generating/importing keys which\nrequire user authentication when the system is not configured to\ngenerate/import such keys (e.g., secure lock screen not set up).\n\nThe documentation states that before generating/importing such keys\napps should check (using public API) whether the system is in a\nsuitable state. However, some apps are not doing that and instead\ncatching the IllegalStateException thrown during key\ngeneration/import. This is a bad practice because this exception is an\nundocumented implementation detail and should thus not be depended\nupon.\n\nThis CL addresses this issue as follows:\n1. Key(Pair)Generator.init now throws a checked\n   InvalidAlgorithmParameterException when the system is in a wrong\n   state. Because in most uses of Key(Pair)Generator .init is\n   immediately followed by .generate, this prevents .generate from\n   encountering this state and does so using a checked exception\n   which is part of public API.\n2. Key import rethrows the IllegalStateException as a checked\n   KeyStoreException which is meant to be thrown if the key cannot be\n   imported for any reason. Key(Pair)Generator.generate unfortunately\n   cannot throw any checked exceptions and thus has to continue\n   throwing unchecked exceptions.\n\nBug: 22262809\nChange-Id: Ic0f7b7a90e0ba63df9139c79b80a8649d2645d2a\n"
    },
    {
      "commit": "a7bdb6c99b7ddb6e17f9c939c138686e0bfdbbc4",
      "tree": "99414df05a8522eea9496e99bdd20a13a9dcee63",
      "parents": [
        "71e3d079d623b93ec8a66afa6a1281896c7cd2c6",
        "59e3baa8ab08c4da270023540ba15268c87e0d67"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Fri Jul 03 16:48:11 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 03 16:48:15 2015 +0000"
      },
      "message": "Merge \"KeyChain: annotate with @WorkerThread\" into mnc-dev"
    },
    {
      "commit": "59e3baa8ab08c4da270023540ba15268c87e0d67",
      "tree": "9c87f8fdec9055c17f9edbd1628ba9c7170dac1d",
      "parents": [
        "fd70942147edec7eb512c72c3fd0f89a3d7fa646"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 30 10:48:06 2015 -0700"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 30 13:08:46 2015 -0700"
      },
      "message": "KeyChain: annotate with @WorkerThread\n\nSeveral methods need to be called off the main UI thread. This is\nthe first documentation of that requirement.\n\nBug: 19440165\nChange-Id: I0303011c0ded6ec1efa92119c1e02a8a39b14a59\n"
    },
    {
      "commit": "fdbc02a433e87da7bc730bd2e773e6d1c84d4e99",
      "tree": "9235f3a2dd06e9eeb55643a66f8badca81246724",
      "parents": [
        "82b3f67711246ad5beaf7702ce16e9d433406d1e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 29 14:39:29 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 29 14:39:29 2015 -0700"
      },
      "message": "Enforce IND-CPA requirement when generating asymmetric keys.\n\nThis enforces the randomized encryption requirement (IND-CPA), if\nrequested, when generating asymmetric key pairs. Whether randomized\nencryption is used depends on the encryption padding modes authorized\nfor the key pair. Thus, if randomized encryption is required, the\nKeyPairGenerator must reject attempts to generate keys authorized for\nencryption using non-compliant padding schemes.\n\nThis is similar to the existing check in AndroidKeyStoreImpl during\nasymmetric key import.\n\nBug: 22179911\nChange-Id: I3d85367259c17bd44198a736ace853d0d3567d5e\n"
    },
    {
      "commit": "903d0fb98817dca284a640dbc853c7fcbbdc8313",
      "tree": "ff21d11dec3828c271cce69800591ad380e96aac",
      "parents": [
        "0f61c7dcc40276788f58300d5d8ca85be2ce0e59"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 25 17:13:30 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 25 18:44:43 2015 -0700"
      },
      "message": "Don\u0027t offer crypto ops for public keys of trusted cert entries.\n\nAndroid Keystore cannot offer crypto operations for public keys of\ntrusted certificate entries (entries without a private key). Prior to\nthis CL it accidentally tried to do so, causing crypto operations on\nthese keys to fail.\n\nThe fix is for Android Keystore to offer crypto operations only for\npublic keys for which there is a corresponding private key in the\nkeystore. Crypto operations on public keys from trusted certificate\nentries will be handled by other installed crypto providers. Those\nproviders don\u0027t need a private key to carry out these operations on\npublic keys.\n\nBug: 22091725\nBug: 21835320\nChange-Id: Ib7d92b067711e4c57128d0db72c08bf288a45ce1\n"
    },
    {
      "commit": "25d2270704e246d897596c991a36233cdc620790",
      "tree": "70f1800de6e8474bbd3140a8a079eae29c3a7b48",
      "parents": [
        "c781405f43ca06041777f2e382c0d5b7bdeac43a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 25 09:04:37 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 25 09:09:04 2015 -0700"
      },
      "message": "Support RSA encrypt using private key and PKCS#1 paddding.\n\nSome apps such as OpenVPN Connect for some reason generate\nPKCS#1-padded RSA signatures using Cipher (initialized in\nCipher.ENCRYPT_MODE with private key!) instead of using Signature.\n\nUnfortunately, RI supports this strange behavior and previous releases\nof Android Keystore did the same. So, we have to continue supporting\nthis craziness.\n\nBug: 22083023\nChange-Id: Ife3950d0d4ceb4e44e08014635312c1252878b69\n"
    },
    {
      "commit": "d23dc502b0a1952887d4453cba98aa2e3d2f5009",
      "tree": "ec5252f24cf19123d994cd084c18902134734b12",
      "parents": [
        "cede20a7c273279a9bc51750bdd99c1383816e3e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 24 12:25:52 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 24 15:42:09 2015 -0700"
      },
      "message": "Make NONEwithECDSA truncate input when necessary.\n\nKeymaster\u0027s implementation of ECDSA with digest NONE rejects input\nlonger than group size in bytes. RI\u0027s NONEwithECDSA accepts inputs\nof arbitrary length by truncating them to the above size. This CL\nmakes Android Keystore\u0027s NONEwithECDSA do the truncation to keep\nthe JCA and Keymaster happy.\n\nThe change is inside AndroidKeyStoreECDSASignatureSpi$NONE. All other\nsmall modifications are for supporting that change by making it\npossible for AndroidKeyStoreSignatureSpiBase to pass in the signature\nbeing verified into KeyStoreCryptoOperationStreamer. This in turn is\nneeded to make it possible for NONEwithECDSA implementation to provide\na wrapper streamer which truncates input.\n\nBug: 22030217\nChange-Id: I26064f6df37ef8c631d70a36a356aa0b76a9ad29\n"
    },
    {
      "commit": "ae6cb7aad56bb006769cd8a69b92af7236644fc1",
      "tree": "e70a45074619bb3e1f97cb5dcfe0c28bbfe60129",
      "parents": [
        "12402dafeaf2ec8255d6331d3e82028d694b87d7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 18:09:35 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 20:04:28 2015 -0700"
      },
      "message": "Keymaster INT, LONG and DATE tag values are unsigned.\n\nThis CL ensures that Android Keystore framework code complies with\nsignedness of keymaster tags. In particular:\n* INT tags are unsigned 32-bit numbers, and\n* LONG and DATE tags are unsigned 64-bit numbers.\n\nThe ensure compliance, KeymasterArguments and KeyCharacteristics\nclasses through which Android Keystore interacts with Keymaster tags\nhave been modified as follows:\n* ENUM and INT tags which used to be conflated are now added/queried\n  via separate methods, because ENUM can remain represented as an int\n  data type whereas INT is now represented as a long data type with\n  permitted range being [0; 2^32).\n* Methods for adding/quering LONG tags have been switched from the long\n  data type to the BigInteger data type and now ensure that the value\n  is in the permitted [0; 2^63).\n* Methods for adding/querying DATE tags now ensure the Date value is\n  in the permitted range [0; 2^63) ms since Unix epoch.\n* Methods for adding tags throw an IllegalArgumentException if the tag\n  type is unsuitable for the method. This is to ensure that tags with\n  invalid values cannot be added through similar methods (e.g., INT tag\n  added via an ENUM tag addition method invoked with a negative value).\n\nBug: 22008538\nChange-Id: I6eefd5cbb561cc52d27de952691af4d9d5e1af1e\n"
    },
    {
      "commit": "90c9e4eb54a9c4b4fbc821b1992f2aee2f2b1e8c",
      "tree": "3adda6bc46dacb89715e293c6c9f285bdc80e1a9",
      "parents": [
        "f1b25bd43464b2603da98ce5f03f41d9819d2374",
        "d6c7799b9a8b00d160a1d2d32c7326132cbc7b7b"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 20:35:23 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 23 20:35:30 2015 +0000"
      },
      "message": "Merge \"Keymaster key validity dates are optional.\" into mnc-dev"
    },
    {
      "commit": "d6c7799b9a8b00d160a1d2d32c7326132cbc7b7b",
      "tree": "69af6ee4fd661f6386eb7f30ed4d93b79e008187",
      "parents": [
        "6d2268a57603e1c60329b93fb853ac2c134cb932"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 12:06:27 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 12:06:27 2015 -0700"
      },
      "message": "Keymaster key validity dates are optional.\n\nThis CL makes Android Keystore framework code add\nKM_TAG_ACTIVE_DATETIME, KM_TAG_ORIGINATION_EXPIRE_DATETIME, and\nKM_TAG_USAGE_EXPIRE_DATETIME tags to the authorizations set only\nif the corresponding time instants were specified through the\nframework-level API. This is fine because these tags are optional as\nit turns out.\n\nBug: 18088752\nChange-Id: I6a5ae4cadb441e61576231815e6bec6e9248bc72\n"
    },
    {
      "commit": "81d299e4b8bb7520881f39303f25b5d68417b9e2",
      "tree": "a4e0e64cfe8bb18134cad489c101471586d8ab08",
      "parents": [
        "bb0e985bed952734f4271672fd804539a66a2d36",
        "856aebe571e2efe332c1258b3131bfbae6f4b396"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 18:58:23 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 23 18:58:25 2015 +0000"
      },
      "message": "Merge \"Don\u0027t fail if self-signed certificate can\u0027t be signed.\" into mnc-dev"
    },
    {
      "commit": "856aebe571e2efe332c1258b3131bfbae6f4b396",
      "tree": "7a3f0d80f8d0fd21ba1390a401af1bd6e26496bd",
      "parents": [
        "6d2268a57603e1c60329b93fb853ac2c134cb932"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 10:54:44 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 10:54:44 2015 -0700"
      },
      "message": "Don\u0027t fail if self-signed certificate can\u0027t be signed.\n\nThis makes Android Keystore\u0027s KeyPairGenerator fall back to generating\na self-signed certificate with an invalid/fake signature when the\nattempt to generate a self-signed certificate with a valid signature\nfails.\n\nThere is a growing number of reasons/authorizations due to which the\ngenerated private key cannot be used to sign the self-signed\ncertificate. It\u0027s safer for KeyPairGenerator to succeed than to fail.\n\nBug: 22033161\nChange-Id: I1ecbd421346166bfd536b5cfbaea169b11f0b1c8\n"
    },
    {
      "commit": "7ecb298c6d5a4af561ed98dbc0ff4040132d01d5",
      "tree": "7973a848a84dcab633e37f503ca34b1b744850c9",
      "parents": [
        "6d2268a57603e1c60329b93fb853ac2c134cb932"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 09:08:06 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 23 09:09:11 2015 -0700"
      },
      "message": "Fix typo in Android Keystore KeyFactory exception message.\n\nThe typo was pointed out by kroot@ in code review of\n4ecd092226fbd748b4a26f3bbb5c4d25a3488fff after it was submitted.\n\nBug: 18088752\nChange-Id: I50d2fa93e1a2d352fe432e34ce98add82a71c483\n"
    },
    {
      "commit": "e26f9d95c6da72c4e96739cb0b743cea3edfd1e6",
      "tree": "ece6e666aa7629b3415bb6bf9377eec8e5c4ebaf",
      "parents": [
        "bf224d93cca7a7db1d65762bab41fb8a65e2b1fe",
        "6e90ade5dd7a3c3cd8a3949c863c6e72f9912233"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 22:27:49 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 22 22:27:51 2015 +0000"
      },
      "message": "Merge \"Adjust minimum size of PKCS#1 RSA padding overhead.\" into mnc-dev"
    },
    {
      "commit": "3867709fb3840fa26072fef66ba7121a0e41871f",
      "tree": "5f6f5f5b683c5df3afdf3ad5f63ff2016fd90daf",
      "parents": [
        "c54bcade1b7ec7e044aca7fe9c60357ad957a8c2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 13:42:46 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 13:42:46 2015 -0700"
      },
      "message": "Document that RSA OAEP requires digest authorization.\n\nRSA encryption/decryption keys used with RSA OAEP padding scheme now\nrequire the key to be authorized for the digest used by OAEP.\n\nBug: 21998286\nChange-Id: I1f5eb1b30a1b574c45ffcabed6096de8671882d3\n"
    },
    {
      "commit": "6e90ade5dd7a3c3cd8a3949c863c6e72f9912233",
      "tree": "5daea962ba97bfc433346dec91a4fc4af789b8f1",
      "parents": [
        "c54bcade1b7ec7e044aca7fe9c60357ad957a8c2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 13:21:59 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 22 13:21:59 2015 -0700"
      },
      "message": "Adjust minimum size of PKCS#1 RSA padding overhead.\n\nThis raises the space overhead estimate by one byte, due to me having\noriginally forgotten that when signing using RSA PKCS#1 padding\nscheme, the plaintext of the RSA operation needs a leading 0 byte.\n\nBug: 21955742\nChange-Id: If78efcd375afd8902a14a2217ddedfea87d4d337\n"
    },
    {
      "commit": "84a378f256bf7925ceb5d2c039a033d3e59b75df",
      "tree": "132c8e27015cbce33888005a5a81bf3cea702dc7",
      "parents": [
        "1e575a0f32a00fc6a2f9a71fe1d1eb4426c71787",
        "ae1e0e9265ce276d33ed47349074f443ea028b93"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 19 22:53:20 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 19 22:53:21 2015 +0000"
      },
      "message": "Merge \"Fix a bug in Android Keystore updateAAD.\" into mnc-dev"
    },
    {
      "commit": "ae1e0e9265ce276d33ed47349074f443ea028b93",
      "tree": "d50f5de4466d38cb9c4bfee346965da4cac30dad",
      "parents": [
        "7e786954e5821ad00335fae5d9c492c855631099"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 19 15:50:45 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 19 15:50:45 2015 -0700"
      },
      "message": "Fix a bug in Android Keystore updateAAD.\n\nThe variant of CipherSpi.engineUpdateAAD which takes ByteBuffers\ndelegated to a byte[]-taking variant of superclass instead of its own\nclass.\n\nBug: 18088752\nChange-Id: I3b426bbdca54bbf7f6f3939589da07b24db14d0d\n"
    },
    {
      "commit": "4ecd092226fbd748b4a26f3bbb5c4d25a3488fff",
      "tree": "4fd9d8822d28ceab1cc0481c8a21fa0b62dd7d57",
      "parents": [
        "8c6750ff0eb2d07039336bf25dc87f10464c42db"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 18 14:18:18 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 18 14:18:18 2015 -0700"
      },
      "message": "Support more KeySpecs in Android Keystore KeyFactory.\n\nThis adds support obtaining RSAPublicKeySpec, ECPublicKeySpec,\nX509EncodedKeySpec from Android Keystore public keys.\n\nUsing a KeyFactory to obtain such specs is the endorsed way for\nobtaining algorithm-specific parameters or X.509 encoding of PublicKey\ninstances.\n\nBug: 18088752\nChange-Id: I2c653238e3c89d9cfc97bea6c8a0ef0c6d039385\n"
    },
    {
      "commit": "240e48d2e1613a4cb2e4d12de6574732c20e91cb",
      "tree": "f59b38d3978d55ecfca89bbf5c566525cbe86dd3",
      "parents": [
        "9cb6a493f4e8bd9914f2841355b3293f90773802"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Wed Jun 17 14:24:14 2015 +0100"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Jun 18 09:52:11 2015 +0000"
      },
      "message": "Use consistent cases for aliases in AndroidKeystoreBCWorkaround.\n\nShould be \"with\" and not \"With\". Has the side effect of fixing\na test that assumes that these names are case-sensitive. While the\ntest must be fixed separately, this is still good for consistency.\n\nbug: 21870226\n\nChange-Id: I884b4abdbb18be064210555aec8e0cd16b0d0bcb\n"
    },
    {
      "commit": "2e3aaa7dc1c40c0145e8d52422f2fb65799a3a60",
      "tree": "07f1102d5bcca558fe3f5a949d2efab4eb97a63b",
      "parents": [
        "97f4d3b40754e4496caeb29ee54c330d8bc9f2d7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 13:58:00 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 13:58:00 2015 -0700"
      },
      "message": "Remove unnecessary PKCS#1 authorization on legacy keys.\n\nThere is no need to authorize PKCS#1 signature padding scheme when\nNONE padding scheme is authorized. NONE authorizes the use of any\npadding scheme.\n\nBug: 18088752\nChange-Id: I73ccb373d577c988acde372d972092278923c4e4\n"
    },
    {
      "commit": "97f4d3b40754e4496caeb29ee54c330d8bc9f2d7",
      "tree": "e57ba64cd76b99bf2ae3bf9f835a209a17a49f5d",
      "parents": [
        "b7bbd629eb0370f36ce27cbc9ecfc7e5c9d8953f",
        "a5e21f0ee2fbf3a6f03e31fca8da459e1fe9e213"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 18:32:22 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 17 18:32:24 2015 +0000"
      },
      "message": "Merge \"Prefer GCM to CBC or CTR in documentation.\" into mnc-dev"
    },
    {
      "commit": "211cb7cb98d654def3a418e81ab0c939c7ff70ba",
      "tree": "3a99b915d69cac973cea1264053f3d0be0921917",
      "parents": [
        "6857ffc940bc204269de4ae2a1937794f254286a",
        "83cc7a347f4775821ebeed04a2244b8b847be516"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 18:28:19 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 17 18:28:21 2015 +0000"
      },
      "message": "Merge \"Improve documentation for keys requiring user auth.\" into mnc-dev"
    },
    {
      "commit": "a5e21f0ee2fbf3a6f03e31fca8da459e1fe9e213",
      "tree": "38fc48f7f993a3794a6150c36796d0ef4ad2dc7d",
      "parents": [
        "563d60e03f8d5961e5578fca66092bd6b8d5496e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 11:24:45 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 11:24:45 2015 -0700"
      },
      "message": "Prefer GCM to CBC or CTR in documentation.\n\nBug: 21786749\nChange-Id: If3824d1321ef1d8730d4384717b0c25d43518fe4\n"
    },
    {
      "commit": "83cc7a347f4775821ebeed04a2244b8b847be516",
      "tree": "eb679ee090881d363c901bf4e14a3b280dbd1612",
      "parents": [
        "e826515469274b4675a5ae6948dd04855ff0b786"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 10:44:11 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 11:08:29 2015 -0700"
      },
      "message": "Improve documentation for keys requiring user auth.\n\nBug: 18088752\nChange-Id: I24eeb33790a74d8d81d10fcdb1eb058d47144c44\n"
    },
    {
      "commit": "4250c8d6435cca2c14839f7adec0a43773d01e3b",
      "tree": "b5ced4e9939b0679345801ac3acfe6381ff339b5",
      "parents": [
        "5ddaa72b9a60dda43c9e199f85990c01b0bf702c",
        "00af27b7d9010eb41e45959dab7c4ff6de119897"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 17:58:33 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 17 17:58:35 2015 +0000"
      },
      "message": "Merge \"Expose AES GCM backed by Android Keystore.\" into mnc-dev"
    },
    {
      "commit": "bf5c91c8cd00cf5f24ff4c3f7957c2e57c956887",
      "tree": "b23d6f4f9e4bb954a83b8a84f934d0e451cc7686",
      "parents": [
        "e826515469274b4675a5ae6948dd04855ff0b786"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 10:51:19 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 10:51:19 2015 -0700"
      },
      "message": "Drop support for P-192 EC keys.\n\nThe minimum EC keys size is now 224 bit. This is because keymaster 1.0\ndoes not support EC keys smaller than 224 bit.\n\nBug: 18088752\nChange-Id: I8010ff2d6ccaeea7dcf86f697aee1d9ebd683cb2\n"
    },
    {
      "commit": "00af27b7d9010eb41e45959dab7c4ff6de119897",
      "tree": "0d93186ccddb924331e91aebec0fb8d6e66a3c93",
      "parents": [
        "e826515469274b4675a5ae6948dd04855ff0b786"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 01 16:07:53 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 17 09:24:06 2015 -0700"
      },
      "message": "Expose AES GCM backed by Android Keystore.\n\nBug: 18088752\nBug: 21786749\nChange-Id: Ica90491037d2920f7635195894ba18882fc4406d\n"
    },
    {
      "commit": "ffdfb57931d1189feef51c4baa866d07265976a3",
      "tree": "fa9e76609ee233569906c4712b7e0ff6c2ac1a6f",
      "parents": [
        "cb3bb3f03ac253052cd42a32a54e63c2ee9b9a95"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 13:13:13 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 13:13:13 2015 -0700"
      },
      "message": "Harden KeyInfo.\n\nThis ensures that KeyInfo instances are truly immutable.\n\nBug: 18088752\nChange-Id: Ic157d3b928b129a02c3cab9dd20ba9936a005813\n"
    },
    {
      "commit": "cb3bb3f03ac253052cd42a32a54e63c2ee9b9a95",
      "tree": "940dc3dc8d6f044404e91118ec664cb69394e3e3",
      "parents": [
        "1b937eebdd38a7bea9b86831370a78bcded4d63c"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 12:31:34 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 12:31:34 2015 -0700"
      },
      "message": "Harden and clean up KeyProtection.\n\nThis ensures that instances of this class are immutable and cleans up\nsome flawed logic discovered when writing up CTS tests.\n\nBug: 18088752\nChange-Id: If9cc33192ada5a8982a2b200ab24cb18331cf958\n"
    },
    {
      "commit": "1b937eebdd38a7bea9b86831370a78bcded4d63c",
      "tree": "7785fb3040cfb4080b784aa3b85ac8f6186ab5dd",
      "parents": [
        "fa4b7fb856a0f978529626fabcddf45fd57ecc3e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 09:51:20 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 16 12:11:10 2015 -0700"
      },
      "message": "Harden and clean up KeyGenParameterSpec.\n\nThis ensures that instances of this class are immutable and cleans up\nsome flawed logic discovered when writing up CTS tests.\n\nBug: 18088752\nChange-Id: I7a27dbfc3445599bccabbd26e39535ce988a2ab2\n"
    },
    {
      "commit": "a8232452b6bea3c291a56a4e005e7a95eb99c5de",
      "tree": "423e8e7872ae66677a3f908b8255d2c3cbde53d6",
      "parents": [
        "9f6d39f84423d59705c0c7a8746d40cc610caee7",
        "f78dd677e991ba8f76f3a6d4272ff5deef3faa69"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 22:42:02 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 15 22:42:04 2015 +0000"
      },
      "message": "Merge \"Fix Android Keystore key gen for keys requiring user auth.\" into mnc-dev"
    },
    {
      "commit": "f78dd677e991ba8f76f3a6d4272ff5deef3faa69",
      "tree": "d2e1720b1594e1d105da3d9a5cb4bfab12af6fe8",
      "parents": [
        "898be8bc76c873cf885d7bdf293b4f58563a1648"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 15:16:09 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 15:22:19 2015 -0700"
      },
      "message": "Fix Android Keystore key gen for keys requiring user auth.\n\nWhen Android Keystore generates an asymmetric key pair, it needs to\ncreate a self-signed certificate for that pair, in order to expose\nthe key pair in the JCA KeyStore abstraction through which keys are\nlater retrieved. The self-signed certificate is normally signed with\nthe private key.\n\nThis CL avoids using the private key to sign the certificate if the\nprivate key can be used only once the user has been authenticated.\nFor such keys, a fake (non-verifying) signature is used on the\ncertificate, same as for cases where the key is not authorized for\nsigning.\n\nBug: 21852844\nChange-Id: Id78bc1f51d12950db4e37c1e0da6c60057d4e693\n"
    },
    {
      "commit": "1923da348b28be583cfbb8d6347ece52fc0873ed",
      "tree": "9435f56bec0f496779044cddfbe648fd7b61ba0c",
      "parents": [
        "6ef3d7d283e1e8b7ea848e25306f7696b349c038",
        "3264599e12df966379e153d113f6597040b284e6"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 17:45:45 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 15 17:45:48 2015 +0000"
      },
      "message": "Merge \"Remove EcIesParameterSpec until it\u0027s needed.\" into mnc-dev"
    },
    {
      "commit": "3264599e12df966379e153d113f6597040b284e6",
      "tree": "47fa9d74aa26fa338272faaaf467689a59bd8b0a",
      "parents": [
        "898be8bc76c873cf885d7bdf293b4f58563a1648"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 09:55:36 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 15 09:55:36 2015 -0700"
      },
      "message": "Remove EcIesParameterSpec until it\u0027s needed.\n\nThis class was added in Android M to enable us to expose ECIES. ECIES\nis not going to happen in Android M. I\u0027m thus removing this unused\nclass until such time when it\u0027s needed.\n\nBug: 18088752\nChange-Id: I16ab1bbd0b4334419c9a8f29d64661c150aa8d32\n"
    },
    {
      "commit": "acb7efd0d6dbde2506bb333e400a281f422df3fc",
      "tree": "4f894d3b68c89f985f6a31a5ea092483f9a8c953",
      "parents": [
        "6cb8e30bb7e79cb694bf44d185da201e9deb9363"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 13:31:50 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 14:29:07 2015 -0700"
      },
      "message": "Document when self-signed certs have invalid signature.\n\nThis updates the Javadocs of Android Keystore to explain what key\nauthorizations are needed for the self-signed cert create at key\ngeneration time to have a valid signature.\n\nBug: 18088752\nBug: 21777596\nChange-Id: Id02425133f094a0c5a02e96f4c63aab7175cba5b\n"
    },
    {
      "commit": "6cb8e30bb7e79cb694bf44d185da201e9deb9363",
      "tree": "30c35f297274ec98d6bba5cdd2b31fe79c46e71d",
      "parents": [
        "768695a899825561a61f70740f642be0ed35c39f",
        "7c475cc7c3f1159d5a8115382deb5332aca76144"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 19:54:18 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 19:54:20 2015 +0000"
      },
      "message": "Merge \"Fix Android Keystore KeyPairGenerator for RSA PSS keys.\" into mnc-dev"
    },
    {
      "commit": "768695a899825561a61f70740f642be0ed35c39f",
      "tree": "03728a7de09c5baf413ec4e0fff61018c6163b68",
      "parents": [
        "82d99f5b0b49270c3d486206e62020463ccd5e81",
        "dcf3d35f23ba46f17251d4181eee4675691f3380"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 19:54:06 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 19:54:19 2015 +0000"
      },
      "message": "Merge \"Update Javadocs to reflect meaning of digest and padding NONE.\" into mnc-dev"
    },
    {
      "commit": "7c475cc7c3f1159d5a8115382deb5332aca76144",
      "tree": "bd9472c76d5cf03320482e03b69f31e74c5d5a90",
      "parents": [
        "738241f93c066a2ef233dd0e12661bf808bfd915"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 12:16:45 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 12:22:58 2015 -0700"
      },
      "message": "Fix Android Keystore KeyPairGenerator for RSA PSS keys.\n\nThis fixes a bug where key pair generation fails for RSA signing keys\nwhich are not authorized for PKCS#1 signature padding, such as keys\nauthorized only for the RSA PSS signature padding scheme.\n\nThe issue was that the KeyPairGenerator was failing when attempting to\nsign the self-signed certificate (needed by Android Keystore) using\nPKCS#1 padding for which such keys are not authorized. The solution is\nto not attempt to sign these certificates and instead use a fake\nsignature.\n\nBug: 21809600\nChange-Id: I4f04fcf78174937046d2534e0485c6940eae673f\n"
    },
    {
      "commit": "a72b55195c23fc06d1600efe8f6aac85290c7f8f",
      "tree": "db4c12e35a731ebd477081b2cc95dad04bbd7fe1",
      "parents": [
        "738241f93c066a2ef233dd0e12661bf808bfd915"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 10:00:36 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 10:35:46 2015 -0700"
      },
      "message": "Obtain entropy later in crypto operations, when possible.\n\nThis makes Android Keystore crypto operations defer pulling entropy\nfrom provided SecureRandom until KeyStore.finish, where appropriate.\nSuch as when performing asymmetric encryption or generating\nsignatures.\n\nBug: 18088752\nChange-Id: I4a897754e9a846214cf0995c5514f98cf0edd76b\n"
    },
    {
      "commit": "dcf3d35f23ba46f17251d4181eee4675691f3380",
      "tree": "cf2f654899dd9c2c85d8c370eaa0679a94facde6",
      "parents": [
        "f7bc24c58b4fef796c23725222517beaf8a6e4d3"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 14:44:46 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 17:55:49 2015 -0700"
      },
      "message": "Update Javadocs to reflect meaning of digest and padding NONE.\n\nThis also adds information about what digests and paddings may need to\nbe specified for keys used in TLS/SSL for client or server\nauthentication.\n\nBug: 21777596\nChange-Id: Icd495458c38c4f912b21a64ca7aab2c88d76461c\n"
    },
    {
      "commit": "f7bc24c58b4fef796c23725222517beaf8a6e4d3",
      "tree": "0daa85fe23883c6c9e96d2a004196a0f5937e5fd",
      "parents": [
        "25f3a7d19b2fb9b33cb83d3d8f90c724cd26c9c9",
        "bce7efcabfd8494d86e6eedba4e64da2b617a7ca"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 12 00:26:07 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 12 00:26:21 2015 +0000"
      },
      "message": "Merge \"Update Javadocs: all new features supported for asymmetric crypto.\" into mnc-dev"
    },
    {
      "commit": "bce7efcabfd8494d86e6eedba4e64da2b617a7ca",
      "tree": "c0d833b630312229736843896a5e66b93f8f22e2",
      "parents": [
        "8a26514687ccf651eb73d5acdd3ae7c62d247d97"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 14:48:06 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 14:48:06 2015 -0700"
      },
      "message": "Update Javadocs: all new features supported for asymmetric crypto.\n\nBug: 20912868\nChange-Id: I633d3caa3f40dd0b038b2f7e75825614bed2c0f5\n"
    },
    {
      "commit": "a99b8b5e3fe456b74b9f86e12bebebb5e418f58e",
      "tree": "f0d63f11cf4443531abc30effc3c4d9b9e8a0193",
      "parents": [
        "8a26514687ccf651eb73d5acdd3ae7c62d247d97"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 13:27:34 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 11 13:41:04 2015 -0700"
      },
      "message": "Do not require USE_FINGERPRINT for getAuthenticatorId.\n\nThis removes the requirement to hold the USE_FINGERPRINT permission\nto successfully invoke FingerprintManager.getAuthenticatorId().\n\nThis is needed because Android Keystore classes which run inside app\nprocesses occasionally need to access this authenticator ID. The\naccess however is not necessarily triggered by the developer using\nAPIs to do with fingerprints. Thus, if an app does not hold the\nUSE_FINGERPRINT permission and uses Android Keystore API, it may\nunexpectedly encounter a SecurityException.\n\nIt\u0027s OK to provide access to authenticator ID without requiring\nUSE_FINGERPRINT permission because there are other ways to access\nthis ID without holding that permission, such as though hidden\nKeyStore API.\n\nOnce Android Keystore code is restructured to no longer require\naccess to authenticator ID, this CL can be reverted.\n\nBug: 21030147\nChange-Id: I9af29830abce34c46e29e5c1682cc3ab88c95c00\n"
    },
    {
      "commit": "4a0ff7ca984d29bd34b02e54441957cad65e8b53",
      "tree": "02e9eafdb05f423aa757bc2c94ad7ca6c323eae8",
      "parents": [
        "f22030d1c59aca4f9ad2af7d4c4d646b0b619f27"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 09 13:25:20 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 10 14:50:55 2015 -0700"
      },
      "message": "Android Keystore keys are no longer backed by Conscrypt.\n\nThis switches Android Keystore asymmetric keys from being backed by\nConscrypt (via keystore-engine which is an OpenSSL/BoringSSL ENGINE\nwhich talks to keystore via the old KeyStore API) to being backed by\nthe AndroidKeyStore Provider which talks to keystore via the new\nKeyStore API. In effect, this switches asymmetric crypto offered by\nAndroid Keystore from old Keystore API to new KeyStore API, enabling\nall the new features such as enforcement of authorizations on key use.\n\nSome algorithms offered by Android Keystore, such as RSA with OAEP\nor PSS padding schemes, are not supported by other providers. This\ncomplicates matters because Android Keystore only supports public key\noperations if the corresponding private key is in the keystore. Thus,\nAndroid Keystore can only offer these operations for its own public\nkeys only. This requires AndroidKeyStore to use its own subclasses of\nPublicKey everywhere. The ugliest place is where it needs to return\nits own subclass of X509Certificate only to be able to return its\nown subclass of PublicKey from Certificate.getPublicKey().\n\nBug: 18088752\nBug: 19284418\nBug: 20912868\nChange-Id: Id234f9ab9ff72d353ca1ff66768bd3d46da50d64\n"
    },
    {
      "commit": "6a0b8f4d567cf9043f78af5ad3a37e20eb448312",
      "tree": "92b60341fc8c41735724b9d601a39436a90264e5",
      "parents": [
        "8ef015be24e8eafe109f306e57146926479972eb",
        "3ceb1a04b44539c2b2c3afec6df487fe128911f2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 09 20:17:42 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 09 20:17:44 2015 +0000"
      },
      "message": "Merge \"Switch Android Keystore key gen and import to new KeyStore API.\" into mnc-dev"
    },
    {
      "commit": "3ceb1a04b44539c2b2c3afec6df487fe128911f2",
      "tree": "142abcf7c31076ba1501159baaecc95a6a39c5c2",
      "parents": [
        "3eb63dc35e7ac0335defe4f8e7b42f5dcc390b42"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jun 05 15:51:06 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 09 13:08:02 2015 -0700"
      },
      "message": "Switch Android Keystore key gen and import to new KeyStore API.\n\nThis makes Android Keystore\u0027s asymmetric key generation and import\nuse the new KeyStore API (similar to keymaster 1.0 API).\n\nBecause the resulting private keys will be used through\nConscrypt/keystore-engine which uses the old Keystore API, this CL\nimplements a temporary workaround where all generated and imported\nkeys are authorized for padding NONE and digest NONE, in addition to\npadding schemes and digests requested by the user of the Android\nKeystore API. This workaround is needed because keystore-engine uses\ndigest NONE and padding NONE for all its crypto operations.\n\nBug: 18088752\nBug: 20912868\nChange-Id: Idc709039d091294265bd000160b5507f13825849\n"
    },
    {
      "commit": "508e665ceaee3e973c17588e8830030662f24b1f",
      "tree": "876972071b79259be1e36e2ff3a07f86115904c3",
      "parents": [
        "3eb63dc35e7ac0335defe4f8e7b42f5dcc390b42"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 18:34:01 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Jun 09 10:56:34 2015 -0700"
      },
      "message": "Support for Android Keystore Cipher.wrap and unwrap.\n\nCipher.wrap and .unwrap are supported by Android Keystore in released\nversions of Android. The new Android Keystore provider should thus\ncontinue supporting these for backward compatibility.\n\nBug: 18088752\nChange-Id: I95319b13d5c4e9681f6539016e6449d73f81131d\n"
    },
    {
      "commit": "469cbf5156ad54650726ade59f2ee5aa01359ec2",
      "tree": "0da14fe1f3c95a9ad97b5cd389db6b5d0e297159",
      "parents": [
        "266894644a160a93949cb82f5f969bef4ad91532"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 12:36:27 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 13:22:53 2015 -0700"
      },
      "message": "Deprecate KeyChain.isBoundKeyAlgorithm.\n\nThis is bad API. There was never a guarantee that when this method\nreturns true for a key algorithm (e.g., RSA or EC), then all keys of\nthat type will be imported into secure hardware. For example, the\nsecure hardware may reject a key if it\u0027s of unsupported size or uses\nan unsupported public exponent or EC curve. In that case, the key\nwill be imported into keystore/KeyChain without being backed by secure\nhardware.\n\nBug: 18088752\nChange-Id: I8daa574a2e703a347d09d93401cd1ea2d0162ed9\n"
    },
    {
      "commit": "266894644a160a93949cb82f5f969bef4ad91532",
      "tree": "c06d9f01500cb4f2e09e03e922f53d8561537e07",
      "parents": [
        "2c500236f4892b62b4df140f7e61f219a07371e0",
        "4350babc028822e8905190d88a9f5b8c6ffce8ec"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 18:11:15 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 08 18:11:21 2015 +0000"
      },
      "message": "Merge \"Remove deprecated android.security.KeyStore methods.\" into mnc-dev"
    },
    {
      "commit": "2c500236f4892b62b4df140f7e61f219a07371e0",
      "tree": "f407cd0c036e6acd4fe986f63adcbc648b5b0fb8",
      "parents": [
        "5b688e848c05d8ce0903348b3644184df3d5711a",
        "5552c89fa9cb5ac72edbbcb5a71ef14a07f5ea11"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 18:10:05 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 08 18:10:09 2015 +0000"
      },
      "message": "Merge \"RSA encrypt with private key in Android Keystore.\" into mnc-dev"
    },
    {
      "commit": "4350babc028822e8905190d88a9f5b8c6ffce8ec",
      "tree": "2225ba548ce55506a6a8e8a23fe7549ae7e4d60b",
      "parents": [
        "e1f3214e72b63ed7cbe368005622055f80da0e0d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 10:14:58 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 08 10:14:58 2015 -0700"
      },
      "message": "Remove deprecated android.security.KeyStore methods.\n\n* delKey -\u003e delete\n* getPubkey -\u003e exportKey\n* saw -\u003e list.\n\nBug: 18088752\nChange-Id: Ifb794f91a42646d67da1340ee16765cbaf255a49\n"
    },
    {
      "commit": "5552c89fa9cb5ac72edbbcb5a71ef14a07f5ea11",
      "tree": "ff25ceae092d5727eeb17b891410e8460baf49f1",
      "parents": [
        "3a4656e8874a7bfa11ff8c68dfca87b7f399ff36"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 14:45:54 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 17:11:28 2015 -0700"
      },
      "message": "RSA encrypt with private key in Android Keystore.\n\nThis adds support for RSA encryption using private key and no padding.\nThis mode of operation is needed because JCA does not offer an RSA\nSignature primitive that does not apply padding.\n\nBug: 18088752\nBug: 20912868\nChange-Id: I0b481b4c19916f601aa270fada5eabfb12987e8d\n"
    },
    {
      "commit": "2c37807801dce09b0f0ba1e6360d84b163d88abe",
      "tree": "c951451a16f5116d56d946c46e9fc82cab4a4945",
      "parents": [
        "dde606df7f20f5d14b9d1440f1bd80e8d0d3969c",
        "97a27a73e6c5f5800303596ceebf314d90429d35"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 22:16:17 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 04 22:16:19 2015 +0000"
      },
      "message": "Merge \"Export KeyFactory backed by Android Keystore.\" into mnc-dev"
    },
    {
      "commit": "cb94dd1cee4ec3cc8ebc1fe3df92d72071768e9d",
      "tree": "f2ef2446d9347874c582874a97b260f584f46a87",
      "parents": [
        "16422b25f7a814be0c3ceba44a4e9e62b10427a5",
        "ccbe88a505848896e59ef8eb4e8405037ba94e88"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 21:19:36 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 04 21:19:37 2015 +0000"
      },
      "message": "Merge \"Expose RSA and ECDSA Signature from Android Keystore Provider.\" into mnc-dev"
    },
    {
      "commit": "df6c67028a0341a5b05d5097e12ae4d0cbb69fa4",
      "tree": "f72cc04646a5f3c030807f3104737b1d601b206d",
      "parents": [
        "b070e486c8afb2b83483759ec9966c585f7a8b59",
        "6c03bf523d6b0e4edfade726ed0ee1c49c4d0f69"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 21:06:11 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 04 21:06:29 2015 +0000"
      },
      "message": "Merge \"Streamline Android Keystore delete entry operation.\" into mnc-dev"
    },
    {
      "commit": "b070e486c8afb2b83483759ec9966c585f7a8b59",
      "tree": "4dd4e26c83b5e21612717c06073486b59df666f5",
      "parents": [
        "05ae9b56aec7c1a261eb84741b43e40351d20bd4",
        "4bbfeb4856468271829f7291c3df102746806c83"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 21:05:39 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 04 21:05:41 2015 +0000"
      },
      "message": "Merge \"Reliably delete keys if key generation fails.\" into mnc-dev"
    },
    {
      "commit": "ccbe88a505848896e59ef8eb4e8405037ba94e88",
      "tree": "c707599f9b135d0cf8648127ef8b34984b5837b1",
      "parents": [
        "cb9400aa23b81f12d8af198187fc799d6bcf164a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 03 14:30:10 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 13:42:43 2015 -0700"
      },
      "message": "Expose RSA and ECDSA Signature from Android Keystore Provider.\n\nThe RSA Signature supports PKCS#1 and PSS padding.\n\nBug: 18088752\nBug: 20912868\nChange-Id: I03cdc86d1935af36f7c87a0b23d67f813829cfb0\n"
    },
    {
      "commit": "97a27a73e6c5f5800303596ceebf314d90429d35",
      "tree": "dd19b573980a3f1862a6b5c15cefbbf40551c298",
      "parents": [
        "cb9400aa23b81f12d8af198187fc799d6bcf164a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 13:04:43 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 13:19:50 2015 -0700"
      },
      "message": "Export KeyFactory backed by Android Keystore.\n\nThe KeyFactory can be used to obtain information (KeyInfo) about\nAndroid Keystore private keys.\n\nBug: 18088752\nChange-Id: Ied1a69928f391537de6765cef7dc7d7241cf62bb\n"
    },
    {
      "commit": "43e77bf6209bd964bd9cc568b5f37b26401956b3",
      "tree": "762849d22bfba9b5474f94b7ddc477e201ed39e1",
      "parents": [
        "581cc1ee59d01fe4b4a31618ab4aedfa639e42b0",
        "8a07701f3817ad0b76b82cfc464868e8f57e359d"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Thu Jun 04 19:48:27 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 04 19:48:29 2015 +0000"
      },
      "message": "Merge \"Add optional additional entropy to finish\" into mnc-dev"
    },
    {
      "commit": "6c03bf523d6b0e4edfade726ed0ee1c49c4d0f69",
      "tree": "0b7b4541bf73c999b79639f513748c8990fd0961",
      "parents": [
        "cb9400aa23b81f12d8af198187fc799d6bcf164a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 11:36:26 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 11:36:26 2015 -0700"
      },
      "message": "Streamline Android Keystore delete entry operation.\n\nThis ensures that all four entry subtypes are deleted.\n\nBug: 18088752\nChange-Id: Ia020dbede562a123c8c81cc9449ba5ab4aac61dd\n"
    },
    {
      "commit": "4bbfeb4856468271829f7291c3df102746806c83",
      "tree": "b4463f2f404ed47e7c85587261de83063831336c",
      "parents": [
        "cb9400aa23b81f12d8af198187fc799d6bcf164a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 10:42:59 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Jun 04 10:42:59 2015 -0700"
      },
      "message": "Reliably delete keys if key generation fails.\n\nBug: 18088752\nChange-Id: Iea68f3f96fc872d5628f163a1314ebd080c9d39e\n"
    },
    {
      "commit": "8a07701f3817ad0b76b82cfc464868e8f57e359d",
      "tree": "dc91789c92d2253d39d0d9dd5d79ce30e2d589b5",
      "parents": [
        "85f4b7b38cedddfb0ed9f57555fb81aceca786ac"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri May 29 12:32:51 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Thu Jun 04 10:06:00 2015 -0700"
      },
      "message": "Add optional additional entropy to finish\n\nIf provided the extra entropy will be added to the device before calling\nfinish. If entropy is provided and the device does not support supplying\nadditional entropy then finish will fail with KM_ERROR_UNIMPLEMENTED.\n\n(cherry-picked from commit 9ce30624a448f439e19960d0dd88103c04676e7d)\n\nChange-Id: If26be118bf382604f6f8e96e833b76e6f9e94d58\n"
    },
    {
      "commit": "4f389fd200fee9e055d3f28b20bee3132329a056",
      "tree": "41f5ab7575faf65aba7881aaebe0be0699979a91",
      "parents": [
        "85f4b7b38cedddfb0ed9f57555fb81aceca786ac"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 29 14:22:54 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jun 03 14:00:02 2015 -0700"
      },
      "message": "Expose RSA Cipher from Android Keystore Provider.\n\nThe RSA Cipher supports OAEPPadding, PKCS1Padding and NoPadding\npadding schemes.\n\nBug: 18088752\nBug: 20912868\nChange-Id: Ie050e12705bb553a402760a1d253fdb2247a1d50\n"
    },
    {
      "commit": "966486e134c901ea61195b352fdd81476b3639b4",
      "tree": "5562d3bab21e3f33e4563ef85f4cc8f901e29d92",
      "parents": [
        "e1c68765cf53473e710438f90e42e0cb26dffe1b"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Jun 01 12:57:06 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Jun 01 15:16:06 2015 -0700"
      },
      "message": "Track changes to the keystore binder API\n\nOutput parameters are gone from begin, instead they will returned in the\nOperationResult and begin, update, and finish may return output\nparameters.\n\nChange-Id: I072afeb6c65f6c512b40603824c25686ac44e7c8\n"
    },
    {
      "commit": "37c8b411cdbbd5139b5a0abf762c24671e12657b",
      "tree": "4654e517f42f30b5eb74bfd1e7f2b16a80660c6a",
      "parents": [
        "3aa33b3da04774d76e1a65b749667450dc81532b"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 01 09:52:16 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Jun 01 09:52:16 2015 -0700"
      },
      "message": "No need to specify key size when importing.\n\nThe underlying Keymaster implementation no longer requires that.\n\nBug: 19799085\nChange-Id: I6b651bac5d4825b4ed0981a49bb79aedcf79d749\n"
    },
    {
      "commit": "96d7245c00be386355ec583ac980b024b223218b",
      "tree": "d86071b29a4e29244181bd6914b99f8016c24676",
      "parents": [
        "614b39f3de7747e9e1cd00d8985ec6fa9b356217"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 29 12:39:32 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 29 12:41:22 2015 -0700"
      },
      "message": "Cleanup Binder token resetting.\n\nThis is a follow-up to 7cbcfd4fc1e538bd391a20cdd00dd1494ace2d0e where\nduring the review it was pointed out that the code could be\nstreamlined.\n\nBug: 18088752\nChange-Id: Iecb9fdbc31a0f3cdcb94ddb1b3e7e12a0543a231\n"
    }
  ],
  "next": "614b39f3de7747e9e1cd00d8985ec6fa9b356217"
}
