std::shared_ptr Pkcs11Lib::Create()

in source/io/Pkcs11.cpp [21:61]


            std::shared_ptr<Pkcs11Lib> Pkcs11Lib::Create(
                const String &filename,
                InitializeFinalizeBehavior initializeFinalizeBehavior,
                Allocator *allocator)
            {
                aws_pkcs11_lib_options options;
                AWS_ZERO_STRUCT(options);

                if (!filename.empty())
                {
                    options.filename = ByteCursorFromString(filename);
                }

                switch (initializeFinalizeBehavior)
                {
                    case InitializeFinalizeBehavior::Default:
                        options.initialize_finalize_behavior = AWS_PKCS11_LIB_DEFAULT_BEHAVIOR;
                        break;
                    case InitializeFinalizeBehavior::Omit:
                        options.initialize_finalize_behavior = AWS_PKCS11_LIB_OMIT_INITIALIZE;
                        break;
                    case InitializeFinalizeBehavior::Strict:
                        options.initialize_finalize_behavior = AWS_PKCS11_LIB_STRICT_INITIALIZE_FINALIZE;
                        break;
                    default:
                        AWS_LOGF_ERROR(
                            AWS_LS_IO_PKCS11,
                            "Cannot create Pkcs11Lib. Invalid InitializeFinalizeBehavior %d",
                            (int)initializeFinalizeBehavior);
                        aws_raise_error(AWS_ERROR_INVALID_ARGUMENT);
                        return nullptr;
                }

                struct aws_pkcs11_lib *impl = aws_pkcs11_lib_new(allocator, &options);
                if (impl == nullptr)
                {
                    return nullptr;
                }

                return MakeShared<Pkcs11Lib>(allocator, *impl);
            }