File Coverage

inc/CryptX_Mac_Pelican.xs.inc
Criterion Covered Total %
statement 66 71 92.9
branch 42 74 56.7
condition n/a
subroutine n/a
pod n/a
total 108 145 74.4


line stmt bran cond sub pod time code
1             MODULE = CryptX PACKAGE = Crypt::Mac::Pelican
2              
3             PROTOTYPES: DISABLE
4              
5             ### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!
6              
7             Crypt::Mac::Pelican
8             new(Class, SV * key)
9             CODE:
10             {
11 31           STRLEN k_len=0;
12 31           unsigned char *k=NULL;
13             int rv;
14              
15 31 50         if (!SvPOK_spec(key)) croak("FATAL: key must be string/buffer scalar");
    50          
    0          
    0          
    0          
16 31           k = (unsigned char *) SvPVbyte(key, k_len);
17              
18 31           Newz(0, RETVAL, 1, struct cryptx_mac_pelican_struct);
19 31 50         if (!RETVAL) croak("FATAL: Newz failed");
20              
21 31           rv = pelican_init(&RETVAL->state, k, (unsigned long)k_len);
22 31 50         if (rv != CRYPT_OK) {
23 0           Safefree(RETVAL);
24 0           croak("FATAL: pelican_init failed: %s", error_to_string(rv));
25             }
26 31           RETVAL->finalized = 0;
27             }
28             OUTPUT:
29             RETVAL
30              
31             void
32             DESTROY(Crypt::Mac::Pelican self)
33             CODE:
34             {
35 31           zeromem(&self->state, sizeof(pelican_state));
36 31           Safefree(self);
37             }
38              
39             Crypt::Mac::Pelican
40             clone(Crypt::Mac::Pelican self)
41             CODE:
42 0           Newz(0, RETVAL, 1, struct cryptx_mac_pelican_struct);
43 0 0         if (!RETVAL) croak("FATAL: Newz failed");
44 0           Copy(self, RETVAL, 1, struct cryptx_mac_pelican_struct);
45             OUTPUT:
46             RETVAL
47              
48             void
49             add(Crypt::Mac::Pelican self, ...)
50             PPCODE:
51             {
52             int rv, i;
53             STRLEN in_data_len;
54             unsigned char *in_data;
55              
56 36 100         if (self->finalized) croak("FATAL: MAC object already finalized");
57 80 100         for(i = 1; i < items; i++) {
58 45           in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
59 45 100         if (in_data_len > 0) {
60 37           rv = pelican_process(&self->state, in_data, (unsigned long)in_data_len);
61 37 50         if (rv != CRYPT_OK) croak("FATAL: pelican_process failed: %s", error_to_string(rv));
62             }
63             }
64 35 50         XPUSHs(ST(0)); /* return self */
65             }
66              
67             SV *
68             mac(Crypt::Mac::Pelican self)
69             ALIAS:
70             hexmac = 1
71             b64mac = 2
72             b64umac = 3
73             CODE:
74             {
75             unsigned char mac[MAXBLOCKSIZE];
76             unsigned long maclen, outlen;
77             int rv;
78             char out[MAXBLOCKSIZE*2+1];
79              
80 32 100         if (self->finalized) croak("FATAL: MAC object already finalized");
81 31           maclen = 16;
82 31           rv = pelican_done(&self->state, mac);
83 31 50         if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
84 31           self->finalized = 1;
85 31           outlen = sizeof(out);
86 31 100         if (ix == 3) {
87 1           rv = base64url_encode(mac, maclen, out, &outlen);
88 1 50         if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
89 1           RETVAL = newSVpvn(out, outlen);
90             }
91 30 100         else if (ix == 2) {
92 1           rv = base64_encode(mac, maclen, out, &outlen);
93 1 50         if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
94 1           RETVAL = newSVpvn(out, outlen);
95             }
96 29 100         else if (ix == 1) {
97 15           rv = base16_encode(mac, maclen, out, &outlen, 0);
98 15 50         if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
99 15           RETVAL = newSVpvn(out, outlen);
100             }
101             else {
102 14           RETVAL = newSVpvn((char * )mac, maclen);
103             }
104 31           zeromem(mac, sizeof(mac));
105             }
106             OUTPUT:
107             RETVAL
108              
109             SV *
110             pelican(SV * key, ...)
111             ALIAS:
112             pelican_hex = 1
113             pelican_b64 = 2
114             pelican_b64u = 3
115             CODE:
116             {
117             STRLEN inlen, klen;
118             unsigned char *in;
119 52 50         if (!SvPOK_spec(key)) croak("FATAL: key must be string/buffer scalar");
    50          
    0          
    0          
    0          
120 52           unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
121             int rv, i;
122             unsigned char mac[MAXBLOCKSIZE];
123 52           unsigned long len = sizeof(mac), outlen;
124             char out[MAXBLOCKSIZE*2+1];
125             pelican_state st;
126              
127 52           len = 16;
128 52           rv = pelican_init(&st, k, (unsigned long)klen);
129 52 50         if (rv != CRYPT_OK) croak("FATAL: pelican_init failed: %s", error_to_string(rv));
130 112 100         for (i = 1; i < items; i++) {
131 60           in = (unsigned char *)SvPVbyte(ST(i), inlen);
132 60 100         if (inlen > 0) {
133 44           rv = pelican_process(&st, in, (unsigned long)inlen);
134 44 50         if (rv != CRYPT_OK) croak("FATAL: pelican_process failed: %s", error_to_string(rv));
135             }
136             }
137 52           rv = pelican_done(&st, mac);
138 52 50         if (rv != CRYPT_OK) croak("FATAL: pelican_done failed: %s", error_to_string(rv));
139              
140 52           outlen = sizeof(out);
141 52 100         if (ix == 3) {
142 13           rv = base64url_encode(mac, len, out, &outlen);
143 13 50         if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
144 13           RETVAL = newSVpvn((char *) out, outlen);
145             }
146 39 100         else if (ix == 2) {
147 13           rv = base64_encode(mac, len, out, &outlen);
148 13 50         if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
149 13           RETVAL = newSVpvn(out, outlen);
150             }
151 26 100         else if (ix == 1) {
152 13           rv = base16_encode(mac, len, out, &outlen, 0);
153 13 50         if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
154 13           RETVAL = newSVpvn(out, outlen);
155             }
156             else {
157 13           RETVAL = newSVpvn((char *) mac, len);
158             }
159 52           zeromem(mac, sizeof(mac));
160             }
161             OUTPUT:
162             RETVAL