)]}'
{
  "log": [
    {
      "commit": "3f8d4d840894468f2be8a5b56ff266cef2d71c50",
      "tree": "a6c2457700b1ab3b9bf5207b79c44c8ee315c209",
      "parents": [
        "b33455511b7b704e848c79c9e76e28abe2509178"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 13 09:15:00 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 13 12:49:58 2015 -0700"
      },
      "message": "New AndroidKeyStore API in android.security.keystore.\n\nThis CL addresses the comments from API Council about Android KeyStore\nKeyPairGeneratorSpec, KeyGeneratorSpec and KeyStoreParameter:\n1. These abstractions should not take or hold references to Context.\n2. The Builders of these abstractions should take all mandatory\n   parameters in their constructors rather than expose them as\n   setters -- only optional paratemers should be exposed via setters.\n\nThese comments cannot be addressed without deprecation in the already\nlaunched KeyPairGeneratorSpec and KeyStoreParameter. Instead of\ndeprecating just the getContext methods and Builder constructors, this\nCL goes for the nuclear option of deprecating KeyPairGeneratorSpec and\nKeyStoreParameter as a whole and exposing all of the AndroidKeyStore\nAPI in the new package android.security.keystore. This enables this CL\nto correct all of the accrued design issues with KeyPairGeneratorSpec\n(e.g., naming of certificate-related methods) and KeyStoreParameter.\n\nThis also makes the transition to API Level M more clear for existing\nusers of the AndroidKeyStore API. These users will only have to deal\nwith the new always-mandatory parameters (e.g., purposes) and\nsometimes-mandatory (e.g., digests, block modes, paddings) if they\nswitch to the new API. Prior to this CL they would\u0027ve had to deal with\nthis if they invoked any of the new methods of KeyPairGeneratorSpec\nor KeyStoreParameter introduced in API Level M.\n\nThis CL rips out all the new API introduced into KeyPairGeneratorSpec\nand KeyStoreParameter classes for Android M, thus reverting these\nclasses to the API launched in L MR1. This is because the new API is\nnow in android.security.keystore.KeyGenParameterSpec and KeyProtection\nrespectively.\n\nBug: 21039983\nChange-Id: I59672b3c6ef7bc25c40aa85f1c47d9d8a05d627c\n"
    },
    {
      "commit": "b33455511b7b704e848c79c9e76e28abe2509178",
      "tree": "7db97c830c94630a2ad282b5f4f20d94d2e630ef",
      "parents": [
        "4af455beb79086a960f7205d7b730aa6da015993",
        "cbdd377db84d58dff31a380e85fdd94a27d863c6"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 13 19:47:37 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 13 19:47:38 2015 +0000"
      },
      "message": "Merge \"Ensure key algorithm name of HMAC keys is preserved.\" into mnc-dev"
    },
    {
      "commit": "cbdd377db84d58dff31a380e85fdd94a27d863c6",
      "tree": "6c47679638c0caac460815d929eb6dbb8fe70e93",
      "parents": [
        "55e603ee9de06125751292c84f1b25fb9a78d4e4"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 13 12:30:19 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 13 12:35:15 2015 -0700"
      },
      "message": "Ensure key algorithm name of HMAC keys is preserved.\n\nWhen Android KeyStore loads an HMAC key, it needs to compose the JCA\nkey algorithm name (e.g., HmacSHA256) based on the digests the key is\nauthorized for. A key can be authorized for multiple digests. Thus,\nthe approach is to use the first one for constructing the JCA key\nalgorithm name.\n\nThis CL ensures that when importing HMAC keys the first KM_TAG_DIGEST\ntag is set to the digest of the JCA key algorithm name.\n\nBug: 18088752\nChange-Id: I911ca7427b249ee823d06e988687af6146ebaff8\n"
    },
    {
      "commit": "83ce095c848b972156256855d0f2a2ff4aa068fd",
      "tree": "2df49a13e5294a81ef61be72607e7026f9900fdd",
      "parents": [
        "c69cd0bf7586c57f9662955d798a2ae0eef6ee76"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue May 12 13:00:02 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed May 13 10:57:42 2015 -0700"
      },
      "message": "Add keystore onUserAdded/Removed methods\n\n(cherry-picked from commit 31c2897105e6d71f8e6edeab312d2147bbdbaeb1)\n\nChange-Id: I73fe9344ec5660e58425d5c85d14381820533d57\n"
    },
    {
      "commit": "622fd932fd33c6e86c86c8a24082674ad077a810",
      "tree": "e862748e165a2631417ecff128f36fc180e26e6e",
      "parents": [
        "4b403557bca7b622c187c3b06814e2118ec7d985"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 12:53:23 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 12:53:23 2015 -0700"
      },
      "message": "Flatten KeyStoreKeyProperties constants.\n\nThis moves constants/flags declared in inner classes of\nKeyStoreKeyProperties into KeyStoreKeyProperties, as requested by API\nCouncil.\n\nBug: 21039983\nChange-Id: I84a3c983e13644a027bed9f605ab8044220a352c\n"
    },
    {
      "commit": "03064e25b284d7ee99563658c5966ee590f925f6",
      "tree": "d27c8e7bdcbd43ca9bc75edf4eec1060e78d13f5",
      "parents": [
        "54415439ca8d286c4efaf975a54fe0cc7872c86b",
        "e3049dc953acd5d477c159be8e8b0548bae60cab"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 17:32:29 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 12 17:32:30 2015 +0000"
      },
      "message": "Merge \"Link to magic constants used by AndroidKeyStore API.\" into mnc-dev"
    },
    {
      "commit": "1af25508d674d4d12ccad6aa414f157a79f0fc3b",
      "tree": "25b53c2039be235b8fc8ea0f0f6cb5b089780eeb",
      "parents": [
        "56b96da7e1f1825267662df762609c198a8c41d6"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 10:05:53 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 10:09:00 2015 -0700"
      },
      "message": "Move PointFormat constants into parent class.\n\nThis gets rid of EcIesParameterSpec.PointFormat by moving the\nconstants into EcIesParameterSpec, prefixed with POINT_FORMAT_.\n\nBug: 21039983\nChange-Id: I7a76bb84e0394db9c7f5b0d53526915d5bbdd511\n"
    },
    {
      "commit": "56b96da7e1f1825267662df762609c198a8c41d6",
      "tree": "688386c7b0eb5a35afb523c46f1d2761471c41e0",
      "parents": [
        "3d8c678136ed34e2573a46123681e6a647e5537d",
        "dddd6f73a96a10a07edf486155e3b078380f9146"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 16:56:10 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 12 16:56:15 2015 +0000"
      },
      "message": "Merge \"Hide @IntDef and @StringDef annotations from AnroidKeyStore API.\" into mnc-dev"
    },
    {
      "commit": "dddd6f73a96a10a07edf486155e3b078380f9146",
      "tree": "1594acd27b31a436a62f65c808cf7d46bb9fec58",
      "parents": [
        "e1176f10eba5a65ad23877b210e4d8d886653e6e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 12:48:27 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 12 09:29:56 2015 -0700"
      },
      "message": "Hide @IntDef and @StringDef annotations from AnroidKeyStore API.\n\nBy convention, these annotation classes should remain hidden API.\n\nBug: 18088752\nBug: 21039983\nChange-Id: Ifb5d2910c7dae4e0fd809876eb641f1aaf7a00a6\n"
    },
    {
      "commit": "e3049dc953acd5d477c159be8e8b0548bae60cab",
      "tree": "4dd074c1e7dec067e895b25cd814e206a72e22ab",
      "parents": [
        "faf55219877416c1bdfbdfe5b7d24e35e9971a03"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 13:39:41 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 13:39:41 2015 -0700"
      },
      "message": "Link to magic constants used by AndroidKeyStore API.\n\nThis updates the Javadocs of AndroidKeyStore methods which take\nconstants defined in KeyStoreKeyProperties to contain a link to\nthe corresponding set of constants and an example of a couple of\naccepted constants, to make it easier to understand and find out\nwhat constants to use.\n\nBug: 18088752\nChange-Id: I338134ef136db62a7caca782cb59dbebdc996670\n"
    },
    {
      "commit": "4dc541497dd1b25afb8b0323312800bf80f89eac",
      "tree": "089cdfb6a6b0ec0e1bc665efecb9454df67d7295",
      "parents": [
        "09b15d5bdb2eebc5e63889297789c15e97fa24b5",
        "322e2c3a129f2ace802898c70b240776d068ff18"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 19:47:54 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 11 19:47:55 2015 +0000"
      },
      "message": "Merge \"Add missing value for EcIesParameterSpec.PointFormatEnum.\" into mnc-dev"
    },
    {
      "commit": "322e2c3a129f2ace802898c70b240776d068ff18",
      "tree": "bd5a0840c457556f7a1ca875f3af36fb895c59a4",
      "parents": [
        "e1176f10eba5a65ad23877b210e4d8d886653e6e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 12:37:18 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 12:37:45 2015 -0700"
      },
      "message": "Add missing value for EcIesParameterSpec.PointFormatEnum.\n\nChange-Id: If14fe3c3c7ed123b0fa9d5874db2ad8844e49671\n"
    },
    {
      "commit": "54bb1596e470144932943046ec7a99551d020ba0",
      "tree": "30fa51b740d3e0a09fb54d16077f4a80a4682420",
      "parents": [
        "e1176f10eba5a65ad23877b210e4d8d886653e6e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 12:30:03 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 12:30:03 2015 -0700"
      },
      "message": "Add NonNull and Nullable annotations to AndroidKeyStore API.\n\nThis is to enable Android Lint and Android Studio to flag nullness\nissues at compile time.\n\nBug: 18088752\nChange-Id: I21033b8fcdd989d08c89b50685e47fbb9c74acbf\n"
    },
    {
      "commit": "292102459b07188b72575260b693fa962654aa19",
      "tree": "156b507790332a793b3a40b246b136328945ad14",
      "parents": [
        "0a775ce9801f03071d1e9bcc177d79e6fe350702"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 10:31:12 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon May 11 11:12:34 2015 -0700"
      },
      "message": "Fix KeyStoreTest now that begin requires parameters.\n\nKeystore\u0027s begin operation now requires parameters which describe the\noperation (e.g., algorithm, block mode, padding). This adjusts\nKeyStoreTest to provide the necessary parameters.\n\n(cherry-picked from commit c5e4d7af22793072a2620805f5e0e23bf15e7110)\n\nBug: 19509156\nChange-Id: Ibc665fbc893766a683a4aadc97a64ffdf2d0d85f\n"
    },
    {
      "commit": "5418393c58d1d80fe37a209ab931f6d56bd46a86",
      "tree": "f44684be6f62629d0aa78a0761c444d1ff9896de",
      "parents": [
        "b2fa5f3160cfc9b1703c6970649a926370971ea9"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 15:25:48 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 15:56:59 2015 -0700"
      },
      "message": "Document when encrypted AndroidKeyStore keys are wiped.\n\nThis also drops the boolean parameter from\nKeyGeneratorSpec.Builder.setEncryptionRequired to match the already\nlaunched KeyPairGeneratorSpec.Builder.setEncryptionRequired.\n\nBug: 18088752\nChange-Id: I91a3e8c77958971b1bda8329319f1a0d8043b669\n"
    },
    {
      "commit": "e239f782509583b14c95b1c88bf2b085d1e1b6e1",
      "tree": "22af3db0104f60f11678f7cc29afa67d4c38fd24",
      "parents": [
        "f8a96d16290dbca1b1bdad153ceadad9c7d55111",
        "eedda45ad7d829b4d65936d33e8aa6fa9c9c1ecd"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 22:03:19 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 08 22:03:21 2015 +0000"
      },
      "message": "Merge \"More Javadocs for AndroidKeyStore public classes.\" into mnc-dev"
    },
    {
      "commit": "f8a96d16290dbca1b1bdad153ceadad9c7d55111",
      "tree": "870416db1b57bb959479bb654bd72e6e504a7c20",
      "parents": [
        "db9629eec46a3259a9973c2d597fc0813028694c",
        "a91a8504191d91d288c55821caa5bf00c9be26a2"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri May 08 21:51:03 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 08 21:51:25 2015 +0000"
      },
      "message": "Merge \"Cleanup keystore password changing and unlocking\" into mnc-dev"
    },
    {
      "commit": "a91a8504191d91d288c55821caa5bf00c9be26a2",
      "tree": "e7eece5120d2c08ca3321d58507d979eeca63e45",
      "parents": [
        "1bc3c849ba5e9f23dd7e93012c4b5800b78c221b"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Thu May 07 10:02:22 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri May 08 11:11:43 2015 -0700"
      },
      "message": "Cleanup keystore password changing and unlocking\n\nAdd KeyStore.onUserPasswordChanged for the lockscreen to call when\nthe user changes their password. Keystore will then handle the logic of\ndeleting keys. Instead of calling Keystore.password_uid for both\nunlocking and password changes the behavior has been split into\nKeystore.unlock and onUserPasswordChanged.\n\nChange-Id: I324914c00195d762cbaa8c63084e41fa796b7df8\n"
    },
    {
      "commit": "eedda45ad7d829b4d65936d33e8aa6fa9c9c1ecd",
      "tree": "c5f15c2aeb10bbb78817bcfc6f7255ca82649f00",
      "parents": [
        "3974fb239392099608f969254c4d86e7d13ab32d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 17:34:24 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 10:01:55 2015 -0700"
      },
      "message": "More Javadocs for AndroidKeyStore public classes.\n\nThis adds more detailed class-level Javadocs (incl. examples) for the\nfollowing public API of Android KeyStore facility:\n* KeyPairGeneratorSpec,\n* KeyGeneratorSpec,\n* KeyStoreParameter,\n* KeyStoreKeySpec.\n\nThis also clarifies what encryption at rest means.\n\nBug: 18088752\nChange-Id: I9951a528c34dea322534763b596902a2b6ac64f9\n"
    },
    {
      "commit": "eae1da7788f0f9f37fa142a2df34bfaec1f4253e",
      "tree": "7d697632244fe7ec27b5f5fc99e60f03ef507044",
      "parents": [
        "dc9b2dfae2d2c0ef6d7e8d769a78abc17add537a"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 09:02:38 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri May 08 09:02:38 2015 -0700"
      },
      "message": "Replace \"TEE\" with \"secure hardware\".\n\nThis is to make the Android KeyStore API more generic.\n\nBug: 18088752\nChange-Id: I18bcc96db4af17127e5dc038becc9deb85bb48aa\n"
    },
    {
      "commit": "a4ead5b0d55840be675eee3f11a9dd08bbedaa0d",
      "tree": "02f8646d878d8253f22a7c4843cfe417de6f30a3",
      "parents": [
        "e91768d4b5c5e185b884a25bcf60457fb2ba8a5c",
        "ca84b19f10d5cb6bbaca1f71077bcaea5c84bdc1"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 17:54:43 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 07 17:54:53 2015 +0000"
      },
      "message": "Merge \"Document that new APIs for asymmetric crypto have no effect.\" into mnc-dev"
    },
    {
      "commit": "a6e551c68c60f4319dc4a41f243b6369fcdefbd1",
      "tree": "7d806043753cba615286cc16a5eca90f3eee4e5d",
      "parents": [
        "14bc1c58d4b194ac201b0ed7d04d6f30890ff4a2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue May 05 12:57:50 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 10:50:10 2015 -0700"
      },
      "message": "Check parameters in KeyGenerator.init.\n\nKeyGenerator.init is supposed to check whether all provided parameters\nare OK. This is because KeyGenerator.generateKey cannot throw checked\nexceptions. This CL makes AndroidKeyStore KeyGenerator implementation\ndo just that. Unfortunately, keymaster/kestore doesn\u0027t provide a way\nto check whether all the parameters are OK without actually generating\na key. Thus, this KeyGenerator does its best inside init method\n(before Keymaster is called), and then surfaces any remaining issues\n(flagged by Keymaster/keystore) as unchecked IllegalStateException.\n\nBug: 18088752\nChange-Id: I9a04da880dcbe26c37f41d1477e41bdc74db04c9\n"
    },
    {
      "commit": "14bc1c58d4b194ac201b0ed7d04d6f30890ff4a2",
      "tree": "1239c9abb122a93bb173c2f53ebde6e9ceafcf6a",
      "parents": [
        "38dc15421eaa61d20939d00695d7b7515302c7e8",
        "658cd6601d260a0aad636c3ae6dcef32caf1f491"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 17:43:29 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 07 17:43:30 2015 +0000"
      },
      "message": "Merge \"Use ProviderException in AndroidKeyStore.\" into mnc-dev"
    },
    {
      "commit": "ca84b19f10d5cb6bbaca1f71077bcaea5c84bdc1",
      "tree": "c330922b70b382951a912f019d2a78cfcf8ac6ad",
      "parents": [
        "38dc15421eaa61d20939d00695d7b7515302c7e8"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 09:36:01 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 10:41:54 2015 -0700"
      },
      "message": "Document that new APIs for asymmetric crypto have no effect.\n\nBug: 18088752\nChange-Id: Idfcf57251e76185425b9271d6a2001c5556f9f59\n"
    },
    {
      "commit": "38dc15421eaa61d20939d00695d7b7515302c7e8",
      "tree": "c50dc934b91f48859828e51460422cc872dafb64",
      "parents": [
        "e0895660dac3fc87665d2cf7b0ca6906ab89cec1",
        "83a86c5ce4c04c6e885b08dbdf4a07a18371a3e5"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 17:38:39 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 07 17:38:40 2015 +0000"
      },
      "message": "Merge \"Always mix in additional entropy into keymaster.\" into mnc-dev"
    },
    {
      "commit": "f555887237665fd2cd16182e63dd7ff5f4b7e708",
      "tree": "1796f540064c7b96aa7d577c5d1e15d7b672ab7f",
      "parents": [
        "8d7455fbe406555034e1e6ecc8f99c7949467074",
        "27dd1a22275e92afed612655822438ab3df15356"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 17:34:21 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 07 17:34:25 2015 +0000"
      },
      "message": "Merge \"Adjust the Javadoc for user authentication timeout.\" into mnc-dev"
    },
    {
      "commit": "27dd1a22275e92afed612655822438ab3df15356",
      "tree": "c92faf5ab41e59ea9801d7af048140bad636d37a",
      "parents": [
        "6223ec129b256526d8c30920271b2ee3960bcf1f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 09:51:21 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu May 07 09:51:21 2015 -0700"
      },
      "message": "Adjust the Javadoc for user authentication timeout.\n\nThe Javadoc incorrectly stated that:\n* 0 means authentication required for every use.\n* -1 means that timeout is not specified and the key can be any time.\n\nBug: 18088752\nChange-Id: Ie5f37e74dc207f23443527ac1725ae8a37213d75\n"
    },
    {
      "commit": "4d5443f37f2bc58be8d22ed50024c39a5a1fbc8f",
      "tree": "016b3ed1215270328be03600065a50c341c10137",
      "parents": [
        "6223ec129b256526d8c30920271b2ee3960bcf1f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 15:43:52 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 15:59:56 2015 -0700"
      },
      "message": "Define String constants for AndroidKeyStore crypto.\n\nThis defines the String enum values based on JCA standard names for\nkey algorithm, block mode, padding schemes, and digests. This should\nmake it safer to interact with AndroidKeyStore code that uses JCA\nstrings. This was requested by API Council.\n\nBug: 18088752\nChange-Id: I241d9225a13b85479d0a84e49d0a98cbc77e5817\n"
    },
    {
      "commit": "658cd6601d260a0aad636c3ae6dcef32caf1f491",
      "tree": "63e235dba1a06ea6996f17216319e422b9cf1080",
      "parents": [
        "6223ec129b256526d8c30920271b2ee3960bcf1f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 11:35:59 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 11:37:38 2015 -0700"
      },
      "message": "Use ProviderException in AndroidKeyStore.\n\nThis switches to ProviderException in most places in AndroidKeyStore\nprimitives where checked exceptions cannot be thrown. This is to\nfollow JCA design.\n\nKeyStoreKeyGeneratorSpi is not touched by this CL because there\u0027s\nanother CL already doing that.\n\nBug: 18088752\nChange-Id: If7e93042f973334b9bba004f5a330f831c1e77c1\n"
    },
    {
      "commit": "83a86c5ce4c04c6e885b08dbdf4a07a18371a3e5",
      "tree": "c59da288d9f92fac2374b4a968623dfc5f215c56",
      "parents": [
        "6223ec129b256526d8c30920271b2ee3960bcf1f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 11:11:45 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 11:11:45 2015 -0700"
      },
      "message": "Always mix in additional entropy into keymaster.\n\nThis makes AndroidKeyStore Cipher and KeyGenerator implementations mix\nin additional entropy into keymaster\u0027s RNG regardless of whether they\nwere provided with a SecureRandom instance.\n\nIn practice, they are always provided with a SecureRandom instance.\nHowever, to be safe, when no SecureRandom instance is provided the\ncode now uses a platform-default SecureRandom implementation.\n\nBug: 18088752\nChange-Id: I85bca30d7bdc82c2a342094dcbe6044e48a63dca\n"
    },
    {
      "commit": "9cfc428a244c8b2c7a404a430b1b3991b1950c62",
      "tree": "413c50c9cdb666c8697a48b499934baf7a572f1c",
      "parents": [
        "28a516280a59a81aeecbf4a68057019d59feb872"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 10:16:57 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed May 06 10:16:57 2015 -0700"
      },
      "message": "Keystore uses 0 for invalid operation handles.\n\nThis propagates the concept that 0 is an invalid crypto operation\nhandle to the outside of AndroidKeyStore abstraction.\n\nBug: 20864436\nChange-Id: I1e5abb66c5d41d8fc32aac44372495a708c2b6e2\n"
    },
    {
      "commit": "6358b881f2e483a4d96ff440fb19136e2d25e893",
      "tree": "2949bae99431a32113e593af7ec988012272907c",
      "parents": [
        "033dc46bb949a9a5e42ed51bbff1e055a7c58ca2"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 13:57:44 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 13:57:44 2015 -0700"
      },
      "message": "Handle KM_ERROR_CALLER_NONCE_PROHIBITED.\n\nThis converts KM_ERROR_CALLER_NONCE_PROHIBITED into\nInvalidAlgorithmParameterSpec, as expected by the contract of JCA\nCipher.\n\nBug: 18088752\nChange-Id: I6a01e2d7118c478b27a0d7a5a14a127de8913755\n"
    },
    {
      "commit": "033dc46bb949a9a5e42ed51bbff1e055a7c58ca2",
      "tree": "25d5c6d99ca318a87a9eba266a96670d4182ae53",
      "parents": [
        "3cd8ec3c6832ee142e217e2653cce58de3f1dba1",
        "2d7a85cd2b2ab4dbbe09354c6ae1668bff51a514"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 19:45:54 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 30 19:45:55 2015 +0000"
      },
      "message": "Merge \"Switch from FingerprintService to FingerprintManager.\" into mnc-dev"
    },
    {
      "commit": "3cd8ec3c6832ee142e217e2653cce58de3f1dba1",
      "tree": "8c85af732f0fcf6de5beb229fed5a396fd41491e",
      "parents": [
        "2619ef3918e15bf415fb038e942cfbd98bff4c6a",
        "8c82b4508f0e9f07bb24f106aa817466e39d0cc9"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 19:44:13 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 30 19:44:15 2015 +0000"
      },
      "message": "Merge \"Cleanup logic for per-op auth keys.\" into mnc-dev"
    },
    {
      "commit": "2d7a85cd2b2ab4dbbe09354c6ae1668bff51a514",
      "tree": "beedd6c7ebf8236c659f065462897448c4aca955",
      "parents": [
        "24ea865f0fd3b1ceafb3786bbed20ea345bc5cc0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 11:43:53 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 12:43:05 2015 -0700"
      },
      "message": "Switch from FingerprintService to FingerprintManager.\n\nFingerprintService is a lower layer of abstraction which should\nideally be accessed only via FingerprintManager from\nAndroidKeyStore.\n\nThe main issue with the switch is that it requires a reference to a\nContext. This is now obtained using ActivityThread\u0027s hidden API.\n\nChange-Id: If921e169838ee2cc5c7690b8c8d8ea95c33248aa\n"
    },
    {
      "commit": "e4762675023bd2be20992c7bccce7e555a249e93",
      "tree": "2aa3fa78f047d7a9e07d1ffeb0785ecb1ae44bc6",
      "parents": [
        "4223ce7dc8b1f0544a7d273831b674b6be1e5c4f",
        "2dac95d03399bb9fa59999e4964d7f8bcd485c38"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Thu Apr 30 18:31:35 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 30 18:31:37 2015 +0000"
      },
      "message": "Merge \"Fix the build\" into mnc-dev"
    },
    {
      "commit": "2dac95d03399bb9fa59999e4964d7f8bcd485c38",
      "tree": "0c5dc1c7701dddba38e190d54e6c97de5e6f8779",
      "parents": [
        "3327f3d6886a96ad70f4e96e4b7c26b9555429b6"
      ],
      "author": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Thu Apr 30 11:30:33 2015 -0700"
      },
      "committer": {
        "name": "Svetoslav",
        "email": "svetoslavganov@google.com",
        "time": "Thu Apr 30 11:30:33 2015 -0700"
      },
      "message": "Fix the build\n\nChange-Id: I24e697e989b5f88c3f5e61343fbff60a09aa4c12\n"
    },
    {
      "commit": "7ea50902647b32fa8fcfcd25138b1636bbf97dcd",
      "tree": "b54b6862ee370ef6ee1ea461255ba94a42ce436c",
      "parents": [
        "403ac2d64f7ad53ecf9ccd713951cf151ea2f2bc"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 10:50:45 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 11:11:50 2015 -0700"
      },
      "message": "Track Keymaster changes.\n\n* MAC length is now specified as a parameters to the begin operation\n  instead of as a parameter at key generation/import time.\n* KM_TAG_MAC_LENGTH is now in bits instead of in bytes.\n\nChange-Id: I752fe232d11d3ac39a575a48948215d84ded8fb9\n"
    },
    {
      "commit": "8c82b4508f0e9f07bb24f106aa817466e39d0cc9",
      "tree": "95bc1cb5bdd2fdd27d188ab2fbc3de9e1380e157",
      "parents": [
        "403ac2d64f7ad53ecf9ccd713951cf151ea2f2bc"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 10:13:39 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 10:13:39 2015 -0700"
      },
      "message": "Cleanup logic for per-op auth keys.\n\nThis streamlines the exception throwing logic for per-op auth keys of\nAndroidKeyStore.\n\nChange-Id: I7e27c17fd89d5a7f71f5d7578f584189c5236fb8\n"
    },
    {
      "commit": "403ac2d64f7ad53ecf9ccd713951cf151ea2f2bc",
      "tree": "dee1473b960cf0749c1d5a5febd066fb787a328e",
      "parents": [
        "8310f87d96791e8b864df5e821fe65273c2dd874",
        "4812563f68c87278af68309662433279d10f573e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 30 16:12:32 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 30 16:12:33 2015 +0000"
      },
      "message": "Merge \"AndroidKeyStore keys should not be handled by Bouncy Castle.\" into mnc-dev"
    },
    {
      "commit": "459ef1e7ce2a128f194087f9689df830b7870884",
      "tree": "955a3d9ec25a7ccbd11677b1b943088a29d8e916",
      "parents": [
        "4fbdbbe8f1bbf743ea730774173667835749787e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 20:28:41 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 20:28:41 2015 -0700"
      },
      "message": "Surface KeyPermanentlyInvalidatedException for per-op auth keys.\n\nBug: 20642549\nChange-Id: Ibda270921f13a1fd695264583b0e4bd255f63aed\n"
    },
    {
      "commit": "058de02073a129301d391c22b050f2d65adadb0f",
      "tree": "ac044fdec246ab94419443a66d084145a5531b57",
      "parents": [
        "b62dc82b0c7208f106077b46fc7118da6baa6e13"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 17:32:00 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 19:23:46 2015 -0700"
      },
      "message": "Enable per-use user authenticated keys to be used.\n\nThis makes symmetric Cipher and Mac implementations backed by\nAndroidKeyStore succeed in their initialization when the key is\nconfigured to require user authentication for every use. Users\nof such keys should obtain an instance of Cipher or Mac, initialize\nit with the key, and then authorize the operation by passing this\nCipher or Mac instance to FingerprintManager.authenticate.\n\nBug: 18088752\nChange-Id: Ia15a1e5f8274c3623f665dae1f400ff539639ab1\n"
    },
    {
      "commit": "4812563f68c87278af68309662433279d10f573e",
      "tree": "64c1a78e3339bf04acd427c9a8da78653b71720c",
      "parents": [
        "47ea8b3d6bcef193a2d0ec9f0141525c83a0bcda"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 13:16:30 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 13:28:56 2015 -0700"
      },
      "message": "AndroidKeyStore keys should not be handled by Bouncy Castle.\n\nBouncy Castle JCA provider incorrectly declares that its Cipher, Mac,\nSignature, and KeyAgreement implementations accept arbitrary keys (\nincluding AndroidKeyStore keys). As a result, when a Cipher, Mac,\nSignature, or KeyAgreement instance is requested from JCA without\nexplicitly specifying the provider (which follows best practices)\nand then initialied with an AndroidKeyStore key, JCA chooses the\nBouncyCastle\u0027s implementation, which in turn blows up because it\ncan\u0027t handle such keys.\n\nThe workaround is to install Cipher, Mac, Signature, and\nKeyAgreement implementations backed by AndroidKeyStore as a\nhigher-priority JCA provider than the Bouncy Castle one. This is\nachieved by splitting out the above implementations from\nAndroidKeyStoreProvider into AndroidKeyStoreBCWorkaroundProvider\nand installing the AndroidKeyStoreProvider at the usual priority\n(below Bouncy Castle) and the AndroidKeyStoreBCWorkaroundProvider\nat above Bouncy Castle priority.\n\nBug: 20691708\nChange-Id: I336464f4a49bc30c6845ddc4e84b07f4105424dd\n"
    },
    {
      "commit": "708fc9404501ac42b6cac925fe3e10801b5f633b",
      "tree": "7ac523612e9aac429bf1df2cd0a191551888fba3",
      "parents": [
        "47ea8b3d6bcef193a2d0ec9f0141525c83a0bcda"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 28 18:58:47 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 29 12:44:10 2015 -0700"
      },
      "message": "Add KeyPermanentlyInvalidatedException.\n\nThis enables users of AndroidKeyStore crypto to differentiate between\nthe key being unusable until the user is authenticated\n(UserNotAuthenticatedException) and the key being permanently unusable\n(KeyPermanentlyInvalidatedException). The latter is the case when the\nsecure lock screen has been disabled or reset, and, for keys that\nrequire user authentication for every use, when a new fingerprint is\nenrolled or all fingerprints are unenrolled.\n\nNOTE: The KeyPermanentlyInvalidatedException subsumes/replaces the\nNewFingerprintEnrolledException which has thus been removed. There\nis no way to find out whether a key was permenently invalidated\nspecifically because a new fingerprint was added.\n\nBug: 20642549\nBug: 20526234\nChange-Id: I0206cd99eef5c605c9c4d6afc5eea02eb3b1fe6b\n"
    },
    {
      "commit": "721474bb9cfb76e29e0fe6e98c6b582c6fa78fe4",
      "tree": "4d54cc8e757d9fc85673c601ded88ff7abdb4381",
      "parents": [
        "2333912c6e4d51995a3fd01286c21c4d0328eb1a",
        "560d653e554882218232cd0fe4711be42145727a"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Wed Apr 29 17:17:29 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 29 17:17:33 2015 +0000"
      },
      "message": "Merge \"Add OP_AUTH_NEEDED KeyStore result code\" into mnc-dev"
    },
    {
      "commit": "1eda77ae2122e2b85084eb429fbeecec0b9962e5",
      "tree": "a10b902dce083a2899ab2445b4c5047ee492b321",
      "parents": [
        "2301174eb3598a3290b5c56aae36b19b2c6743ac"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 28 14:21:01 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 28 17:39:30 2015 -0700"
      },
      "message": "Align AndroidKeyStore API with user auth API.\n\nThis simplifies the AndroidKeyStore API around user authentication: no\nmore explicit control over which user authenticators are bound to\nwhich keys.\n\nUser-authenticated keys with timeout are unlocked by whatever unlocks\nthe secure lock screen (currently, password/PIN/pattern or\nfingerprint). User-authenticated keys that need authentication for\nevery use are unlocked by fingerprint only.\n\nBug: 20526234\nBug: 20642549\nChange-Id: I1e5e6c988f32657d820797ad5696797477a9ebe9\n"
    },
    {
      "commit": "560d653e554882218232cd0fe4711be42145727a",
      "tree": "e35363caf18bccbe21f041edffe62a67c49007d1",
      "parents": [
        "6b3e0587a052121fd572fd609abcbc75a89d53d6"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Apr 24 10:32:18 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Apr 28 15:49:29 2015 -0700"
      },
      "message": "Add OP_AUTH_NEEDED KeyStore result code\n\nOP_AUTH_NEEDED will be returned from begin when an operation needs\na per operation authentication before calling update. Note that the\nbegin call succeeds when this error is returned, the token and handle\nare valid.\n\n(cherry picked from commit dabe520a3e6b0d0c40adfd748483fa336c43c366)\n\nChange-Id: I0ba4e997360843b5eb6c1db9c5fcd1c4d5a2c717\n"
    },
    {
      "commit": "22335a9730d80c7282f2a10d617136702850c56f",
      "tree": "be187df10b3e4afc4254c6b471b69f972b51f294",
      "parents": [
        "96778220979cc0029d6f8bba98ca87b5dadeda12",
        "6c1af7ea497b1a2f04bdf45a19d2147f5b9665b9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 24 22:13:26 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 24 22:13:26 2015 +0000"
      },
      "message": "am 6c1af7ea: am 8652bce1: am c71f2648: Merge \"frameworks/base: switch to using NativeConstants.\"\n\n* commit \u00276c1af7ea497b1a2f04bdf45a19d2147f5b9665b9\u0027:\n  frameworks/base: switch to using NativeConstants.\n"
    },
    {
      "commit": "c71f264847eb75d53c0f99e6e1c42a8a1527d3b4",
      "tree": "7a4cd6f804f8a7fa9e63d5ff51dd8d935e7341a8",
      "parents": [
        "e2b9bb45d20102f121660ed361bd4225852a55e0",
        "6bf52c4271bd0483174fe3755caedb778693791e"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 24 21:26:06 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 24 21:26:14 2015 +0000"
      },
      "message": "Merge \"frameworks/base: switch to using NativeConstants.\""
    },
    {
      "commit": "40485f5aac5bc02fb3b24ad03ac71f724e4c340a",
      "tree": "9f79fc0e91e9f1ac1d10487882fc56916d373b11",
      "parents": [
        "8f74a5d811e3cfc168076d05a5d74c34fd04cd27",
        "f9c14b7d169d502b63d1d5b329475a97b02f3848"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 14:11:52 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 14:21:41 2015 -0700"
      },
      "message": "resolved conflicts for merge of f9c14b7d to master\n\nChange-Id: Ifa29891b8ad7979cbc28c54180b9606bb1319ff0\n"
    },
    {
      "commit": "9716b081a6174823d8fb49576e62382e953a1c98",
      "tree": "c6578bf847ccc6175d0293e07d6767a7fdab30c7",
      "parents": [
        "a298a96af77f0cb638b4e2be2ab762d0183ee813",
        "edf5454a14cc53de92eaf1ef15fcfb21d8caccca"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 18:35:37 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 24 18:35:37 2015 +0000"
      },
      "message": "am edf5454a: am 3167fb4b: am 71223ebe: Merge \"Reset AndroidKeyStore Mac and Cipher state when init fails.\"\n\n* commit \u0027edf5454a14cc53de92eaf1ef15fcfb21d8caccca\u0027:\n  Reset AndroidKeyStore Mac and Cipher state when init fails.\n"
    },
    {
      "commit": "ad9ba10ecda10c14e46d00f40fc3e431cc2d9bc2",
      "tree": "2c1234ccb7344f0a70d62e3e6b9066158c508e85",
      "parents": [
        "71223ebe1b2264b7463a02c8dafd779eb3b8c210"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 21 15:17:24 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 10:54:45 2015 -0700"
      },
      "message": "No runtime exceptions during normal use of AndroidKeyStore crypto.\n\nThis changes the implementation of AndroidKeyStore-backed Cipher and\nMac to avoid throwing runtime exceptions during normal use. Runtime\nexceptions will now be thrown only due to truly exceptional and\nunrecoverable errors (e.g., keystore unreachable, or crypto primitive\nnot initialized).\n\nThis also changes the implementation of Cipher to cache any errors\nencountered in Cipher.update until Cipher.doFinal which then throws\nthem as checked exceptions.\n\nBug: 20525947\nChange-Id: I3c4ad57fe70abfbb817a79402f722a0208660727\n"
    },
    {
      "commit": "6c4a842129db70a9d50b9c0a38cda107ddb943dd",
      "tree": "0b6abd3c840dafc57f97d5967bb19a441bd53230",
      "parents": [
        "f5fa550afafa2276abce78b3e5779ce11dc16c68"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 10:47:17 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 24 10:49:11 2015 -0700"
      },
      "message": "Reset AndroidKeyStore Mac and Cipher state when init fails.\n\nFor consistency, this also switches AndroidKeyStore\u0027s Mac init/reset\nimplementation to the same approach as used in Cipher.\n\nBug: 18088752\nChange-Id: Id34caf7cfe04f2058e22d8632890f762927bb31c\n"
    },
    {
      "commit": "6bf52c4271bd0483174fe3755caedb778693791e",
      "tree": "75d70d58aa834eab3351cacc178ffa306684d8d3",
      "parents": [
        "0e29681f98dad8df9f772d86a848190138245f3d"
      ],
      "author": {
        "name": "Adam Langley",
        "email": "agl@google.com",
        "time": "Fri Apr 24 09:59:35 2015 -0700"
      },
      "committer": {
        "name": "Adam Langley",
        "email": "agl@google.com",
        "time": "Fri Apr 24 10:00:45 2015 -0700"
      },
      "message": "frameworks/base: switch to using NativeConstants.\n\nNativeCrypto is a conscrypt class that contained several OpenSSL\nconstants. NativeConstants is the new class that contains the same\nthing, but the latter is automatically generated and thus won\u0027t drift\nfrom the C headers.\n\nBug: 20521989\n\nChange-Id: I45c7b9a6844a06e3ffd09be692ebf733e1ebbbcc\n"
    },
    {
      "commit": "ed6b2eb9f44daaa5752021b5f3fdd59368d67215",
      "tree": "34faba8b1e58fb376f75287b94acbcd3b3748c2b",
      "parents": [
        "733ad46ad268b2343b8d70cccc3fcab09a5e1dd0",
        "10a9f1786b32f1642f10243f60b3bc4a62d95ea4"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 22:44:19 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 16 22:44:23 2015 +0000"
      },
      "message": "Merge \"Set Secure User ID from app level.\""
    },
    {
      "commit": "ed7a218592049b84360895845bd27eda56f30666",
      "tree": "cf9acc0b352880dacf91fd4a14e7e3b08a991f19",
      "parents": [
        "aa0d7f60b6efe093dbf9281ccb89597a421bca1d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 13:51:06 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 15:26:50 2015 -0700"
      },
      "message": "Unhide KeyStoreKeyProperties.Origin.UNKNOWN.\n\nBug: 18088752\nChange-Id: Idaed45d7e84f5f3eb4f623552b60206c504e967a\n"
    },
    {
      "commit": "10a9f1786b32f1642f10243f60b3bc4a62d95ea4",
      "tree": "48bfd3110fd7fb7d1d10cb0d4ce943340ac40332",
      "parents": [
        "aa0d7f60b6efe093dbf9281ccb89597a421bca1d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 13:41:19 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 15:18:13 2015 -0700"
      },
      "message": "Set Secure User ID from app level.\n\nWhen AndroidKeyStore keys require used authentication, they need to be\nbound to a Keymaster\u0027s Secure User ID. This ID will be set by keystore\nsoon. Until then, set it from the framework level (i.e., from apps\nwhich use AndroidKeyStore).\n\nNOTE: Accessing gatekeeper to obtain the Secure User ID will be\nblocked by SELinux policy. To test this code, disable SELinux\nenforcing mode.\n\nBug: 18088752\nChange-Id: I7a3315eb52f0fc978d14d5d0e9613f2f36c6c01e\n"
    },
    {
      "commit": "aa0d7f60b6efe093dbf9281ccb89597a421bca1d",
      "tree": "c6c8bc987c34c597ac2b5a64a1a8f6e252ec3b7b",
      "parents": [
        "8fcd5fee60b468c36aee337da0cadad3cd8cf4cd",
        "b1aa7d0bc821614d943075c0d786cc3f5eeb8c73"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 20:31:46 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 16 20:31:46 2015 +0000"
      },
      "message": "am b1aa7d0b: am 51884f0e: am 499126c4: Merge \"Add Keymaster KM_ORIGIN_UNKNOWN constant.\"\n\n* commit \u0027b1aa7d0bc821614d943075c0d786cc3f5eeb8c73\u0027:\n  Add Keymaster KM_ORIGIN_UNKNOWN constant.\n"
    },
    {
      "commit": "499126c43385ba7bce9b8547b61bafd0c6311147",
      "tree": "98a30f4f41f1ddab3097683ccf9dc568503f03a2",
      "parents": [
        "14a982aa7a38fa89c916c252996632d401b1d043",
        "45d27836bde9e641a57b69a1502924a29b9b3bf1"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 19:50:11 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 16 19:50:12 2015 +0000"
      },
      "message": "Merge \"Add Keymaster KM_ORIGIN_UNKNOWN constant.\""
    },
    {
      "commit": "3abd2b757a2515de67993e2a94290b77ee6b352e",
      "tree": "8e9d085b00ab0e5cdcf19ebd1a71330a94f714a4",
      "parents": [
        "56d16568c0233dacec8f3c20cc987b2b68298e7a",
        "22b5d9b969176a196b0b29ce9441ac3d1d35d208"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 16 17:20:23 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 16 17:20:23 2015 +0000"
      },
      "message": "am 22b5d9b9: am 28a9089f: am 216d18b9: Merge \"Remove IV auto-generation workaround.\"\n\n* commit \u002722b5d9b969176a196b0b29ce9441ac3d1d35d208\u0027:\n  Remove IV auto-generation workaround.\n"
    },
    {
      "commit": "a0d2dddc557326028169dac732eca0657de9cc4d",
      "tree": "591565ec6b84ef1a22f924ac8d6f184d643f58b3",
      "parents": [
        "7f72f74766fed73ae9816fec6031a199f70d1428"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 15 17:20:23 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 15 17:20:23 2015 -0700"
      },
      "message": "Remove IV auto-generation workaround.\n\nThis workaround prevents use of keys with randomized encryption\n(IND-CPA). Since randomized encryption is on by default, it\u0027s better\nto keep it working and break non-randomized encryption (until\nKeymaster is fixed).\n\nBug: 18088752\nChange-Id: I4b11ce72cff705be41d3e66f28b507d6ddc1da79\n"
    },
    {
      "commit": "250dd262910c3a79e87746d3c5519cb3c7e66cab",
      "tree": "1f742144dc80584f12a3ef0ae026d9b1b1d98959",
      "parents": [
        "aaa297056503064eadfa15d9b4fd416f7a35f631",
        "763100e6442494a85cfcb7949c8021836071b1f6"
      ],
      "author": {
        "name": "Shawn Willden",
        "email": "swillden@google.com",
        "time": "Wed Apr 15 18:21:41 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Apr 15 18:21:41 2015 +0000"
      },
      "message": "am 763100e6: am 1cb119d3: am 71ba4e46: Merge \"Unbreak obtaining symmetric keys from AndroidKeyStore.\"\n\n* commit \u0027763100e6442494a85cfcb7949c8021836071b1f6\u0027:\n  Unbreak obtaining symmetric keys from AndroidKeyStore.\n"
    },
    {
      "commit": "5eacd777fedcc73529e2c930dc9f53ca7cf381de",
      "tree": "69636ba60c924465fce84aadd725941fe75e9985",
      "parents": [
        "82992b7270842637d1af3dcc7c9ae954bdfa312c"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 19:00:35 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 19:02:46 2015 -0700"
      },
      "message": "Unbreak obtaining symmetric keys from AndroidKeyStore.\n\nThis tracks 59f977c6988e21b3b8aa6c83428bd6ee1a98816d due to which\nAndroidKeyStore is unable to provide symmetric keys because it\nassumes that the digest field is not repeating.\n\nBug: 18088752\nChange-Id: Ie8ed01449280b7c759e81aeaf2066953b0abaf2a\n"
    },
    {
      "commit": "338e74648ddfe480cf4bfb52cf5a9bb8732e1135",
      "tree": "235b3137adf18ae1451c5208f2dc005ea7a66df4",
      "parents": [
        "7caa691652a901ac354755c44990cca11b5cdb23",
        "1d5a259276c897743936b250cde5e22555604d62"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 14:23:07 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 14:23:07 2015 -0700"
      },
      "message": "resolved conflicts for merge of 1d5a2592 to master\n\nChange-Id: Ia1ea7c9c8c23eeffcd596b96506e961989ccb7a6\n"
    },
    {
      "commit": "8e5fbc70e19c5e294e8f99939161e1a8ff78bd6f",
      "tree": "cec813fa6b240b7d80a6c4f81dce84e94865816e",
      "parents": [
        "1740c625c6b2b39d6b35d08a7bd362ea907cf082",
        "fa2bd4fe5c10b8132a155f0f8d0207435ca2c8dc"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 20:43:54 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 14 20:43:54 2015 +0000"
      },
      "message": "am fa2bd4fe: am 888f5cb7: am ecfda064: Merge \"Make specifying self-signed cert parameters optional.\"\n\n* commit \u0027fa2bd4fe5c10b8132a155f0f8d0207435ca2c8dc\u0027:\n  Make specifying self-signed cert parameters optional.\n"
    },
    {
      "commit": "d693690aee3ee94878ab59ee86d8db8ce5bb3789",
      "tree": "caaf329efead74f9c95b3b68e3257a9db951d2f1",
      "parents": [
        "ecfda06461b8c4a770eb47edb2f7052d7bd0c62d",
        "33454dd5698bf5c9767d126ffafa26672e8d5a14"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 20:22:51 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue Apr 14 20:22:52 2015 +0000"
      },
      "message": "Merge \"No need to specify EC curve name in EcIesParameterSpec.\""
    },
    {
      "commit": "67d21aef98bbafd0def2cacc6254e644e911c8dd",
      "tree": "a097193b974f69e53a2f6fa93b859a729289ff9b",
      "parents": [
        "8704ae464a001e17275257d19eae688ff3a28892"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 12:48:17 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 12:56:17 2015 -0700"
      },
      "message": "Make specifying self-signed cert parameters optional.\n\nThis removes the need to specify the three parameters of the\nself-signed certificate (serial number, subject, validity range) when\ngenerating key pairs in AndroidKeyStore. This is achieved by\nproviding sensible defaults for these parameters:\n* serial number: 1\n* subject: CN\u003dfake\n* validity range: Jan 1 1970 to Jan 1 2048.\n\nBug: 18088752\nChange-Id: I5df918b1ef8b26ed3ddd43828c4c78c9fa58cd43\n"
    },
    {
      "commit": "45d27836bde9e641a57b69a1502924a29b9b3bf1",
      "tree": "a07f0fd1516217d9957fd1bec8e02d734d7d363b",
      "parents": [
        "8704ae464a001e17275257d19eae688ff3a28892"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 10:52:34 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 14 10:52:34 2015 -0700"
      },
      "message": "Add Keymaster KM_ORIGIN_UNKNOWN constant.\n\nThis tracks d359b044830b292f492f8a8df5471f869e358399 from\nhardware/libhardware.\n\nBug: 18088752\nChange-Id: I9a7bd8bdee51c18ae0427eff4efe036213d2b175\n"
    },
    {
      "commit": "9b3e005a4ebd94af2d234cc5470e9691437d3888",
      "tree": "f74f675688bc2f476317d60c91ec3bb537a2698a",
      "parents": [
        "fbf1472d613572d991bc9d68ded4c9e937f13586"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 11:12:57 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 11:34:04 2015 -0700"
      },
      "message": "Unhide the new AndroidKeyStore API.\n\nBug: 18088752\nChange-Id: I93f87cbb1cd04a4a2e34f3d544d678c92cf052ee\n"
    },
    {
      "commit": "fbf1472d613572d991bc9d68ded4c9e937f13586",
      "tree": "c401bc8005739b23f27f108274ba03b8b714069b",
      "parents": [
        "62d1d9efe72752fd00c791f596163856708beac2",
        "a978a3d6e9586af8cc7191cde83dcf2742ea5269"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 10:54:53 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 10:54:53 2015 -0700"
      },
      "message": "resolved conflicts for merge of a978a3d6 to master\n\nChange-Id: Ifd7ca9e1dfa0d50a87f2bafef377fcaeb5d9f6d5\n"
    },
    {
      "commit": "33454dd5698bf5c9767d126ffafa26672e8d5a14",
      "tree": "0f7717ac8106633275805cbdee46451bd019d883",
      "parents": [
        "d1af38a4783c1c0d1a5b7c76a7583beb02a88462"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 10:20:24 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 10:20:24 2015 -0700"
      },
      "message": "No need to specify EC curve name in EcIesParameterSpec.\n\nEC curve parameters will be obtained from the provided EC key.\n\nBug: 18088752\nChange-Id: Ic99353a6566c8d4ce2b6b73d0309edaa40f84fa6\n"
    },
    {
      "commit": "d1af38a4783c1c0d1a5b7c76a7583beb02a88462",
      "tree": "3efd5b40730e19788a609efcf30727f6eac9f633",
      "parents": [
        "8f0e0c1f3d7c02dff6fe4877477af583e490e6ee",
        "5927c9f1b12f597839a664c1c6593114175cbcd8"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 17:01:28 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Apr 13 17:01:30 2015 +0000"
      },
      "message": "Merge \"Use JCA names for block modes, paddings, and digests.\""
    },
    {
      "commit": "5927c9f1b12f597839a664c1c6593114175cbcd8",
      "tree": "8ab57db441fd08482aa2c0bc28b4183de544a632",
      "parents": [
        "a270264c61daa42a5b03bbb1e7f23e77780f8fc0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 13:28:03 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 13 09:59:04 2015 -0700"
      },
      "message": "Use JCA names for block modes, paddings, and digests.\n\nThis replaces int-based enums from KeyStoreKeyConstraints with\nString values commonly used in JCA API.\n\nAs part of under the hood refactoring:\n* KeyStoreKeyCharacteristics and KeyStoreKeyConstraints have been\n  merged into KeyStoreKeyProperties.\n* KeymasterUtils methods operating on KeymasterArguments and\n  KeymasterCharacteristics have been moved to their respective\n  classes.\n\nBug: 18088752\nChange-Id: I9c8b984cb3c28184adb617e34d87f2837bd1d3a1\n"
    },
    {
      "commit": "0e67d0a1b0a7cb0029e76b0e54206aaa25227bf9",
      "tree": "bf1af5799035b76ac2343904d28df1122948d2d0",
      "parents": [
        "ea51127bcbc51f16588755a7b02768269860122c",
        "651dbfde73171ad6451dc8f9288fa4df50f99e4c"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Sat Apr 11 02:56:44 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Sat Apr 11 02:56:44 2015 +0000"
      },
      "message": "am 651dbfde: am ad48c4c9: am c1c6528d: Merge \"Add EcIesParameterSpec to enable ECIES crypto.\"\n\n* commit \u0027651dbfde73171ad6451dc8f9288fa4df50f99e4c\u0027:\n  Add EcIesParameterSpec to enable ECIES crypto.\n"
    },
    {
      "commit": "c1c6528d2b686d5a17e577e7864a319dcba7c224",
      "tree": "43d31faef537af52823707e5d76ae2b02bf8f059",
      "parents": [
        "386c4e9ea976377d87950427472a593c22b1b205",
        "0ee9376ef40351f710d85f268900b485d8e0f527"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Sat Apr 11 02:17:00 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Sat Apr 11 02:17:01 2015 +0000"
      },
      "message": "Merge \"Add EcIesParameterSpec to enable ECIES crypto.\""
    },
    {
      "commit": "03c13e430d7c0fb3e6f5dd5ed436c1b49af5597b",
      "tree": "1d59eb5606e2804e4871e85a8281e39bbcb5afe3",
      "parents": [
        "46bcfb64fb845b2ca9448aabe1a70292f61b483d",
        "93976df800641c9d56b73af6cb4bab9cc9a5f59e"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Apr 10 22:26:25 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 10 22:26:25 2015 +0000"
      },
      "message": "am 93976df8: am 3a9779b6: am 386c4e9e: Merge \"Fix testSaw_ungrantedUid_Bluetooth\"\n\n* commit \u002793976df800641c9d56b73af6cb4bab9cc9a5f59e\u0027:\n  Fix testSaw_ungrantedUid_Bluetooth\n"
    },
    {
      "commit": "0ee9376ef40351f710d85f268900b485d8e0f527",
      "tree": "4c1384967912a17890574f2aac32155e297c4ff4",
      "parents": [
        "ba2836e6cf5a00855e470705741d9e4b9b1a9df9"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 10:20:48 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 14:57:28 2015 -0700"
      },
      "message": "Add EcIesParameterSpec to enable ECIES crypto.\n\nBug: 18088752\nChange-Id: I597b019106c500188e0fbbc9608722668c08b421\n"
    },
    {
      "commit": "386c4e9ea976377d87950427472a593c22b1b205",
      "tree": "603d483f7cbe91a33a73ec680185045f5b5b313a",
      "parents": [
        "97fce66f7d6c5803dfa49f7ab9a0d9e9b009082f",
        "6a5af8cf146aa1fd69449c1138c3e4008ac8b76b"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Apr 10 21:42:23 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 10 21:42:23 2015 +0000"
      },
      "message": "Merge \"Fix testSaw_ungrantedUid_Bluetooth\""
    },
    {
      "commit": "6a5af8cf146aa1fd69449c1138c3e4008ac8b76b",
      "tree": "0c720b8a85482bb9f65e39afe6d812e1c072a8ca",
      "parents": [
        "08d76a946b898af28f3c8125cdf4966195b718fb"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Apr 10 14:15:01 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Apr 10 14:15:17 2015 -0700"
      },
      "message": "Fix testSaw_ungrantedUid_Bluetooth\n\nKeystore.saw returns [] on no result, not null, so the test was\nincorrectly failing.\n\nChange-Id: I22dcf85c5d6c5c0368848bc784c3215c092d9ea8\n"
    },
    {
      "commit": "75f6f31db4c240488224ef58a2b15e77d9553b35",
      "tree": "fd74e6dec19334f11b2c35c9adab0ce6f0d85c50",
      "parents": [
        "d18c59b3e6d855e6a7ec12fd324791cd621a9b53",
        "d31d4771d90277eb246814b6a6f981e0842eb614"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 18:29:53 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 10 18:29:53 2015 +0000"
      },
      "message": "am d31d4771: am c5f9683c: am a270264c: Merge \"Track more changes to keymaster_defs.h\"\n\n* commit \u0027d31d4771d90277eb246814b6a6f981e0842eb614\u0027:\n  Track more changes to keymaster_defs.h\n"
    },
    {
      "commit": "55f7c2770faade3543bebd833124f2f15c0f7455",
      "tree": "96d3f8600c4b0c80a845f87b684b94a9617a860d",
      "parents": [
        "ba2836e6cf5a00855e470705741d9e4b9b1a9df9"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 19:59:00 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 08:58:38 2015 -0700"
      },
      "message": "Track more changes to keymaster_defs.h\n\nKeyStoreTest needed to be adjusted because OCB is no longer supported.\n\nBug: 18088752\nChange-Id: I7594daaa5e97423d34726b07cc79e3ee28418d95\n"
    },
    {
      "commit": "8d33804b01d4fc871b7eed750fa6aad00861f984",
      "tree": "0e18f03f069dbbee15b2071b0bd128923dde4afd",
      "parents": [
        "2c5eaa0157f20b591b4c5f998d81021719b2e261",
        "037dfb9423a0988398b67520546dae5673aa54bb"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 04:34:13 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 10 04:34:13 2015 +0000"
      },
      "message": "am 037dfb94: am 5f8c17b9: am ba2836e6: Merge \"Track recent keymaster_defs.h changes.\"\n\n* commit \u0027037dfb9423a0988398b67520546dae5673aa54bb\u0027:\n  Track recent keymaster_defs.h changes.\n"
    },
    {
      "commit": "2c5eaa0157f20b591b4c5f998d81021719b2e261",
      "tree": "626e59aa1f12ba0959050fe599f72918c2dde0b3",
      "parents": [
        "7819e443b0b571dc0b44d4cfd2f521d68370530a",
        "04a99c7b4435598e4f9d53fadbe5faca4ad7ebdc"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 10 04:33:48 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Apr 10 04:33:48 2015 +0000"
      },
      "message": "am 04a99c7b: am 82cba6aa: am c6eb6288: Merge \"Split key origin into TEE/not and generated/imported.\"\n\n* commit \u002704a99c7b4435598e4f9d53fadbe5faca4ad7ebdc\u0027:\n  Split key origin into TEE/not and generated/imported.\n"
    },
    {
      "commit": "862e6c78148e2254dfeccd5cde2a53bab2a74397",
      "tree": "fcfc52b0216f7e1c70c0adbfe5e52bbece3e6518",
      "parents": [
        "c6eb62882b09cf06e1e70c14e7878593d1a76477"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 16:58:58 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 16:58:58 2015 -0700"
      },
      "message": "Track recent keymaster_defs.h changes.\n\nBug: 18088752\nChange-Id: If47bb7cc7a385941db9f12d478676594e9bc9d86\n"
    },
    {
      "commit": "b503c52f07ff658b9192411580151eb746408d5a",
      "tree": "dab7859fc9aef20b3e4ad0365a6002b603b67ae8",
      "parents": [
        "1d3c77a21e9c8fc59200b42503d9f0effd3f1551"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 15:50:17 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 15:50:17 2015 -0700"
      },
      "message": "Split key origin into TEE/not and generated/imported.\n\nThis is to match the upcoming changes in Keymaster HAL API.\n\nBug: 18088752\nChange-Id: I602d56d1c29a839583be1d9efa681a6fab6642db\n"
    },
    {
      "commit": "43de2a9b521611926810ec53332a08e786a7b5f3",
      "tree": "c520feaff43c781210b31fe460ce1fdcb3de417a",
      "parents": [
        "fba00864f85c3bd91eaed7744cf75c630b3673f4",
        "4acc3392c35e5ad98c8e7b650b1368a2956746b7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 22:21:41 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 22:21:41 2015 +0000"
      },
      "message": "am 4acc3392: am 8676a88e: am 97d2d7c4: Merge \"Fix minor issues in new Javadocs of AndroidKeyStore.\"\n\n* commit \u00274acc3392c35e5ad98c8e7b650b1368a2956746b7\u0027:\n  Fix minor issues in new Javadocs of AndroidKeyStore.\n"
    },
    {
      "commit": "7882a7fcd4e236be1d569cdf657db2b072dfb28a",
      "tree": "f012a1eeba90cb46e8ab19cfd3742b7f9c16a714",
      "parents": [
        "aeae0f384f72d4deca698697b125b82b322f7f90"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 14:33:11 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 14:33:11 2015 -0700"
      },
      "message": "Fix minor issues in new Javadocs of AndroidKeyStore.\n\nBug: 18088752\nChange-Id: Ie84cc6066c82f2659da17a1eb158c2e3acf5094d\n"
    },
    {
      "commit": "981913babf87b8dea78e6a30128ef6907108fba2",
      "tree": "7220f300dfaa83b03d5c41367d287cb712aa4aba",
      "parents": [
        "27077471a309e3bdb35521435872bc2a2b483411",
        "098833c59d8b3984e3983169b460198c2d5e2670"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 20:34:56 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 20:34:56 2015 +0000"
      },
      "message": "am 098833c5: am ec01623b: am aeae0f38: Merge \"Add asymmetric crypto constants for AndroidKeyStore API.\"\n\n* commit \u0027098833c59d8b3984e3983169b460198c2d5e2670\u0027:\n  Add asymmetric crypto constants for AndroidKeyStore API.\n"
    },
    {
      "commit": "27077471a309e3bdb35521435872bc2a2b483411",
      "tree": "a8447e874c862d5fdece779b7d8bdd083eedbdba",
      "parents": [
        "f4ab2b1074cceeaa762e611e04fa59e1e7dee171",
        "c6112eb7057f91df1f885da37564f89a423f64e4"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 20:34:46 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 20:34:46 2015 +0000"
      },
      "message": "am c6112eb7: am 21c4e465: am 8c58ba87: Merge \"Add missing mapping between JCA and keystore HMAC names.\"\n\n* commit \u0027c6112eb7057f91df1f885da37564f89a423f64e4\u0027:\n  Add missing mapping between JCA and keystore HMAC names.\n"
    },
    {
      "commit": "aeae0f384f72d4deca698697b125b82b322f7f90",
      "tree": "5843d160425bf3242cf5207bcd168044032967d4",
      "parents": [
        "8c58ba87bb82993b2bd5dbdd948d15fe3297d08e",
        "ccfea5024b01ddc93737c652080bbbc72d99b7c9"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 20:02:39 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 09 20:02:39 2015 +0000"
      },
      "message": "Merge \"Add asymmetric crypto constants for AndroidKeyStore API.\""
    },
    {
      "commit": "8c58ba87bb82993b2bd5dbdd948d15fe3297d08e",
      "tree": "4f89be19057e67687ecc29ba474b9ebb291a16cb",
      "parents": [
        "d9f32b164be11b6c42ee36ca6945623073e82c99",
        "5324702a02660d75a9dfb231daeb0c3ede75c499"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 19:57:12 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 09 19:57:13 2015 +0000"
      },
      "message": "Merge \"Add missing mapping between JCA and keystore HMAC names.\""
    },
    {
      "commit": "ccfea5024b01ddc93737c652080bbbc72d99b7c9",
      "tree": "4785e2ca4869b4ddc99ab7e0b539de2c39c7aabb",
      "parents": [
        "e26347bb740f5d1bcf51036e63c1b1c91e685f4c"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 11:38:44 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 11:38:44 2015 -0700"
      },
      "message": "Add asymmetric crypto constants for AndroidKeyStore API.\n\nBug: 18088752\nChange-Id: Iee72a4c230f3a2cd30d9eb4d29c4301f3e113f31\n"
    },
    {
      "commit": "52f57de9f618f4b3303fb9b59084e775f5312984",
      "tree": "478431d62e61d0e2821a802c1a06b7afd8f74c6f",
      "parents": [
        "c9d83fc2e0f2e6f24b9f7957cc9650b3e866cf1d",
        "bbf3cc5797293dc915d7ecfe41e85bbe5682548d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 17:31:16 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 17:31:16 2015 +0000"
      },
      "message": "am bbf3cc57: am fd168151: am e26347bb: Merge \"Hide KeyStoreParameter.Builder.setRandomizedEncryptionRequired.\"\n\n* commit \u0027bbf3cc5797293dc915d7ecfe41e85bbe5682548d\u0027:\n  Hide KeyStoreParameter.Builder.setRandomizedEncryptionRequired.\n"
    },
    {
      "commit": "5324702a02660d75a9dfb231daeb0c3ede75c499",
      "tree": "83fafd77b46f64241d0e754d46b0a577bcb43e98",
      "parents": [
        "a482b0469cb98a5743603e1602aa6f37c65d1659"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 09:28:38 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 10:10:34 2015 -0700"
      },
      "message": "Add missing mapping between JCA and keystore HMAC names.\n\nThis is a follow-up to 70376a77280551791dae62586a6bb0c77ed9429a where\nI forgot to update this mapping.\n\nBug: 18088752\nChange-Id: I322a9abd642ddee3bd2b4f49379b121012e32836\n"
    },
    {
      "commit": "b30cc6c3e87e56fc939051ff8d41442a988ff20c",
      "tree": "ef87faf6747a5fe2e0364e91964b8c6d72c57d48",
      "parents": [
        "d278a3f092f2526a28bc222b397f4dadf669b5b9",
        "b9a9d46c776cbdc97d28b8ad61b215a494e19061"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 09:54:05 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 09:54:05 2015 -0700"
      },
      "message": "resolved conflicts for merge of b9a9d46c to master\n\nChange-Id: Ibec45f0f8f9618dd7bd1b34561dccbdd9599cdeb\n"
    },
    {
      "commit": "223977b914b0bb07d19e6f8f49b16ce3118c91ff",
      "tree": "c58aed9daa95a97deeaa269bf4056b2fbfd42ae2",
      "parents": [
        "a482b0469cb98a5743603e1602aa6f37c65d1659"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 09:42:09 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 09:50:34 2015 -0700"
      },
      "message": "Hide KeyStoreParameter.Builder.setRandomizedEncryptionRequired.\n\nThis wasn\u0027t meant to be public API yet.\n\nBug: 18088752\nChange-Id: I40e57fd9121348086ae88ad9fa54f930547b77ba\n"
    },
    {
      "commit": "a482b0469cb98a5743603e1602aa6f37c65d1659",
      "tree": "e20c94ea277160a71b2a3a5ff2284bba9af8e8fb",
      "parents": [
        "f324d245fdd07ac14ab312d1a5fa04a4e8dfcceb",
        "f853f649981ed3cf2f1fbf1363a0932e9736daf6"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 16:12:08 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 09 16:12:09 2015 +0000"
      },
      "message": "Merge \"Require IND-CPA by default for new AndroidKeyStore keys.\""
    },
    {
      "commit": "ada3e01313b3d395ee31918fb004b4afed5769be",
      "tree": "135835cc5c138a8dd6b0ec0a304a6a25cf495db1",
      "parents": [
        "295a93b99f1773638553a0d00898824dc7ba79e5",
        "2d81cb6824e186a6c76d0466e2d58eaa34312673"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 09 01:16:38 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Apr 09 01:16:38 2015 +0000"
      },
      "message": "am 2d81cb68: am 2cb1e1dc: am 1da3d7fc: Merge \"Add more digests to AndroidKeyStore API.\"\n\n* commit \u00272d81cb6824e186a6c76d0466e2d58eaa34312673\u0027:\n  Add more digests to AndroidKeyStore API.\n"
    },
    {
      "commit": "f853f649981ed3cf2f1fbf1363a0932e9736daf6",
      "tree": "28bcbf8b3cfccddb3051803ed814329c96a063a0",
      "parents": [
        "c0d6b7cb752b50ed37197e15cc6f305a0038e61b"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 13:36:22 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 16:28:27 2015 -0700"
      },
      "message": "Require IND-CPA by default for new AndroidKeyStore keys.\n\nBug: 18088752\nChange-Id: I01e44b7155df4326b5c9d83dda57f889c1f23ec7\n"
    },
    {
      "commit": "0e496527fef61f6cf2ebd0559fcdec66825c99b1",
      "tree": "9be4c0771b47a588fb6875674fb85b5b6900d08d",
      "parents": [
        "7513d53cae2273704d25835f97d83f36817e629a",
        "da66cab36e8085a1457565be69b55b38dfee186e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 22:12:55 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Apr 08 22:12:55 2015 +0000"
      },
      "message": "am da66cab3: am f1a1160c: am c0d6b7cb: Merge \"Fix typo\"\n\n* commit \u0027da66cab36e8085a1457565be69b55b38dfee186e\u0027:\n  Fix typo\n"
    }
  ],
  "next": "7513d53cae2273704d25835f97d83f36817e629a"
}
