File Coverage

inc/CryptX_Mac_PMAC.xs.inc
Criterion Covered Total %
statement 69 74 93.2
branch 44 78 56.4
condition n/a
subroutine n/a
pod n/a
total 113 152 74.3


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