we should not be using 'char' for binary APIs, as the C standard does not specify if it is signed or unsigned, so results may not be consistent