profiles.py 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. # SPDX-License-Identifier: MIT
  2. """
  3. This module offers access to standardized parameters that you can load using
  4. :meth:`argon2.PasswordHasher.from_parameters()`. See the `source code
  5. <https://github.com/hynek/argon2-cffi/blob/main/src/argon2/profiles.py>`_ for
  6. concrete values and :doc:`parameters` for more information.
  7. .. versionadded:: 21.2.0
  8. """
  9. from __future__ import annotations
  10. import dataclasses
  11. from ._utils import Parameters, _is_wasm
  12. from .low_level import Type
  13. def get_default_parameters() -> Parameters:
  14. """
  15. Create default parameters for current platform.
  16. Returns:
  17. Default, compatible, parameters for current platform.
  18. .. versionadded:: 25.1.0
  19. """
  20. params = RFC_9106_LOW_MEMORY
  21. if _is_wasm():
  22. params = dataclasses.replace(params, parallelism=1)
  23. return params
  24. # FIRST RECOMMENDED option per RFC 9106.
  25. RFC_9106_HIGH_MEMORY = Parameters(
  26. type=Type.ID,
  27. version=19,
  28. salt_len=16,
  29. hash_len=32,
  30. time_cost=1,
  31. memory_cost=2097152, # 2 GiB
  32. parallelism=4,
  33. )
  34. # SECOND RECOMMENDED option per RFC 9106.
  35. RFC_9106_LOW_MEMORY = Parameters(
  36. type=Type.ID,
  37. version=19,
  38. salt_len=16,
  39. hash_len=32,
  40. time_cost=3,
  41. memory_cost=65536, # 64 MiB
  42. parallelism=4,
  43. )
  44. # The pre-RFC defaults in argon2-cffi 18.2.0 - 21.1.0.
  45. PRE_21_2 = Parameters(
  46. type=Type.ID,
  47. version=19,
  48. salt_len=16,
  49. hash_len=16,
  50. time_cost=2,
  51. memory_cost=102400, # 100 MiB
  52. parallelism=8,
  53. )
  54. # Only for testing!
  55. CHEAPEST = Parameters(
  56. type=Type.ID,
  57. version=19,
  58. salt_len=8,
  59. hash_len=4,
  60. time_cost=1,
  61. memory_cost=8,
  62. parallelism=1,
  63. )