0f906ec40f6ade7955c6b967ea522aade54ea2e4 |
|
20-Jun-2015 |
Shawn Willden <swillden@google.com> |
Add buffer wrap checks and disable throwing of std::bad_alloc. Android is built with exceptions disabled, but "operator new" and "operator new[]" still throw std::bad_alloc on failure rather than returning new. In general this is a good thing, because it will cause an immediate crash of the process rather than assigning a null pointer which is probably not checked. But most memory allocations in Keymaster are checked, because it's written to run in an environment where new does *not* throw. This CL updates the code to explicitly use the non-throwing new. A handful of throwing news remain, but only in places where a crash on failure is appropriate. In addition, this CL also inserts buffer wrap checks in key locations and changes the development-machine Makefile to build in 32-bit mode, to make memory problems more apparent. Bug: 21888473 Change-Id: I8ebc5ec12053e4f5274f6f57ce312abc10611cef
/system/keymaster/asymmetric_key.cpp
|
398c158a0206217025f327c2d26bb6c86659f5a0 |
|
28-May-2015 |
Shawn Willden <swillden@google.com> |
Move assymetric key factory declarations to includes. This exposes EcKeyFactory and RsaKeyFactory so they can be used for constructing the Trusty KeymasterContext. Note that there are no code changes, just reorganization. Change-Id: I8e8e068fb875f9d9c5c35320a545347dc33bc507
/system/keymaster/asymmetric_key.cpp
|
0629810b145187575bc26c910dded0d24c64569d |
|
26-May-2015 |
Shawn Willden <swillden@google.com> |
Another refactor, deleting AbstractFactoryRegistry. I should have known better than to make these singletons to begin with. Globals create problems. This undoes that mistake. Change-Id: Idf61d5f72e3c34b5c4ddb27cc94b05f506561743
/system/keymaster/asymmetric_key.cpp
|
0cb6942d3efb6c056f96321c82a4b3d86af601d6 |
|
26-May-2015 |
Shawn Willden <swillden@google.com> |
Revert "Revert "Large refactor to move context out of AndroidKeymaster."" This reverts commit 13fbe3e93247943c26e7ca2ed27b6d650282b8bf. Bug: 20912868, 19799085 Change-Id: Iadd6ce5cbe94956c2a2fe277f1bf5b108e4bcf57
/system/keymaster/asymmetric_key.cpp
|
13fbe3e93247943c26e7ca2ed27b6d650282b8bf |
|
23-May-2015 |
Shawn Willden <swillden@google.com> |
Revert "Large refactor to move context out of AndroidKeymaster." This reverts commit 8ba2a043f0d44ad3f58d4af518f9391c03eca9c3. I need to update the Volantis non-secure code in sync. Reverting while I get that done. Change-Id: I0fb9f928e7e624ad678050a04bb873b43b1c9a48
/system/keymaster/asymmetric_key.cpp
|
8ba2a043f0d44ad3f58d4af518f9391c03eca9c3 |
|
18-May-2015 |
Shawn Willden <swillden@google.com> |
Large refactor to move context out of AndroidKeymaster. AndroidKeymaster made a number of assumptions about its context that are really only valid for TEE-based usage. In addition, KeyFactory made some similarly TEE-focused assumptions about key blob creation and parsing. Both concerns have been moved to a new KeymasterContext class, which is responsible for building and parsing key blobs in a manner appropriate for the context in which AndroidKeymaster is running, as well as providing other context-specific services, such as random number generation. In addition, the refactor reduces the need for the KeyBlob and UnencryptedKeyBlob classes, which encode too many assumptions about blob formatting and encryption, to the point that they can be removed and replaced by a handful of utility functions which are much cleaner and more flexible. How to review this CL: I looked hard at breaking this up into smaller CLs, but it's mostly not feasible. However, it's probably easier to approach it by starting with the fundamental changes, and then looking at the cascade effects. 1. Look at keymaster_context.h. The core of the change was pulling this set of features out of AndroidKeymaster. Note that the revised approach to key blob creation does not involve the KeyBlob and UnencryptedKeyBlob classes, but instead goes directly from raw key material plus ancillary data (e.g. auth sets) to a serialized buffer ready to return to keystore. The same is true in reverse direction for parsing key blobs. 2. Look at key.h. The revised KeyFactory GenerateKey, ImportKey and LoadKey methods are essential. GenerateKey and ImportKey no longer produce a Key object, because all that's needed is a returnable blob. LoadKey produces a Key object, but it starts with raw key material, rather than an UnencryptedKeyBlob. Also note the change to the Key class; because Key objects are only created by LoadKey, when there's a need to use a key, there's only one constructor. 3. Look at asymmetric_key.h, rsa_key.h and rsa_key.cpp. rsa_key.cpp provides a good example of how the new structure works. GenerateKey and ImportKey do all of the work necessary to produce an OpenSSL RSA key and extract the internal representation (using EvpToKeyMaterial; defined in asymmetric_key.h because it's the same for EC keys). Then, with the raw key data in hand, they call KeymasterContext::CreateKeyBlob to wrap the key data in a key blob that can be returned to the caller -- whatever that wrapping means in the current context. There's a subtlety not apparent here which is crucial to the rationale for the refactoring: RsaKeyFactory uses KeymasterContext::get_instance to retrieve the context, but key factories which depend on operating in a particular context can use a different way to get their context object, which may have a larger interface. RsaKeymaster0KeyFactory will do this. 4. Look at soft_keymaster_context. In particular, SoftKeymasterContext::CreateKeyBlob and ParseKeyBlob. CreateKeyBlob allocates authorization tags from key_description to hw_enforced and sw_enforced, then encrypts the key material and serializes it to a blob. This approach is compatible with the keys softkeymaster has been producing, but I'm going to change it (post M), because there's no reason to bother encrypting SW keys with a SW key. ParseKeyBlob reverses the process to recover the unencrypted key material and the auth lists. One debatable point was the decision to implement BuildHiddenAuthorizations and SetAuthorizations here, since all contexts will need something similar, and they really should all do it the same. I may refactor later to pull that functionality up to KeymasterContext; it will depend on what I learn implementing TrustyKeymasterContext and HybridKeymasterContext (used for the keymaster0 adapter). 5. Look at ocb_utils and auth_encrypted_key_blob. These contain the key encryption and key blob serialization code which was formerly split between AndroidKeymaster::SerializeKeyBlob, UnencryptedKeyBlob and KeyBlob, now divided into separate encryption and serialization utilities. Note the refactored key_blob_test.cpp, updated to use the new utilities rather than UnencryptedKeyBlob. 6. Look at soft_keymaster_device.cpp. Since KeyBlob no longer exists to provide a nice way to peer into a blob to extract the algorithm, for use in determining how to parse the keymaster0 signing key params (which come in as a void*, yuck), we now have to use get_key_characteristics to recover the params. This was the right way all along; the device layer should not depend on being able to parse key blobs. 7. The rest. Bug: 20912868, 19799085 Change-Id: Ieb74b8da39974f674eb8baa959bde75011fdd2e8
/system/keymaster/asymmetric_key.cpp
|
f01329d8692edde9a9ffb88f29f5d684eab481e2 |
|
12-Mar-2015 |
Shawn Willden <swillden@google.com> |
Improve error reporting and logging. Bug: 19603049 Bug: 19509317 Change-Id: I041c973802e6c567adc5b1f280fc5bac27ba28d6
/system/keymaster/asymmetric_key.cpp
|
f862a764e4d20495d484664de852e4d6de26f08b |
|
18-Mar-2015 |
Thai Duong <thaidn@google.com> |
ECIES: refactoring EC code by moving common interfaces to EcKey Change-Id: I6a0c5dfa8072c6f82f77316a2e8b2252d976ae0f
/system/keymaster/asymmetric_key.cpp
|
4d306ec792b4348253aa77dff965bff5def1dccb |
|
04-Mar-2015 |
Shawn Willden <swillden@google.com> |
Factor PKCS8 to EVP conversion out of AsymmetricKey. Bug: 19508876 Change-Id: I7d5a7363a43c47dc33b0de53040b593de096e1c3
/system/keymaster/asymmetric_key.cpp
|
567a4a04f43d35b785d50508e6459b01f2ab4d14 |
|
31-Dec-2014 |
Shawn Willden <swillden@google.com> |
Switch to using global logger Change-Id: I7af02342320a9a431cd9845baaf5dbcf61d460c2
/system/keymaster/asymmetric_key.cpp
|
a278f6156b9e57e1de8ca380b14fef113ad10be8 |
|
23-Dec-2014 |
Shawn Willden <swillden@google.com> |
Refactor key creation to use a registry of key factories. Change-Id: I6ebab7b44e4a5dbea282397ab8aca437e71bdca0
/system/keymaster/asymmetric_key.cpp
|
b9d584d3dacc8041e5502cd0d036e21895eb6dc6 |
|
23-Jan-2015 |
Shawn Willden <swillden@google.com> |
Switch to using keymaster_defs.h from libhardware. In the past it was convenient to have a local copy of this file (for reasons which no longer apply). Change-Id: Ie4a6f80abd16c77c0252f64ec65f2beeeef9a7a3
/system/keymaster/asymmetric_key.cpp
|
96599217f08532912bc0e26c1887549f6130669a |
|
26-Sep-2014 |
Shawn Willden <swillden@google.com> |
Push padding and digest handling down to specific key types. AsymmetricKey handled checking for digest and padding, but that doesn't make sense because not all asymmetric key types need both. This is in preparation for adding asymmetric encryption/decryption support. Change-Id: I7b9a4fc37b6d31ab25c56015c1df7d114affe882
/system/keymaster/asymmetric_key.cpp
|
2c8dd3e93d66fed41561933105e6050ff0655d76 |
|
18-Sep-2014 |
Shawn Willden <swillden@google.com> |
Refactor: Separate asymmetric key types. Change-Id: I3368798a8ecea319bb0bfcd6ff24e9a7b6287c80
/system/keymaster/asymmetric_key.cpp
|
658d7a69a20e9c570df0a7fb08ee98412a9bf74e |
|
18-Sep-2014 |
Shawn Willden <swillden@google.com> |
Use calculate_key_size_in_bits method, rather than duplicating calculation. Change-Id: Id94a8856589945dda36a2302b9494e834217db04
/system/keymaster/asymmetric_key.cpp
|
ea387c20d53ba7904512f475f6ba29b69236fd85 |
|
18-Sep-2014 |
Shawn Willden <swillden@google.com> |
Increase ECDSA default key size to match NIST 2010-2030 recommendation. Change-Id: I11095a29b1183817dcc66623b39d839f9d6d3656
/system/keymaster/asymmetric_key.cpp
|
72014adef83b0346859dbe82d77b09b4756d8e64 |
|
17-Sep-2014 |
Shawn Willden <swillden@google.com> |
Refactor KeyBlob to separate encryption functionality. This CL is in preparation for another which will refactor libkeymaster into libkeymaster and libkeymasterclient, the latter for use by programs which merely interface with keymaster and don't do any crypto on their own, but do need to parse key blobs to extract authorization list entries. To make that possible it moves KeyBlob's key encryption and decryption capabilities into a subclass, PlaintextKeyBlob. Change-Id: Ic6a65b6f237c122796ea70458655111316f902d8
/system/keymaster/asymmetric_key.cpp
|
675257e83c8a92ae7d58e321c3800d55a1a3698d |
|
11-Sep-2014 |
Shawn Willden <swillden@google.com> |
Add loggers to crypto operation classes. Change-Id: I06a83884721f3b9ee7853c9495e18d8ccd093182
/system/keymaster/asymmetric_key.cpp
|
52c8b5d47dd844057ebba8bf6c1910c52c98993d |
|
11-Sep-2014 |
Shawn Willden <swillden@google.com> |
Remove the keymaster::Logger::log() method and add debug(). Also, have the logger provide newlines, so every caller doesn't have to. Change-Id: I9f009e7c2d5c686a0ca97e10daef92a846a57d9a
/system/keymaster/asymmetric_key.cpp
|
81effc68a04810b76f0b10594d92df4ffbf35c6c |
|
27-Aug-2014 |
Shawn Willden <swillden@google.com> |
Finish key import implementation. This is the last bit of GoogleKeymaster that remained incomplete (for the v0.3 functionality). Change-Id: I27be52ae032883c004b2df21f0c7b229af512922
/system/keymaster/asymmetric_key.cpp
|
368bc7749eaa2e1321d552e45a96d83b5500ba47 |
|
27-Aug-2014 |
Shawn Willden <swillden@google.com> |
Move key_blob.h in to include/keymaster, to export it. Change-Id: If28db94840557e6ca3019b7bcf7b5f29f0ff6cf7
/system/keymaster/asymmetric_key.cpp
|
98d9b92547a9a7553b99e3e941a4175926f95b62 |
|
26-Aug-2014 |
Shawn Willden <swillden@google.com> |
Reorganize system/keymaster. This CL moves the includes that should be exported to include/ and removes the trusty-specific code (some of which is moving to hardware/google and some of which is moving to the trusty tree.) Change-Id: Ie4fabf6b5c5f36b50c2f5ff356548ca2e9140fcb
/system/keymaster/asymmetric_key.cpp
|
407d41282d6b0a7f2d6e2826d44a58b016a5d844 |
|
26-Aug-2014 |
Shawn Willden <swillden@google.com> |
Implement TrustyKeymaster key generation, plus tests. Change-Id: I085be101c735d136e7d5b2915a9510102722e695
/system/keymaster/asymmetric_key.cpp
|
2f3be368e5ad911cc0b014421dd3682130260ffc |
|
25-Aug-2014 |
Shawn Willden <swillden@google.com> |
Add the beginnings of logging infrastructure. Change-Id: Ic36134402bfbb098d2242c463a3b4265d1d65209
/system/keymaster/asymmetric_key.cpp
|
437fbd195e7de57b7dc0c449c04458bd90ef50de |
|
20-Aug-2014 |
Shawn Willden <swillden@google.com> |
Add key importing, RSA only. Change-Id: I639e797939a28b2b2a815541c9926dc194657c54
/system/keymaster/asymmetric_key.cpp
|
f268d742dbefe0e84b4046db7669c4ffbc110f7d |
|
19-Aug-2014 |
Shawn Willden <swillden@google.com> |
Refactor export to use new key infrastructure, and work with all key types. Change-Id: Ie1f621f9db855665d57cde93c24881415de33ca2
/system/keymaster/asymmetric_key.cpp
|
d67afae61f822463120c36fea846362450dd7d71 |
|
19-Aug-2014 |
Shawn Willden <swillden@google.com> |
Refactor key and operation details. Change-Id: I80267e6184955ecd98b08ceab91f4afd50c67614
/system/keymaster/asymmetric_key.cpp
|