Pkcs11.cpp 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. /**
  2. * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
  3. * SPDX-License-Identifier: Apache-2.0.
  4. */
  5. #include <aws/crt/io/Pkcs11.h>
  6. #include <aws/io/logging.h>
  7. #include <aws/io/pkcs11.h>
  8. namespace Aws
  9. {
  10. namespace Crt
  11. {
  12. namespace Io
  13. {
  14. std::shared_ptr<Pkcs11Lib> Pkcs11Lib::Create(const String &filename, Allocator *allocator)
  15. {
  16. return Create(filename, InitializeFinalizeBehavior::Default, allocator);
  17. }
  18. std::shared_ptr<Pkcs11Lib> Pkcs11Lib::Create(
  19. const String &filename,
  20. InitializeFinalizeBehavior initializeFinalizeBehavior,
  21. Allocator *allocator)
  22. {
  23. aws_pkcs11_lib_options options;
  24. AWS_ZERO_STRUCT(options);
  25. if (!filename.empty())
  26. {
  27. options.filename = ByteCursorFromString(filename);
  28. }
  29. switch (initializeFinalizeBehavior)
  30. {
  31. case InitializeFinalizeBehavior::Default:
  32. options.initialize_finalize_behavior = AWS_PKCS11_LIB_DEFAULT_BEHAVIOR;
  33. break;
  34. case InitializeFinalizeBehavior::Omit:
  35. options.initialize_finalize_behavior = AWS_PKCS11_LIB_OMIT_INITIALIZE;
  36. break;
  37. case InitializeFinalizeBehavior::Strict:
  38. options.initialize_finalize_behavior = AWS_PKCS11_LIB_STRICT_INITIALIZE_FINALIZE;
  39. break;
  40. default:
  41. AWS_LOGF_ERROR(
  42. AWS_LS_IO_PKCS11,
  43. "Cannot create Pkcs11Lib. Invalid InitializeFinalizeBehavior %d",
  44. (int)initializeFinalizeBehavior);
  45. aws_raise_error(AWS_ERROR_INVALID_ARGUMENT);
  46. return nullptr;
  47. }
  48. struct aws_pkcs11_lib *impl = aws_pkcs11_lib_new(allocator, &options);
  49. if (impl == nullptr)
  50. {
  51. return nullptr;
  52. }
  53. return MakeShared<Pkcs11Lib>(allocator, *impl);
  54. }
  55. Pkcs11Lib::Pkcs11Lib(aws_pkcs11_lib &impl) : impl(&impl) {}
  56. Pkcs11Lib::~Pkcs11Lib() { aws_pkcs11_lib_release(impl); }
  57. } // namespace Io
  58. } // namespace Crt
  59. } // namespace Aws