Codebase list libcryptx-perl / 543c1e9b-9bbc-47df-9309-5f6cdec0f044/main inc / CryptX_Mac_BLAKE2b.xs.inc
543c1e9b-9bbc-47df-9309-5f6cdec0f044/main

Tree @543c1e9b-9bbc-47df-9309-5f6cdec0f044/main (Download .tar.gz)

CryptX_Mac_BLAKE2b.xs.inc @543c1e9b-9bbc-47df-9309-5f6cdec0f044/main

33bdb40
 
da585c2
 
33bdb40
 
 
e8df411
33bdb40
 
 
 
 
 
 
 
 
8bd1e9d
33bdb40
 
8bd1e9d
4a2b9bf
 
 
 
33bdb40
 
 
 
 
 
 
 
 
 
 
 
8bd1e9d
33bdb40
8bd1e9d
33bdb40
 
 
 
71011c2
 
33bdb40
71011c2
33bdb40
 
 
71011c2
 
 
8bd1e9d
71011c2
 
33bdb40
71011c2
33bdb40
 
 
 
71011c2
 
 
 
33bdb40
 
 
611fb98
33bdb40
1e9bd50
33bdb40
611fb98
8bd1e9d
33bdb40
611fb98
71011c2
b0e1718
71011c2
 
 
 
b0e1718
71011c2
 
 
 
b0e1718
71011c2
 
 
 
71c5bc4
71011c2
b3740fd
 
 
 
 
71011c2
 
 
 
 
b3740fd
 
 
71011c2
b3740fd
71011c2
b3740fd
 
 
71011c2
b3740fd
 
71c5bc4
71011c2
 
 
 
71c5bc4
71011c2
 
 
 
 
b3740fd
 
71011c2
b0e1718
71011c2
 
 
 
b0e1718
71011c2
b0e1718
71011c2
 
b0e1718
71011c2
b0e1718
71011c2
 
 
 
b3740fd
 
 
MODULE = CryptX         PACKAGE = Crypt::Mac::BLAKE2b

PROTOTYPES: DISABLE

### BEWARE - GENERATED FILE, DO NOT EDIT MANUALLY!

Crypt::Mac::BLAKE2b
new(Class, unsigned long size, SV * key)
    CODE:
    {
        STRLEN k_len=0;
        unsigned char *k=NULL;
        int rv;

        if (!SvPOK(key)) croak("FATAL: key must be string/buffer scalar");
        k = (unsigned char *) SvPVbyte(key, k_len);

        Newz(0, RETVAL, 1, blake2bmac_state);
        if (!RETVAL) croak("FATAL: Newz failed");

        rv = blake2bmac_init(RETVAL, size, k, (unsigned long)k_len);
        if (rv != CRYPT_OK) {
          Safefree(RETVAL);
          croak("FATAL: blake2b_init failed: %s", error_to_string(rv));
        }
    }
    OUTPUT:
        RETVAL

void
DESTROY(Crypt::Mac::BLAKE2b self)
    CODE:
        Safefree(self);

Crypt::Mac::BLAKE2b
clone(Crypt::Mac::BLAKE2b self)
    CODE:
        Newz(0, RETVAL, 1, blake2bmac_state);
        if (!RETVAL) croak("FATAL: Newz failed");
        Copy(self, RETVAL, 1, blake2bmac_state);
    OUTPUT:
        RETVAL

void
add(Crypt::Mac::BLAKE2b self, ...)
    PPCODE:
    {
        int rv, i;
        STRLEN in_data_len;
        unsigned char *in_data;

        for(i = 1; i < items; i++) {
          in_data = (unsigned char *)SvPVbyte(ST(i), in_data_len);
          if (in_data_len > 0) {
            rv = blake2bmac_process(self, in_data, (unsigned long)in_data_len);
            if (rv != CRYPT_OK) croak("FATAL: blake2b_process failed: %s", error_to_string(rv));
          }
        }
        XPUSHs(ST(0)); /* return self */
    }

SV *
mac(Crypt::Mac::BLAKE2b self)
    ALIAS:
        hexmac  = 1
        b64mac  = 2
        b64umac = 3
    CODE:
    {
        unsigned char mac[MAXBLOCKSIZE];
        unsigned long maclen, outlen;
        int rv;
        char out[MAXBLOCKSIZE*2+1];

        maclen = sizeof(mac);
        rv = blake2bmac_done(self, mac, &maclen);
        if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));
        outlen = sizeof(out);
        if (ix == 3) {
          rv = base64url_encode(mac, maclen, out, &outlen);
          if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        if (ix == 2) {
          rv = base64_encode(mac, maclen, out, &outlen);
          if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        if (ix == 1) {
          rv = base16_encode(mac, maclen, out, &outlen, 0);
          if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        else {
          RETVAL = newSVpvn((char * )mac, maclen);
        }
    }
    OUTPUT:
        RETVAL

SV *
blake2b(unsigned long size, SV * key, ...)
    ALIAS:
        blake2b_hex  = 1
        blake2b_b64  = 2
        blake2b_b64u = 3
    CODE:
    {
        STRLEN inlen, klen;
        unsigned char *in;
        unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
        int rv, i;
        unsigned char mac[MAXBLOCKSIZE];
        unsigned long len = sizeof(mac), outlen;
        char out[MAXBLOCKSIZE*2];
        blake2bmac_state st;

        if (size < len) len = size;
        rv = blake2bmac_init(&st, len, k, (unsigned long)klen);
        if (rv != CRYPT_OK) croak("FATAL: blake2bmac_init failed: %s", error_to_string(rv));
        for (i = 2; i < items; i++) {
          in = (unsigned char *)SvPVbyte(ST(i), inlen);
          if (inlen > 0) {
            rv = blake2bmac_process(&st, in, (unsigned long)inlen);
            if (rv != CRYPT_OK) croak("FATAL: blake2bmac_process failed: %s", error_to_string(rv));
          }
        }
        rv = blake2bmac_done(&st, mac, &len);
        if (rv != CRYPT_OK) croak("FATAL: blake2bmac_done failed: %s", error_to_string(rv));

        outlen = sizeof(out);
        if (ix == 3) {
          rv = base64url_encode(mac, len, out, &outlen);
          if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn((char *) out, outlen);
        }
        else if (ix == 2) {
          rv = base64_encode(mac, len, out, &outlen);
          if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        else if (ix == 1) {
          rv = base16_encode(mac, len, out, &outlen, 0);
          if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        else {
          RETVAL = newSVpvn((char *) mac, len);
        }
    }
    OUTPUT:
        RETVAL