blob: edc0d0238d2acc98d9ab19988b929ab2232d4eb5 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
package org.spongycastle.pqc.crypto.rainbow;
import org.spongycastle.crypto.CipherParameters;
public class RainbowParameters
implements CipherParameters
{
/**
* DEFAULT PARAMS
*/
/*
* Vi = vinegars per layer whereas n is vu (vu = 33 = n) such that
*
* v1 = 6; o1 = 12-6 = 6
*
* v2 = 12; o2 = 17-12 = 5
*
* v3 = 17; o3 = 22-17 = 5
*
* v4 = 22; o4 = 33-22 = 11
*
* v5 = 33; (o5 = 0)
*/
private final int[] DEFAULT_VI = {6, 12, 17, 22, 33};
private int[] vi;// set of vinegar vars per layer.
/**
* Default Constructor The elements of the array containing the number of
* Vinegar variables in each layer are set to the default values here.
*/
public RainbowParameters()
{
this.vi = this.DEFAULT_VI;
}
/**
* Constructor with parameters
*
* @param vi The elements of the array containing the number of Vinegar
* variables per layer are set to the values of the input array.
*/
public RainbowParameters(int[] vi)
{
this.vi = vi;
try
{
checkParams();
}
catch (Exception e)
{
e.printStackTrace();
}
}
private void checkParams()
throws Exception
{
if (vi == null)
{
throw new Exception("no layers defined.");
}
if (vi.length > 1)
{
for (int i = 0; i < vi.length - 1; i++)
{
if (vi[i] >= vi[i + 1])
{
throw new Exception(
"v[i] has to be smaller than v[i+1]");
}
}
}
else
{
throw new Exception(
"Rainbow needs at least 1 layer, such that v1 < v2.");
}
}
/**
* Getter for the number of layers
*
* @return the number of layers
*/
public int getNumOfLayers()
{
return this.vi.length - 1;
}
/**
* Getter for the number of all the polynomials in Rainbow
*
* @return the number of the polynomials
*/
public int getDocLength()
{
return vi[vi.length - 1] - vi[0];
}
/**
* Getter for the array containing the number of Vinegar-variables per layer
*
* @return the numbers of vinegars per layer
*/
public int[] getVi()
{
return this.vi;
}
}
|