Overview
Comment: | More work towards getting ChromeOS extension going |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9e8c8d099762f421649855186c7c8141 |
User & Date: | rkeene on 2016-02-10 23:04:54 |
Other Links: | manifest | tags |
Context
2016-02-10
| ||
23:06 | ChromeOS: better cleanup check-in: 82721ca5b6 user: rkeene tags: trunk | |
23:04 | More work towards getting ChromeOS extension going check-in: 9e8c8d0997 user: rkeene tags: trunk | |
2016-02-04
| ||
22:52 | Added more Chrome extension parts check-in: e9e86eb240 user: rkeene tags: trunk | |
Changes
Modified .fossil-settings/ignore-glob from [52dd43d58b] to [6153c84cb9].
︙ | ︙ | |||
20 21 22 23 24 25 26 27 28 29 30 31 | build/certs test test-afl test-afl.data build/chrome/archive build/chrome/workdir-* build/chrome/lib build/chrome/cackey-chrome.o build/chrome/cackey-chrome-init.o build/chrome/cackey.pexe build/chrome/cackey.nmf build/chrome/cackey.crx | > > > | 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | build/certs test test-afl test-afl.data build/chrome/archive build/chrome/workdir-* build/chrome/lib build/chrome/include build/chrome/cackey-chrome.o build/chrome/cackey-chrome-init.o build/chrome/cackey.pexe build/chrome/cackey.nmf build/chrome/cackey.crx build/chrome/test build/chrome/google-pcsc.js |
Modified build/chrome/Makefile from [c9ad2816e9] to [f428275431].
1 2 3 4 5 6 7 8 9 | CC = pnacl-clang CXX = pnacl-clang++ AR = pnacl-ar RANLIB = pnacl-ranlib FINALIZE = pnacl-finalize CACKEY_LIBS = -Llib -lcackey -lz PCSC_LIBS = -Llib -lpcsc -L${NACL_SDK_ROOT}/lib/pnacl/Release -lppapi -lppapi_cpp LIBS = $(CACKEY_LIBS) $(PCSC_LIBS) | | | > > > > > > | | | | > > > > > > > > > > > > > > > | | < < < > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | CC = pnacl-clang CXX = pnacl-clang++ AR = pnacl-ar RANLIB = pnacl-ranlib FINALIZE = pnacl-finalize CACKEY_LIBS = -Llib -lcackey -lz PCSC_LIBS = -Llib -lpcsc -L${NACL_SDK_ROOT}/lib/pnacl/Release -lppapi -lppapi_cpp LIBS = $(CACKEY_LIBS) $(PCSC_LIBS) CFLAGS = -Wall -g3 -ggdb3 -I${NACL_SDK_ROOT}/include -I../../pkcs11 -Iinclude/PCSC CXXFLAGS = $(CFLAGS) -std=gnu++11 LDFLAGS = -g3 -ggdb3 PATH += :${NACL_SDK_ROOT}/toolchain/linux_pnacl/bin export PATH ifeq (,${NACL_SDK_ROOT}) $(error "Please set NACL_SDK_ROOT") endif export NACL_SDK_ROOT all: cackey.crx cackey.crx: cackey.pexe cackey.nmf manifest.json cackey.js google-pcsc.js rm -f cackey.crx zip cackey.crx.new $^ mv cackey.crx.new cackey.crx cackey.pexe: cackey-chrome.o cackey-chrome-init.o lib/libcackey.a lib/libpcsc.a lib/libz.a $(CXX) $(CXXFLAGS) $(LDFLAGS) -o cackey.pexe.new cackey-chrome.o cackey-chrome-init.o $(LIBS) $(FINALIZE) cackey.pexe.new mv cackey.pexe.new cackey.pexe cackey.nmf: cackey.pexe ${NACL_SDK_ROOT}/tools/create_nmf.py cackey.pexe > cackey.nmf.new mv cackey.nmf.new cackey.nmf lib/libcackey.a: build-deps mkdir -p lib rm -f lib/libcackey.a rm -rf workdir-* +./build-deps cd lib && ln -s ../workdir-*.inst/lib/libcackey_g.a libcackey.a touch lib/libcackey.a lib/libpcsc.a: lib/libcackey.a mkdir -p lib rm -f lib/libpcsc.a cd lib && ln -s ../workdir-*.inst/lib/libpcsc.a . touch lib/libpcsc.a lib/libz.a: lib/libcackey.a mkdir -p lib rm -f lib/libz.a cd lib && ln -s ../workdir-*.inst/lib/libz.a . touch lib/libz.a google-pcsc.js: lib/libcackey.a rm -f google-pcsc.js google-pcsc.js.new cat workdir-*.inst/js/{scope,logging,pcsc,pcsc-nacl}.js > google-pcsc.js.new mv google-pcsc.js.new google-pcsc.js include/PCSC/pcsc-nacl.h: lib/libcackey.a mkdir -p include/PCSC rm -f include/PCSC/pcsc-nacl.h.new include/PCSC/pcsc-nacl.h cd include/PCSC && ln -s ../../workdir-*.inst/include/PCSC/pcsc-nacl.h pcsc-nacl.h.new touch include/PCSC/pcsc-nacl.h.new mv include/PCSC/pcsc-nacl.h.new include/PCSC/pcsc-nacl.h test: cackey-chrome.c cackey-chrome-test.c ../../cackey.c Makefile gcc -g3 -ggdb3 -Wall -I. -I../../pkcs11 -I/opt/appfs/core.appfs.rkeene.org/zlib/platform/latest/include -I/opt/appfs/rkeene.org/pcsc-lite/platform/latest/include/PCSC -DHAVE_WINTYPES_H=1 -DHAVE_PCSCLITE_H=1 -DHAVE_WINSCARD_H=1 -DHAVE_STDINT_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDLIB_H=1 -DHAVE_UNISTD_H=1 -DHAVE_STRING_H=1 -DHAVE_PTHREAD_H=1 -DHAVE_LIMITS_H=1 -DHAVE_STDIO_H=1 -DHAVE_ZLIB_H -DHAVE_LIBZ -DCACKEY_DEBUG=1 -o test cackey-chrome.c cackey-chrome-test.c ../../cackey.c -L/opt/appfs/core.appfs.rkeene.org/zlib/platform/latest/lib -lz -L/opt/appfs/rkeene.org/pcsc-lite/platform/latest/lib -lpcsclite -L/opt/appfs/core.appfs.rkeene.org/glibc/platform/latest/lib -lc -lpthread -Wl,-R,/opt/appfs/core.appfs.rkeene.org/zlib/platform/latest/lib -Wl,-R,/opt/appfs/rkeene.org/pcsc-lite/platform/latest/lib -Wl,-R,/opt/appfs/core.appfs.rkeene.org/glibc/platform/latest/lib -Wl,-dynamic-linker,/opt/appfs/core.appfs.rkeene.org/glibc/platform/latest/lib/ld-linux-x86-64.so.2 cackey-chrome.o: cackey-chrome.c cackey-chrome.h cackey-chrome-init.o: cackey-chrome-init.cc cackey-chrome.h include/PCSC/pcsc-nacl.h clean: rm -f cackey-chrome.o cackey-chrome-init.o rm -f cackey.pexe rm -f cackey.crx cackey.nmf distclean: clean rm -f lib/libcackey.a lib/libpcsc.a lib/libz.a -rmdir lib rm -f include/PCSC/pcsc-nacl.h -rmdir include/PCSC -rmdir include rm -f google-pcsc.js rm -rf workdir-* .PHONY: all clean distclean |
Modified build/chrome/build-deps from [93232701c1] to [c94a1830f2].
︙ | ︙ | |||
225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 | ( cd "${workdir}" || exit 1 # Copy out PC/SC headers for later use mkdir -p "${instdir}/include/PCSC" || exit 1 cp third_party/pcsc-lite/src/src/PCSC/*.h "${instdir}/include/PCSC" || exit 1 # Copy out JavaScript files for later use mkdir "${instdir}/js" || exit 1 cp third_party/pcsc-lite/client-side/*.js "${instdir}/js" || exit 1 # Build libpcsc ## Assemble all the files into a single tree for file in logging.h scard_structs_serialization.h dom_requests_manager.h thread_safe_string_pool.h \ pp_var_utils.cc pp_var_utils.h scard_structs_serialization.cc dom_requests_manager.cc logging.cc; do find . -type f -name "${file}" -exec cp '{}' third_party/pcsc-lite/client-side/ ';' done ## Create Makefile cat << \_EOF_ > third_party/pcsc-lite/client-side/Makefile || exit 1 CFLAGS += -Wall -std=gnu++11 CXXFLAGS += -Wall -std=gnu++11 CPPFLAGS += -I../src/src/PCSC | > > > > > > > > > > > > > > | > > | 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 | ( cd "${workdir}" || exit 1 # Copy out PC/SC headers for later use mkdir -p "${instdir}/include/PCSC" || exit 1 cp third_party/pcsc-lite/src/src/PCSC/*.h "${instdir}/include/PCSC" || exit 1 # Copy out extra headers cat << \_EOF_ > "${instdir}/include/PCSC/pcsc-nacl.h" #ifndef PCSC_NACL_H #define PCSC_NACL_H 1 #ifdef __cplusplus #include <ppapi/cpp/core.h> #include <ppapi/cpp/instance.h> void pcscNaClInit(pp::Instance *instance, pp::Core *core); #endif #endif _EOF_ # Copy out JavaScript files for later use mkdir "${instdir}/js" || exit 1 cp common-utils/*.js "${instdir}/js" || exit 1 cp third_party/pcsc-lite/client-side/*.js "${instdir}/js" || exit 1 # Build libpcsc ## Assemble all the files into a single tree for file in logging.h scard_structs_serialization.h dom_requests_manager.h thread_safe_string_pool.h \ pp_var_utils.cc pp_var_utils.h scard_structs_serialization.cc dom_requests_manager.cc logging.cc; do find . -type f -name "${file}" -exec cp '{}' third_party/pcsc-lite/client-side/ ';' done ## Create Makefile cat << \_EOF_ > third_party/pcsc-lite/client-side/Makefile || exit 1 CFLAGS += -Wall -std=gnu++11 CXXFLAGS += -Wall -std=gnu++11 CPPFLAGS += -I../src/src/PCSC OBJS = pcsc_nacl.o pcsc_nacl_global.o scard_structs_serialization.o pp_var_utils.o logging.o dom_requests_manager.o pcsc_nacl_init.o all: libpcsc.a libpcsc.a: $(OBJS) rm -f libpcsc.a $(AR) rc libpcsc.a $(OBJS) -$(RANLIB) libpcsc.a pcsc_nacl_init.o: pcsc_nacl_init.cc pcsc_nacl_global.h dom_requests_manager.h pcsc_nacl.h pcsc_nacl.o: pcsc_nacl.cc pcsc_nacl.h logging.h pp_var_utils.h scard_structs_serialization.h pcsc_nacl.h: dom_requests_manager.h thread_safe_string_pool.h pcsc_nacl_global.o: pcsc_nacl_global.cc pcsc_nacl_global.h logging.h pcsc_nacl_global.h: pcsc_nacl.h |
︙ | ︙ | |||
276 277 278 279 280 281 282 283 284 285 286 287 288 289 | rm -f $(OBJS) rm -f libpcsc.a distclean: clean .PHONY: all clean distclean _EOF_ ## Make it make -C third_party/pcsc-lite/client-side || exit 1 # Install the built libpcsc mkdir -p "${instdir}/lib" || exit 1 cp third_party/pcsc-lite/client-side/libpcsc.a "${instdir}/lib" || exit 1 | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | rm -f $(OBJS) rm -f libpcsc.a distclean: clean .PHONY: all clean distclean _EOF_ ## Create initialization procedure, since it lacks one cat << \_EOF_ > third_party/pcsc-lite/client-side/pcsc_nacl_init.cc #include <ppapi/cpp/core.h> #include <ppapi/cpp/instance.h> #include <stdio.h> #include "pcsc_nacl_global.h" #include "dom_requests_manager.h" #include "pcsc_nacl.h" void pcscNaClInit(pp::Instance *instance, pp::Core *core) { DomRequestsManager::PpDelegateImpl *drmDelegateImpl; PcscNacl *pcsc_nacl; fprintf(stderr, "Called pcscNaClInit()\n"); drmDelegateImpl = new DomRequestsManager::PpDelegateImpl(instance, core); pcsc_nacl = new PcscNacl(new DomRequestsManager("pcsc-nacl", drmDelegateImpl), "nahamlodapjneockbbogcleglpoillcn", "client"); fprintf(stderr, "New PcscNacl object = %p\n", pcsc_nacl); if (!pcsc_nacl->Initialize()) { fprintf(stderr, "PcscNacl->Initialize() failed !"); return; } fprintf(stderr, "Global instance set to %p\n", pcsc_nacl); SetPcscNaclGlobalInstance(pcsc_nacl); fprintf(stderr, "Returning.\n"); return; } _EOF_ ## Make it make -C third_party/pcsc-lite/client-side || exit 1 # Install the built libpcsc mkdir -p "${instdir}/lib" || exit 1 cp third_party/pcsc-lite/client-side/libpcsc.a "${instdir}/lib" || exit 1 |
︙ | ︙ |
Modified build/chrome/cackey-chrome-init.cc from [5c1f40635b] to [f6b7a728d2].
|
| > > > > > > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 | /* * Google's PCSC library requires us to write our module in C++ (thanks, Google) * This library wraps the actual library, written in C. */ #include <thread> #include <ppapi/cpp/instance.h> #include <ppapi/cpp/module.h> #include <ppapi/cpp/core.h> #include <ppapi/cpp/var.h> #include <ppapi/cpp/var_dictionary.h> #include <ppapi/cpp/var_array.h> #include <ppapi/cpp/var_array_buffer.h> #include <stdio.h> #include "pcsc-nacl.h" #include "cackey-chrome.h" class CACKeyInstance : public pp::Instance { private: void pcscNaClInitWrapper(pp::Core *core) { fprintf(stderr, "Calling pcscNaClInit(%p, %p)\n", this, core); pcscNaClInit(this, core); fprintf(stderr, "pcscNaClInit terminated\n"); } public: explicit CACKeyInstance(PP_Instance instance, pp::Core *core) : pp::Instance(instance) { std::thread(&CACKeyInstance::pcscNaClInitWrapper, this, core).detach(); } virtual ~CACKeyInstance() {} virtual void HandleMessage(const pp::Var& messagePlain) { int numCertificates, i; struct cackey_certificate *certificates; pp::VarDictionary *message; pp::VarDictionary *reply; pp::VarArray certificatesPPArray; pp::VarArrayBuffer *certificateContents; pp::Var command, target; /* * The incoming message must be a dictionary */ if (!messagePlain.is_dictionary()) { return; } /* * Process the appropriate command from the incoming message */ message = new pp::VarDictionary(messagePlain); /* * Verify that this message is destined for us */ if (!message->HasKey("target")) { return; } target = message->Get("target"); if (target.AsString() != "cackey") { return; } /* * Determine what we are being asked to do */ if (!message->HasKey("command")) { return; } command = message->Get("command"); /* * Do the thing we are being asked to do */ if (command.AsString() == "listcertificates") { numCertificates = cackey_chrome_listCertificates(&certificates); reply = new pp::VarDictionary(); certificatesPPArray.SetLength(numCertificates); for (i = 0; i < numCertificates; i++) { certificateContents = new pp::VarArrayBuffer(certificates[i].certificate_len); memcpy(certificateContents->Map(), certificates[i].certificate, certificates[i].certificate_len); certificateContents->Unmap(); certificatesPPArray.Set(i, *certificateContents); } reply->Set("status", "success"); reply->Set("certificates", certificatesPPArray); } else if (command.AsString() == "sign") { reply = new pp::VarDictionary(); reply->Set("status", "success"); } else { reply = new pp::VarDictionary(); reply->Set("status", "error"); reply->Set("error", "Invalid command"); } /* * If a message ID was sent in the request, include it in the reply */ if (message->HasKey("id")) { reply->Set("id", message->Get("id")); } /* * Send the reply back to the requestor, hopefully they are waiting for this message */ PostMessage(*reply); return; } }; class CACKeyModule : public pp::Module { public: CACKeyModule() : pp::Module() {} virtual ~CACKeyModule() {} virtual pp::Instance *CreateInstance(PP_Instance instance) { return(new CACKeyInstance(instance, core())); } }; namespace pp { Module *CreateModule() { return(new CACKeyModule()); } } |
Added build/chrome/cackey-chrome-test.c version [5b31fe8fb3].
> > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #include <stdio.h> #include "cackey-chrome.h" int main(int argc, char **argv) { struct cackey_certificate *certificates; int numCertificates; numCertificates = cackey_chrome_listCertificates(&certificates); printf("numCertificates = %i\n", numCertificates); return(0); } |
Modified build/chrome/cackey-chrome.c from [5afb8e1152] to [b0e4dd691b].
|
| > > > > > > > > > > > > > > > > > > > > > | > > | | > > | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 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 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 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 158 159 160 161 162 163 164 165 166 167 168 169 | #ifdef __cplusplus extern "C" { #endif #include <unistd.h> #include <stdlib.h> #include "mypkcs11.h" #include "cackey-chrome.h" struct cackey_chrome_id { unsigned char *id; size_t idLen; }; static CK_FUNCTION_LIST_PTR moduleFunctionList = NULL; static CK_RV cackey_chrome_init(void) { CK_C_INITIALIZE_ARGS initargs; CK_RV chk_rv; if (moduleFunctionList != NULL) { return(CKR_OK); } chk_rv = C_GetFunctionList(&moduleFunctionList); if (chk_rv != CKR_OK) { return(chk_rv); } initargs.CreateMutex = NULL; initargs.DestroyMutex = NULL; initargs.LockMutex = NULL; initargs.UnlockMutex = NULL; initargs.flags = CKF_OS_LOCKING_OK; initargs.pReserved = NULL; chk_rv = moduleFunctionList->C_Initialize(&initargs); if (chk_rv != CKR_OK) { return(chk_rv); } return(CKR_OK); } int cackey_chrome_listCertificates(struct cackey_certificate **certificates) { CK_RV chk_rv; CK_ULONG numSlots, currSlot; CK_SLOT_ID_PTR slots; CK_SLOT_INFO slotInfo; CK_SESSION_HANDLE hSession; CK_OBJECT_HANDLE hObject; CK_ULONG ulObjectCount; CK_ATTRIBUTE searchTemplatePrivateKeys[] = { {CKA_CLASS, NULL, sizeof(CK_OBJECT_CLASS)} }; CK_ATTRIBUTE searchTemplateCertificates[] = { {CKA_CLASS, NULL, sizeof(CK_OBJECT_CLASS)}, {CKA_ID, NULL, 0} }; CK_ATTRIBUTE attrTemplate[] = { {CKA_ID, NULL, 0} }, *currAttr; CK_ULONG currAttrIndex; CK_OBJECT_CLASS objectClassPrivateKey = CKO_PRIVATE_KEY; chk_rv = cackey_chrome_init(); if (chk_rv != CKR_OK) { return(0); } chk_rv = moduleFunctionList->C_GetSlotList(FALSE, NULL, &numSlots); if (chk_rv != CKR_OK) { return(0); } slots = malloc(sizeof(*slots) * numSlots); chk_rv = moduleFunctionList->C_GetSlotList(FALSE, slots, &numSlots); if (chk_rv != CKR_OK) { return(0); } searchTemplatePrivateKeys[0].pValue = &objectClassPrivateKey; for (currSlot = 0; currSlot < numSlots; currSlot++) { chk_rv = moduleFunctionList->C_GetSlotInfo(slots[currSlot], &slotInfo); if (chk_rv != CKR_OK) { continue; } if ((slotInfo.flags & CKF_TOKEN_PRESENT) != CKF_TOKEN_PRESENT) { continue; } chk_rv = moduleFunctionList->C_OpenSession(slots[currSlot], CKF_SERIAL_SESSION, NULL, NULL, &hSession); if (chk_rv != CKR_OK) { continue; } chk_rv = moduleFunctionList->C_FindObjectsInit(hSession, searchTemplatePrivateKeys, sizeof(searchTemplatePrivateKeys) / sizeof(searchTemplatePrivateKeys[0])); if (chk_rv != CKR_OK) { moduleFunctionList->C_CloseSession(hSession); continue; } while (1) { chk_rv = moduleFunctionList->C_FindObjects(hSession, &hObject, 1, &ulObjectCount); if (chk_rv != CKR_OK) { break; } if (ulObjectCount == 0) { break; } if (ulObjectCount != 1) { break; } for (currAttrIndex = 0; currAttrIndex < (sizeof(attrTemplate) / sizeof(attrTemplate[0])); currAttrIndex++) { currAttr = &attrTemplate[currAttrIndex]; currAttr->pValue = NULL; currAttr->ulValueLen = 0; } chk_rv = C_GetAttributeValue(hSession, hObject, attrTemplate, sizeof(attrTemplate) / sizeof(attrTemplate[0])); if (chk_rv == CKR_ATTRIBUTE_TYPE_INVALID || chk_rv == CKR_ATTRIBUTE_SENSITIVE || chk_rv == CKR_BUFFER_TOO_SMALL) { chk_rv = CKR_OK; } if (chk_rv != CKR_OK) { continue; } for (currAttrIndex = 0; currAttrIndex < (sizeof(attrTemplate) / sizeof(attrTemplate[0])); currAttrIndex++) { currAttr = &attrTemplate[currAttrIndex]; if (currAttr->ulValueLen == 0) { continue; } if (((CK_LONG) currAttr->ulValueLen) == ((CK_LONG) -1)) { continue; } currAttr->pValue = malloc(currAttr->ulValueLen); } chk_rv = C_GetAttributeValue(hSession, hObject, attrTemplate, sizeof(attrTemplate) / sizeof(attrTemplate[0])); if (chk_rv != CKR_OK) { continue; } } moduleFunctionList->C_FindObjectsFinal(hSession); moduleFunctionList->C_CloseSession(hSession); } return(0); } #ifdef __cplusplus } #endif |
Added build/chrome/cackey-chrome.h version [3dcc1f6bc2].
> > > > > > > > > > > > > > > > > > > > > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #ifndef CACKEY_CHROME_CACKEY_H #define CACKEY_CHROME_CACKEY_H 1 # ifdef __cplusplus extern "C" { # endif #include <stddef.h> struct cackey_certificate { size_t certificate_len; unsigned char *certificate; }; int cackey_chrome_listCertificates(struct cackey_certificate **certificates); # ifdef __cplusplus } # endif #endif |
Modified build/chrome/cackey.js from [5ad72ed1f7] to [1a209c8c6b].
︙ | ︙ | |||
295 296 297 298 299 300 301 302 303 304 305 306 307 308 | /* MARK2 */ function onCertificatesRejected(rejectedCerts) { // If certificates were rejected by the API, log an error, for example. console.error(rejectedCerts.length + ' certificates were rejected.'); return; } function cackeyListCertificates(chromeCallback) { var certificates = []; certificates.push( { certificate: new Uint8Array([ | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 | /* MARK2 */ function onCertificatesRejected(rejectedCerts) { // If certificates were rejected by the API, log an error, for example. console.error(rejectedCerts.length + ' certificates were rejected.'); return; } var cackeyHandle = null; function cackeyInitLoaded(messageEvent) { console.log("Loaded CACKey PNaCl Module"); /* Register listeners with Chrome */ chrome.certificateProvider.onCertificatesRequested.addListener(cackeyListCertificates); chrome.certificateProvider.onSignDigestRequested.addListener(cackeySignMessage); } function cackeyInit() { var elementEmbed; if (cackeyHandle != null) { return; } elementEmbed = document.createElement('embed'); elementEmbed.type = "application/x-pnacl"; elementEmbed.width = 0; elementEmbed.height = 0; elementEmbed.src = "cackey.nmf"; elementEmbed.id = "cackeyModule"; elementEmbed.addEventListener('error', function(messageEvent) { console.error("Error loading CACKey PNaCl Module: " + messageEvent.data); }, true); elementEmbed.addEventListener('load', cackeyInitLoaded, true); elementEmbed.addEventListener('message', function(messageEvent) { console.log("Start message"); console.log(messageEvent.data); console.log("End message"); }, true); new GoogleSmartCard.PcscNacl(elementEmbed); document.body.appendChild(elementEmbed) cackeyHandle = elementEmbed; } function cackeyListCertificates(chromeCallback) { var certificates = []; certificates.push( { certificate: new Uint8Array([ |
︙ | ︙ | |||
384 385 386 387 388 389 390 | payload = new Uint8Array(stoBA(hextorstr(payload))).buffer; chromeCallback(payload); return; } | | > | > | | 418 419 420 421 422 423 424 425 426 427 428 429 | payload = new Uint8Array(stoBA(hextorstr(payload))).buffer; chromeCallback(payload); return; } /* Enable debugging */ GoogleSmartCard.logger.setLevel(GoogleSmartCard.Logger.prototype.DEBUG); /* Initialize CACKey */ cackeyInit(); |
Modified build/chrome/manifest.json from [11edb13438] to [ac9702d30b].
1 2 3 4 5 | { "manifest_version": 2, "name": "CACKey", "version": "0.7.5.1", | > | | > > > | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | { "manifest_version": 2, "name": "CACKey", "version": "0.7.5.1", "app": { "background": { "scripts": [ "google-pcsc.js", "cackey.js" ], "persistent": false } }, "permissions": [ "certificateProvider", "usb" ] } |