Module: RubySMB::Dcerpc::Gkdi

Defined in:
lib/ruby_smb/dcerpc/gkdi.rb,
lib/ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_key.rb,
lib/ruby_smb/dcerpc/gkdi/gkdi_get_key_request.rb,
lib/ruby_smb/dcerpc/gkdi/gkdi_get_key_response.rb,
lib/ruby_smb/dcerpc/gkdi/gkdi_ffc_dh_parameters.rb,
lib/ruby_smb/dcerpc/gkdi/gkdi_group_key_envelope.rb

Defined Under Namespace

Classes: GkdiFfcDhKey, GkdiFfcDhParameters, GkdiGetKeyRequest, GkdiGetKeyResponse, GkdiGroupKeyEnvelope

Constant Summary collapse

UUID =
'b9785960-524f-11df-8b6d-83dcded72085'
VER_MAJOR =
1
VER_MINOR =
0
GKDI_GET_KEY =

Operation numbers

0x0000

Instance Method Summary collapse

Instance Method Details

#gkdi_get_key(target_sd, root_key_id, l0_key_id, l1_key_id, l2_key_id) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/ruby_smb/dcerpc/gkdi.rb', line 19

def gkdi_get_key(target_sd, root_key_id, l0_key_id, l1_key_id, l2_key_id)
  target_sd = target_sd.to_binary_s if target_sd.respond_to?(:to_binary_s)

  gkdi_get_key_request = GkdiGetKeyRequest.new(
    cb_target_sd: target_sd.length,
    pb_target_sd: target_sd.unpack('C*'),
    p_root_key_id: root_key_id,
    l0_key_id: l0_key_id,
    l1_key_id: l1_key_id,
    l2_key_id: l2_key_id
  )

  response = dcerpc_request(
    gkdi_get_key_request,
    auth_level: @auth_level,
    auth_type: @auth_type
  )
  begin
    gkdi_get_key_response = GkdiGetKeyResponse.read(response)
  rescue IOError
    raise RubySMB::Dcerpc::Error::InvalidPacket, 'Error reading CertServerRequestResponse'
  end
  unless gkdi_get_key_response.error_status == WindowsError::NTStatus::STATUS_SUCCESS
    status_code = WindowsError::Win32.find_by_retval(gkdi_get_key_response.error_status.value).first
    raise RubySMB::Dcerpc::Error::GkdiError.new(
      "Error returned with gkdi_get_key: #{status_code}",
      status_code: status_code
    )
  end

  GkdiGroupKeyEnvelope.read(gkdi_get_key_response.pbb_out.snapshot.pack('C*'))
end