Module: Tem::Apdus::Keys

Included in:
Session
Defined in:
lib/tem/apdus/keys.rb

Instance Method Summary collapse

Instance Method Details

#devchip_decrypt(data, key_id) ⇒ Object



45
46
47
# File 'lib/tem/apdus/keys.rb', line 45

def devchip_decrypt(data, key_id)
  devchip_encrypt_decrypt data, key_id, 0x45
end

#devchip_encrypt(data, key_id) ⇒ Object



42
43
44
# File 'lib/tem/apdus/keys.rb', line 42

def devchip_encrypt(data, key_id)
  devchip_encrypt_decrypt data, key_id, 0x44
end

#devchip_encrypt_decrypt(data, key_id, opcode) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/tem/apdus/keys.rb', line 26

def devchip_encrypt_decrypt(data, key_id, opcode)
  buffer_id = post_buffer data
  begin
    response = @transport.applet_apdu! :ins => opcode, :p1 => key_id,
                                       :p2 => buffer_id
  ensure
    release_buffer buffer_id
  end

  buffer_id = read_tem_byte response, 0
  buffer_length = read_tem_short response, 1
  data_buffer = read_buffer buffer_id
  release_buffer buffer_id
  
  return data_buffer[0, buffer_length]
end

#devchip_generate_key_pairObject



5
6
7
8
9
# File 'lib/tem/apdus/keys.rb', line 5

def devchip_generate_key_pair
  response = @transport.applet_apdu! :ins => 0x40
  return { :privkey_id => read_tem_byte(response, 0),
           :pubkey_id => read_tem_byte(response, 1) }    
end

#devchip_release_key(key_id) ⇒ Object



11
12
13
14
# File 'lib/tem/apdus/keys.rb', line 11

def devchip_release_key(key_id)
  @transport.applet_apdu! :ins => 0x41, :p1 => key_id
  return true
end

#devchip_save_key(key_id) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/tem/apdus/keys.rb', line 16

def devchip_save_key(key_id)
  response = @transport.applet_apdu! :ins => 0x43, :p1 => key_id
  buffer_id = read_tem_byte response, 0 
  buffer_length = read_tem_short response, 1
  key_buffer = read_buffer buffer_id
  release_buffer buffer_id
  
  read_tem_key key_buffer[0, buffer_length], 0
end

#stat_keysObject



49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/tem/apdus/keys.rb', line 49

def stat_keys
  response = @transport.applet_apdu! :ins => 0x27, :p1 => 0x01
  key_types = { 0x99 => :symmetric, 0x55 => :private, 0xAA => :public }
  stat = {:keys => {}}
  offset = 0
  while offset < response.length do
    stat[:keys][read_tem_ubyte(response, offset)] =
      { :type => key_types[read_tem_ubyte(response, offset + 1)],
        :bits => read_tem_ushort(response, offset + 2) }
    offset += 4
  end
  return stat
end