<PackageReference Include="BouncyCastle.Cryptography" Version="2.4.0" />

PolyVecK

class PolyVecK
namespace Org.BouncyCastle.Pqc.Crypto.Crystals.Dilithium { internal class PolyVecK { public readonly Poly[] Vec; private readonly DilithiumEngine Engine; private readonly int K; public PolyVecK(DilithiumEngine Engine) { this.Engine = Engine; K = Engine.K; Vec = new Poly[K]; for (int i = 0; i < K; i++) { Vec[i] = new Poly(Engine); } } public void UniformEta(byte[] seed, ushort nonce) { ushort num = nonce; for (int i = 0; i < K; i++) { Poly obj = Vec[i]; ushort num2 = num; num = (ushort)(num2 + 1); obj.UniformEta(seed, num2); } } public void Reduce() { for (int i = 0; i < K; i++) { Vec[i].ReducePoly(); } } public void Ntt() { for (int i = 0; i < K; i++) { Vec[i].PolyNtt(); } } public void InverseNttToMont() { for (int i = 0; i < K; i++) { Vec[i].InverseNttToMont(); } } public void AddPolyVecK(PolyVecK b) { for (int i = 0; i < K; i++) { Vec[i].AddPoly(b.Vec[i]); } } public void Subtract(PolyVecK v) { for (int i = 0; i < K; i++) { Vec[i].Subtract(v.Vec[i]); } } public void ConditionalAddQ() { for (int i = 0; i < K; i++) { Vec[i].ConditionalAddQ(); } } public void Power2Round(PolyVecK v) { for (int i = 0; i < K; i++) { Vec[i].Power2Round(v.Vec[i]); } } public void Decompose(PolyVecK v) { for (int i = 0; i < K; i++) { Vec[i].Decompose(v.Vec[i]); } } public void PackW1(byte[] r) { for (int i = 0; i < K; i++) { Vec[i].PackW1(r, i * Engine.PolyW1PackedBytes); } } public void PointwisePolyMontgomery(Poly a, PolyVecK v) { for (int i = 0; i < K; i++) { Vec[i].PointwiseMontgomery(a, v.Vec[i]); } } public bool CheckNorm(int bound) { for (int i = 0; i < K; i++) { if (Vec[i].CheckNorm(bound)) return true; } return false; } public int MakeHint(PolyVecK v0, PolyVecK v1) { int num = 0; for (int i = 0; i < K; i++) { num += Vec[i].PolyMakeHint(v0.Vec[i], v1.Vec[i]); } return num; } public void UseHint(PolyVecK a, PolyVecK h) { for (int i = 0; i < K; i++) { Vec[i].PolyUseHint(a.Vec[i], h.Vec[i]); } } public void ShiftLeft() { for (int i = 0; i < K; i++) { Vec[i].ShiftLeft(); } } } }