Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Driver-only hashes: PKCS12 #6147

Closed
9 tasks done
mpg opened this issue Jul 28, 2022 · 0 comments · Fixed by #6232
Closed
9 tasks done

Driver-only hashes: PKCS12 #6147

mpg opened this issue Jul 28, 2022 · 0 comments · Fixed by #6232
Assignees
Labels
enhancement size-s Estimated task size: small (~2d)

Comments

@mpg
Copy link
Contributor

mpg commented Jul 28, 2022

PKCS12, aka RFC 7292, is a standard for, among other things, representing private keys, possibly encrypted with a password. We implement part of this standard in pkcs12.c and optionally use it in pkparse.c to parse those types of encrypted keys. It uses iterated hashing in order to derive an encryption key from a password. Currently this uses MD, which means it doesn't work in builds where hashes are provided only by drivers; this task is to make it work.

  • In mbedtls_pkcs12_derivation() use mbedtls_hash_info_get_size() (from library/hash_info.h) instead of mbedtls_md_get_size().
  • In the same function, reduce the scope of md_ctx and md_info to the beginning of the while loop if possible, or preferably extract the code that computes to a new static function. (Note: this is similar to the creation of hash_mprime() in Driver hashes rsa v21 #6141 and is a preparation for the next point.)
  • Provide an implementation of the new static function (or code block inside mbedtls_pkcs12_derivation()) based on PSA, to be used only when MD_C is not available (in order to preserve backwards compatibility: the PSA version requires psa_crypto_init() to have been called, we don't want to impose this requirement on existing code, but we can impose it in builds where this just didn't work at all before). (Again, this is similar to hash_mprime() in Driver hashes rsa v21 #6141.)
  • Adjust the dependency in check_config.h: PKCS12 now only requires MD_C || PSA_CRYPTO_C.
  • Remove the unset PKCS12_C lines from all.sh components component_test_crypto_full_no_md() and component_test_psa_crypto_config_accel_hash_use_psa().
  • Adjust dependencies in test_suite_pkcs12.data, replacing MBEDTLS_MD5_C with MBEDTLS_HAS_ALG_MD5_VIA_MD_OR_PSA (from legacy_or_psa.h which needs to be #included in the .function file).
  • Similarly adjust hash dependencies in test_suite_pkparse.data for tests that depend on PKCS12_C (again, legacy_or_psa.h needs to be #included in the .function file).
  • Fix any issue that may arise.
  • Check test coverage for test_suite_pkcs5 and test_suite_pkparse: see docs/architecture/psa-migration/outcome-analysis.sh (don't forget to remove unset PKCS12_C in reference_config() and edit SUITES in your copy).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement size-s Estimated task size: small (~2d)
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants