Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(568)

Side by Side Diff: crypto_pkcs11.cc

Issue 6338003: Explicitly logging out the token to avoid leaving it in a non-stable state. (Closed) Base URL: http://git.chromium.org/git/entd.git@master
Patch Set: Returning early on logout failure. Created 9 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « crypto_pkcs11.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium OS Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "entd/crypto_pkcs11.h" 5 #include "entd/crypto_pkcs11.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/string_util.h" 8 #include "base/string_util.h"
9 #include "base/string_number_conversions.h" 9 #include "base/string_number_conversions.h"
10 #include <chromeos/utility.h> 10 #include <chromeos/utility.h>
(...skipping 481 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 BindMethod(instance_t, &Pkcs11::Session::CallRefresh, "refresh"); 492 BindMethod(instance_t, &Pkcs11::Session::CallRefresh, "refresh");
493 BindMethod(instance_t, &Pkcs11::Session::Close, "close"); 493 BindMethod(instance_t, &Pkcs11::Session::Close, "close");
494 BindMethod(instance_t, &Pkcs11::Session::Login, "login"); 494 BindMethod(instance_t, &Pkcs11::Session::Login, "login");
495 BindMethod(instance_t, &Pkcs11::Session::Logout, "logout"); 495 BindMethod(instance_t, &Pkcs11::Session::Logout, "logout");
496 BindMethod(instance_t, &Pkcs11::Session::InitPin, "initPin"); 496 BindMethod(instance_t, &Pkcs11::Session::InitPin, "initPin");
497 BindMethod(instance_t, &Pkcs11::Session::SetPin, "setPin"); 497 BindMethod(instance_t, &Pkcs11::Session::SetPin, "setPin");
498 BindMethod(instance_t, &Pkcs11::Session::GenerateKeyPair, "generateKeyPair"); 498 BindMethod(instance_t, &Pkcs11::Session::GenerateKeyPair, "generateKeyPair");
499 BindMethod(instance_t, &Pkcs11::Session::FindObjects, "findObjects"); 499 BindMethod(instance_t, &Pkcs11::Session::FindObjects, "findObjects");
500 BindMethod(instance_t, &Pkcs11::Session::CreateObject, "createObject"); 500 BindMethod(instance_t, &Pkcs11::Session::CreateObject, "createObject");
501 501
502 BindMethod(instance_t, &Pkcs11::Session::LogoutAndClose, "logoutAndClose");
503
502 return true; 504 return true;
503 } 505 }
504 506
505 bool Pkcs11::Session::Refresh() { 507 bool Pkcs11::Session::Refresh() {
506 CK_SESSION_INFO session_info; 508 CK_SESSION_INFO session_info;
507 CK_RV rv = C_GetSessionInfo(session_handle_, &session_info); 509 CK_RV rv = C_GetSessionInfo(session_handle_, &session_info);
508 if (!OkOrWarn(rv)) 510 if (!OkOrWarn(rv))
509 return false; 511 return false;
510 512
511 v8::Handle<v8::Object> self = js_object(); 513 v8::Handle<v8::Object> self = js_object();
(...skipping 24 matching lines...) Expand all
536 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin), 538 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin),
537 ascii_pin.length())); 539 ascii_pin.length()));
538 540
539 return v8::Undefined(); 541 return v8::Undefined();
540 } 542 }
541 543
542 v8::Handle<v8::Value> Pkcs11::Session::Close(const v8::Arguments& args) { 544 v8::Handle<v8::Value> Pkcs11::Session::Close(const v8::Arguments& args) {
543 if (!session_handle_) 545 if (!session_handle_)
544 return ThrowException("Not open"); 546 return ThrowException("Not open");
545 547
548 if (logged_in_) {
549 if (!OkOrThrow(C_Logout(session_handle_)))
550 return v8::Undefined();
551 logged_in_ = false;
552 }
553
546 OkOrThrow(C_CloseSession(session_handle_)); 554 OkOrThrow(C_CloseSession(session_handle_));
547 session_handle_ = 0; 555 session_handle_ = 0;
548 return v8::Undefined(); 556 return v8::Undefined();
549 } 557 }
550 558
551 v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) { 559 v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) {
552 if (args.Length() < 1) 560 if (args.Length() < 1)
553 return ThrowException("Missing required parameter: userType"); 561 return ThrowException("Missing required parameter: userType");
554 562
555 uint32_t user_type = args[0]->Uint32Value(); 563 uint32_t user_type = args[0]->Uint32Value();
556 if (user_type != CKU_USER && user_type != CKU_SO) 564 if (user_type != CKU_USER && user_type != CKU_SO)
557 return ThrowException("Invalid value for parameter: userType"); 565 return ThrowException("Invalid value for parameter: userType");
558 566
559 if (args.Length() < 2) 567 if (args.Length() < 2)
560 return ThrowException("Missing required parameter: pin"); 568 return ThrowException("Missing required parameter: pin");
561 569
562 v8::String::AsciiValue ascii_pin(args[1]); 570 v8::String::AsciiValue ascii_pin(args[1]);
563 571
572 logged_in_ = false;
573
564 CK_RV rv = C_Login(session_handle_, user_type, 574 CK_RV rv = C_Login(session_handle_, user_type,
565 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin), 575 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin),
566 ascii_pin.length()); 576 ascii_pin.length());
567 577
568 if (rv == CKR_PIN_INCORRECT) 578 if (rv == CKR_PIN_INCORRECT)
569 return v8::False(); 579 return v8::False();
570 580
571 if (!OkOrThrow(rv)) 581 if (!OkOrThrow(rv))
572 return v8::Undefined(); 582 return v8::Undefined();
573 583
584 logged_in_ = true;
574 return v8::True(); 585 return v8::True();
575 } 586 }
576 587
577 v8::Handle<v8::Value> Pkcs11::Session::Logout(const v8::Arguments& args) { 588 v8::Handle<v8::Value> Pkcs11::Session::Logout(const v8::Arguments& args) {
578 OkOrThrow(C_Logout(session_handle_)); 589 OkOrThrow(C_Logout(session_handle_));
590 logged_in_ = false;
579 return v8::Undefined(); 591 return v8::Undefined();
580 } 592 }
581 593
594 v8::Handle<v8::Value> Pkcs11::Session::LogoutAndClose(
595 const v8::Arguments& args) {
596 Logout(args);
597 Close(args);
598 return v8::Undefined();
599 }
600
582 v8::Handle<v8::Value> Pkcs11::Session::SetPin(const v8::Arguments& args) { 601 v8::Handle<v8::Value> Pkcs11::Session::SetPin(const v8::Arguments& args) {
583 if (args.Length() < 1) 602 if (args.Length() < 1)
584 return ThrowException("Missing required parameter: oldPin"); 603 return ThrowException("Missing required parameter: oldPin");
585 604
586 v8::String::AsciiValue old_pin(args[0]); 605 v8::String::AsciiValue old_pin(args[0]);
587 606
588 if (args.Length() < 2) 607 if (args.Length() < 2)
589 return ThrowException("Missing required parameter: newPin"); 608 return ThrowException("Missing required parameter: newPin");
590 609
591 v8::String::AsciiValue new_pin(args[1]); 610 v8::String::AsciiValue new_pin(args[1]);
(...skipping 702 matching lines...) Expand 10 before | Expand all | Expand 10 after
1294 SET_CK_CONST(ctor_t, CKR_MUTEX_BAD); 1313 SET_CK_CONST(ctor_t, CKR_MUTEX_BAD);
1295 SET_CK_CONST(ctor_t, CKR_MUTEX_NOT_LOCKED); 1314 SET_CK_CONST(ctor_t, CKR_MUTEX_NOT_LOCKED);
1296 SET_CK_CONST(ctor_t, CKR_VENDOR_DEFINED); 1315 SET_CK_CONST(ctor_t, CKR_VENDOR_DEFINED);
1297 1316
1298 return true; 1317 return true;
1299 } 1318 }
1300 1319
1301 } // namespace crypto 1320 } // namespace crypto
1302 1321
1303 } // namespace entd 1322 } // namespace entd
OLDNEW
« no previous file with comments | « crypto_pkcs11.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698