| 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 |