Class: Keychain::Key

Inherits:
Sec::Base show all
Defined in:
lib/keychain/key.rb

Constant Summary collapse

ATTR_MAP =
{CF::Base.typecast(Sec::kSecAttrAccessible) => :accessible,
CF::Base.typecast(Sec::kSecAttrAccessGroup) => :access_group,
CF::Base.typecast(Sec::kSecAttrKeyClass) => :key_class,
CF::Base.typecast(Sec::kSecAttrLabel) => :label,
CF::Base.typecast(Sec::kSecAttrApplicationLabel) => :application_label,
CF::Base.typecast(Sec::kSecAttrIsPermanent) => :is_permanent,
CF::Base.typecast(Sec::kSecAttrApplicationTag) => :application_tag,
CF::Base.typecast(Sec::kSecAttrKeyType) => :key_type,
CF::Base.typecast(Sec::kSecAttrKeySizeInBits) => :size_in_bites,
CF::Base.typecast(Sec::kSecAttrEffectiveKeySize) => :effective_key_size,
CF::Base.typecast(Sec::kSecAttrCanEncrypt) => :can_encrypt,
CF::Base.typecast(Sec::kSecAttrCanDecrypt) => :can_decrypt,
CF::Base.typecast(Sec::kSecAttrCanDerive) => :can_derive,
CF::Base.typecast(Sec::kSecAttrCanSign) => :can_sign,
CF::Base.typecast(Sec::kSecAttrCanVerify) => :can_verify,
CF::Base.typecast(Sec::kSecAttrCanWrap) => :can_wrap,
CF::Base.typecast(Sec::kSecAttrCanUnwrap) => :can_unwrap}
INVERSE_ATTR_MAP =
ATTR_MAP.invert

Instance Attribute Summary

Attributes inherited from Sec::Base

#attributes

Instance Method Summary collapse

Methods inherited from Sec::Base

define_attributes, #initialize, #keychain, #load_attributes, register_type, #update_self_from_dictionary

Constructor Details

This class inherits a constructor from Sec::Base

Instance Method Details

#export(passphrase = nil, format = :kSecFormatUnknown) ⇒ Object



91
92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/keychain/key.rb', line 91

def export(passphrase = nil, format = :kSecFormatUnknown)
  flags = Sec::SecItemImportExportKeyParameters.new
  flags[:version] = Sec::SEC_KEY_IMPORT_EXPORT_PARAMS_VERSION
  flags[:passphrase] = CF::String.from_string(passphrase).to_ptr if passphrase

  data_ptr = FFI::MemoryPointer.new(:pointer)
  status = Sec.SecItemExport(self, format, :kSecItemPemArmour, flags, data_ptr)
  Sec.check_osstatus(status)

  data = CF::Data.new(data_ptr.read_pointer)
  result = data.to_s
  data.release
  result
end

#klassObject



87
88
89
# File 'lib/keychain/key.rb', line 87

def klass
  Sec::Classes::KEY.to_ruby
end