1 | #include "EXTERN.h" |
1 | #include "EXTERN.h" |
2 | #include "perl.h" |
2 | #include "perl.h" |
3 | #include "XSUB.h" |
3 | #include "XSUB.h" |
|
|
4 | |
|
|
5 | #include "perlmulticore.h" |
4 | |
6 | |
5 | #include "spritz/spritz.c" |
7 | #include "spritz/spritz.c" |
6 | |
8 | |
7 | typedef spritz_state *Crypt__Spritz; |
9 | typedef spritz_state *Crypt__Spritz; |
8 | #if 0 |
10 | #if 0 |
… | |
… | |
90 | absorb_and_stop = 1 |
92 | absorb_and_stop = 1 |
91 | CODE: |
93 | CODE: |
92 | { |
94 | { |
93 | STRLEN len; char *ptr = SvPVbyte (data, len); |
95 | STRLEN len; char *ptr = SvPVbyte (data, len); |
94 | |
96 | |
|
|
97 | if (len > 400) perlinterp_release (); |
|
|
98 | |
95 | spritz_absorb (self, ptr, len); |
99 | spritz_absorb (self, ptr, len); |
96 | |
100 | |
97 | if (ix) |
101 | if (ix) |
98 | spritz_absorb_stop (self); |
102 | spritz_absorb_stop (self); |
|
|
103 | |
|
|
104 | if (len > 400) perlinterp_acquire (); |
99 | } |
105 | } |
100 | |
106 | |
101 | U8 spritz_output (Crypt::Spritz self) |
107 | U8 spritz_output (Crypt::Spritz self) |
102 | |
108 | |
103 | U8 spritz_drip (Crypt::Spritz self) |
109 | U8 spritz_drip (Crypt::Spritz self) |
… | |
… | |
144 | spritz_aead_decrypt, |
150 | spritz_aead_decrypt, |
145 | spritz_aead_xor_crypt |
151 | spritz_aead_xor_crypt |
146 | }; |
152 | }; |
147 | { |
153 | { |
148 | STRLEN len; char *ptr = SvPVbyte (I, len); |
154 | STRLEN len; char *ptr = SvPVbyte (I, len); |
|
|
155 | char *retval; |
|
|
156 | STRLEN slow_len = ix < 3 ? 4000 : 400; |
149 | RETVAL = alloc_pv (len); |
157 | RETVAL = alloc_pv (len); |
|
|
158 | retval = SvPVX (RETVAL); |
|
|
159 | if (len > slow_len) perlinterp_release (); |
150 | f[ix](self, ptr, SvPVX (RETVAL), len); |
160 | f[ix](self, ptr, retval, len); |
|
|
161 | if (len > slow_len) perlinterp_acquire (); |
151 | } |
162 | } |
152 | OUTPUT: |
163 | OUTPUT: |
153 | RETVAL |
164 | RETVAL |
154 | |
165 | |
155 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Cipher::XOR PREFIX = spritz_cipher_xor_ |
166 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Cipher::XOR PREFIX = spritz_cipher_xor_ |
… | |
… | |
160 | crypt_inplace (Crypt::Spritz self, SV *I) |
171 | crypt_inplace (Crypt::Spritz self, SV *I) |
161 | CODE: |
172 | CODE: |
162 | sv_force_normal (I); |
173 | sv_force_normal (I); |
163 | { |
174 | { |
164 | STRLEN len; char *ptr = SvPVbyte (I, len); |
175 | STRLEN len; char *ptr = SvPVbyte (I, len); |
|
|
176 | if (len > 4000) perlinterp_release (); |
165 | spritz_cipher_xor_crypt (self, ptr, ptr, len); |
177 | spritz_cipher_xor_crypt (self, ptr, ptr, len); |
|
|
178 | if (len > 4000) perlinterp_acquire (); |
166 | } |
179 | } |
167 | |
180 | |
168 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Hash PREFIX = spritz_hash_ |
181 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Hash PREFIX = spritz_hash_ |
169 | |
182 | |
170 | # new == Spritz::new (inherit) |
183 | # new == Spritz::new (inherit) |
171 | # add == absorb (alias) |
184 | # add == absorb (alias) |
172 | |
185 | |
173 | SV * |
186 | SV * |
174 | spritz_hash_finish (Crypt::Spritz self, STRLEN len) |
187 | spritz_hash_finish (Crypt::Spritz self, STRLEN len) |
175 | CODE: |
188 | CODE: |
|
|
189 | char *retval; |
176 | RETVAL = alloc_pv (len); |
190 | RETVAL = alloc_pv (len); |
177 | spritz_hash_finish (self, SvPVX (RETVAL), len); |
191 | spritz_hash_finish (self, SvPVX (RETVAL), len); |
178 | OUTPUT: |
192 | OUTPUT: |
179 | RETVAL |
193 | RETVAL |
180 | |
194 | |
… | |
… | |
215 | crypt_inplace (Crypt::Spritz self, SV *I) |
229 | crypt_inplace (Crypt::Spritz self, SV *I) |
216 | CODE: |
230 | CODE: |
217 | sv_force_normal (I); |
231 | sv_force_normal (I); |
218 | { |
232 | { |
219 | STRLEN len; char *ptr = SvPVbyte (I, len); |
233 | STRLEN len; char *ptr = SvPVbyte (I, len); |
|
|
234 | if (len > 400) perlinterp_release (); |
220 | spritz_aead_xor_crypt (self, ptr, ptr, len); |
235 | spritz_aead_xor_crypt (self, ptr, ptr, len); |
|
|
236 | if (len > 400) perlinterp_acquire (); |
221 | } |
237 | } |
222 | |
238 | |
223 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::PRNG PREFIX = spritz_prng_ |
239 | MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::PRNG PREFIX = spritz_prng_ |
224 | |
240 | |
225 | SV * |
241 | SV * |