def [](*attributes)
      attrs = C_GetAttributeValue( attributes.flatten )
      if attrs.length>1 || attributes.first.kind_of?(Array)
        attrs.map(&:value)
      else
        attrs.first.value unless attrs.empty?
      end
    end
def [](*attributes)
      attrs = C_GetAttributeValue( attributes.flatten )
      if attrs.length>1 || attributes.first.kind_of?(Array)
        attrs.map(&:value)
      else
        attrs.first.value unless attrs.empty?
      end
    end
Get the value of one or several attributes of the object.

 @param [String, Symbol, Integer, Array] attribute can be String or Symbol
             of the attribute(s) constant or the attribute(s) number as Integer.

 @return [String, Integer, Boolean, Array, nil] the attribute value as String,
   Integer or true/false depending on the attribute type.
   If called with more than one parameter or with an Array, a Array
   of attribute values is returned.
 Unknown attributes (out of PKCS#11 v2.2) are not converted to adequate
 ruby objects but returned as String.
 That is true/false will be returned as "\\001" respectively "\\000".

 @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.