File Coverage

inc/CryptX_Mac_BLAKE2b.xs.inc
Criterion Covered Total %
statement 68 71 95.7
branch 55 76 72.3
condition n/a
subroutine n/a
pod n/a
total 123 147 83.6


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