OLD | NEW |
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 Loading... |
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 Loading... |
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 Loading... |
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 |
OLD | NEW |