diff options
Diffstat (limited to 'lib/mpi/mpi-bit.c')
-rw-r--r-- | lib/mpi/mpi-bit.c | 162 |
1 files changed, 0 insertions, 162 deletions
diff --git a/lib/mpi/mpi-bit.c b/lib/mpi/mpi-bit.c index 0c505361da19..568724804f29 100644 --- a/lib/mpi/mpi-bit.c +++ b/lib/mpi/mpi-bit.c | |||
@@ -54,165 +54,3 @@ unsigned mpi_get_nbits(MPI a) | |||
54 | return n; | 54 | return n; |
55 | } | 55 | } |
56 | EXPORT_SYMBOL_GPL(mpi_get_nbits); | 56 | EXPORT_SYMBOL_GPL(mpi_get_nbits); |
57 | |||
58 | /**************** | ||
59 | * Test whether bit N is set. | ||
60 | */ | ||
61 | int mpi_test_bit(MPI a, unsigned n) | ||
62 | { | ||
63 | unsigned limbno, bitno; | ||
64 | mpi_limb_t limb; | ||
65 | |||
66 | limbno = n / BITS_PER_MPI_LIMB; | ||
67 | bitno = n % BITS_PER_MPI_LIMB; | ||
68 | |||
69 | if (limbno >= a->nlimbs) | ||
70 | return 0; /* too far left: this is a 0 */ | ||
71 | limb = a->d[limbno]; | ||
72 | return (limb & (A_LIMB_1 << bitno)) ? 1 : 0; | ||
73 | } | ||
74 | |||
75 | /**************** | ||
76 | * Set bit N of A. | ||
77 | */ | ||
78 | int mpi_set_bit(MPI a, unsigned n) | ||
79 | { | ||
80 | unsigned limbno, bitno; | ||
81 | |||
82 | limbno = n / BITS_PER_MPI_LIMB; | ||
83 | bitno = n % BITS_PER_MPI_LIMB; | ||
84 | |||
85 | if (limbno >= a->nlimbs) { /* resize */ | ||
86 | if (a->alloced >= limbno) | ||
87 | if (mpi_resize(a, limbno + 1) < 0) | ||
88 | return -ENOMEM; | ||
89 | a->nlimbs = limbno + 1; | ||
90 | } | ||
91 | a->d[limbno] |= (A_LIMB_1 << bitno); | ||
92 | return 0; | ||
93 | } | ||
94 | |||
95 | /**************** | ||
96 | * Set bit N of A. and clear all bits above | ||
97 | */ | ||
98 | int mpi_set_highbit(MPI a, unsigned n) | ||
99 | { | ||
100 | unsigned limbno, bitno; | ||
101 | |||
102 | limbno = n / BITS_PER_MPI_LIMB; | ||
103 | bitno = n % BITS_PER_MPI_LIMB; | ||
104 | |||
105 | if (limbno >= a->nlimbs) { /* resize */ | ||
106 | if (a->alloced >= limbno) | ||
107 | if (mpi_resize(a, limbno + 1) < 0) | ||
108 | return -ENOMEM; | ||
109 | a->nlimbs = limbno + 1; | ||
110 | } | ||
111 | a->d[limbno] |= (A_LIMB_1 << bitno); | ||
112 | for (bitno++; bitno < BITS_PER_MPI_LIMB; bitno++) | ||
113 | a->d[limbno] &= ~(A_LIMB_1 << bitno); | ||
114 | a->nlimbs = limbno + 1; | ||
115 | return 0; | ||
116 | } | ||
117 | |||
118 | /**************** | ||
119 | * clear bit N of A and all bits above | ||
120 | */ | ||
121 | void mpi_clear_highbit(MPI a, unsigned n) | ||
122 | { | ||
123 | unsigned limbno, bitno; | ||
124 | |||
125 | limbno = n / BITS_PER_MPI_LIMB; | ||
126 | bitno = n % BITS_PER_MPI_LIMB; | ||
127 | |||
128 | if (limbno >= a->nlimbs) | ||
129 | return; /* not allocated, so need to clear bits :-) */ | ||
130 | |||
131 | for (; bitno < BITS_PER_MPI_LIMB; bitno++) | ||
132 | a->d[limbno] &= ~(A_LIMB_1 << bitno); | ||
133 | a->nlimbs = limbno + 1; | ||
134 | } | ||
135 | |||
136 | /**************** | ||
137 | * Clear bit N of A. | ||
138 | */ | ||
139 | void mpi_clear_bit(MPI a, unsigned n) | ||
140 | { | ||
141 | unsigned limbno, bitno; | ||
142 | |||
143 | limbno = n / BITS_PER_MPI_LIMB; | ||
144 | bitno = n % BITS_PER_MPI_LIMB; | ||
145 | |||
146 | if (limbno >= a->nlimbs) | ||
147 | return; /* don't need to clear this bit, it's to far to left */ | ||
148 | a->d[limbno] &= ~(A_LIMB_1 << bitno); | ||
149 | } | ||
150 | |||
151 | /**************** | ||
152 | * Shift A by N bits to the right | ||
153 | * FIXME: should use alloc_limb if X and A are same. | ||
154 | */ | ||
155 | int mpi_rshift(MPI x, MPI a, unsigned n) | ||
156 | { | ||
157 | mpi_ptr_t xp; | ||
158 | mpi_size_t xsize; | ||
159 | |||
160 | xsize = a->nlimbs; | ||
161 | x->sign = a->sign; | ||
162 | if (RESIZE_IF_NEEDED(x, (size_t) xsize) < 0) | ||
163 | return -ENOMEM; | ||
164 | xp = x->d; | ||
165 | |||
166 | if (xsize) { | ||
167 | mpihelp_rshift(xp, a->d, xsize, n); | ||
168 | MPN_NORMALIZE(xp, xsize); | ||
169 | } | ||
170 | x->nlimbs = xsize; | ||
171 | return 0; | ||
172 | } | ||
173 | |||
174 | /**************** | ||
175 | * Shift A by COUNT limbs to the left | ||
176 | * This is used only within the MPI library | ||
177 | */ | ||
178 | int mpi_lshift_limbs(MPI a, unsigned int count) | ||
179 | { | ||
180 | const int n = a->nlimbs; | ||
181 | mpi_ptr_t ap; | ||
182 | int i; | ||
183 | |||
184 | if (!count || !n) | ||
185 | return 0; | ||
186 | |||
187 | if (RESIZE_IF_NEEDED(a, n + count) < 0) | ||
188 | return -ENOMEM; | ||
189 | |||
190 | ap = a->d; | ||
191 | for (i = n - 1; i >= 0; i--) | ||
192 | ap[i + count] = ap[i]; | ||
193 | for (i = 0; i < count; i++) | ||
194 | ap[i] = 0; | ||
195 | a->nlimbs += count; | ||
196 | return 0; | ||
197 | } | ||
198 | |||
199 | /**************** | ||
200 | * Shift A by COUNT limbs to the right | ||
201 | * This is used only within the MPI library | ||
202 | */ | ||
203 | void mpi_rshift_limbs(MPI a, unsigned int count) | ||
204 | { | ||
205 | mpi_ptr_t ap = a->d; | ||
206 | mpi_size_t n = a->nlimbs; | ||
207 | unsigned int i; | ||
208 | |||
209 | if (count >= n) { | ||
210 | a->nlimbs = 0; | ||
211 | return; | ||
212 | } | ||
213 | |||
214 | for (i = 0; i < n - count; i++) | ||
215 | ap[i] = ap[i + count]; | ||
216 | ap[i] = 0; | ||
217 | a->nlimbs -= count; | ||
218 | } | ||