Commit Graph

728 Commits

Author SHA1 Message Date
Hasini Gunasinghe
49e239ec96 Keystore 2.0: Integrate onLockScreenEvent.
This patch updates LockSettingService and TrustManagerService to use the
new Keystore 2.0 authorization api.

Bug: 166672367
Test: VTS test
Change-Id: I5494d7b923d33d447488a0c67ada43d1f9593861
2021-01-19 10:10:20 -08:00
Janis Danisevskis
f9c123d7da Keystore 2.0 SPI: Use Timestamp from secure clock service
Test: N/A
Change-Id: I20e925e2827a6485b187d20b737456e8a5d4c437
2021-01-19 10:10:20 -08:00
Hasini Gunasinghe
5364fce817 Integrate IKeystoreAuthorization aidl's addAuthToken with Keystore SPI.
This CL introduces the Keystore SPI class for IKeystoreAuthorization
aidl interface and implements the calling code for addAuthToken method.

Bug: 166672367
Bug: 177830239
Bug: 177791435
Bug: 177787061
Bug: 177787180
Test: VTS test
Change-Id: I9f0adc97efadd0fa1a1f16dd5ec811f4151a2b03
2021-01-19 14:41:03 +00:00
Louis Chang
5896e8c4fd Merge "Revert "Integrate IKeystoreAuthorization aidl's addAuthToken wit..."" 2021-01-18 14:58:14 +00:00
Louis Chang
589975d198 Revert "Integrate IKeystoreAuthorization aidl's addAuthToken wit..."
Revert submission 1519257-rename_auth_service

Reason for revert: breaking WM presubmit, b/177787180
Reverted Changes:
Ib847b68d4:Integrate IKeystoreAuthorization aidl's addAuthTok...
I7893ab452:Integrate IKeystoreAuthorization aidl's addAuthTok...
I4a092119c:Implement addAuthToken method of IKeystoreAuthoriz...

Change-Id: Iea9bf7e7b3d1e968bbbe39f4ec08dcc3577cee07
2021-01-18 10:01:12 +00:00
Treehugger Robot
1ef847338e Merge "Integrate IKeystoreAuthorization aidl's addAuthToken with Keystore SPI." 2021-01-16 22:05:18 +00:00
Janis Danisevskis
adeebe5e38 Keystore 2.0 SPI: Fix bug in chunked streamer.
The chunked streamer sent the chunk buffer prematurely leading to
oversized and garbage data sent to keystore.

Test: atest android.keystore.cts.SignatureTest#testSmallMsgKat
Change-Id: I84e40766b735f05b3fb7e0e692d26a25a0496649
2021-01-15 08:36:47 -08:00
Hasini Gunasinghe
2d29591e51 Integrate IKeystoreAuthorization aidl's addAuthToken with Keystore SPI.
This CL introduces the Keystore SPI class for IKeystoreAuthorization
aidl interface and implements the calling code for addAuthToken method.

Bug: 166672367
Test: VTS test
Change-Id: I7893ab4520b16533b9fddc9909297856e0b523ae
2021-01-14 17:09:06 -08:00
Janis Danisevskis
2e494c0577 Keystore 2.0: Fix wrong exception returned on not authenticated.
Test: CtsVerifier fingerprint bound key test.
Change-Id: I0aa897455b88d7a709e4de6b515eef43bc15d053
2021-01-06 10:23:30 -08:00
Treehugger Robot
30841f177c Merge "Keystore 2.0: Android Protected Confirmation" 2021-01-05 23:29:35 +00:00
Treehugger Robot
220d33ce2c Merge "Keystore 2.0 SPI: Switch to aidl union KeyParameters" 2020-12-21 18:10:58 +00:00
Janis Danisevskis
a80fd14256 Keystore 2.0 SPI: Public key operation workaround.
Test: Keystore cts tests.
Change-Id: I316fdb8beae018ac91c172dede735e6b0759368a
2020-12-18 11:15:27 -08:00
Janis Danisevskis
efaff8f604 Keystore 2.0 SPI: Bug fixes
* Correctly recover public key from certificate.
* KeyStore2ParameterUtils: iterate through set flags instead of unset
  flags.
* Return private key on Keystore.getKey() instead of public key.

Test: Keystore CTS tests
Change-Id: I99c1bd49ff5cf7a2d89b54559504e67b3def0cd3
2020-12-18 11:09:06 -08:00
Janis Danisevskis
ef3aaa2d59 Keystore 2.0 SPI: Switch to aidl union KeyParameters
Test: Compiles
Change-Id: I54b0d7a97954eb45283cf48bf2372db5e7ffa61a
2020-12-17 20:39:45 -07:00
Tianjie Xu
697c19be17 Merge "Make AndroidKeyStoreLoadStoreParameter public" 2020-12-16 23:22:36 +00:00
Janis Danisevskis
81d75b4c52 Keystore 2.0: Android Protected Confirmation
Bug: 160930927
Test: CtsVerifier
Change-Id: I9cc325eafbee2aa4257a3ccbe525091a1cae806d
2020-12-16 10:47:56 -08:00
Tianjie
c0e116a05c Make AndroidKeyStoreLoadStoreParameter public
So other packages can load the keystore with namespace.

Test: build
Change-Id: I7de3e51df438b794adb3793a189396999bdd1b88
2020-12-15 15:12:37 -08:00
Janis Danisevskis
fbf2ed5f19 Keystore 2.0 SPI: Implement modification time.
Test: Keystore CTS test.
Change-Id: I097b58fa6c403ff426d99ed484ed324e1419b4e3
2020-12-15 13:06:12 -08:00
Shawn Willden
f5a002c222 Revert "Revert "Keystore 2.0 SPI: Move keymint spec to security ..."
Revert "Revert "Keystore 2.0: Move keymint spec to security name..."

Revert "Revert "Keystore 2.0: Move keymint spec to security name..."

Revert^2 "Remove references to keymint1"

34536a352803a08776cc4f373d93a94e1fcbf98e

Bug: 175345910
Bug: 171429297
Change-Id: I694e677e4e20419440f12cb7981f0c0c4ca29e08
2020-12-11 20:36:10 +00:00
Orion Hodson
6acd9c63e7 Revert "Keystore 2.0 SPI: Move keymint spec to security namespace."
Revert "Keystore 2.0: Move keymint spec to security namespace."

Revert "Keystore 2.0: Move keymint spec to security namespace."

Revert "Move keymint to android.hardware.security."

Revert "Configure CF to start KeyMint service by default."

Revert "Move keymint to android.hardware.security."

Revert "Move keymint to android.hardware.security."

Revert submission 1522123-move_keymint

Reason for revert: Build breakage
Bug: 175345910
Bug: 171429297
Reverted Changes:
Ief0e9884a:Keystore 2.0: Move keymint spec to security namesp...
Idb54e8846:Keystore 2.0: Move keymint spec to security namesp...
I9f70db0e4:Remove references to keymint1
I2b4ce3349:Keystore 2.0 SPI: Move keymint spec to security na...
I2498073aa:Move keymint to android.hardware.security.
I098711e7d:Move keymint to android.hardware.security.
I3ec8d70fe:Configure CF to start KeyMint service by default.
Icbb373c50:Move keymint to android.hardware.security.
I86bccf40e:Move keymint to android.hardware.security.

Change-Id: Icd279f358db2387bf2bf232b0548762fab51e67d
2020-12-11 10:45:43 +00:00
Janis Danisevskis
8954dfa092 Keystore 2.0 SPI: Move keymint spec to security namespace.
Test: N/A
Change-Id: I2b4ce3349baf29eb67a31f0c436b964d69d70b02
2020-12-09 13:53:32 -08:00
Janis Danisevskis
9fb5607114 Keystore 2.0 SPI: Fix installation of legacy Keystore provider
Priviously we installed the legacy keystore SPI by the name
KeyStore.AndroidKeyStore and set an alias to
KeyStore.AndroidKeyStoreLegacy. This conflicted with with the Keystore
provider which also registers as KeyStore.AndroidKeyStore.
This patch registers the old provider only by the name
KeyStore.AndroidKeyStore.

Test: CtsLibcoreTestCases:libcore.java.security.ProviderTest#test_Provider_Properties
      Also, the device boots.
Change-Id: I38a248a996839f397bdcae30fd1b03a883209df2
2020-11-23 21:59:22 -08:00
Treehugger Robot
c778d8e747 Merge "Fix Broken test: libcore.java.security.ProviderTest#test_Provider_Properties" 2020-11-18 21:39:54 +00:00
Janis Danisevskis
fc02edb5f5 Fix Broken test: libcore.java.security.ProviderTest#test_Provider_Properties
Test: CtsLibcoreTestCases:libcore.java.security.ProviderTest#test_Provider_Properties
Bug: 173480441
Change-Id: I188cd778a25d221991280eb461a7ec052503790c
2020-11-18 11:49:15 -08:00
Janis Danisevskis
bc119dfb2b Keystore 2.0 SPI: Use KeyMint AIDL types.
We are now using KeyMint types for KeyParameter and SecurityLevel.

Test: None
Change-Id: I3db72c17a9cb999a0248df4c37588dfc2ad84f74
2020-11-17 17:45:08 -08:00
Janis Danisevskis
4392c6977c Keystore 2.0 SPI: Install legacy Keystore provider as AndroidKeyStoreLegacy
With this patch we install the old Keystore provider as
AndroidKeyStoreLegacy when the Keystore 2.0 provider is installed as
AndroidKeyStore. This allows system components to keep using the old
keystore while we can run CTS tests against the new provider.

The tests are still mostly failing at this point. Installing the new SPI
can be enabled by setting the property
ro.android.security.keystore2.enable=true

Bug: 159476414
Test: This enables running CTS tests against Keystore 2.0.
Change-Id: I9731d9783ccf8f2705a5ca7335e00c8f4c8debba
2020-11-13 19:55:41 -08:00
Janis Danisevskis
940e05164e Keystore 2.0 SPI: Evolve the generator SPI.
We delegate the generation of self signed certificates to the KeyMint
backend. Also we use the KeyParamter AIDL type instead of
KeymasterArguments to construct parameter lists.

Bug: 159476414
Test: None
Change-Id: I441a4d4df4ef04e3da8aeaff3274c609d549c979
2020-11-13 19:55:41 -08:00
Janis Danisevskis
e6495d774b Keystore 2.0 SPI: Evolve Factory SPI
We no longer need to get the key characteristics from the Keystore
daemon to construct the KeyInfo for a key. Also we have to extract the
key info from the KeyParameter AIDL type rather than from the hand
written KeymasterArguments.

This patch also exposes the correct security level for a key through
KeyInfo.

Bug: 159476414
Test: None
Change-Id: I86a85e481e19fdadfed38a42aeac4ffe5f8b83fa
2020-11-13 19:55:40 -08:00
Janis Danisevskis
38ab78f0a0 Keystore 2.0 SPI: AndroidKeyStoreProvider loads keys from Keystore 2.0
This patch adjusts the AndroidKeyStoreProvider to register all services
with the correct packages names. And the utility functions load key
using the correct Keystore 2.0 methods.

Bug: 159476414
Test: None
Change-Id: I9268fd66d28e89e188e85991bcf90c7f19809232
2020-11-13 19:55:40 -08:00
Janis Danisevskis
4545933da5 Keystore 2.0 SPI: Evolve the Crypto SPI.
This patch evolves the Crypto SPI to use the new Keystore 2.0 shim.
The main changes are:
 * The SPI uses the AIDL defined KeyParameter instead of
   KeymasterArguments.
 * Operations are created directly from the KeystoreSecurityLevel that
   is part of the AndroidKeyStoreKey object.

Also this patch deletes the DeletatingX509Certificate class. This is no
longer needed, because public key operations are no longer performed by
Keystore 2.0. We can delegate public certificate operations simply by
wrapping such certificates into public keys that are understood by other
providers, such as BouncyCastle.

Bug: 159476414
Test: None
Change-Id: Ice874a8121d80bf788da059b4e8420c7dd799d81
2020-11-13 19:55:40 -08:00
Janis Danisevskis
4be5005c05 Keystore 2.0 SPI: KeyParameter utilities.
The wire type for key parameters is now generated from AIDL rather than
the hand written parcelable KeymasterArguments. So we need some of the
utilities for creating key parameters that the latter provided.
We also nicked some utility function from KeymasterUtils.

Bug: 159476414
Test: None
Change-Id: I12c674b6a00dd3abbed4972d80ceb766a73881e8
2020-11-13 19:55:40 -08:00
Janis Danisevskis
4ba9a09bdd Keystore 2.0 SPI: Update the chunked streamer.
This patch makes the chunked streamer observe the simplified
Keystore 2.0 operation interface. Keystore is now required to consume
all supplied data or reject data outright if too much (more than 32KiB)
is supplied in a single transaction. This allows for a simplified
streamer logic and a simplified interface. We also no longer send
entropy to Keystore. This will be handled by the Keystore 2.0 daemon.

Test: None
Bug: 159476414
Change-Id: Ie75d10fd5d5ac0da60e23e35467d0a7873230dea
2020-11-13 19:55:40 -08:00
Janis Danisevskis
27ee56c021 Keystore 2.0 SPI: KeyStoreCryptoOperationUtils
Keystore 2.0 does no longer report an error code if an operation
requires user authorization. Instead this is indicated by sending us
an operation challenge. In that case we have to check if the
authorization can possibly succeed. We changed the utility class by
adding a predicate function that checks exactly that, and we handle
other errors separately instead of having one exception handling path
that does all.

Test: None
Bug: 159476414
Change-Id: I9a373cf8f0a0b181df54c26fe314d71b6835bb97
2020-11-13 19:55:39 -08:00
Janis Danisevskis
e5795a90db Keystore 2.0 SPI: KeyStoreKeys adopt Keystore 2.0
KeyStoreKeys can now be constructed from key entry metadata and key
descriptors as defined by the new Keystore AIDL spec.
AndroidKeystorePublicKey can now create the private key proxy.
KeyStoreKeys also cache the key characteristic, which should drastically
reduce the frequency by which the SPI has to call into the Keystore 2.0
daemon.

Test: None
Bug: 159476414
Change-Id: Ia0a7841582621897760be49d39dd5442b70b3aa0
2020-11-13 19:55:39 -08:00
Janis Danisevskis
ebd964a086 Keystore 2.0: Shim around the basic functionality of Keystore 2.0
This patch adds a shim around the Keystore 2.0 AIDL spec. The new shim
is modularized like the AIDL spec into the base Keystore module
Keystore2, the security level specific interface KeystoreSecurityLevel,
and the operation specific interface KeystoreOperation.

Other system maintenance specific interfaces have yet to be added.

Bug: 159476414
Bug: 171305684
Test: None
Change-Id: I070f73739e4b37ce10568939ac666e40b14a52a8
2020-11-13 19:55:39 -08:00
Janis Danisevskis
f88d3a4b27 Keystore 2.0 SPI: Duplicate Keystore SPI to android.security.keystore2 package
This patch copies the relevant portion of the Keystore SPI to the new
package name android.security.keystore2. The purpose of this is to
illustrate the evolution from the existing Keystore SPI to the
Keystore 2.0 SPI while keeping the existing Keystore SPI intact.
Reviewers are advised to check the equivalence of this code to the
corresponding files in
    android/security/keystore (<-- no 2 here).
Subsequent patches can them be reviewed as evolution towards the new SPI
rather than completely new code.

Test: None. When the evolution is complete, Keystore CTS tests can be
used to check for regressions.
Bug: 159476414

Change-Id: I21a01a679e789868ce820b5f73221e616a456a61
2020-11-13 11:01:47 -08:00
Treehugger Robot
47e0d9e30b Merge "Keystore 2.0 SPI: Add forEach for int arrays to ArrayUtils" 2020-11-12 17:57:42 +00:00
Janis Danisevskis
cbab0d133b Keystore 2.0 SPI: Add forEach for int arrays to ArrayUtils
This patch adds a forEach function for int arrays to
android.security.keystore.ArrayUtils. A utility function with the
intendet use in Keystore 2.0 Key paramter handling.

Test: None
Change-Id: I2c02b300ee68fcd548c128deb0266fe603226807
2020-11-12 08:03:25 -08:00
Janis Danisevskis
17f24b5799 Merge "Keystore 2.0 SPI: Update KeyInfo and KeyGenParameterSpec" 2020-11-11 23:10:13 +00:00
Janis Danisevskis
c5bdd77f1a Keystore 2.0 SPI: Update KeyInfo and KeyGenParameterSpec
This patch adds set/getSecurityLevel to KeyInfo and KeyGenParameterSpec
and it deprecates the superseded function isInSecureHardware.

It also deprecates the system API set/getUid and replaces it with the
more generic set/getNamespace.

Test: None
Change-Id: Id2f54596510954862b5077a935f3daf07211f29c
2020-11-11 07:53:54 -08:00
Mathew Inwood
f8abe13db4 Merge "Add maxTargetSdk restriction to unused APIs." 2020-11-09 14:41:20 +00:00
Janis Danisevskis
62c1d2869d Keystore 2.0: KeyProperties SignaturePadding is now public but hidden
In anticipation of the new Keystore 2.0 SPI we made this nested class
public (like its siblings) so that the new SPI which resides in a
different package may access it. It is hidden though because it does not
constitute public API surface.

Test: None
Bug: 171305684
Change-Id: I1dbe3d02c03f97f843813c26c16aaef7152ca478
2020-11-05 13:11:12 -08:00
Janis Danisevskis
d2c944bc4d Keystore SPI: Add SecurityLevelEnum to KeyProperties
This patch adds the SecurityLevelEnum to KeyProperties. This enum can be
used by the public API surface to express levels of enforcements of key
properties. And to select a designated residence for a newly generated
or imported key.

The values UNKNOWN and UNKNOWN_SECURE are used to convey to older target
APIs API levels that have not been defined when they where published.

Test: None
Change-Id: I88681f21b8a8ea9a383d32ba99f3ab7d7c8909c3
2020-11-05 13:11:12 -08:00
Mathew Inwood
5d123b6775 Add maxTargetSdk restriction to unused APIs.
These are APIs that have @UnsupportedAppUsage but for which we don't
have any evidence of them currently being used, so should be safe to
remove from the unsupported list.

Bug: 170729553
Test: Treehugger
Merged-In: I626caf7c1fe46c5ab1f39c2895b42a34319f771a
Change-Id: I54e5ecd11e76ca1de3c5893e3a98b0108e735413
2020-11-04 09:45:53 +00:00
Janis Danisevskis
26c878fb66 Keystore SPI: Deprecate encryption flag.
The encryption-required flag is only available in already deprecated
API KeyPairGeneratorSpec and KeyStoreParameter will be ignored from
Android S. Keys are and have been encrypted by default for a long time
and if additional binding to the LSKF is desired it can be requested
by KeyGenParameterSpec.Builder#setUserAuthenticationRequired(boolean).

Test: None
Change-Id: I5bd4acb4bba276decd1930ae2e96a55f95627e10
2020-10-27 12:09:37 -07:00
Janis Danisevskis
2528438731 Keystore 2.0: Deprecate Credential prefixes.
Keystore 2.0 will no longer support free form blobs. Certificates and
certificate chains will have types fields associated with an alias.
Other free form blobs will need to be migrated to a different key value
store.

Bug: 171305684
Test: None
Change-Id: I93270f0086329229dc36c2b14c88f229351e6560
2020-10-27 12:09:37 -07:00
Janis Danisevskis
bb4e97ebf3 Keystore SPI: Fix typos.
Test: None
Change-Id: Iba25385b42db8059cc0811e99463e01acb98e00f
2020-10-22 21:03:32 -07:00
Anton Hansson
dd7d52f963 Remove @TestApi from @SystemApi symbols
I ran these commands:
    cd frameworks/base
    grep -rl '@TestApi' --include '*.java' | xargs perl -i -p0e \
        's/\@SystemApi[\s\n]+(\@\w+[\s\n]+)?\@TestApi/\@SystemApi\1/gs'
    grep -rl '@TestApi' --include '*.java' | xargs perl -i -p0e \
        's/\@TestApi[\s\n]+(\@\w+[\s\n]+)?\@SystemApi/\1\@SystemApi/gs'

Bug: 171179806
Test: m checkapi
Change-Id: I772790b783b0a8730b8bf680c9e569a886b8d789
Merged-In: I772790b783b0a8730b8bf680c9e569a886b8d789
2020-10-19 16:41:01 +01:00
Daulet Zhanguzin
96bdc2d785 Merge "Remove DERInteger usages" am: 1835a24839 am: 07e62d7649
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1305793

Change-Id: I7ec9709e9f152fac13b3f56dc1f9238869502c39
2020-07-03 12:02:35 +00:00
Daulet Zhanguzin
1835a24839 Merge "Remove DERInteger usages" 2020-07-03 11:42:50 +00:00