線形変換
定数行列 と 暗号文 の積
diagonal vector を使って
例
- 線形変換 を考える
- matrix-vector multiplication

- CMult depth: 1
- n-1 rotation

- shift network で実現
アルゴリズム:線形変換
function lin_trans(m::Vector{Float64}, u::Matrix{Float64})::Vector{Float64}
# U: n x n
n = length(m)
u_0 = diagonal(u, 0)
m′ = mul(m, u_0)
for ℓ = 1:n - 1
# ℓth diagonal vector of U
u_ℓ = diagonal(u, ℓ)
m′ = add(m′, mul(rotate(m, ℓ), u_ℓ))
end
m′
end(let m (enc (ecd (vec 1 2 3)))
(let u (vec 0 0 1 0 1 0 1 0 0)
; u0 = (0 1 0), u1 = (0 0 1), u2 = (1 0 0)
(rep + l 3
(* (L m l) (diag u l))
)))ops: cmult + add + rot