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

PolyVec

class PolyVec
namespace Org.BouncyCastle.Pqc.Crypto.Crystals.Dilithium { internal class PolyVec { internal readonly Poly[] Vec; internal PolyVec(DilithiumEngine engine, int length) { Vec = new Poly[length]; for (int i = 0; i < length; i++) { Vec[i] = new Poly(engine); } } internal void Add(PolyVec v) { for (int i = 0; i < Vec.Length; i++) { Vec[i].Add(v.Vec[i]); } } internal bool CheckNorm(int bound) { for (int i = 0; i < Vec.Length; i++) { if (Vec[i].CheckNorm(bound)) return true; } return false; } internal void CopyTo(PolyVec z) { for (int i = 0; i < Vec.Length; i++) { for (int j = 0; j < 256; j++) { z.Vec[i].Coeffs[j] = Vec[i].Coeffs[j]; } } } internal void ConditionalAddQ() { for (int i = 0; i < Vec.Length; i++) { Vec[i].ConditionalAddQ(); } } internal void Decompose(PolyVec v) { for (int i = 0; i < Vec.Length; i++) { Vec[i].Decompose(v.Vec[i]); } } internal void InverseNttToMont() { for (int i = 0; i < Vec.Length; i++) { Vec[i].InverseNttToMont(); } } internal int MakeHint(PolyVec v0, PolyVec v1) { int num = 0; for (int i = 0; i < Vec.Length; i++) { num += Vec[i].PolyMakeHint(v0.Vec[i], v1.Vec[i]); } return num; } internal void Ntt() { for (int i = 0; i < Vec.Length; i++) { Vec[i].PolyNtt(); } } internal void PackW1(DilithiumEngine engine, byte[] r) { for (int i = 0; i < Vec.Length; i++) { Vec[i].PackW1(r, i * engine.PolyW1PackedBytes); } } internal void PointwisePolyMontgomery(Poly a, PolyVec v) { for (int i = 0; i < Vec.Length; i++) { Vec[i].PointwiseMontgomery(a, v.Vec[i]); } } internal void Power2Round(PolyVec v) { for (int i = 0; i < Vec.Length; i++) { Vec[i].Power2Round(v.Vec[i]); } } internal void Reduce() { for (int i = 0; i < Vec.Length; i++) { Vec[i].ReducePoly(); } } internal void ShiftLeft() { for (int i = 0; i < Vec.Length; i++) { Vec[i].ShiftLeft(); } } internal void Subtract(PolyVec v) { for (int i = 0; i < Vec.Length; i++) { Vec[i].Subtract(v.Vec[i]); } } internal void UniformEta(byte[] seed, ushort nonce) { for (int i = 0; i < Vec.Length; i++) { Poly obj = Vec[i]; ushort num = nonce; nonce = (ushort)(num + 1); obj.UniformEta(seed, num); } } internal void UniformGamma1(byte[] seed, ushort nonce) { for (int i = 0; i < Vec.Length; i++) { Vec[i].UniformGamma1(seed, (ushort)(Vec.Length * nonce + i)); } } internal void UseHint(PolyVec a, PolyVec h) { for (int i = 0; i < Vec.Length; i++) { Vec[i].PolyUseHint(a.Vec[i], h.Vec[i]); } } } }