클래스: Mongo::Crypt::Context Private

상속:
객체
  • 객체
모두 표시
확장자:
전달 가능
다음에 정의됨:
빌드/ Ruby-driver-v2.19/lib/mongo/crypt/context.rb

개요

이 클래스는 비공개 API의 일부입니다. 이 클래스는 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

암호화 및 암호 해독을 위한 상태 머신을 관리하는 mongocrypt_ctx_t를 감싸는 래퍼입니다.

이 클래스는 서로 다른 목적으로 초기화되는 컨텍스트 간에 공유 메서드를 정의하는 슈퍼클래스입니다(예: 데이터 키 생성, 암호화, 명시적 암호화 등)

인스턴스 속성 요약 접기

인스턴스 메서드 요약 접기

생성자 세부 정보

#initialize(mongocrypt_handle, io) ⇒ 컨텍스트

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

새 컨텍스트 객체 만들기

매개변수:

  • mongocrypt_handle (Mongo::Crypt::Handle)

    새 컨텍스트 객체 를 만드는 데 사용되는 libmongocrypt에 대한 처리하다 입니다.

  • io (ClientEncryption::IO)

    상태 머신을 실행 하는 데 필요한 운전자 I/O 메서드를 구현하는 IO 클래스의 인스턴스 입니다.



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', 줄 41

def 초기화(mongocrypt_handle, io)
  @mongocrypt_handle = mongocrypt_handle
  # 이상적으로는 이 수준의 API 는 포인터를 전달하지 않습니다.
  # 객체 간 참조이므로 이 메서드 서명은 변경될 수 있습니다.

  # FFI::AutoPointer는 사용자 지정 출시하다 전략을 사용하여
  # 이 객체 가 범위를 벗어나면 포인터
  @ctx_p = FFI::자동 포인터.신규(
    바인딩.mongocrypt_ctx_new(@mongocrypt_handle.ref),
    바인딩.메서드(:mongocrypt_ctx_destory)
  )

  @encryption_io = io
  @cached_azure_token = nil
end

인스턴스 속성 세부 정보

#ctx_p객체 (읽기 전용)

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.



57
58
59
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', 줄 57

def ctx_p
  @ctx_p
end

인스턴스 메서드 세부 정보

#run_state_ machineBSON::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
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', 줄 78

def run_state_ machine
  동안 true
    case 상태
    when :error
      바인딩.check_ctx_status(self)
    when :ready
      # 상태 머신을 마무리하고 결과를 BSON::Document로 반환합니다.
      반환 바인딩.ctx_finalize(self)
    when :done
      반환 nil
    when :need_mongo_keys
      필터 = 바인딩.ctx_mongo_op(self)

      @encryption_io.find_keys(필터). do ||
        mongocrypt_피드() 만약 
      end

      mongocrypt_done
    when :need_mongo_collinfo
      필터 = 바인딩.ctx_mongo_op(self)

      결과 = @encryption_io.collection_info(@db_name, 필터)
      mongocrypt_피드(결과) 만약 결과

      mongocrypt_done
    when :need_mongo_markings
      cmd = 바인딩.ctx_mongo_op(self)

      결과 = @encryption_io.mark_command(cmd)
      mongocrypt_피드(결과)

      mongocrypt_done
    when :need_kms
      동안 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
      )
    other
      올리다 오류::CRYPTError.신규(
        "State #{상태} 는 Mongo::Crypt::Context에서 지원되지 않습니다.
      )
    end
  end
end

#상태기호

이 메서드는 비공개 API의 일부입니다. 이 방법은 향후 제거되거나 변경될 수 있으므로 가능하면 사용하지 않는 것이 좋습니다.

mongocrypt_ctx_t의 상태 를 반환합니다.

반환합니다:

  • (기호)

    컨텍스트 상태



62
63
64
# 파일 'build/ruby-driver-v2.19/lib/mongo/crypt/context.rb', 줄 62

def 상태
  바인딩.mongocrypt_ctx_state(@ctx_p)
end