Chromium Code Reviews| 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 OkOrThrow(C_Logout(session_handle_)); | |
|
rginda
2011/01/18 22:10:19
You should return early if this throws.
Nelson Araujo
2011/01/18 22:50:19
Done.
| |
| 550 logged_in_ = false; | |
| 551 } | |
| 552 | |
| 546 OkOrThrow(C_CloseSession(session_handle_)); | 553 OkOrThrow(C_CloseSession(session_handle_)); |
| 547 session_handle_ = 0; | 554 session_handle_ = 0; |
| 548 return v8::Undefined(); | 555 return v8::Undefined(); |
| 549 } | 556 } |
| 550 | 557 |
| 551 v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) { | 558 v8::Handle<v8::Value> Pkcs11::Session::Login(const v8::Arguments& args) { |
| 552 if (args.Length() < 1) | 559 if (args.Length() < 1) |
| 553 return ThrowException("Missing required parameter: userType"); | 560 return ThrowException("Missing required parameter: userType"); |
| 554 | 561 |
| 555 uint32_t user_type = args[0]->Uint32Value(); | 562 uint32_t user_type = args[0]->Uint32Value(); |
| 556 if (user_type != CKU_USER && user_type != CKU_SO) | 563 if (user_type != CKU_USER && user_type != CKU_SO) |
| 557 return ThrowException("Invalid value for parameter: userType"); | 564 return ThrowException("Invalid value for parameter: userType"); |
| 558 | 565 |
| 559 if (args.Length() < 2) | 566 if (args.Length() < 2) |
| 560 return ThrowException("Missing required parameter: pin"); | 567 return ThrowException("Missing required parameter: pin"); |
| 561 | 568 |
| 562 v8::String::AsciiValue ascii_pin(args[1]); | 569 v8::String::AsciiValue ascii_pin(args[1]); |
| 563 | 570 |
| 571 logged_in_ = false; | |
| 572 | |
| 564 CK_RV rv = C_Login(session_handle_, user_type, | 573 CK_RV rv = C_Login(session_handle_, user_type, |
| 565 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin), | 574 reinterpret_cast<CK_CHAR_PTR>(*ascii_pin), |
| 566 ascii_pin.length()); | 575 ascii_pin.length()); |
| 567 | 576 |
| 568 if (rv == CKR_PIN_INCORRECT) | 577 if (rv == CKR_PIN_INCORRECT) |
| 569 return v8::False(); | 578 return v8::False(); |
| 570 | 579 |
| 571 if (!OkOrThrow(rv)) | 580 if (!OkOrThrow(rv)) |
| 572 return v8::Undefined(); | 581 return v8::Undefined(); |
| 573 | 582 |
| 583 logged_in_ = true; | |
| 574 return v8::True(); | 584 return v8::True(); |
| 575 } | 585 } |
| 576 | 586 |
| 577 v8::Handle<v8::Value> Pkcs11::Session::Logout(const v8::Arguments& args) { | 587 v8::Handle<v8::Value> Pkcs11::Session::Logout(const v8::Arguments& args) { |
| 578 OkOrThrow(C_Logout(session_handle_)); | 588 OkOrThrow(C_Logout(session_handle_)); |
| 589 logged_in_ = false; | |
| 579 return v8::Undefined(); | 590 return v8::Undefined(); |
| 580 } | 591 } |
| 581 | 592 |
| 593 v8::Handle<v8::Value> Pkcs11::Session::LogoutAndClose( | |
| 594 const v8::Arguments& args) { | |
| 595 Logout(args); | |
| 596 Close(args); | |
| 597 return v8::Undefined(); | |
| 598 } | |
| 599 | |
| 582 v8::Handle<v8::Value> Pkcs11::Session::SetPin(const v8::Arguments& args) { | 600 v8::Handle<v8::Value> Pkcs11::Session::SetPin(const v8::Arguments& args) { |
| 583 if (args.Length() < 1) | 601 if (args.Length() < 1) |
| 584 return ThrowException("Missing required parameter: oldPin"); | 602 return ThrowException("Missing required parameter: oldPin"); |
| 585 | 603 |
| 586 v8::String::AsciiValue old_pin(args[0]); | 604 v8::String::AsciiValue old_pin(args[0]); |
| 587 | 605 |
| 588 if (args.Length() < 2) | 606 if (args.Length() < 2) |
| 589 return ThrowException("Missing required parameter: newPin"); | 607 return ThrowException("Missing required parameter: newPin"); |
| 590 | 608 |
| 591 v8::String::AsciiValue new_pin(args[1]); | 609 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); | 1312 SET_CK_CONST(ctor_t, CKR_MUTEX_BAD); |
| 1295 SET_CK_CONST(ctor_t, CKR_MUTEX_NOT_LOCKED); | 1313 SET_CK_CONST(ctor_t, CKR_MUTEX_NOT_LOCKED); |
| 1296 SET_CK_CONST(ctor_t, CKR_VENDOR_DEFINED); | 1314 SET_CK_CONST(ctor_t, CKR_VENDOR_DEFINED); |
| 1297 | 1315 |
| 1298 return true; | 1316 return true; |
| 1299 } | 1317 } |
| 1300 | 1318 |
| 1301 } // namespace crypto | 1319 } // namespace crypto |
| 1302 | 1320 |
| 1303 } // namespace entd | 1321 } // namespace entd |
| OLD | NEW |