string CryptoManager::makeKey(const string& aLock) { if(aLock.size() < 3) return Util::emptyString; u_int8_t* temp = new u_int8_t[aLock.length()]; u_int8_t v1; size_t extra=0; v1 = (u_int8_t)(aLock[0]^5); v1 = (u_int8_t)(((v1 >> 4) | (v1 << 4)) & 0xff); temp[0] = v1; string::size_type i; for(i = 1; i<aLock.length(); i++) { v1 = (u_int8_t)(aLock[i]^aLock[i-1]); v1 = (u_int8_t)(((v1 >> 4) | (v1 << 4))&0xff); temp[i] = v1; if(isExtra(temp[i])) extra++; } temp[0] = (u_int8_t)(temp[0] ^ temp[aLock.length()-1]); if(isExtra(temp[0])) { extra++; } string tmp = keySubst(temp, aLock.length(), extra); delete[] temp; return tmp; }
string CryptoManager::makeKey(const string& aLock) { if(aLock.size() < 3) return Util::emptyString; boost::scoped_array<uint8_t> temp(new uint8_t[aLock.length()]); uint8_t v1; size_t extra=0; v1 = (uint8_t)(aLock[0]^5); v1 = (uint8_t)(((v1 >> 4) | (v1 << 4)) & 0xff); temp[0] = v1; string::size_type i; for(i = 1; i<aLock.length(); i++) { v1 = (uint8_t)(aLock[i]^aLock[i-1]); v1 = (uint8_t)(((v1 >> 4) | (v1 << 4))&0xff); temp[i] = v1; if(isExtra(temp[i])) extra++; } temp[0] = (uint8_t)(temp[0] ^ temp[aLock.length()-1]); if(isExtra(temp[0])) { extra++; } return keySubst(&temp[0], aLock.length(), extra); }
string CryptoManager::keySubst(const u_int8_t* aKey, size_t len, size_t n) { u_int8_t* temp = new u_int8_t[len + n * 10]; size_t j=0; for(size_t i = 0; i<len; i++) { if(isExtra(aKey[i])) { temp[j++] = '/'; temp[j++] = '%'; temp[j++] = 'D'; temp[j++] = 'C'; temp[j++] = 'N'; switch(aKey[i]) { case 0: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '0'; break; case 5: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '5'; break; case 36: temp[j++] = '0'; temp[j++] = '3'; temp[j++] = '6'; break; case 96: temp[j++] = '0'; temp[j++] = '9'; temp[j++] = '6'; break; case 124: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '4'; break; case 126: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '6'; break; } temp[j++] = '%'; temp[j++] = '/'; } else { temp[j++] = aKey[i]; } } string tmp((char*)temp, j); delete[] temp; return tmp; }
string CryptoManager::keySubst(const uint8_t* aKey, size_t len, size_t n) { boost::scoped_array<uint8_t> temp(new uint8_t[len + n * 10]); size_t j=0; for(size_t i = 0; i<len; i++) { if(isExtra(aKey[i])) { temp[j++] = '/'; temp[j++] = '%'; temp[j++] = 'D'; temp[j++] = 'C'; temp[j++] = 'N'; switch(aKey[i]) { case 0: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '0'; break; case 5: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '5'; break; case 36: temp[j++] = '0'; temp[j++] = '3'; temp[j++] = '6'; break; case 96: temp[j++] = '0'; temp[j++] = '9'; temp[j++] = '6'; break; case 124: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '4'; break; case 126: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '6'; break; } temp[j++] = '%'; temp[j++] = '/'; } else { temp[j++] = aKey[i]; } } return string((const char*)&temp[0], j); }
string CryptoManager::keySubst(const u_int8_t* aKey, size_t len, size_t n) { AutoArray<u_int8_t> temp(len + n * 10); size_t j=0; for(size_t i = 0; i<len; i++) { if(isExtra(aKey[i])) { temp[j++] = '/'; temp[j++] = '%'; temp[j++] = 'D'; temp[j++] = 'C'; temp[j++] = 'N'; switch(aKey[i]) { case 0: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '0'; break; case 5: temp[j++] = '0'; temp[j++] = '0'; temp[j++] = '5'; break; case 36: temp[j++] = '0'; temp[j++] = '3'; temp[j++] = '6'; break; case 96: temp[j++] = '0'; temp[j++] = '9'; temp[j++] = '6'; break; case 124: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '4'; break; case 126: temp[j++] = '1'; temp[j++] = '2'; temp[j++] = '6'; break; } temp[j++] = '%'; temp[j++] = '/'; } else { temp[j++] = aKey[i]; } } return string((char*)(u_int8_t*)temp, j); }