56 lines
1.0 KiB
Lua
56 lines
1.0 KiB
Lua
--[[
|
|
implementation of the RC5 cipher in Lua
|
|
|
|
03/11/2022
|
|
Sean Smith
|
|
sean@spacealien.xyz
|
|
|
|
w=word size in bits
|
|
r=number of rounds
|
|
b=key size in bytes
|
|
K=secret key
|
|
u=w/8 (the length of a word in bytes)
|
|
K[] is the key as an array of bytes
|
|
c=length of key in words
|
|
|
|
]]
|
|
|
|
local inspect = require 'inspect'
|
|
|
|
local insert, concat, modf, tostring, char = table.insert, table.concat, math.modf, tostring, string.char
|
|
|
|
local w=64
|
|
local r=24
|
|
local b=16
|
|
local key="globglogabgalab1"
|
|
local u=8 --length of a word in bytes
|
|
--local c=2 (with globglogabgalab1 as the key c should =2)
|
|
local L = {}
|
|
local t = 2 * (r + 1) --the number of round subkeys required
|
|
|
|
--magic constants for 64bit word size (hex)
|
|
local P = 0xb7e151628aed2a6b
|
|
local Q = 0x9e3779b97f4a7c15
|
|
|
|
--break K into words
|
|
--u = w / 8
|
|
c = math.ceil(math.max(b, 1) / u)
|
|
print(c)
|
|
|
|
--convert the key into an array of ints
|
|
local K = {string.byte(key, 1, -1)}
|
|
print(inspect(K))
|
|
L = K
|
|
print(inspect(L))
|
|
|
|
local S = {}
|
|
S[0] = P
|
|
S[1] = 1
|
|
print(t)
|
|
for i = 1, t - 1 do
|
|
S[i] = S[i-1] + Q
|
|
print(S[i])
|
|
i = i + 1
|
|
end
|
|
|