Перейти к содержимому

Шифрование и подпись

Криптографические операции: шифрование, HMAC, JWT и деривация ключей. Адаптировано для использования в workflow.

local crypto = require("crypto")
local bytes, err = crypto.random.bytes(32)
ПараметрТипОписание
lengthintegerКоличество байт (1 – 1 048 576)

Возвращает: string, error

local str, err = crypto.random.string(32)
local str, err = crypto.random.string(32, "0123456789abcdef")
ПараметрТипОписание
lengthintegerДлина строки (1 – 1 048 576)
charsetstring?Набор символов (по умолчанию буквы и цифры)

Возвращает: string, error

local id, err = crypto.random.uuid()

Возвращает: string, error

local hex, err = crypto.hmac.sha256(key, data)
ПараметрТипОписание
keystringКлюч HMAC
datastringДанные для аутентификации

Возвращает: string, error

local hex, err = crypto.hmac.sha512(key, data)
ПараметрТипОписание
keystringКлюч HMAC
datastringДанные для аутентификации

Возвращает: string, error

local encrypted, err = crypto.encrypt.aes(data, key)
local encrypted, err = crypto.encrypt.aes(data, key, aad)
ПараметрТипОписание
datastringОткрытый текст
keystring16, 24 или 32 байта (AES-128/192/256)
aadstring?Дополнительные аутентифицируемые данные

Возвращает: string, error — nonce в начале результата

local encrypted, err = crypto.encrypt.chacha20(data, key)
local encrypted, err = crypto.encrypt.chacha20(data, key, aad)
ПараметрТипОписание
datastringОткрытый текст
keystringРовно 32 байта
aadstring?Дополнительные аутентифицируемые данные

Возвращает: string, error

local plaintext, err = crypto.decrypt.aes(encrypted, key)
local plaintext, err = crypto.decrypt.aes(encrypted, key, aad)
ПараметрТипОписание
datastringЗашифрованные данные из encrypt.aes
keystringТот же ключ, что при шифровании
aadstring?Должен совпадать с AAD при шифровании

Возвращает: string, error

local plaintext, err = crypto.decrypt.chacha20(encrypted, key)
local plaintext, err = crypto.decrypt.chacha20(encrypted, key, aad)
ПараметрТипОписание
datastringЗашифрованные данные из encrypt.chacha20
keystringТот же ключ, что при шифровании
aadstring?Должен совпадать с AAD при шифровании

Возвращает: string, error

local token, err = crypto.jwt.encode(payload, secret)
local token, err = crypto.jwt.encode(payload, secret, "HS256")
local token, err = crypto.jwt.encode(payload, private_key_pem, "RS256")
ПараметрТипОписание
payloadtableJWT claims (поле _header для пользовательского заголовка)
keystringСекрет (HMAC) или приватный ключ PEM (RSA)
algstring?HS256, HS384, HS512, RS256 (по умолчанию HS256)

Возвращает: string, error

local claims, err = crypto.jwt.verify(token, secret)
local claims, err = crypto.jwt.verify(token, secret, "HS256", false)
local claims, err = crypto.jwt.verify(token, public_key_pem, "RS256")
ПараметрТипОписание
tokenstringJWT-токен для проверки
keystringСекрет (HMAC) или публичный ключ PEM (RSA)
algstring?Ожидаемый алгоритм (по умолчанию HS256)
require_expboolean?Проверять срок действия (по умолчанию true)

Возвращает: table, error

local key, err = crypto.pbkdf2(password, salt, iterations, key_length)
local key, err = crypto.pbkdf2(password, salt, iterations, key_length, "sha512")
ПараметрТипОписание
passwordstringПароль или парольная фраза
saltstringСоль
iterationsintegerКоличество итераций (максимум 10 000 000)
key_lengthintegerЖелаемая длина ключа в байтах
hashstring?sha256 или sha512 (по умолчанию sha256)

Возвращает: string, error

local equal = crypto.constant_time_compare(a, b)
ПараметрТипОписание
astringПервая строка
bstringВторая строка

Возвращает: boolean

СитуацияТипПовтор
Неверная длинаerrors.INVALIDнет
Пустой ключerrors.INVALIDнет
Неверный размер ключаerrors.INVALIDнет
Ошибка расшифрованияerrors.INTERNALнет
Токен просроченerrors.INTERNALнет

Подробнее см. Обработка ошибок.