def C_GetAttributeValue(*template)
      case template.length
        when 0
          return @pk.vendor_all_attribute_names.map{|attr|
            begin
              attributes(@pk.vendor_const_get(attr))
            rescue PKCS11::Error
            end
          }.flatten.compact
        when 1
          template = template[0]
      end
      template = to_attributes template
      @pk.C_GetAttributeValue(@sess, @obj, template)
    end
def C_GetAttributeValue(*template)
      case template.length
        when 0
          return @pk.vendor_all_attribute_names.map{|attr|
            begin
              attributes(@pk.vendor_const_get(attr))
            rescue PKCS11::Error
            end
          }.flatten.compact
        when 1
          template = template[0]
      end
      template = to_attributes template
      @pk.C_GetAttributeValue(@sess, @obj, template)
    end
Obtains the value of one or more attributes of the object in a single call.

 @param [Array<String, Symbol, Integer>, Hash, String, Integer] attribute attribute names
    whose values should be returned

 Without params all known attributes are tried to read from the Object.
 This is significant slower then naming the needed attributes and should
 be used for debug purposes only.

 @return [Array<PKCS11::CK_ATTRIBUTE>] Requested attributes with values.

 @example
   certificate.attributes :VALUE, :CLASS
    => [#<PKCS11::CK_ATTRIBUTE CKA_VALUE (17) value="0\x82...">, #<PKCS11::CK_ATTRIBUTE CKA_CLASS (0) value=1>]