線形変換

algorithm

定数行列 と 暗号文 の積

diagonal vector を使って

  • 線形変換 を考える
  • matrix-vector multiplication
  • CMult depth: 1
  • n-1 rotation

アルゴリズム:線形変換

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

応用