Overview
| Comment: | ChromeOS: Updated to pass original message back correctly | 
|---|---|
| Downloads: | Tarball | ZIP archive | SQL archive | 
| Timelines: | family | ancestors | descendants | both | trunk | 
| Files: | files | file ages | folders | 
| SHA1: | 3783f79015b8cf7c93ed240588da0d1f | 
| User & Date: | rkeene on 2016-02-26 16:35:42 | 
| Original Comment: | Updated to pass original message back correctly | 
| Other Links: | manifest | tags | 
Context
| 2016-02-26 | ||
| 18:20 | ChromeOS: Fixed issue with including signed data in the reply check-in: c27bb81788 user: rkeene tags: trunk | |
| 16:35 | ChromeOS: Updated to pass original message back correctly check-in: 3783f79015 user: rkeene tags: trunk | |
| 16:23 | ChromeOS: Updated to support raw PKCS#1 message signing using the interface Chrome provides it check-in: ea7a58ef60 user: rkeene tags: trunk | |
Changes
Modified build/chrome/cackey-chrome-init.cc from [84155dbf3d] to [cd9d30207a].
| ︙ | ︙ | |||
| 26 27 28 29 30 31 32 | 
	public:
		explicit CACKeyInstance(PP_Instance instance, pp::Core *core) : pp::Instance(instance) {
			corePointer = core;
		}
		virtual ~CACKeyInstance() {}
 | | | | 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 | 
	public:
		explicit CACKeyInstance(PP_Instance instance, pp::Core *core) : pp::Instance(instance) {
			corePointer = core;
		}
		virtual ~CACKeyInstance() {}
		virtual void HandleMessageThread(pp::VarDictionary *message, pp::Var *messagePlain) {
			cackey_chrome_returnType signRet;
			char *pinPrompt = NULL;
			const char *pin;
			const char *smartcardManagerAppId = NULL;
			unsigned char buffer[8192];
			struct cackey_certificate *certificates, incomingCertificateCACKey;
			pp::VarDictionary *reply;
			pp::VarArray certificatesPPArray;
			pp::VarArrayBuffer *certificateContents, *incomingCertificateContents, *incomingData, *outgoingData;
			pp::Var command;
			const pp::Var *outgoingDataAsVar = NULL;
			int numCertificates, i;
			unsigned long outgoingDataLength;
			/*
			 * Extract the command
			 */
			command = message->Get("command");
 | 
| ︙ | ︙ | |||
| 133 134 135 136 137 138 139 | 
							outgoingDataAsVar = new pp::Var(outgoingData->pp_var());
							delete outgoingData;
							reply->Set("status", "success");
							reply->Set("signedData", outgoingDataAsVar);
 | < < < < | < < | 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 | 
							outgoingDataAsVar = new pp::Var(outgoingData->pp_var());
							delete outgoingData;
							reply->Set("status", "success");
							reply->Set("signedData", outgoingDataAsVar);
							break;
						case CACKEY_CHROME_ERROR:
							reply->Set("status", "error");
							reply->Set("error", "Unable to sign data");
							break;
						case CACKEY_CHROME_NEEDLOGIN:
						case CACKEY_CHROME_NEEDPROTECTEDLOGIN:
							reply->Set("status", "retry");
							reply->Set("originalrequest", *messagePlain);
							reply->Set("pinprompt", pinPrompt);
							break;
					}
					if (pinPrompt != NULL) {
						free(pinPrompt);
					}
				}
 | 
| ︙ | ︙ | |||
| 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 | 
			 * Send the reply back to the requestor, hopefully they are waiting for this message
			 */
			PostMessage(*reply);
			delete reply;
			delete message;
			return;
		}
		virtual void HandleMessage(const pp::Var& messagePlain) {
			pp::VarDictionary *message;
			pp::Var target;
			/*
			 * The incoming message must be a dictionary
			 */
			if (!messagePlain.is_dictionary()) {
				pcscNaClHandleMessage(messagePlain);
 | > > > > > > > | 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 | 
			 * Send the reply back to the requestor, hopefully they are waiting for this message
			 */
			PostMessage(*reply);
			delete reply;
			delete message;
			delete messagePlain;
			if (outgoingDataAsVar) {
				delete outgoingDataAsVar;
			}
			return;
		}
		virtual void HandleMessage(const pp::Var& messagePlain) {
			pp::VarDictionary *message;
			pp::Var *messagePlainCopy;
			pp::Var target;
			/*
			 * The incoming message must be a dictionary
			 */
			if (!messagePlain.is_dictionary()) {
				pcscNaClHandleMessage(messagePlain);
 | 
| ︙ | ︙ | |||
| 242 243 244 245 246 247 248 | return; } /* * Process the request in another thread */ | > | | 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 | 
				return;
			}
			/*
			 * Process the request in another thread
			 */
			messagePlainCopy = new pp::Var(messagePlain);
			std::thread(&CACKeyInstance::HandleMessageThread, this, message, messagePlainCopy).detach();
			return;
		}
};
class CACKeyModule : public pp::Module {
	public:
 | 
| ︙ | ︙ |