aboutsummaryrefslogtreecommitdiffstats
path: root/server/resty/session/encoders/base16.lua
diff options
context:
space:
mode:
Diffstat (limited to 'server/resty/session/encoders/base16.lua')
-rw-r--r--server/resty/session/encoders/base16.lua29
1 files changed, 29 insertions, 0 deletions
diff --git a/server/resty/session/encoders/base16.lua b/server/resty/session/encoders/base16.lua
new file mode 100644
index 0000000..552f50e
--- /dev/null
+++ b/server/resty/session/encoders/base16.lua
@@ -0,0 +1,29 @@
+local to_hex = require "resty.string".to_hex
+
+local tonumber = tonumber
+local gsub = string.gsub
+local char = string.char
+
+local function chr(c)
+ return char(tonumber(c, 16) or 0)
+end
+
+local encoder = {}
+
+function encoder.encode(value)
+ if not value then
+ return nil, "unable to base16 encode value"
+ end
+
+ return to_hex(value)
+end
+
+function encoder.decode(value)
+ if not value then
+ return nil, "unable to base16 decode value"
+ end
+
+ return (gsub(value, "..", chr))
+end
+
+return encoder