def []=(*attributes)
      values = attributes.pop
      values = [values] unless values.kind_of?(Array)
      raise ArgumentError, "different number of attributes to set (#{attributes.length}) and given values (#{values.length})" unless attributes.length == values.length
      map = values.each.with_index.inject({}){|s, v| s[attributes[v[1]]] = v[0]; s }
      C_SetAttributeValue( map )
    end
def []=(*attributes)
      values = attributes.pop
      values = [values] unless values.kind_of?(Array)
      raise ArgumentError, "different number of attributes to set (#{attributes.length}) and given values (#{values.length})" unless attributes.length == values.length
      map = values.each.with_index.inject({}){|s, v| s[attributes[v[1]]] = v[0]; s }
      C_SetAttributeValue( map )
    end
Modifies the value of one or several attributes of the object.

 @param [String, Symbol, Integer] attribute  can be String or Symbol of the attribute constant
             or the attribute value as Integer.
 @param [String, Integer, Boolean, Array, nil] value  value(s) the attribute(s) will be set to.

 Following value conversations are done from Ruby to C:
   true   -> 0x01
   false  -> 0x00
   nil    -> NULL pointer
   Integer-> binary encoded unsigned long

 @example
     object[:VALUE] = "\000\000\000\000\000\000\000\000"
     object[:MODULUS_BITS] = 768
     object[:MODULUS_BITS, :LABEL] = 1024, 'MyKey'

 See PKCS#11 for attribute definitions.
 @return value