Skip to content

Commit 8eaf1a4

Browse files
committed
src/openssl.c: Add kdf.derive
1 parent c5bf3d5 commit 8eaf1a4

File tree

6 files changed

+770
-0
lines changed

6 files changed

+770
-0
lines changed

doc/luaossl.tex

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

14591459

1460+
\begin{Module}{openssl.kdf}
1461+
1462+
Binds OpenSSL's Key Derivation Function interfaces.
1463+
1464+
\subsubsection[\fn{kdf.derive}]{\fn{kdf.derive($options$)}}
1465+
1466+
Derive a key given the table of $options$, different KDF types require different options. Accepted options are:
1467+
1468+
\begin{ctabular}{ c | c | p{5in}}
1469+
field & type & description\\\hline
1470+
.type & string & key derivation algorithm---``PBKDF2'', ``id-scrypt'', ``hkdf'', ``TLS-PRF1'' or other depending on your version of OpenSSL \\
1471+
.outlen & number & the desired output size \\
1472+
.pass & string & password \\
1473+
.salt & string & salt \\
1474+
.iter & number & iteration count \\
1475+
.md & string & digest to use \\
1476+
.key & string & key \\
1477+
.maxmem\_bytes & number & amount of RAM key derivation may maximally use (in bytes) \\
1478+
.secret & string & TLS1-PRF secret \\
1479+
.seed & string & TLS1-PRF seed \\
1480+
.hkdf\_mode & string & the HKDF mode to use, one of ``extract\_and\_expand'', ``extract\_only'' or ``expand\_only'' \\
1481+
.info & string & HKDF info value \\
1482+
.N & number & scrypt ``N'' parameter to use \\
1483+
.r & number & scrypt ``r'' parameter to use \\
1484+
.p & number & scrypt ``p'' parameter to use
1485+
\end{ctabular}
1486+
1487+
1488+
\end{Module}
1489+
1490+
14601491
\chapter{Examples}
14611492

14621493
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 = "id-scrypt"; -- the nid short-name is id-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)