summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--crypto/src/pqc/crypto/saber/Symmetric.cs135
1 files changed, 69 insertions, 66 deletions
diff --git a/crypto/src/pqc/crypto/saber/Symmetric.cs b/crypto/src/pqc/crypto/saber/Symmetric.cs
index dc47b87bb..bcbe8a9a3 100644
--- a/crypto/src/pqc/crypto/saber/Symmetric.cs
+++ b/crypto/src/pqc/crypto/saber/Symmetric.cs
@@ -3,94 +3,97 @@ using Org.BouncyCastle.Crypto.Digests;
 using Org.BouncyCastle.Crypto.Modes;
 using Org.BouncyCastle.Crypto.Parameters;
 
-namespace Org.BouncyCastle.Pqc.Crypto.Saber;
-
-public abstract class Symmetric
+namespace Org.BouncyCastle.Pqc.Crypto.Saber
 {
 
-    internal abstract void Hash_h(byte[] output, byte[] input, int outputOffset);
-
-    internal abstract void Hash_g(byte[] output, byte[] input);
-
-    internal abstract void Prf(byte[] output, byte[] input, int inLen, int outputLen);
-
-    protected internal class ShakeSymmetric
-        : Symmetric
+    public abstract class Symmetric
     {
 
-        private readonly Sha3Digest sha3Digest256;
-        private readonly Sha3Digest sha3Digest512;
-        private readonly IXof shakeDigest;
+        internal abstract void Hash_h(byte[] output, byte[] input, int outputOffset);
 
-        internal ShakeSymmetric()
-        {
-            shakeDigest = new ShakeDigest(128);
-            sha3Digest256 = new Sha3Digest(256);
-            sha3Digest512 = new Sha3Digest(512);
-        }
+        internal abstract void Hash_g(byte[] output, byte[] input);
 
-        internal override void Hash_h(byte[] output, byte[] input, int outputOffset)
-        {
-            sha3Digest256.BlockUpdate(input, 0, input.Length);
-            sha3Digest256.DoFinal(output, outputOffset);
-        }
+        internal abstract void Prf(byte[] output, byte[] input, int inLen, int outputLen);
 
-        internal override void Hash_g(byte[] output, byte[] input)
+        protected internal class ShakeSymmetric
+            : Symmetric
         {
-            sha3Digest512.BlockUpdate(input, 0, input.Length);
-            sha3Digest512.DoFinal(output, 0);
-        }
 
-        internal override void Prf(byte[] output, byte[] input, int inLen, int outputLen)
-        {
-            shakeDigest.Reset();
-            shakeDigest.BlockUpdate(input, 0, inLen);
-            shakeDigest.OutputFinal(output, 0, outputLen);
-        }
+            private readonly Sha3Digest sha3Digest256;
+            private readonly Sha3Digest sha3Digest512;
+            private readonly IXof shakeDigest;
 
+            internal ShakeSymmetric()
+            {
+                shakeDigest = new ShakeDigest(128);
+                sha3Digest256 = new Sha3Digest(256);
+                sha3Digest512 = new Sha3Digest(512);
+            }
 
-    }
-    internal class AesSymmetric
-        : Symmetric
-    {
+            internal override void Hash_h(byte[] output, byte[] input, int outputOffset)
+            {
+                sha3Digest256.BlockUpdate(input, 0, input.Length);
+                sha3Digest256.DoFinal(output, outputOffset);
+            }
 
-        private readonly Sha256Digest sha256Digest;
-        private readonly Sha512Digest sha512Digest;
+            internal override void Hash_g(byte[] output, byte[] input)
+            {
+                sha3Digest512.BlockUpdate(input, 0, input.Length);
+                sha3Digest512.DoFinal(output, 0);
+            }
 
-        private readonly SicBlockCipher cipher;
+            internal override void Prf(byte[] output, byte[] input, int inLen, int outputLen)
+            {
+                shakeDigest.Reset();
+                shakeDigest.BlockUpdate(input, 0, inLen);
+                shakeDigest.OutputFinal(output, 0, outputLen);
+            }
 
 
-        protected internal AesSymmetric()
-        {
-            sha256Digest = new Sha256Digest();
-            sha512Digest = new Sha512Digest();
-            cipher = new SicBlockCipher(AesUtilities.CreateEngine());
-        }
-        
-        internal override void Hash_h(byte[] output, byte[] input, int outputOffset)
-        {
-            sha256Digest.BlockUpdate(input, 0, input.Length);
-            sha256Digest.DoFinal(output, outputOffset);
         }
 
-        internal override void Hash_g(byte[] output, byte[] input)
+        internal class AesSymmetric
+            : Symmetric
         {
-            sha512Digest.BlockUpdate(input, 0, input.Length);
-            sha512Digest.DoFinal(output, 0);
-        }
 
-        internal override void Prf(byte[] output, byte[] input, int inLen, int outputLen)
-        {
-            ParametersWithIV kp = new ParametersWithIV(new KeyParameter(input, 0, inLen), new byte[16]);
-            cipher.Init(true, kp);
-            byte[] buf = new byte[outputLen];   // TODO: there might be a more efficient way of doing this...
-            for (int i = 0; i < outputLen; i+= 16)
+            private readonly Sha256Digest sha256Digest;
+            private readonly Sha512Digest sha512Digest;
+
+            private readonly SicBlockCipher cipher;
+
+
+            protected internal AesSymmetric()
             {
-                cipher.ProcessBlock(buf, i, output, i);
+                sha256Digest = new Sha256Digest();
+                sha512Digest = new Sha512Digest();
+                cipher = new SicBlockCipher(AesUtilities.CreateEngine());
             }
-        }
 
+            internal override void Hash_h(byte[] output, byte[] input, int outputOffset)
+            {
+                sha256Digest.BlockUpdate(input, 0, input.Length);
+                sha256Digest.DoFinal(output, outputOffset);
+            }
+
+            internal override void Hash_g(byte[] output, byte[] input)
+            {
+                sha512Digest.BlockUpdate(input, 0, input.Length);
+                sha512Digest.DoFinal(output, 0);
+            }
+
+            internal override void Prf(byte[] output, byte[] input, int inLen, int outputLen)
+            {
+                ParametersWithIV kp = new ParametersWithIV(new KeyParameter(input, 0, inLen), new byte[16]);
+                cipher.Init(true, kp);
+                byte[] buf = new byte[outputLen]; // TODO: there might be a more efficient way of doing this...
+                for (int i = 0; i < outputLen; i += 16)
+                {
+                    cipher.ProcessBlock(buf, i, output, i);
+                }
+            }
 
-    }
 
+        }
+
+    }
 }
\ No newline at end of file