DELIMITER $$ CREATE OR REPLACE DEFINER=`root`@`localhost` FUNCTION `util`.`stringXor`(vString MEDIUMBLOB, vConst TINYINT UNSIGNED) RETURNS mediumblob DETERMINISTIC NO SQL BEGIN /** * Returns XOR of binary string and an 8-bit constant. */ DECLARE vLen, vPos INT UNSIGNED; DECLARE vResult MEDIUMBLOB; SET vLen = LENGTH(vString); SET vPos = 1; SET vResult = ''; WHILE vPos <= vLen DO SET vResult = CONCAT(vResult, LPAD(HEX( ORD(SUBSTR(vString, vPos, 1)) ^ vConst), 2, '0')); SET vPos = vPos + 1; END WHILE; RETURN UNHEX(vResult); END$$ DELIMITER ;