finished key scheduler
This commit is contained in:
parent
a2b900c990
commit
c1dc8b34d7
55
encrypt.lua
55
encrypt.lua
@ -1,55 +0,0 @@
|
||||
--[[
|
||||
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
|
||||
|
88
src/encrypt.lua
Normal file
88
src/encrypt.lua
Normal file
@ -0,0 +1,88 @@
|
||||
--[[
|
||||
implementation of the RC5 cipher in Lua5.1
|
||||
|
||||
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 bit = require 'bit'
|
||||
|
||||
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 key="0000000000000000"
|
||||
local u=8 --length of a word in bytes
|
||||
--local c=2 (with globglogabgalab1 as the key c should =2)
|
||||
local t = 2 * (r + 1) --the number of round subkeys required
|
||||
--convert the key into an array of ints (starts at K[1]
|
||||
local K = {string.byte(key, 1, -1)}
|
||||
local L = {}
|
||||
L = K
|
||||
|
||||
--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(inspect(K))
|
||||
print("LLLLLL")
|
||||
print(inspect(L))
|
||||
]]
|
||||
|
||||
local S = {}
|
||||
S[0] = P --initialize the S array
|
||||
for i = 1, t do
|
||||
S[i] = S[i-1] + Q
|
||||
--print("S[i]")
|
||||
--print(S[i])
|
||||
--print(i)
|
||||
i = i + 1
|
||||
end
|
||||
|
||||
--mixing in the secret key
|
||||
local i, j, A, B = 1, 1, 0, 0 --i flops between 1 and 2
|
||||
for f = 1, 3 * math.max(t,c) do
|
||||
--print(f)
|
||||
--print("heres B")
|
||||
--print(inspect(B))
|
||||
--print("heres A")
|
||||
--print(inspect(A))
|
||||
print("heres L[]")
|
||||
print(inspect(L))
|
||||
--print("heres S[]")
|
||||
--print(inspect(S))
|
||||
--print("heres j")
|
||||
--print(j)
|
||||
--print("heres i")
|
||||
--print(i)
|
||||
S[i] = bit.rol((S[i] + A + B), 3)
|
||||
A = S[i]
|
||||
L[j] = bit.rol((L[j] + A + B), (A + B))
|
||||
B = L[j]
|
||||
i = (i % t) + 1
|
||||
j = (j % c) + 1
|
||||
--[[
|
||||
due to lua prefering arrays starting at 1 instead
|
||||
of zero, you need to add 1 so its filling array 1 and
|
||||
2 instead of 0 and 1
|
||||
]]
|
||||
end
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user