类:Mongo::Crypt::Context Private
- 继承:
-
对象
- 对象
- Mongo::Crypt::Context
- 扩展方式:
- 可转发
- 定义于:
- 构建/ruby-driver-v2.19/lib/ mongo /crypt/context.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
mongocrypt_ctx_t 的包装器,用于管理加密和解密的状态机。
该类是一个超类,它在为不同目的(例如 数据密钥创建、加密、显式加密等)
直接已知子类
AutoDecryptionContext 、 AutoEncryptionContext 、 DataKeyContext 、 ExplicitDecryptionContext 、 ExplicitEncryptionContext 、 RewrapManyDataKeyContext
实例属性摘要折叠
- # ctx_p ⇒ 对象 只读 private
实例方法摘要折叠
-
#initialize (mongocrypt_handle, io) ⇒ 上下文
构造函数
private
创建一个新的 Context 对象。
-
# run_state_machine =" BSON::Document"
private
运行 mongocrypt_ctx_t 状态机并代表 libmongocrypt 处理所有 I/O。
-
#状态⇒ 符号
private
返回 mongocrypt_ctx_t 的状态。
构造函数详情
#initialize (mongocrypt_handle, io) ⇒上下文
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
创建新的 Context对象
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 中进行了集成测试
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) = @mongocrypt_handle.(provider) @encryption_io.feed_kms(kms_context, ) 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 |