        def from_string(string)
          raise Errors::InvalidObjectId.new(string) unless legal?(string)
          data = []
          12.times { |i| data << string[i*2, 2].to_i(16) }
          new data
        end