summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt')
-rw-r--r--Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt116
1 files changed, 116 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt b/Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt
new file mode 100644
index 00000000000..dd423e4839f
--- /dev/null
+++ b/Master/texmf-dist/tex/context/base/mkxl/libs-imp-openssl.lmt
@@ -0,0 +1,116 @@
+if not modules then modules = { } end modules ['libs-imp-openssl'] = {
+ version = 1.001,
+ comment = "companion to luat-lib.mkxl",
+ author = "Hans Hagen, PRAGMA-ADE, Hasselt NL",
+ copyright = "PRAGMA ADE / ConTeXt Development Team",
+ license = "see context related readme files"
+}
+
+local type = type
+local dirname = file.dirname
+
+local libname = "openssl"
+local libfiles = os.name == "windows"
+ and { "libcrypto-3-x64", "libssl-3-x64" }
+ or { "libcrypto", "libssl" }
+
+local openssllib = resolvers.libraries.validoptional(libname)
+
+if not openssllib then return end
+
+local openssl_sign = openssllib.sign
+local openssl_verify = openssllib.verify
+local openssl_getversion = openssllib.getversion
+
+local report = logs.reporter(libname)
+
+local function okay()
+ if resolvers.libraries.optionalloaded(libname,libfiles) then
+ -- openssllib.initialize()
+ okay = function() return true end
+ else
+ okay = function() return false end
+ end
+ return okay()
+end
+
+local messages = {
+ "invalid certificate file",
+ "invalid certificate",
+ "invalid private key",
+ "invalid data file",
+ "invalid signature",
+ "unable to open output file",
+ "unable to reset file",
+ "unable to save signature",
+ "incomplete specification",
+ "library is unitialized",
+}
+
+-- this : datafile = "oeps.tmp"
+-- or that : data = io.loaddata("oeps.tmp")
+-- mandate : certfile = "cert.pem"
+-- mandate : password = "test"
+-- optional : resultfile = "oeps.sig"
+
+local function sign(specification)
+ if okay() then
+ local t = type(specification)
+ if t == "table" then
+ local result, message = openssl_sign(specification)
+ if result then
+ return true, message
+ else
+ report(messages[message] or "unknown error")
+ end
+ else
+ report("invalid argument")
+ end
+ else
+ report("no openssl library loaded")
+ end
+ return false
+end
+
+local function verify(specification)
+ if okay() then
+ local t = type(specification)
+ if t == "table" then
+ local result, message = openssl_verify(specification)
+ if result then
+ return true, message
+ else
+ report(messages[message] or "unknown error")
+ end
+ else
+ report("invalid argument")
+ end
+ else
+ report("no openssl library loaded")
+ end
+ return false
+end
+
+local function getversion()
+ return okay() and openssl_getversion()
+end
+
+local openssl = {
+ getversion = getversion,
+ sign = sign,
+ verify = verify,
+ libfiles = libfiles,
+ libfile = libfiles[1],
+ libpath = dirname(libfiles[1]),
+}
+
+package.loaded[libname] = openssl
+
+return openssl
+
+-- local result, message = openssl.sign {
+-- datafile = "oeps.pdf",
+-- certfile = "cert.pem",
+-- password = "test",
+-- resultfile = "oeps.xxx",
+-- }