71 lines
1.0 KiB
Lua
71 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
|
|
local concat
|
|
local tostring
|
|
local modf
|
|
|
|
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 = {}
|
|
|
|
--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)}
|
|
for i = 1, #K do
|
|
print(K[i])
|
|
end
|
|
|
|
--for i = b-1, down to 0
|
|
--becuse lua starts tables at 1 this is changed to
|
|
L[c] = 0
|
|
for i = b, 1, -1 do
|
|
if L[i/u] == nil then
|
|
L[i/u] = 0
|
|
end
|
|
L[i/u] = (L[i/u] << 8) + K[i]
|
|
print(i)
|
|
end
|
|
|
|
print(inspect(L))
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|