ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Crypt-Spritz/Spritz.xs
(Generate patch)

Comparing Crypt-Spritz/Spritz.xs (file contents):
Revision 1.7 by root, Sat Jan 10 09:14:53 2015 UTC vs.
Revision 1.9 by root, Tue Jun 30 01:24:43 2015 UTC

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
7typedef spritz_state *Crypt__Spritz; 9typedef 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
101U8 spritz_output (Crypt::Spritz self) 107U8 spritz_output (Crypt::Spritz self)
102 108
103U8 spritz_drip (Crypt::Spritz self) 109U8 spritz_drip (Crypt::Spritz self)
115SV * 121SV *
116new (SV *klass, SV *K, SV *IV = 0) 122new (SV *klass, SV *K, SV *IV = 0)
117 CODE: 123 CODE:
118{ 124{
119 STRLEN k_len ; char *k = SvPVbyte (K , k_len ); 125 STRLEN k_len ; char *k = SvPVbyte (K , k_len );
120 STRLEN iv_len = 0; char *iv = iv ? SvPVbyte (IV, iv_len) : 0; 126 STRLEN iv_len = 0; char *iv = IV ? SvPVbyte (IV, iv_len) : 0;
121 RETVAL = alloc_state (klass); 127 RETVAL = alloc_state (klass);
122 spritz_cipher_xor_init ((spritz_state *)SvPVX (SvRV (RETVAL)), k, k_len, iv, iv_len); 128 spritz_cipher_xor_init ((spritz_state *)SvPVX (SvRV (RETVAL)), k, k_len, iv, iv_len);
123} 129}
124 OUTPUT: 130 OUTPUT:
125 RETVAL 131 RETVAL
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
155MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Cipher::XOR PREFIX = spritz_cipher_xor_ 166MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Cipher::XOR PREFIX = spritz_cipher_xor_
160crypt_inplace (Crypt::Spritz self, SV *I) 171crypt_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
168MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Hash PREFIX = spritz_hash_ 181MODULE = 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
173SV * 186SV *
174spritz_hash_finish (Crypt::Spritz self, STRLEN len) 187spritz_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
215crypt_inplace (Crypt::Spritz self, SV *I) 229crypt_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
223MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::PRNG PREFIX = spritz_prng_ 239MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::PRNG PREFIX = spritz_prng_
224 240
225SV * 241SV *

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines