Update schemas to get optionals
This commit is contained in:
parent
e48c62f448
commit
df52f72263
|
@ -19,31 +19,24 @@ proc hmac(key, data: openarray[byte]): seq[byte] =
|
||||||
count[Hmac[BLAKE2S_256]](key, data).data[0..15].toSeq
|
count[Hmac[BLAKE2S_256]](key, data).data[0..15].toSeq
|
||||||
|
|
||||||
proc mint*(key: openarray[byte]; oid: Value): SturdyRef =
|
proc mint*(key: openarray[byte]; oid: Value): SturdyRef =
|
||||||
SturdyRef(parameters: {
|
result.parameters.oid = oid
|
||||||
Symbol"oid": oid,
|
result.parameters.sig = hmac(key, oid.encode)
|
||||||
Symbol"sig": hmac(key, encode(oid)).toPreserves,
|
|
||||||
}.toTable,
|
|
||||||
)
|
|
||||||
|
|
||||||
proc mint*(): SturdyRef =
|
proc mint*(): SturdyRef =
|
||||||
var key: array[16, byte]
|
var key: array[16, byte]
|
||||||
mint(key, "syndicate".toPreserves)
|
mint(key, "syndicate".toPreserves)
|
||||||
|
|
||||||
proc attenuate*(r: SturdyRef; caveats: seq[Caveat]): SturdyRef =
|
proc attenuate*(r: SturdyRef; caveats: seq[Caveat]): SturdyRef =
|
||||||
var sig = hmac(r.parameters[Symbol"sig"].bytes, caveats.toPreserves.encode)
|
if r.parameters.caveats.isSome:
|
||||||
result = SturdyRef(parameters: {
|
result.parameters.caveats = some(r.parameters.caveats.get & caveats.toPreserves)
|
||||||
Symbol"oid": r.parameters[Symbol"oid"],
|
result.parameters.oid = r.parameters.oid
|
||||||
Symbol"caveats": r.parameters[Symbol"caveats"] & caveats.toPreserves,
|
result.parameters.sig = hmac(r.parameters.sig, caveats.toPreserves.encode)
|
||||||
Symbol"sig": sig.toPreserves,
|
|
||||||
}.toTable)
|
|
||||||
|
|
||||||
proc validate*(key: openarray[byte]; sturdy: SturdyRef): bool =
|
proc validate*(key: openarray[byte]; sturdy: SturdyRef): bool =
|
||||||
let oid = sturdy.parameters[Symbol"oid"]
|
var sig = hmac(key, sturdy.parameters.oid.encode)
|
||||||
let ctrl = sturdy.parameters[Symbol"sig"]
|
if sturdy.parameters.caveats.isSome:
|
||||||
var sig = hmac(key, oid.encode)
|
for cav in sturdy.parameters.caveats.get:
|
||||||
let caveats = sturdy.parameters[Symbol"caveats"]
|
|
||||||
for cav in caveats.sequence:
|
|
||||||
sig = hmac(sig, encode cav)
|
sig = hmac(sig, encode cav)
|
||||||
result = (sig == ctrl.bytes)
|
result = (sig == sturdy.parameters.sig)
|
||||||
|
|
||||||
# mint utility moved to syndicate_utils/src/mintsturdyref.nim
|
# mint utility moved to syndicate_utils/src/mintsturdyref.nim
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
preserves, std/tables
|
preserves, std/options
|
||||||
|
|
||||||
type
|
type
|
||||||
NoiseDescriptionDetail* = NoiseServiceSpec
|
NoiseDescriptionDetail* = NoiseServiceSpec
|
||||||
|
@ -71,10 +71,28 @@ type
|
||||||
|
|
||||||
|
|
||||||
NoisePathStepDetail* = NoiseSpec
|
NoisePathStepDetail* = NoiseSpec
|
||||||
`NoiseServiceSpec`* = Table[Symbol, Value]
|
NoiseServiceSpecKey* = seq[byte]
|
||||||
|
NoiseServiceSpecPreSharedKeys* = Option[Value]
|
||||||
|
NoiseServiceSpecProtocol* = Option[Value]
|
||||||
|
NoiseServiceSpecSecretKey* = Option[Value]
|
||||||
|
`NoiseServiceSpec`* {.preservesDictionary.} = object
|
||||||
|
`key`*: seq[byte]
|
||||||
|
`preSharedKeys`*: Option[Value]
|
||||||
|
`protocol`*: Option[Value]
|
||||||
|
`secretKey`*: Option[Value]
|
||||||
|
`service`*: ServiceSelector
|
||||||
|
|
||||||
ServiceSelector* = Value
|
ServiceSelector* = Value
|
||||||
NoiseStepDetail* = ServiceSelector
|
NoiseStepDetail* = ServiceSelector
|
||||||
`NoiseSpec`* = Table[Symbol, Value]
|
NoiseSpecKey* = seq[byte]
|
||||||
|
NoiseSpecPreSharedKeys* = Option[Value]
|
||||||
|
NoiseSpecProtocol* = Option[Value]
|
||||||
|
`NoiseSpec`* {.preservesDictionary.} = object
|
||||||
|
`key`*: seq[byte]
|
||||||
|
`preSharedKeys`*: Option[Value]
|
||||||
|
`protocol`*: Option[Value]
|
||||||
|
`service`*: ServiceSelector
|
||||||
|
|
||||||
PacketKind* {.pure.} = enum
|
PacketKind* {.pure.} = enum
|
||||||
`complete`, `fragmented`
|
`complete`, `fragmented`
|
||||||
PacketComplete* = seq[byte]
|
PacketComplete* = seq[byte]
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
|
|
||||||
import
|
import
|
||||||
preserves, std/tables
|
preserves, std/tables, std/options
|
||||||
|
|
||||||
type
|
type
|
||||||
PCompoundKind* {.pure.} = enum
|
PCompoundKind* {.pure.} = enum
|
||||||
|
@ -64,7 +64,14 @@ type
|
||||||
`pattern`*: Pattern
|
`pattern`*: Pattern
|
||||||
`template`*: Template
|
`template`*: Template
|
||||||
|
|
||||||
`Parameters`* = Table[Symbol, Value]
|
ParametersCaveats* = Option[Value]
|
||||||
|
ParametersOid* = Value
|
||||||
|
ParametersSig* = seq[byte]
|
||||||
|
`Parameters`* {.preservesDictionary.} = object
|
||||||
|
`caveats`*: Option[Value]
|
||||||
|
`oid`*: Value
|
||||||
|
`sig`*: seq[byte]
|
||||||
|
|
||||||
TRef* {.preservesRecord: "ref".} = object
|
TRef* {.preservesRecord: "ref".} = object
|
||||||
`binding`*: BiggestInt
|
`binding`*: BiggestInt
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue