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);
	}
}
예제 #4
0
 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, "");
 }