Skip to content

Commit d510c68

Browse files
committed
src/openssl.c: Add kdf.derive
1 parent 3370b2d commit d510c68

File tree

6 files changed

+721
-0
lines changed

6 files changed

+721
-0
lines changed

doc/luaossl.tex

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1431,6 +1431,37 @@ \section{Modules}
14311431
\end{Module}
14321432

14331433

1434+
\begin{Module}{openssl.kdf}
1435+
1436+
Binds OpenSSL's Key Derivation Function interfaces.
1437+
1438+
\subsubsection[\fn{kdf.derive}]{\fn{kdf.derive($options$)}}
1439+
1440+
Derive a key given the table of $options$, different KDF types require different options. Accepted options are:
1441+
1442+
\begin{ctabular}{ c | c | p{5in}}
1443+
field & type & description\\\hline
1444+
.type & string & key derivation algorithm---``PBKDF2'', ``scrypt'', ``hkdf'', ``TLS-PRF1'' or other depending on your version of OpenSSL \\
1445+
.outlen & number & the desired output size \\
1446+
.pass & string & password \\
1447+
.salt & string & salt \\
1448+
.iter & number & iteration count \\
1449+
.md & string & digest to use \\
1450+
.key & string & key \\
1451+
.secret & string & TLS1-PRF secret \\
1452+
.seed & string & TLS1-PRF seed \\
1453+
.hkdf\_mode & string & the HKDF mode to use, one of ``extract\_and\_expand'', ``extract\_only'' or ``expand\_only'' \\
1454+
.info & string & HKDF info value \\
1455+
.scrypt\_N & number & scrypt ``N'' parameter to use \\
1456+
.scrypt\_r & number & scrypt ``r'' parameter to use \\
1457+
.scrypt\_p & number & scrypt ``p'' parameter to use \\
1458+
.scrypt\_maxmem\_bytes & number & amount of RAM key derivation may maximally use (in bytes)
1459+
\end{ctabular}
1460+
1461+
1462+
\end{Module}
1463+
1464+
14341465
\chapter{Examples}
14351466

14361467
These examples and others are made available under examples/ in the source tree.

regress/95-kdf.lua

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/usr/bin/env lua
2+
3+
local regress = require "regress"
4+
local kdf = require "openssl.kdf"
5+
6+
local function hexstring(str)
7+
return (str:gsub("..", function(b) return string.char(tonumber(b, 16)) end))
8+
end
9+
10+
-- Scrypt Example
11+
regress.check(kdf.derive{
12+
type = "scrypt";
13+
pass = "";
14+
salt = "";
15+
N = 16;
16+
r = 1;
17+
p = 1;
18+
outlen = 64;
19+
} == hexstring"77d6576238657b203b19ca42c18a0497f16b4844e3074ae8dfdffa3fede21442fcd0069ded0948f8326a753a0fc81f17e8d3e0fb2e0d3628cf35e20c38d18906",
20+
"scrypt output doesn't match test vector")
21+
22+
-- PBKDF2 Example
23+
regress.check(kdf.derive{
24+
type = "PBKDF2";
25+
pass = "password";
26+
salt = "salt";
27+
iter = 1;
28+
md = "sha1";
29+
outlen = 20;
30+
} == hexstring"0c60c80f961f0e71f3a9b524af6012062fe037a6",
31+
"PBKDF2 output doesn't match test vector")
32+
33+
-- TLS1-PRF Example
34+
regress.check(kdf.derive{
35+
type = "TLS1-PRF";
36+
md = "md5-sha1";
37+
secret = hexstring"bded7fa5c1699c010be23dd06ada3a48349f21e5f86263d512c0c5cc379f0e780ec55d9844b2f1db02a96453513568d0";
38+
seed = "master secret"
39+
.. hexstring"e5acaf549cd25c22d964c0d930fa4b5261d2507fad84c33715b7b9a864020693"
40+
.. hexstring"135e4d557fdf3aa6406d82975d5c606a9734c9334b42136e96990fbd5358cdb2";
41+
outlen = 48;
42+
} == hexstring"2f6962dfbc744c4b2138bb6b3d33054c5ecc14f24851d9896395a44ab3964efc2090c5bf51a0891209f46c1e1e998f62",
43+
"TLS1-PRF output doesn't match test vector")
44+
45+
regress.say "OK"

regress/regress.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ local require = require -- may be overloaded by regress.require
33
local regress = {
44
openssl = require"openssl",
55
bignum = require"openssl.bignum",
6+
kdf = require"openssl.kdf",
67
pkey = require"openssl.pkey",
78
x509 = require"openssl.x509",
89
name = require"openssl.x509.name",

src/GNUmakefile

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ MODS$(1)_$(d) = \
8080
$$(DESTDIR)$(3)/openssl.lua \
8181
$$(DESTDIR)$(3)/openssl/auxlib.lua \
8282
$$(DESTDIR)$(3)/openssl/bignum.lua \
83+
$$(DESTDIR)$(3)/openssl/kdf.lua \
8384
$$(DESTDIR)$(3)/openssl/ocsp/basic.lua \
8485
$$(DESTDIR)$(3)/openssl/ocsp/response.lua \
8586
$$(DESTDIR)$(3)/openssl/pkey.lua \

0 commit comments

Comments
 (0)