Skip to content

Commit 547de69

Browse files
author
royb
committed
forgot to push new Symmetric class in SABER
1 parent bf2da3c commit 547de69

File tree

1 file changed

+102
-0
lines changed

1 file changed

+102
-0
lines changed
Lines changed: 102 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,102 @@
1+
package org.bouncycastle.pqc.crypto.saber;
2+
3+
import org.bouncycastle.crypto.Digest;
4+
import org.bouncycastle.crypto.Xof;
5+
import org.bouncycastle.crypto.digests.SHA256Digest;
6+
import org.bouncycastle.crypto.digests.SHA3Digest;
7+
import org.bouncycastle.crypto.digests.SHA512Digest;
8+
import org.bouncycastle.crypto.digests.SHAKEDigest;
9+
import org.bouncycastle.crypto.engines.AESEngine;
10+
import org.bouncycastle.crypto.modes.SICBlockCipher;
11+
import org.bouncycastle.crypto.params.KeyParameter;
12+
import org.bouncycastle.crypto.params.ParametersWithIV;
13+
import sun.security.provider.SHA;
14+
15+
abstract class Symmetric
16+
{
17+
abstract void hash_h(byte[] out, byte[] in, int outOffset);
18+
19+
abstract void hash_g(byte[] out, byte[] in);
20+
21+
abstract void prf(byte[] out, byte[] in, int inLen, int outLen);
22+
23+
static class ShakeSymmetric
24+
extends Symmetric
25+
{
26+
27+
private final SHA3Digest sha3Digest256;
28+
private final SHA3Digest sha3Digest512;
29+
private final Xof shakeDigest;
30+
ShakeSymmetric()
31+
{
32+
shakeDigest = new SHAKEDigest(128);
33+
sha3Digest256 = new SHA3Digest(256);
34+
sha3Digest512 = new SHA3Digest(512);
35+
}
36+
37+
@Override
38+
void hash_h(byte[] out, byte[] in, int outOffset)
39+
{
40+
sha3Digest256.update(in, 0, in.length);
41+
sha3Digest256.doFinal(out, outOffset);
42+
}
43+
44+
@Override
45+
void hash_g(byte[] out, byte[] in)
46+
{
47+
sha3Digest512.update(in, 0, in.length);
48+
sha3Digest512.doFinal(out, 0);
49+
}
50+
51+
@Override
52+
void prf(byte[] out, byte[] in, int inLen, int outLen)
53+
{
54+
shakeDigest.reset();
55+
shakeDigest.update(in, 0, inLen);
56+
shakeDigest.doFinal(out, 0, outLen);
57+
}
58+
59+
60+
}
61+
static class AesSymmetric
62+
extends Symmetric
63+
{
64+
65+
private final SHA256Digest sha256Digest;
66+
private final SHA512Digest sha512Digest;
67+
68+
private final SICBlockCipher cipher;
69+
70+
71+
AesSymmetric()
72+
{
73+
sha256Digest = new SHA256Digest();
74+
sha512Digest = new SHA512Digest();
75+
this.cipher = new SICBlockCipher(new AESEngine());
76+
}
77+
@Override
78+
void hash_h(byte[] out, byte[] in, int outOffset)
79+
{
80+
sha256Digest.update(in, 0, in.length);
81+
sha256Digest.doFinal(out, outOffset);
82+
}
83+
84+
@Override
85+
void hash_g(byte[] out, byte[] in)
86+
{
87+
sha512Digest.update(in, 0, in.length);
88+
sha512Digest.doFinal(out, 0);
89+
}
90+
91+
@Override
92+
void prf(byte[] out, byte[] in, int inLen, int outLen)
93+
{
94+
ParametersWithIV kp = new ParametersWithIV(new KeyParameter(in, 0, 32 ), new byte[16]);
95+
cipher.init(true, kp);
96+
byte[] buf = new byte[outLen]; // TODO: there might be a more efficient way of doing this...
97+
cipher.processBytes(buf, 0, outLen, out, 0);
98+
}
99+
100+
101+
}
102+
}

0 commit comments

Comments
 (0)