Codebase list libcryptx-perl / run/6384a90b-7e2e-4a64-b58d-643da92d28e4/main inc / CryptX_Checksum_Adler32.xs.inc
run/6384a90b-7e2e-4a64-b58d-643da92d28e4/main

Tree @run/6384a90b-7e2e-4a64-b58d-643da92d28e4/main (Download .tar.gz)

CryptX_Checksum_Adler32.xs.inc @run/6384a90b-7e2e-4a64-b58d-643da92d28e4/main

82e9371
 
da585c2
 
82e9371
5e7056d
82e9371
4a2b9bf
82e9371
 
4a2b9bf
 
82e9371
 
 
 
 
 
 
 
 
 
54ce0c0
 
4a2b9bf
54ce0c0
 
82e9371
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4a2b9bf
 
 
82e9371
 
 
 
 
 
6a1d083
 
 
82e9371
 
6a1d083
b0e1718
 
1e9bd50
6a1d083
 
4a2b9bf
6a1d083
1e9bd50
6a1d083
b0e1718
6a1d083
 
 
 
 
 
 
 
82e9371
 
 
 
 
6a1d083
 
 
 
82e9371
 
6a1d083
 
b0e1718
 
1e9bd50
6a1d083
 
 
 
 
 
 
 
 
 
 
 
1e9bd50
6a1d083
b0e1718
6a1d083
 
 
 
 
 
 
 
82e9371
 
 
MODULE = CryptX         PACKAGE = Crypt::Checksum::Adler32

PROTOTYPES: DISABLE

Crypt::Checksum::Adler32
new(Class)
    CODE:
    {
        Newz(0, RETVAL, 1, adler32_state);
        if (!RETVAL) croak("FATAL: Newz failed");
        adler32_init(RETVAL); /* returns void */
    }
    OUTPUT:
        RETVAL

void
DESTROY(Crypt::Checksum::Adler32 self)
    CODE:
        Safefree(self);

void
reset(Crypt::Checksum::Adler32 self)
    PPCODE:
    {
        adler32_init(self); /* returns void */
        XPUSHs(ST(0)); /* return self */
    }

Crypt::Checksum::Adler32
clone(Crypt::Checksum::Adler32 self)
    CODE:
        Newz(0, RETVAL, 1, adler32_state);
        if (!RETVAL) croak("FATAL: Newz failed");
        Copy(self, RETVAL, 1, adler32_state);
    OUTPUT:
        RETVAL

void
add(Crypt::Checksum::Adler32 self, ...)
    PPCODE:
    {
        STRLEN inlen;
        int i;
        unsigned char *in;
        for(i=1; i<items; i++) {
          in = (unsigned char *)SvPVbyte(ST(i), inlen);
          if (inlen > 0) {
            adler32_update(self, in, (unsigned long)inlen); /* returns void */
          }
        }
        XPUSHs(ST(0)); /* return self */
    }

SV *
digest(Crypt::Checksum::Adler32 self)
    ALIAS:
        hexdigest = 1
        intdigest = 2
    CODE:
    {
        int rv;
        unsigned char hash[4];
        char out[9];
        unsigned long outlen = 9;
        unsigned int ui32;

        adler32_finish(self, hash, 4); /* returns void */
        if (ix == 1) {
          rv = base16_encode(hash, 4, out, &outlen, 0);
          if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        else if (ix == 2) {
          LOAD32H(ui32, hash);
          RETVAL = newSVuv(ui32);
        }
        else {
          RETVAL = newSVpvn((char *) hash, 4);
        }
    }
    OUTPUT:
        RETVAL

SV *
adler32_data(...)
    ALIAS:
        adler32_data_hex = 1
        adler32_data_int = 2
    CODE:
    {
        adler32_state st;
        int rv, j;
        unsigned char hash[4], *in;
        char out[9];
        unsigned long outlen = 9;
        unsigned int ui32;
        STRLEN inlen;

        adler32_init(&st);
        for(j = 0; j < items; j++) {
          in = (unsigned char *)SvPVbyte(ST(j), inlen);
          if (inlen > 0) {
            adler32_update(&st, in, (unsigned long)inlen); /* returns void */
          }
        }
        adler32_finish(&st, hash, 4); /* returns void */
        if (ix == 1) {
          rv = base16_encode(hash, 4, out, &outlen, 0);
          if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
          RETVAL = newSVpvn(out, outlen);
        }
        else if (ix == 2) {
          LOAD32H(ui32, hash);
          RETVAL = newSVuv(ui32);
        }
        else {
          RETVAL = newSVpvn((char *) hash, 4);
        }
    }
    OUTPUT:
        RETVAL