aboutsummaryrefslogtreecommitdiffstats
path: root/test/lua/unit/lua_util.maybe_encrypt_decrypt_header.lua
blob: ef31f5e9b05f297f4f2171482609a9144adfc143 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
local util = require 'lua_util'

context("Lua util - maybe encrypt/decrypt header", function()
    test("Encrypt/Decrypt header with nonce", function()
        local header = tostring('X-Spamd-Result')
        local settings = {
            prefix = 'prefix',
            prefix_encrypt = true,
            prefix_key = 'key',
            prefix_nonce = 'nonce'
        }

        local encrypted_header = util.maybe_encrypt_header(header, settings, settings.prefix)
        if encrypted_header == header or encrypted_header == nil then
            assert_true(false, 'Failed to encrypt header')
        end

        local text = string.sub(tostring(encrypted_header), 6)
        local decrypted_header = util.maybe_decrypt_header(text, settings, settings.prefix)
        if decrypted_header == encrypted_header or decrypted_header == nil then
            assert_true(false, 'Failed to decrypt header')
        end

        if tostring(header) == tostring(decrypted_header) then
            assert_true(true, 'Succeed to confirm equality of original header and decrypted header')
        else
            assert_rspamd_table_eq_sorted({actual = { decrypted_header },
                                           expect = { header }})
        end
    end)

    test("Encrypt/Decrypt header without nonce", function()
        local header = tostring('X-Spamd-Result')
        local settings = {
            prefix = 'prefix',
            prefix_encrypt = true,
            prefix_key = 'key'
        }

        local encrypted_header = util.maybe_encrypt_header(header, settings, settings.prefix)
        if encrypted_header == header or encrypted_header == nil then
            assert_true(false, 'Failed to encrypt header')
        end

        local nonce = string.sub(tostring(encrypted_header), 1, 24)
        local text = string.sub(tostring(encrypted_header), 25)
        local decrypted_header = util.maybe_decrypt_header(text, settings, settings.prefix, nonce)

        if decrypted_header == encrypted_header or decrypted_header == nil then
            assert_true(false, 'Failed to decrypt header')
        end

        if tostring(header) == tostring(decrypted_header) then
            assert_true(true, 'Succeed to confirm equality of original header and decrypted header')
        else
            assert_rspamd_table_eq_sorted({actual = { decrypted_header },
                                           expect = { header }})
        end
    end)
end)