Skip to content

Commit 305cafa

Browse files
bungleleafo
authored andcommitted
pgmoon.crypto kdf_derive_sha256 to support resty.openssl
1 parent cf1840a commit 305cafa

File tree

2 files changed

+87
-35
lines changed

2 files changed

+87
-35
lines changed

pgmoon/crypto.lua

Lines changed: 45 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,23 +42,52 @@ digest_sha256 = function(str)
4242
return assert(digest:final())
4343
end
4444
local kdf_derive_sha256
45-
kdf_derive_sha256 = function(str, salt, i)
46-
local openssl_kdf = require("openssl.kdf")
47-
local decode_base64
48-
decode_base64 = require("pgmoon.util").decode_base64
49-
salt = decode_base64(salt)
50-
local key, err = openssl_kdf.derive({
51-
type = "PBKDF2",
52-
md = "sha256",
53-
salt = salt,
54-
iter = i,
55-
pass = str,
56-
outlen = 32
57-
})
58-
if not (key) then
59-
return nil, "failed to derive pbkdf2 key: " .. tostring(err)
45+
if pcall(function()
46+
return require("openssl.kdf")
47+
end) then
48+
kdf_derive_sha256 = function(str, salt, i)
49+
local openssl_kdf = require("openssl.kdf")
50+
local decode_base64
51+
decode_base64 = require("pgmoon.util").decode_base64
52+
salt = decode_base64(salt)
53+
local key, err = openssl_kdf.derive({
54+
type = "PBKDF2",
55+
md = "sha256",
56+
salt = salt,
57+
iter = i,
58+
pass = str,
59+
outlen = 32
60+
})
61+
if not (key) then
62+
return nil, "failed to derive pbkdf2 key: " .. tostring(err)
63+
end
64+
return key
65+
end
66+
elseif pcall(function()
67+
return require("resty.openssl.kdf")
68+
end) then
69+
kdf_derive_sha256 = function(str, salt, i)
70+
local openssl_kdf = require("resty.openssl.kdf")
71+
local decode_base64
72+
decode_base64 = require("pgmoon.util").decode_base64
73+
salt = decode_base64(salt)
74+
local key, err = openssl_kdf.derive({
75+
type = openssl_kdf.PBKDF2,
76+
md = "sha256",
77+
salt = salt,
78+
pbkdf2_iter = i,
79+
pass = str,
80+
outlen = 32
81+
})
82+
if not (key) then
83+
return nil, "failed to derive pbkdf2 key: " .. tostring(err)
84+
end
85+
return key
86+
end
87+
else
88+
kdf_derive_sha256 = function()
89+
return error("Either luaossl or resty.openssl is required to derive pbkdf2 key")
6090
end
61-
return key
6291
end
6392
local random_bytes
6493
if pcall(function()

pgmoon/crypto.moon

Lines changed: 42 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,25 +26,48 @@ digest_sha256 = (str) ->
2626
assert digest\final!
2727

2828

29-
kdf_derive_sha256 = (str, salt, i) ->
30-
openssl_kdf = require "openssl.kdf"
31-
import decode_base64 from require "pgmoon.util"
32-
33-
salt = decode_base64 salt
34-
35-
key, err = openssl_kdf.derive {
36-
type: "PBKDF2"
37-
md: "sha256"
38-
salt: salt
39-
iter: i
40-
pass: str
41-
outlen: 32 -- our H() produces a 32 byte hash value (SHA-256)
42-
}
43-
44-
unless key
45-
return nil, "failed to derive pbkdf2 key: #{err}"
46-
47-
key
29+
kdf_derive_sha256 = if pcall -> require "openssl.kdf"
30+
(str, salt, i) ->
31+
openssl_kdf = require "openssl.kdf"
32+
import decode_base64 from require "pgmoon.util"
33+
34+
salt = decode_base64 salt
35+
36+
key, err = openssl_kdf.derive {
37+
type: "PBKDF2"
38+
md: "sha256"
39+
salt: salt
40+
iter: i
41+
pass: str
42+
outlen: 32 -- our H() produces a 32 byte hash value (SHA-256)
43+
}
44+
45+
unless key
46+
return nil, "failed to derive pbkdf2 key: #{err}"
47+
48+
key
49+
elseif pcall -> require "resty.openssl.kdf"
50+
(str, salt, i) ->
51+
openssl_kdf = require "resty.openssl.kdf"
52+
import decode_base64 from require "pgmoon.util"
53+
54+
salt = decode_base64 salt
55+
56+
key, err = openssl_kdf.derive {
57+
type: openssl_kdf.PBKDF2
58+
md: "sha256"
59+
salt: salt
60+
pbkdf2_iter: i
61+
pass: str
62+
outlen: 32 -- our H() produces a 32 byte hash value (SHA-256)
63+
}
64+
65+
unless key
66+
return nil, "failed to derive pbkdf2 key: #{err}"
67+
68+
key
69+
else
70+
-> error "Either luaossl or resty.openssl is required to derive pbkdf2 key"
4871

4972

5073
random_bytes = if pcall -> require "openssl.rand"

0 commit comments

Comments
 (0)