类:Mongo::Crypt::Context Private

继承:
对象
  • 对象
显示全部
扩展方式:
可转发
定义于:
构建/ruby-driver-v2.19/lib/ mongo /crypt/context.rb

Overview

此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。

mongocrypt_ctx_t 的包装器,用于管理加密和解密的状态机。

该类是一个超类,它在为不同目的(例如 数据密钥创建、加密、显式加密等)

实例属性摘要折叠

实例方法摘要折叠

构造函数详情

#initialize (mongocrypt_handle, io) ⇒上下文

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

创建新的 Context对象

参数:

  • mongocrypt_handle ( Mongo::Crypt::Handle )

    用于创建新上下文对象的 libmongocrypt处理。

  • io ( ClientEncryption::IO )

    IO 类的实例,用于实现运行状态机所需的驾驶员I/O 方法。



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/context.rb', 第41行

def 初始化(mongocrypt_handle, io)
  @mongocrypt_handle = mongocrypt_handle
  # 理想情况下,此级别的API不会传递指针
  # 对象之间的引用,因此此方法签名可能会更改。

  # FFI::AutoPointer 使用自定义发布策略来自动释放
  # 当此对象超出作用域时的指针
  @ctx_p = FFI::AutoPointer.new(
    绑定.mongocrypt_ctx_new(@mongocrypt_handle.ref),
    绑定.方法(:mongocrypt_ctx_destroy)
  )

  @encryption_io = io
  @cached_azure_token = nil
end

实例属性详细信息

# ctx_p对象(只读)

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。



57
58
59
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/context.rb', 第57行

def ctx_p
  @ctx_p
end

实例方法详细信息

# run_state_machine =" BSON::Document"

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

运行 mongocrypt_ctx_t 状态机并代表 libmongocrypt 处理所有 I/O

此方法当前未经单元测试。 它在 spec/integration/explicit_encryption_spec.rb 中进行了集成测试

返回:

  • ( BSON::Document )

    表示状态机结果的 BSON 文档。 内容可能因上下文的初始化方式而异。

引发:



78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/context.rb', 第78行

def run_state_machine
  while true
    案例 
    when :error
      绑定.check_ctx_status(self)
    when :ready
      # 最终确定状态机并以BSON::Document 形式返回结果
      return 绑定.ctx_finalize(self)
    when :done
      return nil
    when :need_mongo_keys
      筛选器 = 绑定.ctx_mongo_op(self)

      @encryption_io.find_keys(筛选器). do |key|
        mongocrypt_feed(key) if key
      end

      mongocrypt_done
    when :need_mongo_collinfo
      筛选器 = 绑定.ctx_mongo_op(self)

      结果 = @encryption_io.collection_info(@db_name, 筛选器)
      mongocrypt_feed(结果) if 结果

      mongocrypt_done
    when :need_mongo_markings
      cmd = 绑定.ctx_mongo_op(self)

      结果 = @encryption_io.mark_command(cmd)
      mongocrypt_feed(结果)

      mongocrypt_done
    when :need_kms
      while kms_context = 绑定.ctx_next_kms_ctx(self) do
        provider = 绑定.kms_ctx_get_kms_provider(kms_context)
        tls_options = @mongocrypt_handle.kms_tls_options(provider)
        @encryption_io.feed_kms(kms_context, tls_options)
      end

      绑定.ctx_kms_done(self)
    when :need_kms_credentials
      绑定.ctx_provide_kms_providers(
        self,
        retrieve_kms_credentials.to_document
      )
    else
      提高 错误::CryptError.new(
        " Mongo::Crypt::Context 不支持 状态 #{ state} "
      )
    end
  end
end

#状态符号

此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。

返回 mongocrypt_ctx_t 的状态

返回:

  • (符号)

    上下文状态



62
63
64
# File 'build/Ruby-driver-v 2.19 /lib/mongo/crypt/context.rb', 第62行

def 
  绑定.mongocrypt_ctx_state(@ctx_p)
end