syndicate-nim/src/syndicate/protocols/noise.nim

140 lines
3.8 KiB
Nim
Raw Normal View History

2023-12-31 17:15:06 +00:00
import
2024-01-06 11:59:38 +00:00
preserves, std/options
2023-12-31 17:15:06 +00:00
type
NoiseDescriptionDetail* = NoiseServiceSpec
NoisePreSharedKeysKind* {.pure.} = enum
`present`, `invalid`, `absent`
NoisePreSharedKeysPresent* {.preservesDictionary.} = object
`preSharedKeys`*: seq[seq[byte]]
NoisePreSharedKeysInvalid* {.preservesDictionary.} = object
`preSharedKeys`*: Value
NoisePreSharedKeysAbsent* {.preservesDictionary.} = object
`NoisePreSharedKeys`* {.preservesOr.} = object
case orKind*: NoisePreSharedKeysKind
of NoisePreSharedKeysKind.`present`:
`present`*: NoisePreSharedKeysPresent
of NoisePreSharedKeysKind.`invalid`:
`invalid`*: NoisePreSharedKeysInvalid
of NoisePreSharedKeysKind.`absent`:
`absent`*: NoisePreSharedKeysAbsent
SecretKeyFieldKind* {.pure.} = enum
`present`, `invalid`, `absent`
SecretKeyFieldPresent* {.preservesDictionary.} = object
`secretKey`*: seq[byte]
SecretKeyFieldInvalid* {.preservesDictionary.} = object
`secretKey`*: Value
SecretKeyFieldAbsent* {.preservesDictionary.} = object
`SecretKeyField`* {.preservesOr.} = object
case orKind*: SecretKeyFieldKind
of SecretKeyFieldKind.`present`:
`present`*: SecretKeyFieldPresent
of SecretKeyFieldKind.`invalid`:
`invalid`*: SecretKeyFieldInvalid
of SecretKeyFieldKind.`absent`:
`absent`*: SecretKeyFieldAbsent
2024-04-19 09:45:00 +00:00
SessionItemKind* {.pure.} = enum
`Initiator`, `Packet`
`SessionItem`* {.preservesOr.} = object
case orKind*: SessionItemKind
of SessionItemKind.`Initiator`:
`initiator`* {.preservesEmbedded.}: Initiator
of SessionItemKind.`Packet`:
`packet`*: Packet
2023-12-31 17:15:06 +00:00
NoiseProtocolKind* {.pure.} = enum
`present`, `invalid`, `absent`
NoiseProtocolPresent* {.preservesDictionary.} = object
`protocol`*: string
NoiseProtocolInvalid* {.preservesDictionary.} = object
`protocol`*: Value
NoiseProtocolAbsent* {.preservesDictionary.} = object
`NoiseProtocol`* {.preservesOr.} = object
case orKind*: NoiseProtocolKind
of NoiseProtocolKind.`present`:
`present`*: NoiseProtocolPresent
of NoiseProtocolKind.`invalid`:
`invalid`*: NoiseProtocolInvalid
of NoiseProtocolKind.`absent`:
`absent`*: NoiseProtocolAbsent
NoisePathStepDetail* = NoiseSpec
2024-01-06 11:59:38 +00:00
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
2023-12-31 17:15:06 +00:00
ServiceSelector* = Value
2024-04-19 09:45:00 +00:00
Initiator* {.preservesRecord: "initiator".} = object
`initiatorSession`* {.preservesEmbedded.}: EmbeddedRef
2023-12-31 17:15:06 +00:00
NoiseStepDetail* = ServiceSelector
2024-01-06 11:59:38 +00:00
NoiseSpecKey* = seq[byte]
NoiseSpecPreSharedKeys* = Option[Value]
NoiseSpecProtocol* = Option[Value]
`NoiseSpec`* {.preservesDictionary.} = object
`key`*: seq[byte]
`preSharedKeys`*: Option[Value]
`protocol`*: Option[Value]
`service`*: ServiceSelector
2023-12-31 17:15:06 +00:00
PacketKind* {.pure.} = enum
`complete`, `fragmented`
`Packet`* {.preservesOr.} = object
case orKind*: PacketKind
of PacketKind.`complete`:
2024-01-07 22:11:59 +00:00
`complete`*: seq[byte]
2023-12-31 17:15:06 +00:00
of PacketKind.`fragmented`:
2024-01-07 22:11:59 +00:00
`fragmented`*: seq[seq[byte]]
2023-12-31 17:15:06 +00:00
proc `$`*(x: NoiseDescriptionDetail | NoisePreSharedKeys | SecretKeyField |
2024-04-19 09:45:00 +00:00
SessionItem |
2023-12-31 17:15:06 +00:00
NoiseProtocol |
NoisePathStepDetail |
NoiseServiceSpec |
2024-04-19 09:45:00 +00:00
Initiator |
2023-12-31 17:15:06 +00:00
NoiseSpec |
Packet): string =
`$`(toPreserves(x))
proc encode*(x: NoiseDescriptionDetail | NoisePreSharedKeys | SecretKeyField |
2024-04-19 09:45:00 +00:00
SessionItem |
2023-12-31 17:15:06 +00:00
NoiseProtocol |
NoisePathStepDetail |
NoiseServiceSpec |
2024-04-19 09:45:00 +00:00
Initiator |
2023-12-31 17:15:06 +00:00
NoiseSpec |
Packet): seq[byte] =
encode(toPreserves(x))