]> Dogcows Code - chaz/p5-File-KDBX-XS/blob - XS.xs
Add CowREFCNT as a utility function
[chaz/p5-File-KDBX-XS] / XS.xs
1 #define PERL_NO_GET_CONTEXT
2 #include "EXTERN.h"
3 #include "perl.h"
4 #include "XSUB.h"
5 #include "ppport.h"
6
7 #include "tomcrypt.h"
8
9 MODULE = File::KDBX::XS PACKAGE = File::KDBX::Util
10
11 PROTOTYPES: DISABLE
12
13 SV*
14 CowREFCNT(SV* sv)
15 CODE:
16 #ifdef SV_COW_REFCNT_MAX
17 if (SvIsCOW(sv)) XSRETURN_IV(0 < SvLEN(sv) ? CowREFCNT(sv) : 0);
18 #endif
19 XSRETURN_UNDEF;
20 OUTPUT:
21 RETVAL
22
23 MODULE = File::KDBX::XS PACKAGE = File::KDBX::KDF::AES
24
25 PROTOTYPES: DISABLE
26
27 SV*
28 _transform_half_xs(const char* key, const char* seed, unsigned int rounds)
29 CODE:
30 symmetric_key skey;
31
32 unsigned char work[] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
33 Copy(seed, work, 1, work);
34
35 aes_setup(key, 32, 14, &skey);
36 for (unsigned int i = 0; i < rounds; ++i) {
37 aes_ecb_encrypt(work, work, &skey);
38 }
39
40 SV* result = newSVpvn(work, sizeof(work));
41
42 Zero(&skey, 1, skey);
43 Zero(work, 1, work);
44
45 RETVAL = result;
46 OUTPUT:
47 RETVAL
This page took 0.031057 seconds and 4 git commands to generate.