)]}'
{
  "log": [
    {
      "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "70376a77280551791dae62586a6bb0c77ed9429a",
      "tree": "f5ad15a4e33015a0b7bf7b83668569dd7cb7e8b1",
      "parents": [
        "c0d6b7cb752b50ed37197e15cc6f305a0038e61b"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 14:15:57 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 14:17:21 2015 -0700"
      },
      "message": "Add more digests to AndroidKeyStore API.\n\nThis adds MD5, SHA-1, SHA-224, SHA-384, and SHA-512. SHA-256 was\nalready there.\n\nMD5 is not exposed for HMAC on purpose, because MD5 has been\ndeprecated for years.\n\nBug: 18088752\nChange-Id: I4df3d3f6cf10805c7910a1bdb577a91c85055945\n"
    },
    {
      "commit": "6895a549ec4dc8ba64a814550b6a56073129085c",
      "tree": "5883272b244ed214af0c1ec454324e733bef47b9",
      "parents": [
        "edd0e6c09820b08f22937bbbc00149adc6d66f07"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 11:08:37 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 11:08:37 2015 -0700"
      },
      "message": "Fix typo\n\nChange-Id: I1c47ade98ad3ae41dc55e7bcafcad6901b559c89\n"
    },
    {
      "commit": "edd0e6c09820b08f22937bbbc00149adc6d66f07",
      "tree": "b9aeb9438971292eb45563a9dd0b2d2709062aea",
      "parents": [
        "3283d2d208c0686fa964008e1520179948886adb",
        "d1ccb45945bc45fb5143553d1c59b7d5046b9f6d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 18:04:38 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 08 18:04:39 2015 +0000"
      },
      "message": "Merge \"Refuse to reuse IV in encryption mode in AndroidKeyStore.\""
    },
    {
      "commit": "d1ccb45945bc45fb5143553d1c59b7d5046b9f6d",
      "tree": "dcf49433900cf15feb004954a50297278b2675ef",
      "parents": [
        "558184f52fa7822a0bde230a93e552f137ac91a4"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 09:42:16 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 08 09:46:16 2015 -0700"
      },
      "message": "Refuse to reuse IV in encryption mode in AndroidKeyStore.\n\nThis makes IV-using Cipher implementations backed by AndroidKeyStore\nrefuse to be reused. After Cipher.doFinal completes, invoking update\nor doFinal will raise an exception. This is to make it harder to\nviolate the security best practice of not reusing IV in encryption\nmode.\n\nBug: 18088752\nChange-Id: I5102f9e8b2ff428254294703e48948ea8576603d\n"
    },
    {
      "commit": "38bb642bbb57131ef646c33ffc69ed07e4c957c5",
      "tree": "d1df3e10c09db829278dbbc80ce4a4b76fc05914",
      "parents": [
        "558184f52fa7822a0bde230a93e552f137ac91a4"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 07 15:09:12 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 07 15:09:12 2015 -0700"
      },
      "message": "Add BlockMode.GCM constant to AndroidKeyStore API.\n\nGCM mode is not yet implemented. This is just adding a constant to\nKeyStoreKeyConstraints.BlockMode.\n\nBug: 18088752\nChange-Id: Ibba5b393f56ab9f6bb96d994f110687ab8d65ff3\n"
    },
    {
      "commit": "c46e9e7da4558f6bc99262361fd1ca35c3a44090",
      "tree": "fe03eacff018dff328a9e954d307bf4734de0fa0",
      "parents": [
        "64b0062a373102f83837faade20b469685758139"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Apr 06 15:36:25 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Apr 07 09:18:00 2015 -0700"
      },
      "message": "Make the new AndroidKeyStore API conformant.\n\nThis makes the new AndroidKeyStore API conform with the latest\nKeymaster API changes as well as the latest Android framework API\ndesign guidelines.\n\nKeymaster changes:\n* Multiple paddings, block modes, and digests can be set on a key.\n* \"max uses per boot\" and \"min seconds between use\" restrictions will\n  not be exposed in the framework API.\n* Padding scheme ZERO will not be exposed.\n\nChanges due to Android framework design guidelines:\n* Sets of enum values have been replaced with bitsets represented as\n  ints.\n* Integer has been replaced with int, with null being represented\n  with a special value (e.g., -1 or 0) where possible.\n\nBug: 18088752\nChange-Id: Ib21739aa9b42d48895cb7a681e836a5c6d972ac6\n"
    },
    {
      "commit": "6def5afcbc835d101aff6b070e22526320b7e83e",
      "tree": "90b448587e9cab27a7fa0e6976566a4b4ad3cfec",
      "parents": [
        "08963653fc9434d2f50d3c8e64c757138efd102e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 03 12:32:39 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 03 12:45:16 2015 -0700"
      },
      "message": "Load fewer classes when AndroidKeyStore provider is installed.\n\nThis avoids loading all AndroidKeyStore crypto SPI classes when the\nAndroidKeyStore provider is instantiated and installed. This provider\nis installed early on during the initialization of each app. Most apps\ndon\u0027t need these classes loaded.\n\nBug: 18088752\nChange-Id: Ib43c9dd6a7d434b128916e0f9c8652ba61df0d47\n"
    },
    {
      "commit": "08963653fc9434d2f50d3c8e64c757138efd102e",
      "tree": "5c5bef34280d37ae251656aba3a7c90f1e45ea3a",
      "parents": [
        "377885e1e6a4efc727060cca241fea29114315d5",
        "b4834ae3fa09e8013f7ab743a12def063ae999e3"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 03 19:13:49 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Apr 03 19:13:49 2015 +0000"
      },
      "message": "Merge \"Rename KeymasterException to KeyStoreException.\""
    },
    {
      "commit": "a0f656f9bd8db0c08540233846a000b2fe582814",
      "tree": "7f8963fc0f861a3b95756582126d1d8234c42878",
      "parents": [
        "6aed9ec1b85ff1a8a39c4ec091a017f79413ead0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 03 09:44:39 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Apr 03 12:09:56 2015 -0700"
      },
      "message": "Obtain SPI without using Reflection.\n\nBug: 18088752\nChange-Id: I76d42e17f5f28af6fd9a96ee812d286f6c6a085b\n"
    },
    {
      "commit": "b4834ae3fa09e8013f7ab743a12def063ae999e3",
      "tree": "d9985a4927997a3fd00f25132a4f5579aec39272",
      "parents": [
        "3cc9e5d68d89ea1ffa79ad6981585bc46362c4a7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 15:53:46 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 15:57:27 2015 -0700"
      },
      "message": "Rename KeymasterException to KeyStoreException.\n\nThe code in question talks to KeyStore which returns error codes\nwhich are a mix of keystore and keymaster error codes. To better\nmatch the layering of KeyStore on top of keystore and keymaster,\nthis CL renames KeymasterException into KeyStoreException. It also\nadds human-readable error messages to exceptions raised by keystore\nrather than keymaster (e.g., key not found).\n\nBug: 18088752\nChange-Id: I4cd1235e16518c9f2e8c5557a457774c6e687b88\n"
    },
    {
      "commit": "3cc9e5d68d89ea1ffa79ad6981585bc46362c4a7",
      "tree": "21e20b6daf4d13db0b0236d1971cc063870dc899",
      "parents": [
        "9635a56acfe3318d9ae5020727090a2dc8c118d0",
        "a80eee052dd729c2898829fab42a5584d6f5eaf0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 21:06:27 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 02 21:06:28 2015 +0000"
      },
      "message": "Merge \"Improve the AndroidKeyStore-backed HMAC state machine.\""
    },
    {
      "commit": "9635a56acfe3318d9ae5020727090a2dc8c118d0",
      "tree": "bd200589d657b9a9645860a871e74e8646077299",
      "parents": [
        "d2eec1a7865dd552114b330fce1a1472a9e08806",
        "855fa31eb5ff68d131f3e496920594d875841cb0"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 21:03:11 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Thu Apr 02 21:03:11 2015 +0000"
      },
      "message": "Merge \"Expose new key use constraints in KeyPairGeneratorSpec.\""
    },
    {
      "commit": "855fa31eb5ff68d131f3e496920594d875841cb0",
      "tree": "0bacc9d483981cbb9e2e3bd15dc7cde588f8ccae",
      "parents": [
        "64c8a07345cb7cb01b3e98442b52c51d473fbf2d"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 09:58:08 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Apr 02 10:04:33 2015 -0700"
      },
      "message": "Expose new key use constraints in KeyPairGeneratorSpec.\n\nThe constraints are currently ignored.\n\nBug: 18088752\nChange-Id: Iabd2018200afb2bf8ac1748d1def47af74bfb9d3\n"
    },
    {
      "commit": "0b188927f45f0794560d5c29123abbd75ddc0851",
      "tree": "de3e96487bf8a77f6f0b54b0596112222be62a4b",
      "parents": [
        "97467d82a31964e36cb6bc32ac4cf00e884c190e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 16:22:00 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 16:22:00 2015 -0700"
      },
      "message": "Add exception types for AndroidKeyStore key validity issues.\n\nBug: 18088752\nChange-Id: I7494cb6a793e2b57bb849a4253bba2803778c161\n"
    },
    {
      "commit": "a80eee052dd729c2898829fab42a5584d6f5eaf0",
      "tree": "f41923cf80015a3ed39b7c3204fb6386776e8e17",
      "parents": [
        "97467d82a31964e36cb6bc32ac4cf00e884c190e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 16:03:03 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 16:03:03 2015 -0700"
      },
      "message": "Improve the AndroidKeyStore-backed HMAC state machine.\n\nThis defers the start of a new KeyStore operation after Mac.doFinal\nuntil the next Mac.update or .doFinal. Previously, the a new KeyStore\noperation was started immediately, at the end of doFinal.\n\nBug: 18088752\nChange-Id: I2d594067ef261f519631d09f7a6087b715801656\n"
    },
    {
      "commit": "5045b7189cf1bae19c25efa7fb0c5f33ea1422ce",
      "tree": "9f01db40acd74de7131862ac4dfc540185bd9be4",
      "parents": [
        "c461452eb78867032092b2fce14c2fcb3e7ab34e"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 20:19:54 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 10:44:30 2015 -0700"
      },
      "message": "Use Keymaster-friendly validity dates.\n\nKeymaster HAL currently requires that key validity start and end dates\nalways be specified. The framework API does not. This CL expresses\nthe framework API\u0027s \"not specified\" instants to Keymaster as instants\nin distant past or future.\n\nBug: 18088752\nChange-Id: Ia9d66d5e57bfca30628cdef6e0925a2781a3acfb\n"
    },
    {
      "commit": "c461452eb78867032092b2fce14c2fcb3e7ab34e",
      "tree": "5b338ecfe89e6901b712d9a40bb359e99dadd440",
      "parents": [
        "c6cc9d820d007a6b11df2bb3274d40743e1f1d87",
        "c8e557470fc94733c9340c4c67ee69c225bbaa70"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Apr 01 17:34:36 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Apr 01 17:34:37 2015 +0000"
      },
      "message": "Merge \"Hook in user authenticators and their exceptions.\""
    },
    {
      "commit": "52886ca77d4d93f6faf5d2a6836625a421e32403",
      "tree": "375eebcf3a0800e578df1305f67a8fdcf2dea664",
      "parents": [
        "b7a34e4955beae2cee81a27e7c240316078bbf2f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 20:55:10 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 21:19:26 2015 -0700"
      },
      "message": "A way to obtain KeyStore operation handle from crypto primitives.\n\nThis adds AndroidKeyStore.getKeyStoreOperationHandle method which can\nbe used to obtain the KeyStore operation handle corresponding to the\nprovided JCA cryto primitive (provided it\u0027s backed by\nAndroidKeyStore).\n\nBug: 18088752\nChange-Id: Iaa3b6f9b2281b2ec2de8fd5946d353dc7fdb3d2d\n"
    },
    {
      "commit": "c8e557470fc94733c9340c4c67ee69c225bbaa70",
      "tree": "42658c56aa30ae20ec8a828745008f74587eb991",
      "parents": [
        "b7a34e4955beae2cee81a27e7c240316078bbf2f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 19:50:13 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 19:50:13 2015 -0700"
      },
      "message": "Hook in user authenticators and their exceptions.\n\nBug: 18088752\nChange-Id: I2835dbe51d09587a3081597c6aaf536aa1427e24\n"
    },
    {
      "commit": "cc21bb3a56915842b545a577d3481047005b1764",
      "tree": "cd435090983f33354eb421c2f54c6ee81d682b75",
      "parents": [
        "19e79e12d82fa473f2f7beec337de11a0c3b3a03"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 16:50:37 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 16:50:37 2015 -0700"
      },
      "message": "Add license banner to recently added AndroidKeyStore files.\n\nBug: 18088752\nChange-Id: I027f9530a02cca081aae8eb94833d2fdcb678e9a\n"
    },
    {
      "commit": "acc835f3857c1a1bf2618fabb7307794aba5d76a",
      "tree": "0d66974ec0f4228ca35039a34d7f19312998af48",
      "parents": [
        "5960c3d56614830439718e93968e0c7d2727262f"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 15:26:56 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 15:29:48 2015 -0700"
      },
      "message": "Add SecretKeyFactory backed by AndroidKeyStore.\n\nThis factory provides a way to obtain information about a SecretKey\nbacked by AndroidKeyStore. The information is provided in a form of an\ninstance of KeyStoreKeySpec class.\n\nEXAMPLE\n\nSecretKeyFactory factory \u003d SecretKeyFactory.getInstance(\n        key.getAlgorithm(), \"AndroidKeyStore\");\nKeyStoreKeySpec keySpec \u003d\n    factory.getKeySpec(key, KeyStoreKeySpec.class);\n\nBug: 18088752\nChange-Id: I26c9dd544f80230fe7039501eeb471eaf875452b\n"
    },
    {
      "commit": "b406f242911fa4d910a4cf915a61e39aeace1e1b",
      "tree": "b5eb757a0cf37c34c6db10004d666406961c4075",
      "parents": [
        "5491ea9e5bc6ce8eb0dc2e91e46608f6aa3e7dfc"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 13:39:38 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Tue Mar 31 13:59:07 2015 -0700"
      },
      "message": "Add unauthenticated AES ciphers backed by AndroidKeyStore.\n\nThis adds the following AES transformations:\n* AES/ECB/NoPadding\n* AES/ECB/PKCS7Padding\n* AES/CBC/NoPadding\n* AES/CBC/PKCS7Padding\n* AES/CTR/NoPadding\n\nBug: 18088752\nChange-Id: I3e4702e59868f8f2225c31b1c159d20008b9999d\n"
    },
    {
      "commit": "6a6f0c7de263743dc22b046dd9d53c694bce3ac5",
      "tree": "6cb95dfad41a13c2dd8cdd5d4f577e5b962edb7c",
      "parents": [
        "f603e2861430f13a746f80885b5fc00994f64391",
        "4ab8ea4498aa25eafdbaadd238fed6eab3f6ee59"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Mar 30 20:34:47 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 30 20:34:48 2015 +0000"
      },
      "message": "Merge \"Add HmacSHA256 backed by AndroidKeyStore.\""
    },
    {
      "commit": "f603e2861430f13a746f80885b5fc00994f64391",
      "tree": "eed5ac2425d689b193ed884cd3596670cdecee98",
      "parents": [
        "631565abd6cadd65befe197afa7bac0d44f70fb2",
        "5654b36b4667431e49d27c07a06d275656071e75"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Mar 30 20:06:29 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon Mar 30 20:06:39 2015 +0000"
      },
      "message": "Merge \"Add authorization binder methods\""
    },
    {
      "commit": "4ab8ea4498aa25eafdbaadd238fed6eab3f6ee59",
      "tree": "57c29e100d399530f239961857c47598bb471b19",
      "parents": [
        "36ee836d2f6e6df59d6a20a69421639bacf25559"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Mar 27 16:53:44 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Mon Mar 30 12:53:23 2015 -0700"
      },
      "message": "Add HmacSHA256 backed by AndroidKeyStore.\n\nThis also adds the MAC length constraint on imported HMAC keys. HMAC\ndoesn\u0027t work without this constraint at the moment.\n\nBug: 18088752\nChange-Id: I8613f58f5d2a84df00bcf6179d13e30619440330\n"
    },
    {
      "commit": "d23a1f706f0c24fade1a1c2f604009a7c9e70002",
      "tree": "97a12bf99f2bf2c839554c609e5970bf30b1bd56",
      "parents": [
        "dbd9a4b651aed25a50976ca0a68a979cc3f299fa"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Mar 27 14:39:28 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Mar 27 15:57:53 2015 -0700"
      },
      "message": "Symmetric key generation for AndroidKeyStore.\n\nThis currently supports AES and HMAC with SHA-256.\n\nBug: 18088752\nChange-Id: Ife55438cf4129b895295681bb35091cd37eb73fb\n"
    },
    {
      "commit": "dae79e540844741fc35c648efe8bbb00fc8ab781",
      "tree": "a8d91d5261c9f7eb48cbc2fdfe2729a41e28b8b3",
      "parents": [
        "274a4ee3446e76a34a9cfe987e98f7bf4e53f78d"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Mar 27 14:28:35 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Fri Mar 27 14:28:35 2015 -0700"
      },
      "message": "Allow entropy to be provided to some operations\n\ngenerateKey and begin can now optionally take an array of bytes to add\nto the rng entropy of the device before the operation. If entropy is\nspecified and the device does not support add_rng_entropy or the call\nfails then that device will not be used, leading to fallback or error\ndepending on the situation.\n\nChange-Id: Id7d33e3cc959594dfa5483d002993ba35c1fb134\n"
    },
    {
      "commit": "baf2838fd2c7ddf517bd5bd9917551a4706af5b6",
      "tree": "a421eba5106cc2cd019c303d0b0c40383fb92494",
      "parents": [
        "6326f964769c603382ee6694b33954b4ff9b9a52"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Mar 26 14:46:55 2015 -0700"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Thu Mar 26 15:37:15 2015 -0700"
      },
      "message": "Symmetric key import for AndroidKeyStore.\n\nAES and HmacSHA256 symmetric keys can now be imported into\nAndroidKeyStore. These keys cannot yet be used.\n\nBug: 18088752\nChange-Id: Iad2fd49d15ac4c2d676abe1153f5b5f0b6ff496c\n"
    },
    {
      "commit": "5e73c0eec2bc77222a5a87fb2a135d8303836411",
      "tree": "7985bec0fca7c1b717aad7c0d5e46d6d39f1ba2e",
      "parents": [
        "38fcaf4037a50225b931551a48c898c7b0bb4db2"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Sat Mar 21 22:46:43 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Sat Mar 21 23:15:20 2015 -0700"
      },
      "message": "Make application/client id an object\n\nHaving it as a raw byte[] caused issues in keystore because keymaster\nhandles a null blob differently than a blob with null contents. Make\nthis explicit in the API.\n\nChange-Id: Ifcf550f438608b8f09fc589d00d06fffa6ee463b\n"
    },
    {
      "commit": "5654b36b4667431e49d27c07a06d275656071e75",
      "tree": "8727d12b0841df3659c695086d2e6fdfab5abe2e",
      "parents": [
        "28e6aeca3aad075ef4fd7aab08cd1ad1ff9eb555"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Mar 17 16:59:52 2015 -0700"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Mar 17 16:59:52 2015 -0700"
      },
      "message": "Add authorization binder methods\n\nAdd methods for sending an auth token to keystore and to query the\nauthorization state of a given operation.\n\nChange-Id: I223df5c56ae2a251ef31cfe60f06c046c12a5cd8\n"
    },
    {
      "commit": "e6a461341ccf3b952427daf40c973d9914cdb270",
      "tree": "c7115eef05bc87859a50de03e9e8e6bba0876699",
      "parents": [
        "45ff13ea28005b5af0caa80dbdeb09d49bd73faf"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Feb 10 21:33:23 2015 -0800"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Mon Feb 23 14:12:44 2015 -0800"
      },
      "message": "Add new IKeystoreService methods to KeyStore\n\nAdd wrappers for all the new IKeystoreService keymaster 0.4 methods to\nandroid.security.KeyStore.\n\nChange-Id: Icb5500cfffb62d1af326edf326e1b9b67e5cece9\n"
    },
    {
      "commit": "0b486da65076c13c98ab3973128c64f452b4c589",
      "tree": "93014dbd9a34a477076d42f14a66c066fa3b0faa",
      "parents": [
        "590c068e8380ba73a6571ddf797d4ce02b390bcb",
        "cd2329dbfa5aef82c38ffa36a478bbaf5088af92"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jan 16 16:44:21 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 16 16:44:22 2015 +0000"
      },
      "message": "Merge \"Remove DSA support from Android KeyStore and KeyChain.\""
    },
    {
      "commit": "590c068e8380ba73a6571ddf797d4ce02b390bcb",
      "tree": "00188b230d6a9634ef20742e2f387c91d92022a8",
      "parents": [
        "706f6cf3839cc3e268e108a8e2e1ac0b2a2287a2",
        "21a76df55cf4b956f4d34f57c7b9e694d0363f54"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Fri Jan 16 16:44:06 2015 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Fri Jan 16 16:44:06 2015 +0000"
      },
      "message": "Merge \"Add KeyPairGenerator.EC backed by Android KeyStore.\""
    },
    {
      "commit": "cd2329dbfa5aef82c38ffa36a478bbaf5088af92",
      "tree": "801a25d5636d084cdbd8c5c8589a7676328e2038",
      "parents": [
        "aa7a646eebb9b22d1421f8b09a09669bdb10d8b7"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jan 14 16:45:51 2015 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jan 14 16:45:51 2015 -0800"
      },
      "message": "Remove DSA support from Android KeyStore and KeyChain.\n\nWe\u0027re switching from OpenSSL to BoringSSL which does not support DSA.\n\nBug: 17409664\nChange-Id: Id9b52666ba9ef234076105c925610b5b312988a5\n"
    },
    {
      "commit": "21a76df55cf4b956f4d34f57c7b9e694d0363f54",
      "tree": "8569f523ecf44e5c723718445306b49ad60c1299",
      "parents": [
        "837261cc997cbb188de05e3d1194adb91cb75825"
      ],
      "author": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jan 14 13:35:32 2015 -0800"
      },
      "committer": {
        "name": "Alex Klyubin",
        "email": "klyubin@google.com",
        "time": "Wed Jan 14 13:35:32 2015 -0800"
      },
      "message": "Add KeyPairGenerator.EC backed by Android KeyStore.\n\nThe Android KeyStore backed KeyPairGenerator can generate EC key\npairs, but it cannot be instantiated via the standard JCA approach of\nKeyPairGenerator.getInstance(\"EC\", \"AndroidKeyStore\"). Instead, the\nuser must invoke KeyPairGenerator.getInstance(\"RSA\",\n\"AndroidKeyStore\") and then tell it to generate an EC key pair.\n\nThis CL fixes this weirdness.\n\nThe fix requires the introduction of late resolution of key algorithm\nand default key size. Prior to this CL, these parameters were resolved\nprior to KeyPairGenerator initialization, inside KeyPairGeneratorSpec.\nIn this CL, these parameters are resolved during KeyPairGenerator\ninitialization. This is fine because KeyPairGeneratorSpec should be as\ndumb as possible and all the logic should reside in KeyPairGenerator\nand lower layers.\n\nBug: 19018089\nChange-Id: I114502356e6c9691518cf05b6d9eb0920b4fe0b2\n"
    },
    {
      "commit": "7a2c973db7756a60f1cdd6cf67411115c1576081",
      "tree": "16da25774e868e346368f4d61d3d8e3d0967584b",
      "parents": [
        "21454aa27643f69a0ee9377ae09a01e96af3718f"
      ],
      "author": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Jan 13 17:41:22 2015 -0800"
      },
      "committer": {
        "name": "Chad Brubaker",
        "email": "cbrubaker@google.com",
        "time": "Tue Jan 13 18:29:15 2015 -0800"
      },
      "message": "Generate IKeystoreService using aidl\n\nThis replaces IKeystoreService.java with IKeystoreService.aidl and\nchanges the methods that passed down a byte[][] to instead pass down a\nKeystoreArguments which is currently a thin parcelable wrapper around a byte[][].\n\nChange-Id: I6367bcf57562f41a27aab14f1903b74995cb65c2\n"
    },
    {
      "commit": "9d2d6b6b4b1b16221cbd857703cd6301c6bf873c",
      "tree": "88a917669fb1861755b69c6c2d150575a7d43210",
      "parents": [
        "fdbef4081d715de59525d58d44881b00f616616f"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 26 09:08:40 2014 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 26 09:08:40 2014 -0800"
      },
      "message": "Track change to Conscrypt\n\nChange-Id: I8814fd0720acf09332927f184fdd9b2cdac4f413\n"
    },
    {
      "commit": "26408ccd8e852d947e58021792bfc3b315e5948d",
      "tree": "8ac7bc2fe43ccf5639015a688ace43ae544b1a2e",
      "parents": [
        "2f67e237383ae6e76c44333ab79c6f0d1e3e568d"
      ],
      "author": {
        "name": "Bernhard Bauer",
        "email": "bauerb@google.com",
        "time": "Mon Sep 08 14:07:31 2014 +0100"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Thu Sep 11 19:17:00 2014 +0100"
      },
      "message": "Add DevicePolicyManager PrivateKey mgmt\n\nAdditional device policy API to install keypairs to the keychain\nsilently.\n\nBug: 15065444\nChange-Id: Idc25774c9ab1a61080290bebd6f5c4f24e6ee2e0\n"
    },
    {
      "commit": "f0ae135049048424bceccb0799b12377181b25f0",
      "tree": "e4a86db25d50e83db28a0b58cc79eaaadcb72004",
      "parents": [
        "97e75e1da97f01e82c0105b1f915821a99dda196"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Mon Aug 18 10:48:33 2014 +0100"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Mon Sep 08 17:59:42 2014 +0100"
      },
      "message": "Extend IKeyChainService AIDL with CACert retrieval\n\nBug:16029580\nChange-Id: I41a3bd2f3bd95550e59f1d0d0acd0e765d7b62d7\n"
    },
    {
      "commit": "f0246a8a14d69680d1776620e75a485cf963e574",
      "tree": "7fffafa3844a193de4b206605bdb59599a0318d5",
      "parents": [
        "d627eac286e377aec5c8f66d4746850c3eff8ff8"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Wed Aug 13 09:50:25 2014 +0100"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Fri Aug 29 23:03:42 2014 +0100"
      },
      "message": "Keep managed profile keystores in sync with owner\n\nFixes setting a keyguard password for keystore in a multi-user setup\nwhile we\u0027re at it.\n\nBug: 16233206.\nChange-Id: I7941707ca66ac25bd122fd22e5e0f639e7af697e\n"
    },
    {
      "commit": "3291de8f6c8bc7ffa5992a2a5a5c2cf8bb0adf4b",
      "tree": "c3f363ba74a9f6ce48ca3318b8672dea2a43ff0d",
      "parents": [
        "f8d72cc14f70f5af13342c4c7b107a8ab60dfe23"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 14:01:14 2014 +0000"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 14:01:14 2014 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Revert \"Update Trusted Credentials screen in settings\"\"\"\"\"\n\nThis reverts commit c9249c69813c6fb889d71d84583c67ae2942e6de.\n\nChange-Id: I5504fddaf7b18efb73cd6c76678b3b39ce9b0229\n"
    },
    {
      "commit": "f8d72cc14f70f5af13342c4c7b107a8ab60dfe23",
      "tree": "57ac8e36c84cb0d3628535c9ffc96094c5bda61f",
      "parents": [
        "f75aadc028f2e79541a269bf2c74dcb3482e2ec7"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 12:52:35 2014 +0000"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 12:58:37 2014 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Revert \"Update Trusted Credentials screen in settings\"\"\"\"\n\nThis reverts commit 87efe74e092236c372d3b6909009641123aa416a.\n\nThis should be fine now with all the dependency CLs +2-ed\n\n\nChange-Id: I96ad14ad5ff81e6b5391035cb6c5a62339c6cc40"
    },
    {
      "commit": "f75aadc028f2e79541a269bf2c74dcb3482e2ec7",
      "tree": "c3f363ba74a9f6ce48ca3318b8672dea2a43ff0d",
      "parents": [
        "1e7bc0def8c62b91d3eb985a51bec54063ce83f5"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Aug 15 12:25:52 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Fri Aug 15 12:25:52 2014 +0000"
      },
      "message": "Revert \"Revert \"Revert \"Update Trusted Credentials screen in settings\"\"\"\n\nThis reverts commit 19c8ce291e89a9ef1442a20e1feab421b11536d7.\n\nChange-Id: Ie5a5571127311e0a29f314c0566e779cfe940b53\n"
    },
    {
      "commit": "1e7bc0def8c62b91d3eb985a51bec54063ce83f5",
      "tree": "57ac8e36c84cb0d3628535c9ffc96094c5bda61f",
      "parents": [
        "4b2d0f20db2e0f9395a0c12ed5d4b6020eb272cb"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 11:52:15 2014 +0000"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Fri Aug 15 12:55:35 2014 +0100"
      },
      "message": "Revert \"Revert \"Update Trusted Credentials screen in settings\"\"\n\nThis reverts commit 0f0de0bdd021bad5f85fdb0399a4ea91a1611e25.\n\nChange-Id: Ia3d0907e3d7c2ec42d64e45f60e3dfaffb932c3d\n"
    },
    {
      "commit": "678e3ecc937c00969830700dffb42fb1ee232f7c",
      "tree": "98c7144f8cca3b46411549aad4bbdcaa5376df00",
      "parents": [
        "1386627335a79dd02fb34db344e63ca3abfce013"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Thu Aug 07 13:41:08 2014 +0000"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Thu Aug 07 13:41:08 2014 +0000"
      },
      "message": "Revert \"Update Trusted Credentials screen in settings\"\n\nThis reverts commit 4fde5aa9fab931d9becfc49f7d7b8526ad5640d9.\n\nChange-Id: I581c38d64e9829b0079bafa42615f2aa0bf64763\n"
    },
    {
      "commit": "1386627335a79dd02fb34db344e63ca3abfce013",
      "tree": "7c01e7fec4edf431ef8740e61655d82ec93aca7d",
      "parents": [
        "1cc41c938cfe587441a63f0d6176f59fcf2f25b4"
      ],
      "author": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Tue Jul 15 16:58:59 2014 +0100"
      },
      "committer": {
        "name": "Zoltan Szatmary-Ban",
        "email": "szatmz@google.com",
        "time": "Tue Jul 29 16:43:37 2014 +0100"
      },
      "message": "Update Trusted Credentials screen in settings\n\nTrusted credentials for both the primary user and its managed profiles are shown\non the Trusted Credentials fragment. All functionalities (e.g. disabling/enabling\nof certificates) remain available.\n\nBug: 16029580\n\nChange-Id: Ia92ae02d8c572bf4a3be172f6c255726cefc0fa1\n"
    },
    {
      "commit": "aab72f3b0ab740e12b4a2576a99852081529feb5",
      "tree": "9e9d0c76701aa01e9eab8f07841c7a01ba4961a0",
      "parents": [
        "54fb7e94d071cdaf13b944bca9fec441c376b16b",
        "306fe08ce2b06671336e67a87afaa0851f0105eb"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Thu Jun 19 14:06:09 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 17 21:55:55 2014 +0000"
      },
      "message": "Merge \"Revert \"Revert \"Publish DevicePolicyManager CA certificate APIs\"\"\""
    },
    {
      "commit": "306fe08ce2b06671336e67a87afaa0851f0105eb",
      "tree": "029c5bee023ef6697c4e2fbbf0b3526b76db749f",
      "parents": [
        "2b5e917026fe4e6dec8712ee24bdffee8d62ab33"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Thu Jun 19 14:04:24 2014 +0000"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Thu Jun 19 14:04:24 2014 +0000"
      },
      "message": "Revert \"Revert \"Publish DevicePolicyManager CA certificate APIs\"\"\n\nThis reverts commit 792b270dbdc980cfe04e8d461bf00a1f45b5e936.\n\nChange-Id: I18c7e0eca39868230cd8e4f4bbeb3c44ff9e8b78\n"
    },
    {
      "commit": "2b5e917026fe4e6dec8712ee24bdffee8d62ab33",
      "tree": "2393e00fba108510fbaaec68285481419d843bbd",
      "parents": [
        "837304f6f6ae37dc475fa6e0e620f1c2321f2e11"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 17 22:12:28 2014 +0000"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 17 22:12:28 2014 +0000"
      },
      "message": "Revert \"Publish DevicePolicyManager CA certificate APIs\"\n\nThis reverts commit 5260bf69946563dc47c17e7441b352adfce384c5.\n\nChange-Id: I5e44fdac8a7375576b25171f58e31a1fa0e3c569\n"
    },
    {
      "commit": "6d3912e2ef75a7794ac44839eef2569086cae104",
      "tree": "c7a83f9a3b01f91c151db0a50e4077f3c988848c",
      "parents": [
        "1f681448c6b7db451c31af7d61c0b85b7b5af04f",
        "2b5e917026fe4e6dec8712ee24bdffee8d62ab33"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 17 22:15:07 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 17 21:55:55 2014 +0000"
      },
      "message": "Merge \"Revert \"Publish DevicePolicyManager CA certificate APIs\"\""
    },
    {
      "commit": "b12f1778d612a53e6b40e6d5873be1ccff2e52a5",
      "tree": "9286a5eeb94eae55529fd0a7eb25b23ce8948622",
      "parents": [
        "ea54579b54687788c269b386c4bb802de5b87b1a",
        "837304f6f6ae37dc475fa6e0e620f1c2321f2e11"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Tue Jun 17 16:46:22 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 17 05:12:50 2014 +0000"
      },
      "message": "Merge \"Publish DevicePolicyManager CA certificate APIs\""
    },
    {
      "commit": "837304f6f6ae37dc475fa6e0e620f1c2321f2e11",
      "tree": "029c5bee023ef6697c4e2fbbf0b3526b76db749f",
      "parents": [
        "1b8aef2be7a467672b3ffdc37039b9233ece0fbc"
      ],
      "author": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Wed Jun 11 16:19:43 2014 +0100"
      },
      "committer": {
        "name": "Robin Lee",
        "email": "rgl@google.com",
        "time": "Wed Jun 11 16:55:32 2014 +0100"
      },
      "message": "Publish DevicePolicyManager CA certificate APIs\n\nExposes these methods:\n - hasCaCertInstalled\n - hasAnyCaCertsInstalled\n - installCaCert\n - uninstallCaCert\n\nAllows device and profile owners to perform some certificate management\nincluding querying for and enabling/disabling specific CA certificates.\n\nChange-Id: I4aa8a1a8601b234e30acde99dfa382e04cb62495\n"
    },
    {
      "commit": "e37da759c521b156f0f2f8fecaa3cb52969674e2",
      "tree": "21778b9e589e064cda1c6d55197b4ef46c970dcc",
      "parents": [
        "41a2c47e65a406534a2e4473da2f9ef35d0b04ce",
        "b1cb5aabeb68815715eed423f1f9a7edb9a3e938"
      ],
      "author": {
        "name": "Robert Ly",
        "email": "robertly@google.com",
        "time": "Wed Jun 11 19:33:51 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 11 19:33:51 2014 +0000"
      },
      "message": "am b1cb5aab: am 748856f2: am a7ddd029: am 80e84e2d: am f3cecfa2: am 55d525b2: am 716cc7dc: Add documentation for AndroidKeyStore\n\n* commit \u0027b1cb5aabeb68815715eed423f1f9a7edb9a3e938\u0027:\n  Add documentation for AndroidKeyStore\n"
    },
    {
      "commit": "80e84e2db92ba190c6c517dd4c71cd12c0adb249",
      "tree": "9ca44998acd120769b2bbfc8508311ec129a20f0",
      "parents": [
        "20c5ce50c456742bf912ebb915be45bfdb51487d",
        "f3cecfa2185ef5622992b21da8204b8b6590ef2d"
      ],
      "author": {
        "name": "Robert Ly",
        "email": "robertly@google.com",
        "time": "Tue Jun 10 02:39:28 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 10 02:39:28 2014 +0000"
      },
      "message": "am f3cecfa2: am 55d525b2: am 716cc7dc: Add documentation for AndroidKeyStore\n\n* commit \u0027f3cecfa2185ef5622992b21da8204b8b6590ef2d\u0027:\n  Add documentation for AndroidKeyStore\n"
    },
    {
      "commit": "f3cecfa2185ef5622992b21da8204b8b6590ef2d",
      "tree": "a513acfdc2b30864fd89a3f27e423cfd6c44abb8",
      "parents": [
        "dcfba78fbb4dad6792113383b2d32eff7f2c1f88",
        "55d525b26b716351625798675afe69c6cf43cf5a"
      ],
      "author": {
        "name": "Robert Ly",
        "email": "robertly@google.com",
        "time": "Tue Jun 10 02:36:10 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 10 02:36:10 2014 +0000"
      },
      "message": "am 55d525b2: am 716cc7dc: Add documentation for AndroidKeyStore\n\n* commit \u002755d525b26b716351625798675afe69c6cf43cf5a\u0027:\n  Add documentation for AndroidKeyStore\n"
    },
    {
      "commit": "716cc7dcac1bb9279326ab92a78a246b3a70de4e",
      "tree": "2e94d735322779b7a9ba9c4acc3b2316009af400",
      "parents": [
        "ab6424959ca0dd765f37944dbeaa59a50b99d7a4"
      ],
      "author": {
        "name": "Robert Ly",
        "email": "robertly@google.com",
        "time": "Wed May 07 21:16:15 2014 -0700"
      },
      "committer": {
        "name": "Robert Ly",
        "email": "robertly@google.com",
        "time": "Wed May 07 21:20:01 2014 -0700"
      },
      "message": "Add documentation for AndroidKeyStore\n\nAdd exposition about the use cases for AndroidKeyStore and links to the\nAPI sample application for different use cases.\n\nBug: 8608817\nChange-Id: Ic4ce9405781c92f12687895b28c671661ea5524f\n"
    },
    {
      "commit": "a365906e670c89674fb3383b5bcb33e682910c29",
      "tree": "6eaa177219777d844522491689ec9a65324142b3",
      "parents": [
        "946bb3cef9137cb12e2200cd286713aa1d74fb48"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 17 16:21:53 2014 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Mar 17 16:21:56 2014 -0700"
      },
      "message": "Use the correct package name for CHOOSER\n\nBug: 13013106\nChange-Id: I1f715de18e7108274f5a98234376d48c2d329438\n"
    },
    {
      "commit": "1a88d834e8f7d21e714121c011fec82369a2e9f1",
      "tree": "e51210d536855b187e5c9bf08e7df3cac8f34e1d",
      "parents": [
        "8f52fee0609a4f273f87f4178865b0713c8114aa"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 07 09:12:48 2014 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Feb 07 09:14:32 2014 -0800"
      },
      "message": "KeyChain: add explicit package for getPrivateKey\n\nBug: 9964538\nChange-Id: If67c1938e9506d4fa81b241bcbce2193d1b194ef\n"
    },
    {
      "commit": "6090995951c6e2e4dcf38102f01793f8a94166e1",
      "tree": "37f32f4b269fc26a18e3249a18459a476c473266",
      "parents": [
        "266f48cc042dda828109eb135088cdb6f0f7c1d5"
      ],
      "author": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Tue Nov 19 16:54:46 2013 -0500"
      },
      "committer": {
        "name": "John Spurlock",
        "email": "jspurlock@google.com",
        "time": "Wed Nov 20 11:31:47 2013 -0500"
      },
      "message": "Remove unused imports from frameworks/base.\n\nChange-Id: Ia1f99bd2c1105b0b0f70aa614f1f4a67b2840906\n"
    },
    {
      "commit": "b91773bce1126d28a93f73fbef18f3a79245f24e",
      "tree": "a7ab82da0330b4f4249c219dbea9efd17a2b7953",
      "parents": [
        "d2676f9bd93c333ae2c7f3ca284d0fef5a7e146b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 05 13:03:16 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Sep 05 13:27:00 2013 -0700"
      },
      "message": "Add argument to binder call to check key types\n\nBefore there was only one key type supported, so we didn\u0027t need to query\na key type. Now there is DSA, EC, and RSA, so there needs to be another\nargument.\n\nBug: 10600582\nChange-Id: I9fe9e46b9ec9cfb2f1246179b2c396216b2c1fdb\n"
    },
    {
      "commit": "c222ddd07ff9c65c682fd82f8534a9d7dea796cd",
      "tree": "374082b71bd0c03a5b63de361926677724040ede",
      "parents": [
        "a39859889b7de0ad3190386cc732fa4bdcbe5504"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 03 09:45:55 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 03 09:45:55 2013 -0700"
      },
      "message": "Unhide functions to allow ECDSA support\n\nBug: 10600582\nChange-Id: Ic710807d7e771737521e0abd83af2f666ec1199c\n"
    },
    {
      "commit": "a39859889b7de0ad3190386cc732fa4bdcbe5504",
      "tree": "a9efaea5421fe0ce48f088faf2324afb798d2ce1",
      "parents": [
        "96661c42d0643c129fed60678aa0b8f99d32b456"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 16 14:03:29 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Sep 03 00:53:04 2013 -0700"
      },
      "message": "Add support for DSA and ECDSA key types\n\n(cherry picked from commit f64386fc26efeb245fd90fabaa47b8c8bf9b4613)\n\nBug: 10600582\nChange-Id: I88dfcc8ca602f55fad54bd8bf043aee460c0de24\n"
    },
    {
      "commit": "da51e68e582ffa017543982297c831680d201a91",
      "tree": "569121a5f1c7d504a6f499f6249de09e016b7d8e",
      "parents": [
        "0a94b9ce277ef2ec79902e3c576a50ab438dca97"
      ],
      "author": {
        "name": "Maggie Benthall",
        "email": "mbenthall@google.com",
        "time": "Thu Aug 08 22:35:44 2013 -0400"
      },
      "committer": {
        "name": "Maggie Benthall",
        "email": "mbenthall@google.com",
        "time": "Tue Aug 20 14:30:36 2013 -0400"
      },
      "message": "Add methods for managing CAs to DevicePolicyManager(Service)\n\nGuard install/uninstall by enforcing that the caller have the new system-only permission MANAGE_CA_CERTIFICATES.\nAlso include API methods for asking whether there are any User CA certs\ninstalled, or if one by a particular name is installed in the keystore.\n\nCA certs will be installed via KeyChain into the TrustedCertificateStore.\n\nBug: 8232670\n\nChange-Id: I17b47a452e72eb4fe556dc6db823a46c6e854be8\n"
    },
    {
      "commit": "a920f25fe55fc9afc7640902a200f19ce278588b",
      "tree": "d248ebfca6085ff79f1a5cfb91a1778b4617ac82",
      "parents": [
        "324993abed48843da1cb63063668147151e4db5c",
        "fca0f92e0a9c121dcf28fa783e884f1fb4993374"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 16:41:19 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 16:41:19 2013 -0700"
      },
      "message": "resolved conflicts for merge of fca0f92e to stage-aosp-master\n\nChange-Id: I4791f0ffa324a313b8390fbde6d8f82f716ecf74\n"
    },
    {
      "commit": "d396a448b2e36e29598c954b64bfddef73f3fae0",
      "tree": "c8851235188aa3e48f7069c8a6004e40b304d253",
      "parents": [
        "5216f11e462b9f17704c0ac9e193d2149f3fa755"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 16:24:48 2013 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Jun 28 16:24:48 2013 -0700"
      },
      "message": "Switch frameworks/base over from @hidden Charsets to public StandardCharsets.\n\nBug: 3484927\nChange-Id: I5d136d2ee629588538602766a182ae14ce5fc63c\n"
    },
    {
      "commit": "5f851a89b6a90db206d0e2fa63a60229e2bfcda6",
      "tree": "96606b9c3ca3682b890284276b81ac6cfa429617",
      "parents": [
        "5f714213546d667ac241a92e2052b30dabef8355",
        "cd1de3940d9c389b6e69a7040c67d3abb8458ad2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 06 15:13:58 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 06 15:13:58 2013 -0700"
      },
      "message": "am cd1de394: Merge \"Track change in NativeCrypto\"\n\n* commit \u0027cd1de3940d9c389b6e69a7040c67d3abb8458ad2\u0027:\n  Track change in NativeCrypto\n"
    },
    {
      "commit": "4b30e3391bda250975b43af43bad58c98fa73f84",
      "tree": "82abee4746206fb285ffd384f6d594872b71b706",
      "parents": [
        "6d82f86fa01800ee0523743366e0dc1113178fd9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 06 15:00:58 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon May 06 15:00:58 2013 -0700"
      },
      "message": "Track change in NativeCrypto\n\nChange-Id: Ic04d4ac5218795fc226f1751b6ae4db1ae73a930\n"
    },
    {
      "commit": "e9ae6822a80cb1f3bd13c785f1727c03d35da52e",
      "tree": "b1458872d38a68b06c277276a3062bac0247509d",
      "parents": [
        "be53f1806cf9f0ec69f785a0063227e0ed795eb8",
        "1f6e789b7ee9698ab8c528a393c28cce500ace04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 29 23:09:03 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 29 23:09:03 2013 -0700"
      },
      "message": "resolved conflicts for merge of 1f6e789b to jb-mr2-dev-plus-aosp\n\nChange-Id: I06c05d637613215b6d83df3e29cd495f6a5a0176\n"
    },
    {
      "commit": "12e752225aa96888358294be0d725d499a1c9f03",
      "tree": "d716c7eedc50ccdf146aaca9b55fae969cf753ec",
      "parents": [
        "28b1f0ee02e14241ffb81f431fc54053771c1c90"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 23 22:34:24 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 29 15:15:27 2013 -0700"
      },
      "message": "Track change to JSSE provider\n\nChange-Id: I35e824e47ad758ab6408e91e2ba5dcda053a82f5\n"
    },
    {
      "commit": "1c219f619291ba818bc2542390a2988539d94ed0",
      "tree": "f9b17839a23ca3978cea2251767b4432d1d1f9a6",
      "parents": [
        "a454c5732cacffdda53ae277b1e43d87b43044b1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 18 17:57:03 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 18 18:34:58 2013 -0700"
      },
      "message": "Rename API AndroidKey* -\u003e Key*\n\nBug: 8657552\nChange-Id: Id9102b7c2c2f6d27fba7645f0629750cfe1eb510\n"
    },
    {
      "commit": "bf2147669e295384df17b50afc53a4d450b05bdd",
      "tree": "594236183b0a773b440972214b5dc1ddc62eada1",
      "parents": [
        "6fb172b12eefeea4b565c616a4d0a8d1fb015217"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 10 11:30:58 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Mon Apr 15 19:33:15 2013 +0000"
      },
      "message": "AndroidKeyStore: Add encrypted flag\n\nAdd the encrypted flag for the KeyPairGenerator and the KeyStore so that\napplications can choose to allow entries when there is no lockscreen.\n\n(partial cherry pick from commit 2eeda7286f3c7cb79f7eb71ae6464cad213d12a3)\n\nBug: 8122243\nChange-Id: I5ecd9251ec79ec53a3b68c0fff8dfba10873e36e\n"
    },
    {
      "commit": "4622351159b51bf072fe12833b574cf38f9400c8",
      "tree": "e8c71ae1cd0293863d679d9700cba106bb5a089c",
      "parents": [
        "5678bacdffb6871b0d5b428548315cc3bba430bd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 10 10:37:55 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 15 11:09:29 2013 -0700"
      },
      "message": "keystore: Add flag for blobs to be unencrypted\n\nIn order to let apps use keystore more productively, make the blob\nencryption optional. As more hardware-assisted keystores (i.e., hardware\nthat has a Keymaster HAL) come around, encrypting blobs start to make\nless sense since the thing it\u0027s encrypting is usually a token and not\nany raw key material.\n\n(cherry picked from commit a3788b00bb221e20abdd42f747d2af419e0a088c)\n\nBug: 8122243\nChange-Id: Ifc1c64743651b23a4eace208ade0176af47ea989\n"
    },
    {
      "commit": "e7cf8c230208beef0c3a5f83a1e1d2c36ac5ca12",
      "tree": "bc70a5697a261dc198cb8b13b761ceb66f545599",
      "parents": [
        "b2c0ff64d8ff92dab53e969a44fa12427d145952"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 12 17:37:37 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 12 18:09:04 2013 -0700"
      },
      "message": "keystore: remove old APIs\n\nRemove the APIs that don\u0027t specify the flags so callers know what\nthey\u0027re getting.\n\nBug: 8122243\nChange-Id: Ifaef6fb1d16010237c01f9d11f2053bb6b3980c0\n"
    },
    {
      "commit": "2eeda7286f3c7cb79f7eb71ae6464cad213d12a3",
      "tree": "cf77426b72b1287ce66c230da7c67d2d5c8cdd8a",
      "parents": [
        "a3788b00bb221e20abdd42f747d2af419e0a088c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 10 11:30:58 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 12 15:19:48 2013 -0700"
      },
      "message": "AndroidKeyStore: Add encrypted flag\n\nAdd the encrypted flag for the KeyPairGenerator and the KeyStore so that\napplications can choose to allow entries when there is no lockscreen.\n\nBug: 8122243\nChange-Id: Ia802afe965f2377ad3f282dab8c512388c705850\n"
    },
    {
      "commit": "a3788b00bb221e20abdd42f747d2af419e0a088c",
      "tree": "227a48273035bfbf5f7d1beb53a43c1340bb7418",
      "parents": [
        "f8a67f4f5dd4c5499a6e7148331f0286e31203ec"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 10 10:37:55 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 10 23:36:13 2013 -0700"
      },
      "message": "keystore: Add flag for blobs to be unencrypted\n\nIn order to let apps use keystore more productively, make the blob\nencryption optional. As more hardware-assisted keystores (i.e., hardware\nthat has a Keymaster HAL) come around, encrypting blobs start to make\nless sense since the thing it\u0027s encrypting is usually a token and not\nany raw key material.\n\nBug: 8122243\nChange-Id: If9af0d992d68edec006e630c687df3d03a7c9608\n"
    },
    {
      "commit": "8b51475c97f8f2742047976283afbe1f9ef9fcbf",
      "tree": "62a1931f70aecc1a156d129b6602274e0c86e3fe",
      "parents": [
        "4296704208a9eeb40f4e5fa8d6d1f79c72c322ee"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 09:35:16 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Sat Apr 06 10:05:31 2013 -0700"
      },
      "message": "Revert \"Remove AndroidKeyStore from API\"\n\nThis reverts commit ce24985ad636c38b6ee01ec9cdecfb038bfeaeb6.\n\nChange-Id: I02d6492c8db869619694c7209bb37522a7ec5a29\n"
    },
    {
      "commit": "d72317abd79ddf95d48c8f35bf1070900ff55b5e",
      "tree": "d07ab26ca8e840bd98811223315bc2ad773e0418",
      "parents": [
        "688c33448572fa3879b1486d8fa1bf16cd946211"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 01 15:59:59 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Apr 03 11:32:52 2013 -0700"
      },
      "message": "Remove keystore entries when package removed\n\nAdd a hook into PackageManagerService so that when app IDs are\ncompletely removed, we erase all entries from keystore for those UIDs\nthat have gone away.\n\n(cherry picked from commit 95e3ee3971915b323e5c13dcfe3b12a4180850cd)\n\nBug: 3020069\nChange-Id: I374258ccc103f8cb3e238f2bf0d1afda0659db94\n"
    },
    {
      "commit": "95e3ee3971915b323e5c13dcfe3b12a4180850cd",
      "tree": "233169c1fc19155ec6fa7d0b408838ac051ce426",
      "parents": [
        "b7aca350e4c46bbc431f2ecaa4d8cee87915fe8b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 01 15:59:59 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 02 11:50:16 2013 -0700"
      },
      "message": "Remove keystore entries when package removed\n\nAdd a hook into PackageManagerService so that when app IDs are\ncompletely removed, we erase all entries from keystore for those UIDs\nthat have gone away.\n\nBug: 3020069\nChange-Id: Id4b1d51a5fa4c418865055635a84bebcf5b65ec8\n"
    }
  ],
  "next": "5b7e90ac937857c10a3d49b244ec75ca539b9a22"
}
