)]}'
{
  "log": [
    {
      "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": "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": "b2c0ff64d8ff92dab53e969a44fa12427d145952",
      "tree": "3b3139b4fd331e0ce65d245510d54c15ae3a03ae",
      "parents": [
        "8692685a54f6bf87dadc82fbd5576cdb81ba662b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 12 17:36:25 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Apr 12 18:09:04 2013 -0700"
      },
      "message": "Remove old KeyStore call sites\n\nRemove the call sites that don\u0027t have the flags specified. This is to\nensure that callers know what flags they\u0027re setting.\n\nBug: 8122243\nChange-Id: Ifbd178fddbf8dbd8f7b821ea739a20d056ef9fa7\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": "5b7e90ac937857c10a3d49b244ec75ca539b9a22",
      "tree": "88d4dd850f2288d87e620f3cf60db934b3a91c58",
      "parents": [
        "1ea4a5ba859c70b7e7414e1f6a2a772cf9dd5cfb"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 02 11:23:41 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 02 11:23:41 2013 -0700"
      },
      "message": "Add API to query KeyChain algorithm support, pt. 2\n\nLate-breaking comments on API name. Revised.\n\nBug: 7095660\nChange-Id: I7224d9c8a4f84a272360ede78a18bfb72d8aeb77\n"
    },
    {
      "commit": "bf556ac636a39c1d0fe5451a921b88400dd1c695",
      "tree": "46595e9d1072d3611adb6b30fa10741696a2831b",
      "parents": [
        "53de5c296a579e9012d152f8a25c08f6f6091b3b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Apr 01 15:10:22 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 02 10:34:24 2013 -0700"
      },
      "message": "Add API to query KeyChain algorithm support\n\nBug: 7095660\nChange-Id: Ia87caaa33bc01b032130811833f0a3c4f75b62d4\n"
    },
    {
      "commit": "5cb5cec6a4a4d5432d4ce6468c12de9508db1633",
      "tree": "0778665976a92cdaf2943e551c72ef5fbb41f558",
      "parents": [
        "2fb669e68f771f07517b8d5087ca875025b9bcfb"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Mar 29 11:14:17 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Mar 29 14:21:10 2013 -0700"
      },
      "message": "KeyStore: add API to query storage type\n\nAdd an API to keystore daemon to query what kind of storage is currently\nin use.\n\n(cherry picked from commit a738e2a1aee26e0be3944c11820724aeca313f83)\n\nChange-Id: I52c84449a27b1cefc49372a6406b7132c2bbddee\n"
    },
    {
      "commit": "acb0b5b220b2cb15f5a800a356bb25f47252a6ea",
      "tree": "f5df06bd61e283f28dec8598115fc290fa3f75b1",
      "parents": [
        "02c86306d2569d18a49da3d9228dacb25b1f8973"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 28 15:05:03 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 28 16:05:46 2013 -0700"
      },
      "message": "AndroidKeyStore: add Builder for param spec\n\nChange-Id: I13403197e1ac7ac607efa10979eb73bde0135a2a\n"
    },
    {
      "commit": "3e7be43e2555bbdfe311dcbd9a36f7f05321a2d8",
      "tree": "56850ebc6b5f349bb0127b8e92c031b65095c05e",
      "parents": [
        "3864aa3944254184ddcd61002cb9f1d7cb1d4c67"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 28 09:25:51 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 28 11:30:11 2013 -0700"
      },
      "message": "Add ability to install credentials as other UID\n\nWe need the ability to install from the system UID to wifi UID\nto explicitly bind WiFi credentials to the WiFi profile. This adds the\nability for Wifi Settings to invoke installation of a PKCS12 file for\nthe wifi UID.\n\nBug: 8183258\nChange-Id: I652b7e6fa93deda6d6d310be33f224e5a356c787\n"
    },
    {
      "commit": "5f1d965f7d7e1df50981ffed8faa11fbcc17ca22",
      "tree": "b4449ba12d8e3da7e8c70edcd2b313f4798cd76c",
      "parents": [
        "e4679750c538e982bb81f4eea2343e8bede3e118"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 21 14:21:50 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Mar 21 14:24:19 2013 -0700"
      },
      "message": "KeyStore: change migrate to duplicate\n\nAfter discussion, it was determined that duplicate would be less\ndisruptive and it still fit in the current HAL model.\n\nChange-Id: I2f9cae48d38ec7146511e876450fa39fc92cda55\n"
    },
    {
      "commit": "bd79419ef84ae31f3765721b50aa413fa462d1d1",
      "tree": "d2eb8242f5a770452d7100d38b6c273aac242134",
      "parents": [
        "78ad849163a7b01073b46fbd7d818392720005d1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Mar 20 11:36:50 2013 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Mar 20 11:57:46 2013 -0700"
      },
      "message": "KeyStore: add \"migrate\" command\n\nTo support the WiFi service, we need to support migration from the\nsystem UID to the wifi UID. This adds a command to achieve the\nmigration.\n\nBug: 8122243\nChange-Id: I65f7a91504c1d2a2aac22b9c3051adffd28d66c1\n"
    },
    {
      "commit": "78ad849163a7b01073b46fbd7d818392720005d1",
      "tree": "8b177dc6137d8264e6e1a288e726de2aab6f040a",
      "parents": [
        "ebebb80b4a629756128b5a4fcf483133f01dbfd7"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 17:02:57 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Wed Mar 20 16:50:06 2013 +0000"
      },
      "message": "KeyStore: add API to uid versions\n\nIn previous commits, we added the ability to specify which UID we want to\ntarget on certain operations. This commit adds the ability to reach those\nbinder calls from the KeyStore class.\n\nAlso fix a problem where saw() was not reading all the values returned via\nthe Binder call. This changes the semantics to return a null instead of\nfailing silently when it\u0027s not possible to search.\n\nChange-Id: I32098dc0eb42e09ace89f6b7455766842a72e9f4\n"
    },
    {
      "commit": "b9594ce9ebb3f5f303a280f04312ae5754ce3560",
      "tree": "c2d5554829d9dfce6c387a7a41a2218d5bd5f276",
      "parents": [
        "37edbbc62fa031c75ce5a1298fdd07d981907e89"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 14 10:18:38 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Feb 14 12:06:51 2013 -0800"
      },
      "message": "KeyStore: stop using state()\n\nChange-Id: I721974fd95f8d1ab06a3fd1bbb4c9b4d9d1d7752\n"
    },
    {
      "commit": "b0f4b8a7d2662e8cc63dae1001175bf72bca1539",
      "tree": "90ec01d90d588d952f3c5d068f932a0e91b51559",
      "parents": [
        "8ab767786a3b59c72b613f84d40b181428327ac1",
        "e151f281d527f4bea5cbdf4219d5e0507a6668b0"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 23:43:57 2013 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Wed Feb 13 23:43:57 2013 +0000"
      },
      "message": "Merge \"Track keystore binder changes\""
    },
    {
      "commit": "0150e48200a967aead3c2ac6f1283ae2df54c305",
      "tree": "bee78bcbe290463bc346f0fb9ec6d18233bbb440",
      "parents": [
        "c5748148c56e129e7b5cec7fac0921ce7967d054"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 15:22:50 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 15:24:06 2013 -0800"
      },
      "message": "KeyChain: return null instead of throw\n\nThe API documentation says it will return null if the key isn\u0027t found.\nWe get null back from the keystore daemon when it can\u0027t retrieve the\ndata, so just return null back to the API caller.\n\nChange-Id: I42248bd50cbc5f76864bd762aae3faab1c50529d\n"
    },
    {
      "commit": "e151f281d527f4bea5cbdf4219d5e0507a6668b0",
      "tree": "487e9615ae880db537fd22900f451a64896b6f95",
      "parents": [
        "c5748148c56e129e7b5cec7fac0921ce7967d054"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 15:22:25 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 13 15:22:25 2013 -0800"
      },
      "message": "Track keystore binder changes\n\nChange-Id: Id6133be059a8a0901d16355a9152e40e4a255454\n"
    },
    {
      "commit": "887c523646012f4f0b63f5ffd0a1e9ebc3c2bdf1",
      "tree": "4502db46424fe9c82fa96eb7ccb264999c59d5c7",
      "parents": [
        "c4a768c87e03a5e6d8b4435aaca6893546006321",
        "74637db21eb0b3c0167378e2b5c866fdc02e51f2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 17:35:35 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 04 17:35:35 2013 -0800"
      },
      "message": "am 74637db2: Merge \"AndroidKeyStore: return error code on error\"\n\n# Via Gerrit Code Review (1) and Kenny Root (1)\n* commit \u002774637db21eb0b3c0167378e2b5c866fdc02e51f2\u0027:\n  AndroidKeyStore: return error code on error\n"
    },
    {
      "commit": "e66769ad5194cb4533d1087416a2e804ac384285",
      "tree": "22123fc2bb1210baa71e79671e44f7a4aad1daf1",
      "parents": [
        "5a720bb9b031d44e593d2054bda586ccc3752aa4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 15:49:11 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 15:50:58 2013 -0800"
      },
      "message": "AndroidKeyStore: return error code on error\n\nInstead of blindly multiplying return value by 1000 to convert to\nmilliseconds, check to see if it\u0027s an error condition first.\n\nChange-Id: I8eab1e7a86d78c13458fcbbc79d590e452fc9791\n"
    },
    {
      "commit": "c4a768c87e03a5e6d8b4435aaca6893546006321",
      "tree": "2f44135e4cb2b2980db138c9026be8563a86f4a5",
      "parents": [
        "516fab2404f550aca03b3774bd5b279d4e69dd9f",
        "5a720bb9b031d44e593d2054bda586ccc3752aa4"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 15:10:26 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 04 15:10:26 2013 -0800"
      },
      "message": "am 5a720bb9: Merge \"AndroidKeyStore: add key wrapping test\"\n\n# Via Gerrit Code Review (1) and Kenny Root (1)\n* commit \u00275a720bb9b031d44e593d2054bda586ccc3752aa4\u0027:\n  AndroidKeyStore: add key wrapping test\n"
    },
    {
      "commit": "516fab2404f550aca03b3774bd5b279d4e69dd9f",
      "tree": "1277c2393a27b7146cae657e1bfc6e5a336dc936",
      "parents": [
        "3789b2fb823b7632e410c0191ddf77dc1e875196",
        "133c5f5e91e72cff1a9a3a4903a0efc96b39165b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 15:10:22 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Feb 04 15:10:22 2013 -0800"
      },
      "message": "am 133c5f5e: Merge \"AndroidKeyStore: fix tests\"\n\n# Via Gerrit Code Review (1) and Kenny Root (1)\n* commit \u0027133c5f5e91e72cff1a9a3a4903a0efc96b39165b\u0027:\n  AndroidKeyStore: fix tests\n"
    },
    {
      "commit": "656f92f2c6fec008dd3131f6ec30a121b5b2a92e",
      "tree": "a97e794772576fa72827dcb7e265df83dfaf8b7e",
      "parents": [
        "8b58c52bf4cc276165b1857eb4087eabde7b6477"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 14:47:36 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 14:53:11 2013 -0800"
      },
      "message": "AndroidKeyStore: add key wrapping test\n\nChange-Id: Ib21ab37d22689dd87f014eaa1f7919a575367cdd\n"
    },
    {
      "commit": "8b58c52bf4cc276165b1857eb4087eabde7b6477",
      "tree": "448c4ff3315e2fc1a9c4d910c749eda002c7ce57",
      "parents": [
        "ace72f6a37ffc232172346b3385494ef10195583"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 14:47:23 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Feb 04 14:52:23 2013 -0800"
      },
      "message": "AndroidKeyStore: fix tests\n\nChange-Id: I65fd8ba27af57ea8fd27c8e08c9c1201f32c494d\n"
    },
    {
      "commit": "a647281109584d96ba2265c0faa14432deeb9815",
      "tree": "38ee867fe739b4db88aa88dc392a8376a449511f",
      "parents": [
        "4dca3946177aaea54d78d39273324caacf74a7bb",
        "2e99d3c9646861ca92faf6708c18e36c7530fd93"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Jan 25 16:41:33 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jan 25 16:41:33 2013 -0800"
      },
      "message": "am 2e99d3c9: am ebb61ca2: Merge \"Track libcore changes for OpenSSLKey\"\n\n# Via Android Git Automerger (1) and others\n* commit \u00272e99d3c9646861ca92faf6708c18e36c7530fd93\u0027:\n  Track libcore changes for OpenSSLKey\n"
    },
    {
      "commit": "cc1fc6b6adc1edc2acaa42205b4ec5ca00bfd353",
      "tree": "299d31dd411af8ca6121807073004701464232e9",
      "parents": [
        "b1e16f11ffd3a391be1a44a352c122b6dad1e8a5"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 22 13:25:38 2013 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jan 22 15:22:56 2013 -0800"
      },
      "message": "Track libcore changes for OpenSSLKey\n\nChange-Id: I39f60c34daa9ccc633efb02988ea238a84e6bbf1\n"
    },
    {
      "commit": "c41db6c9ba298c8fac5068ad2843b4aa58ecf1c5",
      "tree": "b13108014c51ebbe71a07d463c0c06ac7508cd9f",
      "parents": [
        "262b311c3c7d68204a72d3ba87bd76883aec00e2",
        "834b0f3cd90679655ac1549cb427fc9475ac4a4b"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Thu Jan 03 18:44:22 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jan 03 18:44:22 2013 -0800"
      },
      "message": "am 834b0f3c: am 19b17b41: am 38a642e9: am 3e2479dd: Merge \"docs: fix broken links and add new sitemap text file\" into jb-mr1-dev\n\n* commit \u0027834b0f3cd90679655ac1549cb427fc9475ac4a4b\u0027:\n  docs: fix broken links and add new sitemap text file\n"
    },
    {
      "commit": "188315cf8b44fb59da2d37c1d54bbc70ee3acb4e",
      "tree": "b36f9db256cf022a8b3eb179ab1bd5eaeb3fcb42",
      "parents": [
        "9d7578c73afa69272dcf9476ae3eefc2b59d6778"
      ],
      "author": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Thu Jan 03 18:02:21 2013 -0800"
      },
      "committer": {
        "name": "Scott Main",
        "email": "smain@google.com",
        "time": "Thu Jan 03 18:02:21 2013 -0800"
      },
      "message": "docs: fix broken links and add new sitemap text file\n\nChange-Id: If0f7967a65a6e3a444a565a2e8229a04a5265f56\n"
    },
    {
      "commit": "6b77645aa9ac51ce33ea67adba226aaf1a6e8846",
      "tree": "0eb1ff1cf5bbe1e508596462396c03d878fd9c26",
      "parents": [
        "87ed0a10f5cb563c0a06d22a40472b4e88348e9b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Nov 02 15:40:32 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 14 08:45:52 2012 -0800"
      },
      "message": "Switch keystore to binder\n\nChange-Id: I9fa1fc05068bee1eed3f618fb32f70cf3d4c05d4\n"
    },
    {
      "commit": "58ed5d748c0b9b64845975ef5844ad313de7c3f6",
      "tree": "507af3879bc894eb854712a1fe6c0953805a895c",
      "parents": [
        "9197d170b770f2b87abd0cd0e13dcf71e5a181c2",
        "768d9e1a72ceee7d4a5f608776b87b62d6ce4a04"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 07 11:52:12 2012 -0800"
      },
      "message": "am 768d9e1a: Merge \"Correct executable bit for source files\"\n\n* commit \u0027768d9e1a72ceee7d4a5f608776b87b62d6ce4a04\u0027:\n  Correct executable bit for source files\n"
    },
    {
      "commit": "3a084af2e90849aaa8beb3a610189e3399c63ea0",
      "tree": "ba4b87d227674fd68f9ea395649fde32778620f0",
      "parents": [
        "9d547d6934f64189e368c0b190fb4cf49c95a557"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:19:47 2012 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 07 10:27:31 2012 -0800"
      },
      "message": "Correct executable bit for source files\n\nMany media files and source code files were marked as executable in Git.\nRemove those.\n\nAlso a shell script and python script were not marked as executable.\n\nChange-Id: Ieb51bafb46c895a21d2e83696f5a901ba752b2c5\n"
    },
    {
      "commit": "ce24985ad636c38b6ee01ec9cdecfb038bfeaeb6",
      "tree": "0fd76d777fe86ee580ba0bcb03e0c6be327e2738",
      "parents": [
        "0b62fa234d2e3580b1f04cb9c4a6a308be99a5ae"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 14 16:19:31 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 14 16:23:37 2012 -0700"
      },
      "message": "Remove AndroidKeyStore from API\n\nChange-Id: Ibe09d78e5a5b86604f01144f344525bff94c2dde\n"
    },
    {
      "commit": "0efca17105d112a0ff568602831b22bdafa00433",
      "tree": "5a4a8a7cf4d0f4884a75ec7d4b4ecb27bc5a0ad8",
      "parents": [
        "bd0fe8783407bc760b8e9a9952cb96a600d26ea9"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Sep 04 23:01:07 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Sep 12 10:01:00 2012 -0700"
      },
      "message": "Tracking upgrade to bouncycastle 1.47\n\nChange-Id: I4a3c508c5e65dd46a2df22935b5351092550fad5\n"
    },
    {
      "commit": "a4640c082c8ccf66ebfb50ace5747409ab6aee55",
      "tree": "7b2266c166f65ef186e913f18110dab6bbd7d9e8",
      "parents": [
        "2701f325a6d4acd920637d2ff6fd6972a9cf836b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 31 13:38:11 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 31 16:45:24 2012 -0700"
      },
      "message": "Add some NullPointerExceptions to AndroidKeyStore\n\nExisting KeyStore implementations throw NullPointerExceptions beacuse\nthe KeyStoreSpi doesn\u0027t check these arguments for null. Add in checks so\nwe don\u0027t accidentally check some bogus values.\n\nAlso switch a RuntimeException to a KeyStoreException\n\nChange-Id: I18f4d4474d607cb2057ea8069b901e0992275e78\n"
    },
    {
      "commit": "69ddab4575ff684c533c995e07ca15fe18543fc0",
      "tree": "dfae3a89b9027c33d47b58f80200af021bbe7426",
      "parents": [
        "080ca09c7f4c0033d0efece23687b71f7f8febc9"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Sat Aug 25 00:05:46 2012 -0700"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Aug 27 12:35:05 2012 -0700"
      },
      "message": "Always-on VPN.\n\nAdds support for always-on VPN profiles, also called \"lockdown.\" When\nenabled, LockdownVpnTracker manages the netd firewall to prevent\nunencrypted traffic from leaving the device. It creates narrow rules\nto only allow traffic to the selected VPN server. When an egress\nnetwork becomes available, LockdownVpnTracker will try bringing up\nthe VPN connection, and will reconnect if disconnected.\n\nConnectivityService augments any NetworkInfo based on the lockdown\nVPN status to help apps wait until the VPN is connected.\n\nThis feature requires that VPN profiles use an IP address for both\nVPN server and DNS. It also blocks non-default APN access when\nenabled. Waits for USER_PRESENT after boot to check KeyStore status.\n\nBug: 5756357\nChange-Id: If615f206b1634000d78a8350a17e88bfcac8e0d0\n"
    },
    {
      "commit": "802768dd86c4e8a933dbfbac2e9f1a1daa5f93fa",
      "tree": "a90458054c943c102152dbc0c061a83d52c1c70c",
      "parents": [
        "6479ecd1b24e9d5a5636130cb4b0c353b396ff0e"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Aug 21 15:23:35 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 22 13:03:30 2012 -0700"
      },
      "message": "Add ability to replace chain for PrivateKeyEntry\n\nFor the AndroidKeyStore API, allow entries to have their certificate\nchain replaced without destroying the underlying PrivateKey. Since\nentries are backed by unexportable private keys, requiring them to be\nsupplied again doesn\u0027t make sense and is impossible.\n\nChange-Id: I629ce2a625315c8d8020a082892650ac5eba22ae\n"
    },
    {
      "commit": "db026710ec0adcf7f72dfb24c65d38a882ee26d8",
      "tree": "cff080fbecd17c5d6e6a60a7bc2adccbd6761b20",
      "parents": [
        "e29df16cb57b69995df597e8a6d95d986c1c43fc"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 20 10:48:46 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Aug 22 08:52:55 2012 -0700"
      },
      "message": "Add KeyPairGenerator for Android keystore\n\nThis allows end-users to generate keys in the keystore without the\nprivate part of the key ever needing to leave the device. The generation\nprocess also generates a self-signed certificate.\n\nChange-Id: I114ffb8e0cbe3b1edaae7e69e8aa578cb835efc9\n"
    },
    {
      "commit": "e29df16cb57b69995df597e8a6d95d986c1c43fc",
      "tree": "7cb7fb03ffff118dab968b483bb6d52270cf4ac9",
      "parents": [
        "473c712b19bad992ab4eafcd43175fdce77b913d"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 10 08:28:37 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 20 12:44:40 2012 -0700"
      },
      "message": "Add AndroidKeyStore provider for KeyStore API\n\nThis introduces a public API for the Android keystore that is accessible\nvia java.security.KeyStore API. This allows programs to store\nPrivateKeyEntry and TrustedCertificateEntry items visible only to\nthemselves.\n\nFuture work should include:\n\n* Implement KeyStore.CallbackHandlerProtection parameter to allow the\n  caller to request that the keystore daemon unlock itself via the\n  system password input dialog.\n\n* Implement SecretKeyEntry once that support is in keystore daemon\n\nChange-Id: I382ffdf742d3f9f7647c5f5a429244a340b6bb0a\n"
    },
    {
      "commit": "473c712b19bad992ab4eafcd43175fdce77b913d",
      "tree": "53695829e6276f1ab596ec873b63e3fa9ad2c491",
      "parents": [
        "bc11e52cafa182996a338641c86bf3a07f571b1d"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 17 21:13:48 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 20 09:48:41 2012 -0700"
      },
      "message": "Add getmtime to Android KeyStore API\n\njava.security.KeyStore requires that you be able to get the creation\ndate for any given entry. We\u0027ll approximate that through using the mtime\nof the file in the keystore.\n\nChange-Id: I16f74354a6c2e78a1a0b4dc2ae720c5391274e6f\n"
    },
    {
      "commit": "4cfb30a22ac22ce6a50d4860e467beda5c7da735",
      "tree": "c0a230a1ba720ba74ea27ec76bc6f62617ec3c7c",
      "parents": [
        "f83d2d6f6b4a23011226a7b9fee20dabf94820cb",
        "1ad8bf5660281d624759897e0403b35b29641ba2"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Aug 13 09:49:46 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 13 09:49:46 2012 -0700"
      },
      "message": "am 1ad8bf56: am f0e87175: Merge \"Remove useless TestRunner\"\n\n* commit \u00271ad8bf5660281d624759897e0403b35b29641ba2\u0027:\n  Remove useless TestRunner\n"
    },
    {
      "commit": "96ad6cb080d0721a433d2bcb201f4a4582bf1caf",
      "tree": "1c74406ce7acaf2be1d06c2885cd50b62a8b7d85",
      "parents": [
        "37548994e69292932e9e2fafb7cba6c53e3a2bcd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 10 12:39:15 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Aug 10 13:40:19 2012 -0700"
      },
      "message": "Remove useless TestRunner\n\nInstrumentationTestRunner can enumerate the test cases to run without a\nspecial TestRunner.\n\nChange-Id: I5a49413440ef191f28a21034a318d9a9e3f8174b\n"
    },
    {
      "commit": "54e03afcfe34e9875efa56650c1af3ebc8f58a89",
      "tree": "25390fe3fb2d9846e94974fb7f6cb63f04f16ef3",
      "parents": [
        "bec1d13da2ef3c8c2c4cc4f740474d095068bd8b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Aug 07 10:04:26 2012 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Aug 07 11:41:16 2012 -0700"
      },
      "message": "Use TrustedCertificateStore for chain building\n\nMove chain building to TrustedCertificateStore since it has more\ninformation about the certificates.\n\nChange-Id: I3030e94eb1abb8a2047a4151bdaad9922706dd0f\n"
    },
    {
      "commit": "2a5b147ec8fc1235af928042bdfb78170b18067b",
      "tree": "9420325372005ce5d2070402a0f99dcd04d85552",
      "parents": [
        "4faeef378e9b82a4ad0fc1d4bb923af1a4f70e4e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jul 30 18:44:29 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Aug 01 15:44:52 2012 -0700"
      },
      "message": "Change KeyStore to use Modified UTF-8 to match NativeCrypto\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d35141\nBug: 6869713\n\nChange-Id: I61cb309786960072148ef97ea5afedb33dc45f4e\n"
    },
    {
      "commit": "5b1f037829bff93877a6257db69f4e7723a27e20",
      "tree": "81bd1910040f2f1e2d491070e0309eee205b2ac8",
      "parents": [
        "28b452fddf85de27ad88b2b5de884c8428e74f1e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jul 30 18:44:29 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jul 30 18:54:18 2012 -0700"
      },
      "message": "Change KeyStore to use Modified UTF-8 to match NativeCrypto\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d35141\nBug: 6869713\n\nChange-Id: I61cb309786960072148ef97ea5afedb33dc45f4e\n"
    },
    {
      "commit": "5ea68db37fd5ad4e0ddc0745b4347e86f17f78db",
      "tree": "9ff7f7392fa6a74f2304362f173092ec342dce99",
      "parents": [
        "dfac68eacc60c130e54345d98bd45c99573cb627"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 17 23:40:49 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 27 22:41:42 2012 -0700"
      },
      "message": "Improve test key names to reproduce public issue\n\nAlso fixes other unrelated test failures.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d34577\nBug: 6837950\n\n(cherry-picked from f4019af04a1fc4b16aa5972cbcbba703caa5d78d)\n\nChange-Id: I5b32b5ccac80f04a4d0fd6b21b8caa11e42995a7\n"
    },
    {
      "commit": "f4019af04a1fc4b16aa5972cbcbba703caa5d78d",
      "tree": "cb973060e9f94fee6b6fbea21518d1ae7819dbf7",
      "parents": [
        "388953942b536b5eebd942ef78ae5b7499bc2078"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 17 23:40:49 2012 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jul 17 23:56:20 2012 -0700"
      },
      "message": "Improve test key names to reproduce public issue\n\nAlso fixes other unrelated test failures.\n\nBug: http://code.google.com/p/android/issues/detail?id\u003d34577\nBug: 6837950\n\nChange-Id: I2c5ed1cbfbe0ab6f4ddd8619696d6545be0519a8\n"
    },
    {
      "commit": "5423e68d5dbe048ec6f042cce52a33f94184e9fb",
      "tree": "77d2cc39ea7f7a856d71d79233702af3dd71dccd",
      "parents": [
        "b2e822fc2ac87703ac12d062add62408574cbf7c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Nov 14 08:43:13 2011 -0800"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Mar 20 09:04:33 2012 -0700"
      },
      "message": "Add signing to keystore\n\nChange the keystore to keep the private keys in keystore. When returned,\nit uses the OpenSSL representation of the key to allow users to use it\nin various operations through the OpenSSL ENGINE that connects to\nkeystore.\n\nChange-Id: I3681f98cb2ec49ffc4a49f3821909313b4ab5735\n"
    },
    {
      "commit": "1cedb47e18a3acb322914e1963285882dc77d9ba",
      "tree": "28e75fe0ca8c2601f896e05e50051d450f6b851a",
      "parents": [
        "a1d2bd829d4804b7841d7c39c8d2ae438b634efb",
        "e57319ff880c43b44aaab4905dc8997d97827520"
      ],
      "author": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Thu Mar 15 14:55:15 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 15 14:55:15 2012 -0700"
      },
      "message": "Merge \"Make the credential storage change action public.\""
    },
    {
      "commit": "fcdccac49067e4cc60567ee93ccf1b62e74477fb",
      "tree": "e25cedb6c3fd888ec4ebaae1914686e37b3c2db6",
      "parents": [
        "592c85cd6c083997ee7f31ecbd52ab67942467d6"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Mar 01 15:14:14 2012 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Mar 01 15:14:14 2012 -0800"
      },
      "message": "Remove obsolete KeyChain references to USE_CREDENTIALS (2 of 2)\n\nChange-Id: Ic8a22ce3a9010b8378af044e611bf787e15f6227\n"
    },
    {
      "commit": "e57319ff880c43b44aaab4905dc8997d97827520",
      "tree": "3fb494b7f3b52b95a4350d152962967915e366d1",
      "parents": [
        "abfac6a55984fc7f0cf044371104c4e1b0b65fbf"
      ],
      "author": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Fri Feb 17 14:35:18 2012 -0800"
      },
      "committer": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Fri Feb 17 14:35:18 2012 -0800"
      },
      "message": "Make the credential storage change action public.\n\nBug: 6009802\n\nWhen the credential storage changes, (adding/removing certs,\nresetting the storage, enabling/disabling trusted CAs, etc), the\napplications that use the storage has to be made aware of the\nfact that the storage changed, so they can clear any cached state,\nclose connections or take any other actions. Internally, this\napplies to webview. However, applications, potentially including\n3rd party browsers, also need this information.\n\nChange-Id: I765b97a3f38f45247ee3f6e127b490388d373847\n"
    },
    {
      "commit": "93ba4fedebb78ba47c24e8472c8960ea8fdc933a",
      "tree": "66f36a06854e538cd83fab14c5e8662ef40abd03",
      "parents": [
        "dbbb175258d39fc8a528527a8ce1ad4cb338b496"
      ],
      "author": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Tue Feb 14 11:48:49 2012 -0800"
      },
      "committer": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Thu Feb 16 14:24:10 2012 -0800"
      },
      "message": "Act on credential storage updates.\n\nBug: 6009802\n\nCherry pick fcd93b72a3dde2b20fa0d8b04d3f47311b0856a1\nListen to credential storage updates and clean state when necessary.\n\nChange-Id: I2c63e6771e9373da8b39781fdcf3d21583c4e3b2\n"
    },
    {
      "commit": "43e41580e4c700e970cc5e62180a767ab424da6d",
      "tree": "51ce4cc891d418ebab7d1f4bf64a5c0210567689",
      "parents": [
        "fcd93b72a3dde2b20fa0d8b04d3f47311b0856a1"
      ],
      "author": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Wed Feb 15 19:04:04 2012 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 15 19:04:04 2012 -0800"
      },
      "message": "Revert \"Act on credential storage updates.\"\n\nThis reverts commit fcd93b72a3dde2b20fa0d8b04d3f47311b0856a1"
    },
    {
      "commit": "fcd93b72a3dde2b20fa0d8b04d3f47311b0856a1",
      "tree": "8d56f6f2dff57a0f97eb1f0c3f5c7a88cfe81dcf",
      "parents": [
        "b17932fe84f84a660194d25d56ce06324b1bf28d"
      ],
      "author": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Tue Feb 14 11:48:49 2012 -0800"
      },
      "committer": {
        "name": "Selim Gurun",
        "email": "sgurun@google.com",
        "time": "Wed Feb 15 10:02:25 2012 -0800"
      },
      "message": "Act on credential storage updates.\n\nBug: 6009802\n\nListen to credential storage updates and clean state when necessary.\n\nChange-Id: I48f2e7d6e036882c2b4a29fbd357ca018fd4e4c7\n"
    },
    {
      "commit": "ab8b84ad3847788d83da557606aa27d4102e6b52",
      "tree": "1e9ecca2953c3c8b4fe39c374a4d86e0ed8303c2",
      "parents": [
        "8c55a9a57e4f13ec420c3de7b3abfdcf454f6633"
      ],
      "author": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Wed Jul 13 14:55:39 2011 -0700"
      },
      "committer": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Wed Jul 13 22:45:07 2011 -0700"
      },
      "message": "Make the KeyChain handled its own grants rather than having\nAccountManagerService handle them.\n\nChange-Id: I89d272b22766f85019c1f947153d69e6dbb74c68\n"
    },
    {
      "commit": "74e6bd7b7783fb506d7525e9ba40aac980745eaf",
      "tree": "ba5021a7f07abdbf6c2766973c50f4d8e614c8f0",
      "parents": [
        "28db8b944a589b9db0474c90e64875c6023292bb",
        "ca43c458ad0ee8cfa7f5eabc8ba1a65ae473976b"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jul 06 14:59:21 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 06 14:59:21 2011 -0700"
      },
      "message": "Merge \"New KeyChain API for credential installation\""
    },
    {
      "commit": "db93b78385d694402760ad63de0795f3902030d9",
      "tree": "0e43bd94879c2db988648b5c33b674e89625abe1",
      "parents": [
        "748d9f2fe4db14d1f0f140a92ff7e6cc27dcd732"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 01 00:12:17 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jul 01 14:41:56 2011 -0700"
      },
      "message": "Build cert chain in KeyChain.getCertificateChain\n\nBug: 4970298\nChange-Id: Id91391233528edc2a4da5ebe92ec85d381f170de\n"
    },
    {
      "commit": "ca43c458ad0ee8cfa7f5eabc8ba1a65ae473976b",
      "tree": "dcfa3b84dbeefe5928770600b316bc94e6de02e0",
      "parents": [
        "6e24576b6b10336e37c6447a5e2dbde5ea332da6"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 29 18:53:17 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 29 20:32:54 2011 -0700"
      },
      "message": "New KeyChain API for credential installation\n\nBug: 3497064\nChange-Id: Ie5c20e87a436b7ab66258d08b719ab8bb1f1d86d\n"
    },
    {
      "commit": "a00a2b33ccc6bc079c3ee57a938f62947b48a001",
      "tree": "5e057ff17cca7fb2ab224ac1abd81bfc34e4325b",
      "parents": [
        "afb60c36b7879c4ed195fb19cc4334175be28c92"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 29 10:42:35 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 29 18:46:56 2011 -0700"
      },
      "message": "KeyChain API for credential installation\n\nBug: 3497064\nChange-Id: I4ac4d8b5559496b1632d63c2129e2bafd240893f\n"
    },
    {
      "commit": "bef5e5aabcb6ab440829f4418d1cbc268564eee0",
      "tree": "c2312f4e06065bec972b66f0ad292ca0fdca5fbc",
      "parents": [
        "5106476bbf2a8e89b47e91d60e20fd38f7fa7e85"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 27 17:22:02 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 27 17:22:02 2011 -0700"
      },
      "message": "Add KeyStoreTest.testGet\n\nNow that system user can read keystore, add KeyStoreTest.testGet and update other tests to use KeyStore.get\n\nChange-Id: I364866d52c2ecf550ff26aadc6e85126318889fa\n"
    },
    {
      "commit": "6da00334478df64921b68fcbb45c9d1eef6f35bd",
      "tree": "62903589cfc52fadf5ae070a6448304319c7a109",
      "parents": [
        "a084c841aa4b5c0ab2e0e7a62c58a852633adb62"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sun Jun 26 21:08:03 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Jun 27 12:14:25 2011 -0700"
      },
      "message": "Moving ssl_certificate layout, resources, and helper code to SslCertificate\nAdd IKeyChainService.deleteCaCertificate\n\nChange-Id: If42341bc732efcfe4f958c00cdd6c0fec11a3c75\n"
    },
    {
      "commit": "67c30dfe8e4bff11a4660ac23e8679b5deb59457",
      "tree": "bf4811e6fbf0bcd12bb90f3a02824be69cfb3b9f",
      "parents": [
        "dde052f4ba57d74af25a513853bacc035368240e"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jun 24 02:13:23 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Jun 25 16:48:25 2011 -0700"
      },
      "message": "Replace KeyChainActivity placeholder UI with more polished dialog (1 of 5)\n\nframeworks/base\n\n    Extended KeyChain.chooserPrivateKeyAlias to allow caller to supply\n    preferred choice to be selected in chooser. This allows Email\n    settings to highlight the current choice when allowing user to\n    change settings.\n\tkeystore/java/android/security/KeyChain.java\n\tapi/current.txt\n\n    Implemented KeyChain functionality to pass host and port\n    information to KeyChainActivity for display.\n\tkeystore/java/android/security/KeyChain.java\n\n    KeyChain now sends a PendingIntent as part of the Intent it sends\n    to the KeyChainActivity which can be used to identify the caller\n    in reliable way.\n\tkeystore/java/android/security/KeyChain.java\n\n    Moved .pfx/.p12/.cer/.crt constants to Credentials for reuse.\n    Added Credentials.install variant with no value for use from KeyChainActivity\n\tkeystore/java/android/security/Credentials.java\n\npackages/apps/CertInstaller\n    Source of extension constants now in Credentials\n\tsrc/com/android/certinstaller/CertFile.java\n\npackages/apps/Browser\n    Have browser supply host and port information to KeyChain.choosePrivateKeyAlias\n    Tracking KeyChain.choosePrivateKeyAlias API change\n\tsrc/com/android/browser/Tab.java\n\npackages/apps/Email\n    Tracking KeyChain.choosePrivateKeyAlias API change\n\tsrc/com/android/email/view/CertificateSelector.java\n\npackages/apps/KeyChain\n\n    KeyChain now depends on bouncycastle X509Name for formatting\n    X500Principals, since the 4 X500Principal formatting options could\n    not format emailAddress attributes in a human readable way and its\n    the most important attribute to display for client certificates in\n    most cases.\n\tAndroid.mk\n\n    Changing the UI to a dialog, make the activity style transparent.\n\tAndroidManifest.xml\n\tres/values/styles.xml\n\n    Layout for chooser dialog\n\tres/layout/cert_chooser.xml\n\n    Layout for list items in chooser\n\tres/layout/cert_item.xml\n\n    New resources for dialog including comments for translators.\n\tres/values/strings.xml\n\n    New dialog based KeyChainActivity. Now also shows requesting app\n    and requesting server. Now can preselect a specified alias. New\n    link directly to CertInstaller.\n\n\tsrc/com/android/keychain/KeyChainActivity.java\n\n    Fix KeyChainTestActivity to work with TestKeyStore changes that\n    were causing network activity on the UI to look up the name of\n    localhost. Also track KeyChain.choosePrivateKeyAlias API change.\n\n\ttests/src/com/android/keychain/tests/KeyChainTestActivity.java\n\nChange-Id: I07128fba8750f9a6bcb9c6be5da04df992403d69\n"
    },
    {
      "commit": "42f6528b988e3ae320cda63a2bd63d30d9e56183",
      "tree": "15036acfbdb1d2f35899ba85b27da83ed9b99b99",
      "parents": [
        "21e2f1b4a0877ee38f7ba89eb32f585fb34431f3"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jun 09 21:26:21 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Jun 10 10:43:02 2011 -0700"
      },
      "message": "New KeyChain API for application access to keystore credentials\n\nThe KeyChain API is Currently in use by Browser and validated by Email\nfor client certificate authentication.\n\nChange-Id: Ifeab416be594457a05747406e31656e71795cb53\n"
    },
    {
      "commit": "93201f545b67da15cb69830a5988810aef52c0b2",
      "tree": "1386ffcba41a1e94de13ea6920cf11a296b8b9c6",
      "parents": [
        "e1a255a89f64730272a66b93f82ec348989a0899"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jun 09 15:05:35 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Jun 09 21:11:06 2011 -0700"
      },
      "message": "KeyChain API refinements\n\nChange-Id: I177ab4642e6cd1aa13526c14f0a707175fd79655\n"
    },
    {
      "commit": "9d7faa91be6661eccf73494f1ab96ae9a28d42d7",
      "tree": "85bf8aec36f40536a4e6dbf2cd25ea59239ab956",
      "parents": [
        "a4a48a484fe862787cf2fbe1314deab8ac375951"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jun 07 13:45:33 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue Jun 07 15:33:09 2011 -0700"
      },
      "message": "Change KeyChain to assume PEM encoded keystore entries\n\nSummary:\n- Changed KeyChain to assume PEM encoded keystore entries\n- Moved convertToPem from CertInstaller for reuse with other Credentials helpers\n- Added convertFromPem for use decoding keystore entries\n\nChange-Id: I340168b88aefa458d01e81324824e2e08b1d7c4e\n"
    },
    {
      "commit": "7e4b1a488dd02c4bf6156379e36834e9e01c5b1b",
      "tree": "5a28b9bd912415e1a71c1130696720cbe5080c7f",
      "parents": [
        "cb0975b3c1c73d8bcadaca80e1ee99383750af60"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 01 15:29:29 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 01 15:29:29 2011 -0700"
      },
      "message": "Restore ResponseCodes for use with getLastError\n\nChange-Id: I41b5bc9cbb6c05672c92d5864e889fd2b0186141\n"
    },
    {
      "commit": "5cfee3fabb3482c6a6df1c8b6f21e843cf214527",
      "tree": "c4190f1fa809eb1e5e7d028f21be510b2a5b3980",
      "parents": [
        "9b4157935af9e44571187a9533c2cc9b413383bf"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 31 01:00:15 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Jun 01 14:29:59 2011 -0700"
      },
      "message": "Integrating keystore with keyguard (Part 1 of 4)\n\nSummary:\n\nframeworks/base\n  keystore rewrite\n  keyguard integration with keystore on keyguard entry or keyguard change\n  KeyStore API simplification\n\npackages/apps/Settings\n  Removed com.android.credentials.SET_PASSWORD intent support\n  Added keyguard requirement for keystore use\n\npackages/apps/CertInstaller\n  Tracking KeyStore API changes\n  Fix for NPE in CertInstaller when certificate lacks basic constraints\n\npackages/apps/KeyChain\n  Tracking KeyStore API changes\n\nDetails:\n\nframeworks/base\n\n   Move keystore from C to C++ while rewriting password\n   implementation. Removed global variables. Added many comments.\n\n\tcmds/keystore/Android.mk\n\tcmds/keystore/keystore.h\n\tcmds/keystore/keystore.c \u003d\u003e cmds/keystore/keystore.cpp\n\tcmds/keystore/keystore_cli.c \u003d\u003e cmds/keystore/keystore_cli.cpp\n\n   Changed saveLockPattern and saveLockPassword to notify the keystore\n   on changes so that the keystore master key can be reencrypted when\n   the keyguard changes.\n\n\tcore/java/com/android/internal/widget/LockPatternUtils.java\n\n   Changed unlock screens to pass values for keystore unlock or initialization\n\n\tpolicy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java\n\tpolicy/src/com/android/internal/policy/impl/PatternUnlockScreen.java\n\n   KeyStore API changes\n   - renamed test() to state(), which now return a State enum\n   - made APIs with byte[] key arguments private\n   - added new KeyStore.isEmpty used to determine if a keyguard is required\n\n\tkeystore/java/android/security/KeyStore.java\n\n   In addition to tracking KeyStore API changes, added new testIsEmpty\n   and improved some existing tests to validate expect values.\n\n\tkeystore/tests/src/android/security/KeyStoreTest.java\n\npackages/apps/Settings\n\n    Removing com.android.credentials.SET_PASSWORD intent with the\n    removal of the ability to set an explicit keystore password now\n    that the keyguard value is used. Changed to ensure keyguard is\n    enabled for keystore install or unlock. Cleaned up interwoven\n    dialog handing into discrete dialog helper classes.\n\n\tAndroidManifest.xml\n\tsrc/com/android/settings/CredentialStorage.java\n\n    Remove layout for entering new password\n\n\tres/layout/credentials_dialog.xml\n\n    Remove enable credentials checkbox\n\n\tres/xml/security_settings_misc.xml\n\tsrc/com/android/settings/SecuritySettings.java\n\n    Added ability to specify minimum quality key to ChooseLockGeneric\n    Activity. Used by CredentialStorage, but could also be used by\n    CryptKeeperSettings. Changed ChooseLockGeneric to understand\n    minimum quality for keystore in addition to DPM and device\n    encryption.\n\n\tsrc/com/android/settings/ChooseLockGeneric.java\n\n    Changed to use getActivePasswordQuality from\n    getKeyguardStoredPasswordQuality based on experience in\n    CredentialStorage. Removed bogus class javadoc.\n\n\tsrc/com/android/settings/CryptKeeperSettings.java\n\n    Tracking KeyStore API changes\n\n\tsrc/com/android/settings/vpn/VpnSettings.java\n\tsrc/com/android/settings/wifi/WifiSettings.java\n\n   Removing now unused string resources\n\n\tres/values-af/strings.xml\n\tres/values-am/strings.xml\n\tres/values-ar/strings.xml\n\tres/values-bg/strings.xml\n\tres/values-ca/strings.xml\n\tres/values-cs/strings.xml\n\tres/values-da/strings.xml\n\tres/values-de/strings.xml\n\tres/values-el/strings.xml\n\tres/values-en-rGB/strings.xml\n\tres/values-es-rUS/strings.xml\n\tres/values-es/strings.xml\n\tres/values-fa/strings.xml\n\tres/values-fi/strings.xml\n\tres/values-fr/strings.xml\n\tres/values-hr/strings.xml\n\tres/values-hu/strings.xml\n\tres/values-in/strings.xml\n\tres/values-it/strings.xml\n\tres/values-iw/strings.xml\n\tres/values-ja/strings.xml\n\tres/values-ko/strings.xml\n\tres/values-lt/strings.xml\n\tres/values-lv/strings.xml\n\tres/values-ms/strings.xml\n\tres/values-nb/strings.xml\n\tres/values-nl/strings.xml\n\tres/values-pl/strings.xml\n\tres/values-pt-rPT/strings.xml\n\tres/values-pt/strings.xml\n\tres/values-rm/strings.xml\n\tres/values-ro/strings.xml\n\tres/values-ru/strings.xml\n\tres/values-sk/strings.xml\n\tres/values-sl/strings.xml\n\tres/values-sr/strings.xml\n\tres/values-sv/strings.xml\n\tres/values-sw/strings.xml\n\tres/values-th/strings.xml\n\tres/values-tl/strings.xml\n\tres/values-tr/strings.xml\n\tres/values-uk/strings.xml\n\tres/values-vi/strings.xml\n\tres/values-zh-rCN/strings.xml\n\tres/values-zh-rTW/strings.xml\n\tres/values-zu/strings.xml\n\tres/values/strings.xml\n\npackages/apps/CertInstaller\n\n  Tracking KeyStore API changes\n\tsrc/com/android/certinstaller/CertInstaller.java\n\n  Fix for NPE in CertInstaller when certificate lacks basic constraints\n\tsrc/com/android/certinstaller/CredentialHelper.java\n\npackages/apps/KeyChain\n\n  Tracking KeyStore API changes\n\tsrc/com/android/keychain/KeyChainActivity.java\n\tsrc/com/android/keychain/KeyChainService.java\n\tsupport/src/com/android/keychain/tests/support/IKeyChainServiceTestSupport.aidl\n\tsupport/src/com/android/keychain/tests/support/KeyChainServiceTestSupport.java\n\ttests/src/com/android/keychain/tests/KeyChainServiceTest.java\n\nChange-Id: Ic141fb5d4b43d12fe62cb1e29c7cbd891b4be35d\n"
    },
    {
      "commit": "ba1a667b1d6c95050f6c88316ac58fe9e0ff878b",
      "tree": "c045f3673f7471659f20899f94338da3e45a0d69",
      "parents": [
        "f8355d5489a52dcdd904afb48c0f170886becdae"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 24 21:54:37 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed May 25 10:27:46 2011 -0700"
      },
      "message": "Remove need for onActivityResult from KeyChain API\n\nChange-Id: I97bb9db06978f6dc039d22bfee116671d7b3e336\n"
    },
    {
      "commit": "d752472d9abf03fda637d43716bc6bd632e1f5c3",
      "tree": "9c3d00d1c21b2eb2eadc1687b690d3b018132803",
      "parents": [
        "51c07e717b4416dd338b0add3a3c94d1137366af"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 17 16:20:36 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 17 16:20:36 2011 -0700"
      },
      "message": "Move to KeyChain.bind\n\nChange-Id: Ic3c6e0e9be9bcfdc882cf97cec38cca70b23d0a1\n"
    },
    {
      "commit": "8e9929c4d0730de4c9f01435a7cfe2db8855e24d",
      "tree": "a3075eb3d8b915d47de2f1a7bb31a14acced0e5f",
      "parents": [
        "7f2250d59a81f20627c31a661696ccc4c020fa75"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 17 00:40:28 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Tue May 17 11:33:37 2011 -0700"
      },
      "message": "Simplify KeyChain API by removing now unneeded CA certificate lookup (1 of 3)\n\nframeworks/base\n\n   Remove getCaCertificates and findIssuer from IKeyChainService,\n   these are now done via libcore\u0027s TrustedCertificateStore (as part\n   of the default TrustManager implementation)\n\n\tkeystore/java/android/security/IKeyChainService.aidl\n\n   Simplify KeyChain API. Now that the CA certificates are visible\n   through the default TrustManager, the KeyChain is solely focused on\n   retrieving PrivateKeys and their associated certificates. The\n   calling API for KeyChain to simply a single KeyChain.get() call\n   that returns a KeyChainResult, removing the need for a KeyChain\n   instance that needs to be closed.\n\n\tkeystore/java/android/security/KeyChain.java\n\tkeystore/java/android/security/KeyChainResult.java\n\nmaster/libcore\n\n    Remove getDefaultIndexedPKIXParameters and\n    getIndexedPKIXParameters which was used as part of the prototype\n    of looking up CAs via the KeyChain but is obsoleted by the new\n    default TrustManager implementation.\n\n\tluni/src/main/java/org/apache/harmony/xnet/provider/jsse/SSLParametersImpl.java\n\tluni/src/main/java/org/apache/harmony/xnet/provider/jsse/TrustManagerImpl.java\n\npackages/apps/KeyChain\n\n    Tracking simplified IKeyChainService, removing now unneeded\n    implementation, updating tests.\n\n\tsrc/com/android/keychain/KeyChainService.java\n\ttests/src/com/android/keychain/tests/KeyChainServiceTest.java\n\ttests/src/com/android/keychain/tests/KeyChainTestActivity.java\n\nChange-Id: I847b28c2f467c85f24d2b693a2fecc1cb46426b4\n"
    },
    {
      "commit": "2627d53f65be672e9a27f735975de1bf3aebfec1",
      "tree": "48c1935198510301c39ebd071de0449204fc768c",
      "parents": [
        "444889838ce46475f04956e8b6b027328917f3fe"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri May 13 12:54:24 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat May 14 23:45:16 2011 -0700"
      },
      "message": "Make CertInstaller installed CA certs trusted by applications via default TrustManager (1 of 6)\n\nframeworks/base\n\n    Adding IKeyChainService APIs for CertInstaller and Settings use\n\tkeystore/java/android/security/IKeyChainService.aidl\n\nlibcore\n\n    Improve exceptions to include more information\n\tluni/src/main/java/javax/security/auth/x500/X500Principal.java\n\n    Move guts of RootKeyStoreSpi to TrustedCertificateStore, leaving only KeyStoreSpi methods.\n    Added support for adding user CAs in a separate directroy for system.\n    Added support for removeing system CAs by placing a copy in a sytem directory\n\tluni/src/main/java/org/apache/harmony/xnet/provider/jsse/RootKeyStoreSpi.java\n\tluni/src/main/java/org/apache/harmony/xnet/provider/jsse/TrustedCertificateStore.java\n\n    Formerly static methods on RootKeyStoreSpi are now instance methods on TrustedCertificateStore\n\tluni/src/main/java/org/apache/harmony/xnet/provider/jsse/TrustManagerImpl.java\n\n    Added test for NativeCrypto.X509_NAME_hash_old and X509_NAME_hash\n    to make sure the implementing algortims doe not change since\n    TrustedCertificateStore depend on X509_NAME_hash_old (OpenSSL\n    changed the algorithm from MD5 to SHA1 when moving from 0.9.8 to\n    1.0.0)\n\n\tluni/src/test/java/org/apache/harmony/xnet/provider/jsse/NativeCryptoTest.java\n\n    Extensive test of new TrustedCertificateStore behavior\n\tluni/src/test/java/org/apache/harmony/xnet/provider/jsse/TrustedCertificateStoreTest.java\n\n    TestKeyStore improvements\n    - Refactored TestKeyStore to provide simpler createCA method (and\n      internal createCertificate)\n    - Cleaned up to remove use of BouncyCastle specific X509Principal\n      in the TestKeyStore API when the public X500Principal would do.\n    - Cleaned up TestKeyStore support methods to not throw Exception\n      to remove need for static blocks for catch clauses in tests.\n\n\tsupport/src/test/java/libcore/java/security/TestKeyStore.java\n\tluni/src/test/java/libcore/java/security/KeyStoreTest.java\n\tluni/src/test/java/org/apache/harmony/xnet/provider/jsse/NativeCryptoTest.java\n\npackages/apps/CertInstaller\n\n    Change CertInstaller to call IKeyChainService.installCertificate\n    for CA certs to pass them to the KeyChainServiceTest which will\n    make them available to all apps through the\n    TrustedCertificateStore. Change PKCS12 extraction to use AsyncTask.\n\n\tsrc/com/android/certinstaller/CertInstaller.java\n\n    Added installCaCertsToKeyChain and hasCaCerts accessor for use by\n    CertInstaller. Use hasUserCertificate() internally. Cleanup coding\n    style.\n\n\tsrc/com/android/certinstaller/CredentialHelper.java\n\npackages/apps/KeyChain\n\n    Added MANAGE_ACCOUNTS so that IKeyChainService.reset\n    implementation can remove KeyChain accounts.\n\n\tAndroidManifest.xml\n\n    Implement new IKeyChainService methods:\n    - Added IKeyChainService.installCaCertificate to install certs\n      provided by CertInstaller using the TrustedCertificateStore.\n    - Added IKeyChainService.reset to allow Settings to remove the\n      KeyChain accounts so that any app granted access to keystore\n      credentials are revoked when the keystore is reset.\n\n\tsrc/com/android/keychain/KeyChainService.java\n\npackages/apps/Settings\n\n    Changed com.android.credentials.RESET credential reset action to\n    also call IKeyChainService.reset to remove any installed user CAs\n    and remove KeyChain accounts to have AccountManager revoke\n    credential granted to private keys removed during the RESET.\n\n\tsrc/com/android/settings/CredentialStorage.java\n\n    Added toast text value for failure case\n\n\tres/values/strings.xml\n\nsystem/core\n\n    Have init create world readable /data/misc/keychain to allow apps\n    to access user added CA certificates installed by the CertInstaller.\n\n\trootdir/init.rc\n\nChange-Id: I2e4b169cbb35d32d97f5d6a00d988fa389eadcb2\n"
    },
    {
      "commit": "4a9e1a2494f2e48b157506d7c731187907b7fd4e",
      "tree": "9217f60ac23d368a31e89102ace0df5693ae3fdf",
      "parents": [
        "00425721c14a64979ae29b8a8daf24aafdabc56a"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Apr 22 15:45:22 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Fri Apr 22 15:45:22 2011 -0700"
      },
      "message": "Expose Credentials.UNLOCK_ACTION for callers that want to use startActivityForResult\n\nChange-Id: I729b2d8257bda3e7ff7858741ebd5415404880e7\n"
    },
    {
      "commit": "b9a07c18e678da35b4c2a618b315fa174a21e818",
      "tree": "82bd62c2e0617b9c7f256d62c1ad4a725693d85c",
      "parents": [
        "f76dc56c33ba66138af70d72803cf55f881c3717"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Mon Apr 11 09:03:51 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Apr 20 13:35:31 2011 -0700"
      },
      "message": "Adding KeyChain API and IKeyChainService\n\nChange-Id: Id3eaa2d1315481f199777b50e875811e3532988a\n"
    },
    {
      "commit": "46703b099516c383a6882815bcf9cd4df0ec538d",
      "tree": "0b4f84436ce6d2b30ad7865facd03d889ea916be",
      "parents": [
        "e651c68ee8f9de7fe3c342c5b5f6690c729f6014"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Wed Apr 06 15:41:29 2011 -0700"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Thu Apr 07 11:58:37 2011 -0700"
      },
      "message": "Tolerate missing AccountManager resource, not just missing resource name\n\nIn addition to the primary change in the subject, also some minor cleanup of javadoc, typos, CloseGuard warning, etc found while working on a new AbstractAccountAuthenticator.\n\nChange-Id: I73f3408773a43a0021a15f8d051fd3dbbdf898a5\n"
    },
    {
      "commit": "527f01e76d07b45bdf7ba97ffee0e9b358de658c",
      "tree": "1310216716a0466a80da49164256ae3ce30a94b6",
      "parents": [
        "0e2de6d7187ef67ec00a2f2544450caa4a239c39"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Jan 20 20:23:59 2011 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Jan 20 20:23:59 2011 +0800"
      },
      "message": "Update the path of the intent to unlock keystore.\n\nChange-Id: Ia81d0c172f2be6d04cba4db6e6798058f321605d\n"
    },
    {
      "commit": "460c26e9875833dc494575b5c43f08c8baa15f34",
      "tree": "4b05bdabfe75c0a29dfc1fd8161be9dbb42c1cd1",
      "parents": [
        "7ab17a3426d3565f72c6832bb650d1709cbf52cf"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 11 16:42:09 2010 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Nov 11 16:42:09 2010 -0800"
      },
      "message": "Use deliberately public API rather than org.apache cruft.\n\nInputStreamHelper is scheduled for deletion. As a bonus, the new code is more\nefficient.\n\nChange-Id: Ied8b87fa24f8506cf748b0d4c99ee7e2ae201483\n"
    },
    {
      "commit": "8bdf5935c0db4a66ab33a10b43398d2523cfa15d",
      "tree": "5483e26cd1fb2de239b2f01f3d35c52aeeb7b598",
      "parents": [
        "efb581018bbede2ecdc76bcd9722ded5b6903254"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 15 12:54:40 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Oct 15 14:46:33 2010 -0700"
      },
      "message": "Work on issue #3101415: Crespo apps seem to have their UID changed over time.\n\nfsync!\n\nChange-Id: Ie6c5397202579935ac69bf61d3e7b3081ecf269c\n"
    },
    {
      "commit": "c5e630a004d144ba1d4cd1d37dd98eb70a7ec1d8",
      "tree": "65c495d05a6c378e0820dfb6f7a58d1d08d98b14",
      "parents": [
        "70f1a3b8a0fcf332e35f87be85ae3a9e37a85e9c"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Fri Oct 08 08:20:16 2010 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Fri Oct 08 08:21:17 2010 +0800"
      },
      "message": "Use explicit intent for installing credentials.\n\nhttp://b/issue?id\u003d3020049\n\nChange-Id: I429c5b2c9f3b876e6197894a9437952d71d5c472\n"
    },
    {
      "commit": "8d578836dc4f9fb41532b8b3dd7a6b168d6f4f9d",
      "tree": "0b1d4c4c5f51e723f9139244d9ac05d0a77fa847",
      "parents": [
        "76e4fa19264793e3ed7e2ee7afccfc808a1a7458"
      ],
      "author": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Thu Sep 09 15:12:40 2010 -0700"
      },
      "committer": {
        "name": "Rich Cannings",
        "email": "richc@google.com",
        "time": "Thu Sep 09 16:28:48 2010 -0700"
      },
      "message": "Remove the use of FileInputStream.available()\n\nBug: 2976294\nChange-Id: I34b13cedbf1d2338163ef74454817c318a3a24f5\n"
    },
    {
      "commit": "34c47c855815d731e6deb55748ff690b0ec7b53f",
      "tree": "3e6a6668f093bcf88bba3bb6c8e4438a212ceea8",
      "parents": [
        "15b3287994b92bb9bff10e65a56bc8a663d0e05d"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Tue Mar 09 13:28:14 2010 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Wed Mar 10 11:25:53 2010 -0800"
      },
      "message": "Don\u0027t rely on the system locale for converting to/from bytes.\n\nBy default, when java converts Strings to bytes, it uses the\ndefault system locale.  This can be specified by the -Dfile.encoding\noption.  If no file encoding is specified, java uses ISO8859_1.\n\nUnfortunately, not all unicode characters can be mapped to\nISO8859_1.  Unmappable characters may be replaced by a byte\nwithin ISO8859_1, which may change the meaning of the String.\nThis is especially problematic for password strings, and has\nbeen used to compromise the security of passwords in the\npast.\n\nThankfully, Android uses UTF-8 by default, so this bug doesn\u0027t\neffect Android devices.  However, it\u0027s recommended to explicitly\nlist the character set when converting to/from bytes to\navoid the potential ambiguity.\n\nChange-Id: Iec927e27ed3fc103696c439f6bd3e8779a37ade8\n"
    },
    {
      "commit": "1ff8fee7c8e4fcd4ef12c6c5d1055b7eccf5809b",
      "tree": "5c7f8f94fd6878b890a1f284eff87028f7301610",
      "parents": [
        "bcea8124a1d85c610b4bd4e6d360a861d2f61793"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Mon Feb 22 11:16:51 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Mon Feb 22 11:17:38 2010 -0800"
      },
      "message": "Better file permissions enforcement on system keystore.\n"
    },
    {
      "commit": "64ef1ce9368985932f4cc7a06b3af585394c5cc6",
      "tree": "cc29959241a730bee5dd0faa42fe400439e051aa",
      "parents": [
        "cdc045dd6da3db8d4ba83560a1bbe27c2ef1e5b2"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Tue Feb 09 15:48:03 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Tue Feb 09 15:48:03 2010 -0800"
      },
      "message": "Fix for bug 2427961\tandroid.security.tests.SystemKeyStoreTest:testBasicAccess is failing.\nFixed issues in test.\n"
    },
    {
      "commit": "d12feb97667498378a472c5a7895a9fcd8056ec5",
      "tree": "bb0dea6d297e753abfd9611ee75e27a517537656",
      "parents": [
        "6004edc67c94a0d034dfb8981b7d4b7a0172a814"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Sat Feb 06 10:43:22 2010 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Sat Feb 06 10:43:22 2010 +0800"
      },
      "message": "KeyStore: minor improvements.\n\nMake constants final.\nOnly converts ArrayLists to arrays when necessary.\n"
    },
    {
      "commit": "d02546b4151214abb2db1c88bf7debfc70bd2421",
      "tree": "706596caff37b2f9ba6c04da64bf3b98172da00e",
      "parents": [
        "851b2e75e600a7e3f557b46c4c48c11da025d1f4"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Thu Jan 14 16:38:40 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Fri Jan 15 15:08:06 2010 -0800"
      },
      "message": "Apps on SD card.\nAdded support for retrieving and generating keys as Hex Strings.\nUsing keys to mount encrypted FS.\n"
    },
    {
      "commit": "b62e8132df0d19a39a700324475b3df2de78e0b0",
      "tree": "e5679e990fc995de73fc2c35dd03082c0efd7ebb",
      "parents": [
        "013b9c249dbcb5ca293c5cfe6a0e7908ced32418"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Thu Jan 14 16:38:40 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Fri Jan 15 11:16:31 2010 -0800"
      },
      "message": "Apps on SD card.\nAdded support for retrieving and generating keys as Hex Strings.\n"
    },
    {
      "commit": "8da98e30d8b2ae6e203f769dab0d6ec34cab3011",
      "tree": "16dcc138f20b9880b4eff88eb4f47743c29b683f",
      "parents": [
        "5e3f6caeb08c54fb79f427a528e084711652bbdb"
      ],
      "author": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Wed Jan 06 11:35:59 2010 -0800"
      },
      "committer": {
        "name": "Oscar Montemayor",
        "email": "oam@google.com",
        "time": "Wed Jan 06 16:23:57 2010 -0800"
      },
      "message": "Apps on SD card project.\nA simple keystore to store system-only key material, by leveraging file system access permissions.\n"
    },
    {
      "commit": "f35e9663d7bdae523953185b4ad6b6f9e8e7d6ca",
      "tree": "ea3c0019085dceed51740c940a2b33b14c5e6f3a",
      "parents": [
        "1a3c8950394b98f6f354456830208d70e87b8bb6"
      ],
      "author": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Tue Sep 29 11:20:28 2009 +0800"
      },
      "committer": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Tue Sep 29 15:20:24 2009 +0800"
      },
      "message": "Add unit test for the new keystore.\n\nSince we need to test the keystore with user system in order to test\nthe reset(), password(), lock() and unlock(), we have to take advantage\nof the ActivityUnitTestCase to run the test with the user \u0027system\u0027.\n"
    },
    {
      "commit": "8c596c6cce542dcd5c73e8b1aaef666757e36ec4",
      "tree": "0822092e3db464d05ffa0e0bff97edc7829d2975",
      "parents": [
        "f1ece5d0c16fa3e79390e41ad9bec020c77d7720"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 24 13:32:40 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 24 13:32:40 2009 +0800"
      },
      "message": "KeyStore: remove classes used by old keystore.\n"
    },
    {
      "commit": "f1ece5d0c16fa3e79390e41ad9bec020c77d7720",
      "tree": "c5c8b20551a9dcf1bb3dcaf52223866a31164a16",
      "parents": [
        "46a41e0e7f95f43aa7251114f12fd5e2b9933bc7"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 24 13:29:58 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 24 13:29:58 2009 +0800"
      },
      "message": "KeyStore: return null when response code indicates an error.\n"
    },
    {
      "commit": "ec05c46ea9d1dc175b09f93df0b9fea5a43b2d5a",
      "tree": "206c5b70008d30a0176ebe986efef58a7bc59fc6",
      "parents": [
        "85abdc59c3a31df6dc6ac4f20e64d5c91fa70023"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Thu Sep 24 13:13:44 2009 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Thu Sep 24 13:13:44 2009 +0800"
      },
      "message": "Remove old keystore and related files.\n"
    },
    {
      "commit": "613fcc850686dfe71cec9809c3694be9cf02cdc7",
      "tree": "6e7ef01214267a7d8a09ddd50e77c776af7cdcf4",
      "parents": [
        "1f6802295e2dba50a4549b8a22537dcb4c4dda03"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Sep 22 03:04:46 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Tue Sep 22 03:04:46 2009 +0800"
      },
      "message": "KeyStore: rename scan() to saw().\n"
    },
    {
      "commit": "44039172627d1c15737ea73836ad375559d76211",
      "tree": "0f4969e1216a9dbdb863268a2f46375eefb8192d",
      "parents": [
        "626c46b016118edbea3a3938425b5d4e959f6f2d"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Sep 21 11:53:59 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Mon Sep 21 15:52:00 2009 +0800"
      },
      "message": "KeyStore: add java interface.\n"
    },
    {
      "commit": "9b7a3f1a6437605022568cad0b92d5006a2ab391",
      "tree": "4d3dcf473cb06af26bc2b6bc68bd54a65422c92c",
      "parents": [
        "adbc99be6d7e35f71bbbdcdfef5562c5a9b53b07"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Fri Sep 18 12:00:12 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Fri Sep 18 12:03:04 2009 +0800"
      },
      "message": "Add a helper class to send out credentials.\n\nChange-Id: I9a550c6edc55d5c2c601223c011922b183cb4d30\n"
    },
    {
      "commit": "5b680802b6774491fbcee69e394d097d4bfcf42e",
      "tree": "7ad1163a5de706df8c48dbc9c1e9c7fd0421fc2a",
      "parents": [
        "972f0e3806f379b7fb6e43265f56ddd91c38107e"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Wed Sep 16 15:43:15 2009 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Thu Sep 17 12:17:29 2009 +0800"
      },
      "message": "Fix a minor bug in is_alnum_string()...\n\nand remove some verbose logging\n"
    },
    {
      "commit": "a7df557aa2573a4718c7bbd069268e62bc036753",
      "tree": "606824416def47dd79b782fb4037aa180fca8d93",
      "parents": [
        "d304ae583d862250a21b5949fc3dbdf3af1febac"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Fri Sep 11 18:34:28 2009 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Fri Sep 11 19:30:13 2009 +0800"
      },
      "message": "Add tests and misc fixes on keystore.\n\n* Refactor netkeystore.c to make client and server code testable.\n* Add a client test for setting new passwd and changing passwd.\n* Exclude \".\" and \"..\" from reset_keystore().\n* Change ServerCommand.executeCommand() to accept variable length of\n  arguments and add convert() to marshalling the args to bytes.\n* Keystore.java is revised accordingly.\n"
    },
    {
      "commit": "9249cc69b83c7b055ae477c4539bdc451fe7f9b9",
      "tree": "c46cac7e798f63e379a5684931cc362d97165f31",
      "parents": [
        "24d237db943051942b5966f5e788d67050ec0ba5"
      ],
      "author": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Tue Sep 08 16:47:51 2009 +0800"
      },
      "committer": {
        "name": "Hung-ying Tyan",
        "email": "tyanh@google.com",
        "time": "Thu Sep 10 12:51:07 2009 +0800"
      },
      "message": "Add two CertTool helper classes.\n\nAlso add the unlock action string to Keystore.\n"
    },
    {
      "commit": "37062b93dcb7c72919be8d33303606cdab936c11",
      "tree": "5bb7c58b073f07777253d25a297b61bac4b67d10",
      "parents": [
        "ccda4c4960ad6694e506e075f8f0b479ea2bafb6"
      ],
      "author": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 10 03:55:33 2009 +0800"
      },
      "committer": {
        "name": "Chia-chi Yeh",
        "email": "chiachi@android.com",
        "time": "Thu Sep 10 03:56:04 2009 +0800"
      },
      "message": "keystore: remove \"#include \u003copenssl/engine.h\u003e\".\n"
    },
    {
      "commit": "801b73f661cbdf92de94b7e552a190fcbbdc3168",
      "tree": "d67ad7b9bca1e97a7cc4ecbab4c6e680933ab1b6",
      "parents": [
        "88e625795943dea84b2e7c32f37e71303143b728"
      ],
      "author": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Tue Sep 08 03:52:45 2009 +0800"
      },
      "committer": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Wed Sep 09 15:00:43 2009 +0800"
      },
      "message": "Replace the delimiter whitespace with \u0027\\0\u0027.\n\n+ Use \u0027\\0\u0027 as the delimiter.\n+ Allow whitespace character for keystore password.\n\nIn previous implementation, we use space as the delimiter. That\nwill stop user from using passphrase with whitespace character.\n"
    },
    {
      "commit": "60c821c8eeca28d34fb02cf5e35dadf168e1312e",
      "tree": "7e49e7920894e505e1dfbd02b7c4ad64c8f18f63",
      "parents": [
        "09960230bf3d46ec1e7cbcfd8b07dfe007b9fa96"
      ],
      "author": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Wed Sep 02 11:54:24 2009 +0800"
      },
      "committer": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Wed Sep 02 11:54:24 2009 +0800"
      },
      "message": "Print error message if the buffer size is too small.\n"
    },
    {
      "commit": "09960230bf3d46ec1e7cbcfd8b07dfe007b9fa96",
      "tree": "0cdb96cc728125bcae41709a027811cbd6beee2b",
      "parents": [
        "c98d68cd56338ec57695b3c35114fbde88d4bde8"
      ],
      "author": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Tue Sep 01 16:45:13 2009 +0800"
      },
      "committer": {
        "name": "Chung-yih Wang",
        "email": "cywang@google.com",
        "time": "Tue Sep 01 16:45:13 2009 +0800"
      },
      "message": "Store CA certificate chain into one single key entry with PEM format.\n\nExtract all CA certificates in a PKCS12 keystore into a single entry in keystore with multiple PEMs.\n"
    }
  ],
  "next": "d21a04c06c0d9b1cb401c30bf6da778010872957"
}
