 
   #-------------------
 
+  _make_key : ({km, obj}) -> 
+    k = new Key { km, ctime : @_compute_now(), expires : (obj.expires or @_expires) }
+    @_keyring[k.get_ekid().toString('hex')] = k
+    k
+
+  #-------------------
+
   _compute_time : (o) ->
     ret = if typeof(o) is 'string'
       if o is 'now' then @_compute_now()
-      else if (m = o.match /^(\+)?(\d+)$/) 
-        (if m[1]? then @_compute_now() else 0) + parseInt(m[2])
-      else null
+      else if not (m = o.match /^(\+)?(\d+)$/) then null
+      else if m[1]?
+        tmp = @_compute_now() + parseInt(m[2])
+        @_now = tmp
+        tmp
+      else
+        parseInt(m[2])
     else if typeof(o) isnt 'object' then null
     else if o.sum?
       sum = 0

        else
          err = new Error "unknown key type: #{typ}"
    else if required then err = new Error "Required to generate key but none found"
    key = if km? and not err? then @_make_key(km) else null
    cb err, key

  #-------------------

    @_links = []
    @_assertions = []
    @_time = 0
    @_start = null
    @_now = null
    @_expires = 0
    @_seqno = 1
    @_prev = null    

  #-------------------

