ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/Crypt-Spritz/Spritz.xs
Revision: 1.2
Committed: Sat Jan 10 04:14:17 2015 UTC (9 years, 4 months ago) by root
Branch: MAIN
Changes since 1.1: +8 -9 lines
Log Message:
*** empty log message ***

File Contents

# User Rev Content
1 root 1.1 #include "EXTERN.h"
2     #include "perl.h"
3     #include "XSUB.h"
4    
5     #include "spritz/spritz.c"
6    
7     typedef spritz_state *Crypt__Spritz;
8     #if 0
9     typedef spritz_state *Crypt__Spritz__CIPHER;
10     typedef spritz_state *Crypt__Spritz__CIPHER__XOR;
11     typedef spritz_state *Crypt__Spritz__HASH;
12     typedef spritz_state *Crypt__Spritz__MAC;
13     typedef spritz_state *Crypt__Spritz__AEAD;
14     typedef spritz_state *Crypt__Spritz__AEAD__XOR;
15     #endif
16    
17     static SV *
18     alloc_pv (STRLEN len)
19     {
20     SV *r = newSV (len);
21    
22     sv_upgrade (r, SVt_PV);
23     SvCUR_set (r, len);
24     SvPOK_only (r);
25     SvEND (r)[-1] = 0;
26    
27     return r;
28     }
29    
30     static SV *
31 root 1.2 alloc_state (SV *klass)
32 root 1.1 {
33     SV *r = alloc_pv (sizeof (spritz_state));
34    
35     return sv_bless (newRV_noinc (r), gv_stashsv (klass, GV_ADD));
36     }
37    
38     static spritz_state *
39     get_state (SV *sv)
40     {
41     if (!sv_derived_from (sv, "Crypt::Spritz"))
42     croak ("object is not of type Crypt::Spritz");
43    
44     sv = SvRV (sv);
45    
46     /* this can happen when the objhetc is serialised, which isn't officially supported */
47     if (SvUTF8 (sv))
48     sv_utf8_downgrade (sv, 0);
49    
50     return (spritz_state *)SvPVX (sv);
51     }
52    
53     MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz PREFIX = spritz_
54    
55     PROTOTYPES: ENABLE
56    
57     SV *
58     new (SV *klass)
59     CODE:
60 root 1.2 RETVAL = alloc_state (klass);
61 root 1.1 spritz_init ((spritz_state *)SvPVX (SvRV (RETVAL)));
62     OUTPUT:
63     RETVAL
64    
65     void spritz_init (Crypt::Spritz self)
66    
67     void spritz_update (Crypt::Spritz self)
68    
69     void spritz_whip (Crypt::Spritz self, UV r)
70    
71     void spritz_crush (Crypt::Spritz self)
72    
73     void spritz_shuffle (Crypt::Spritz self)
74    
75     void spritz_absorb_stop (Crypt::Spritz self)
76    
77     void spritz_absorb (Crypt::Spritz self, SV *data)
78     ALIAS:
79 root 1.2 absorb_and_stop = 1
80 root 1.1 CODE:
81     {
82     STRLEN len; char *ptr = SvPVbyte (data, len);
83    
84     spritz_absorb (self, ptr, len);
85    
86     if (ix)
87     spritz_absorb_stop (self);
88     }
89    
90     U8 spritz_output (Crypt::Spritz self)
91    
92     U8 spritz_drip (Crypt::Spritz self)
93    
94     SV *
95     spritz_squeeze (Crypt::Spritz self, STRLEN len)
96     CODE:
97     RETVAL = alloc_pv (len);
98     spritz_squeeze (self, SvPVX (RETVAL), len);
99     OUTPUT:
100     RETVAL
101    
102 root 1.2 MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Cipher::XOR PREFIX = spritz_cipher_xor_
103 root 1.1
104     SV *
105     new (SV *klass, SV *K, SV *IV = 0)
106     CODE:
107     {
108     STRLEN k_len ; char *k = SvPVbyte (K , k_len );
109     STRLEN iv_len = 0; char *iv = iv ? SvPVbyte (IV, iv_len) : 0;
110 root 1.2 RETVAL = alloc_state (klass);
111 root 1.1 spritz_cipher_xor_init ((spritz_state *)SvPVX (SvRV (RETVAL)), k, k_len, iv, iv_len);
112     }
113     OUTPUT:
114     RETVAL
115    
116     SV *
117     crypt (Crypt::Spritz self, SV *I)
118     CODE:
119     {
120     STRLEN len; char *ptr = SvPVbyte (I, len);
121     RETVAL = alloc_pv (len);
122     spritz_cipher_xor_crypt (self, ptr, SvPVX (RETVAL), len);
123     }
124     OUTPUT:
125     RETVAL
126    
127     void
128     crypt_inplace (Crypt::Spritz self, SV *I)
129     CODE:
130     {
131     STRLEN len; char *ptr = SvPVbyte (I, len);
132     spritz_cipher_xor_crypt (self, ptr, ptr, len);
133     }
134    
135 root 1.2 MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::Hash PREFIX = spritz_hash_
136 root 1.1
137     # new == Spritz::new (inherit)
138     # add == absorb (alias)
139    
140     SV *
141     spritz_hash_finish (Crypt::Spritz self, STRLEN len)
142     CODE:
143     RETVAL = alloc_pv (len);
144     spritz_hash_finish (self, SvPVX (RETVAL), len);
145     OUTPUT:
146     RETVAL
147    
148     MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::MAC PREFIX = spritz_mac_
149    
150     SV *
151     new (SV *klass, SV *K)
152     CODE:
153     {
154     STRLEN len; char *ptr = SvPVbyte (K, len);
155 root 1.2 RETVAL = alloc_state (klass);
156 root 1.1 spritz_mac_init ((spritz_state *)SvPVX (SvRV (RETVAL)), ptr, len);
157     }
158     OUTPUT:
159     RETVAL
160    
161     # add == Spritz::HASH::add (inherit)
162     # finish == Spritz::HASH::finish (inherit)
163    
164     MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::AEAD::XOR PREFIX = spritz_aead_xor_
165    
166     # new == Spritz::MAC::new (inherit)
167     # nonce == absorb_and_stop (alias)
168     # associated_data == absorb_and_stop (alias)
169     # finish == Spritz::MAC::finish (alias)
170    
171     SV *
172     crypt (Crypt::Spritz self, SV *I)
173     CODE:
174     {
175     STRLEN len; char *ptr = SvPVbyte (I, len);
176     RETVAL = alloc_pv (len);
177     spritz_aead_xor_crypt (self, ptr, SvPVX (RETVAL), len);
178     }
179     OUTPUT:
180     RETVAL
181    
182     void
183     crypt_inplace (Crypt::Spritz self, SV *I)
184     CODE:
185     {
186     STRLEN len; char *ptr = SvPVbyte (I, len);
187     spritz_aead_xor_crypt (self, ptr, ptr, len);
188     }
189    
190     MODULE = Crypt::Spritz PACKAGE = Crypt::Spritz::PRNG PREFIX = spritz_prng_
191    
192     SV *
193     new (SV *klass, SV *S = 0)
194     CODE:
195     {
196     STRLEN len = 0; char *ptr = S ? SvPVbyte (S, len) : 0;
197 root 1.2 RETVAL = alloc_state (klass);
198 root 1.1 spritz_prng_init ((spritz_state *)SvPVX (SvRV (RETVAL)), ptr, len);
199     }
200     OUTPUT:
201     RETVAL
202    
203     # add == absorb (alias)
204     # get == squeeze (alias)
205