summaryrefslogtreecommitdiff
path: root/inc/CryptX_Mac_F9.xs.inc
diff options
context:
space:
mode:
Diffstat (limited to 'inc/CryptX_Mac_F9.xs.inc')
-rw-r--r--inc/CryptX_Mac_F9.xs.inc89
1 files changed, 89 insertions, 0 deletions
diff --git a/inc/CryptX_Mac_F9.xs.inc b/inc/CryptX_Mac_F9.xs.inc
index d7f51dc0..a956d817 100644
--- a/inc/CryptX_Mac_F9.xs.inc
+++ b/inc/CryptX_Mac_F9.xs.inc
@@ -135,3 +135,92 @@ hexmac(Crypt::Mac::F9 self)
}
OUTPUT:
RETVAL
+
+SV *
+f9(char * cipher_name, SV * key, SV * data)
+ CODE:
+ {
+ STRLEN inlen, klen;
+ unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
+ unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
+ int rv;
+ unsigned char mac[MAXBLOCKSIZE];
+ unsigned long len = sizeof(mac);
+ int id = _find_cipher(cipher_name);
+ if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
+ rv = f9_memory(id, k, klen, in, inlen, mac, &len);
+ if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
+ RETVAL = newSVpvn((char *) mac, len);
+ }
+ OUTPUT:
+ RETVAL
+
+SV *
+f9_hex(char * cipher_name, SV * key, SV * data)
+ CODE:
+ {
+ STRLEN inlen, klen;
+ unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
+ unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
+ int rv;
+ unsigned char mac[MAXBLOCKSIZE];
+ unsigned long len = sizeof(mac), outlen;
+ char out[MAXBLOCKSIZE*2];
+ int id = _find_cipher(cipher_name);
+ if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
+ rv = f9_memory(id, k, klen, in, inlen, mac, &len);
+ if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
+ outlen = sizeof(out);
+ rv = _base16_encode(mac, len, (unsigned char *)out, &outlen);
+ if (rv != CRYPT_OK) croak("FATAL: base16_encode failed: %s", error_to_string(rv));
+ RETVAL = newSVpvn((char *) out, outlen);
+ }
+ OUTPUT:
+ RETVAL
+
+SV *
+f9_b64(char * cipher_name, SV * key, SV * data)
+ CODE:
+ {
+ STRLEN inlen, klen;
+ unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
+ unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
+ int rv;
+ unsigned char mac[MAXBLOCKSIZE];
+ unsigned long len = sizeof(mac), outlen;
+ char out[MAXBLOCKSIZE*2];
+ int id = _find_cipher(cipher_name);
+ if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
+ rv = f9_memory(id, k, klen, in, inlen, mac, &len);
+ if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
+ outlen = sizeof(out);
+ rv = base64_encode(mac, len, (unsigned char *)out, &outlen);
+ if (rv != CRYPT_OK) croak("FATAL: base64_encode failed: %s", error_to_string(rv));
+ RETVAL = newSVpvn((char *) out, outlen);
+
+ }
+ OUTPUT:
+ RETVAL
+
+SV *
+f9_b64u(char * cipher_name, SV * key, SV * data)
+ CODE:
+ {
+ STRLEN inlen, klen;
+ unsigned char *in = (unsigned char *)SvPVbyte(data, inlen);
+ unsigned char *k = (unsigned char *)SvPVbyte(key, klen);
+ int rv;
+ unsigned char mac[MAXBLOCKSIZE];
+ unsigned long len = sizeof(mac), outlen;
+ char out[MAXBLOCKSIZE*2];
+ int id = _find_cipher(cipher_name);
+ if (id == -1) croak("FATAL: find_cipher failed for '%s'", cipher_name);
+ rv = f9_memory(id, k, klen, in, inlen, mac, &len);
+ if (rv != CRYPT_OK) croak("FATAL: f9_memory failed: %s", error_to_string(rv));
+ outlen = sizeof(out);
+ rv = base64url_encode(mac, len, (unsigned char *)out, &outlen);
+ if (rv != CRYPT_OK) croak("FATAL: base64url_encode failed: %s", error_to_string(rv));
+ RETVAL = newSVpvn((char *) out, outlen);
+ }
+ OUTPUT:
+ RETVAL