string Converter::xorHexAgainstHex(string input) { generateHex(); vector<uint8_t> xorElement = generateHex(input); uint32_t length = _hex.size(); if (length != xorElement.size()) { return string("Sizes of HexElements must match"); } string payload; for (uint32_t i = 0; i < length; i++) { uint8_t item = _hex[i] ^xorElement[i]; payload.push_back(hex_chars[item]); } return payload; }
int main ( int argc, char *argv[] ) { if ( argc != 2 ) {/* argc should be 2 for correct execution */ printf( "usage: %s [up to 31 character string]", argv[0] ); exit(EXIT_FAILURE); } int end = 0; char inputText[64]; char* lowerString = inputText; char* upperString = NULL; //Extract up to 31 characters. strncpy(inputText,argv[1],31); inputText[31] = 0; //null terminate //Work out the length of the string unsigned int length = strlen(inputText); unsigned int upperLength = 0; unsigned int i; for(i = length+1; i < 64; i++){ inputText[i] = 0xFF; //pad the page with 0xFF. } //Check if we need to split into two lines /*if (length > 15) { upperString = &inputText[16]; upperLength = length - 15; length = length - upperLength; } length++;*/ length = 16; upperLength = 16; upperString = &inputText[16]; //Generate the lower hex string char intelHexString[44]; generateHex(intelHexString,lowerString,length,0x1F00); printf("%s\n",intelHexString); if (upperString != NULL){ generateHex(intelHexString,upperString,upperLength,0x1F10); printf("%s\n",intelHexString); } generateHex(intelHexString,&inputText[32],16,0x1F20); printf("%s\n",intelHexString); generateHex(intelHexString,&inputText[48],16,0x1F30); printf("%s\n",intelHexString); printf(":00000001FF\n"); exit(0); }
string Converter::getHex() { if (!_hexGenerated) { _hex = generateHex(_input); _hexGenerated = true; } string payload; for (uint8_t u: _hex) { payload.push_back(hex_chars[u]); } return payload; }
string Converter::hexToStringWithXor(uint8_t xorInput) { generateHex(); string payload; uint32_t length = _hex.size(); for (int i = 0; i < length;) { uint8_t item = _hex[i++] << 4; if (i < length) { item |= _hex[i++]; } payload.push_back(item ^ xorInput); } return payload; }
void Converter::generateHex() { if (!_hexGenerated) { _hex = generateHex(_input); _hexGenerated = true; } }