Method: Keychain::Keychain#import

Defined in:
lib/keychain/keychain.rb

#import(input, app_list = []) ⇒ Array <SecKeychainItem>

Imports item from string or file to this keychain

permitted to access imported items each of which may be a SecCertificate, SecKey, or SecIdentity instance

Parameters:

  • input (IO, String)

    IO object or String with raw data to import

  • app_list (Array <String>) (defaults to: [])

    List of applications which will be

Returns:

  • (Array <SecKeychainItem>)

    List of imported keychain objects,



123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
# File 'lib/keychain/keychain.rb', line 123

def import(input, app_list=[])
  input = input.read if input.is_a? IO

  # Create array of TrustedApplication objects
  trusted_apps = get_trusted_apps(app_list)

  # Create an Access object
  access_buffer = FFI::MemoryPointer.new(:pointer)
  status = Sec.SecAccessCreate(path.to_cf, trusted_apps, access_buffer)
  Sec.check_osstatus status
  access = CF::Base.typecast(access_buffer.read_pointer)

  key_params = Sec::SecItemImportExportKeyParameters.new
  key_params[:accessRef] = access

  # Import item to the keychain
  cf_data = CF::Data.from_string(input)
  cf_array = FFI::MemoryPointer.new(:pointer)
  status = Sec.SecItemImport(cf_data, nil, :kSecFormatUnknown, :kSecItemTypeUnknown, :kSecItemPemArmour, key_params, self, cf_array)
  access.release
  Sec.check_osstatus status
  item_array = CF::Base.typecast(cf_array.read_pointer).release_on_gc

  item_array.to_ruby
end