string SolitaireCrypto::decrypt() { if (keystream.length() != ciphertext.length()) { cleartext.assign(""); return ""; } string output(""); char keywork; char cipherwork; char outwork; for(unsigned int i=0; i<keystream.length(); i++) { keywork=charCodeAt(keystream[i]); keywork=(keywork-64)%26; cipherwork=charCodeAt(ciphertext[i]); cipherwork=(cipherwork-64)%26; outwork=(cipherwork-keywork)%26; if(outwork<0) {outwork=26+outwork;} outwork=outwork+64; if(outwork==64) {outwork=90;} output += fromCharCode(outwork); } cleartext.assign(output); return output; }
string SolitaireCrypto::encrypt() { if (keystream.length() != cleartext.length()) { ciphertext.assign(""); return ""; } string output(""); char keywork; char clearwork; char outwork; for(unsigned int i=0; i<keystream.length(); i++) { keywork=charCodeAt(keystream[i]); keywork=(keywork-64)%26; clearwork=charCodeAt(cleartext[i]); if(clearwork>=65&&clearwork<=90) {clearwork=(clearwork-64)%26;} if(clearwork>=97&&clearwork<=122) {clearwork=(clearwork-96)%26;} outwork=(clearwork+keywork)%26; outwork=outwork+64; if(outwork==64) {outwork=90;} output += fromCharCode(outwork); } ciphertext.assign(output); return output; }
void SolitaireCrypto::keydeck() { resetDeck(); for(uint8_t i=0;i<passkey.length();i++) { solitaire(); countcut(charCodeAt(passkey[i])-64); } }
CompletionType evaluate() { Register<Value> value; switch (method) { case ToString: case ValueOf: if (!getThis()->isObject()) { throw getErrorInstance("TypeError"); } value = static_cast<ObjectValue*>(getThis())->getValueProperty(); if (!value->isString()) { throw getErrorInstance("TypeError"); } break; case CharAt: value = charAt(); break; case CharCodeAt: value = charCodeAt(); break; case Concat: value = concat(getThis()); break; case IndexOf: value = indexOf(getThis()); break; case LastIndexOf: value = lastIndexOf(getThis()); break; case LocaleCompare: value = localeCompare(getThis()); break; case Match: value = stringMatch(); break; case Replace: value = stringReplace(); break; case Search: value = stringSearch(); break; case Slice: value = slice(getThis()); break; case Split: value = stringSplit(); break; case Substring: value = substring(getThis()); break; case Substr: value = substr(getThis()); break; case ToLowerCase: case ToLocaleLowerCase: value = toLowerCase(getThis()); break; case ToUpperCase: case ToLocaleUpperCase: value = toUpperCase(getThis()); break; } return CompletionType(CompletionType::Return, value, ""); }