blob: 09e03e9392a9b54a5b2a08ddfbe46599b30942cd [file] [log] [blame]
// Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHAPS_CHAPS_INTERFACE_H
#define CHAPS_CHAPS_INTERFACE_H
#include <string>
#include <vector>
#include <base/basictypes.h>
#include "chaps/chaps.h"
namespace chaps {
// ChapsInterface provides an abstract interface closely matching the
// interfaces generated by dbus-c++ but hiding any dbus-c++ specifics. See
// chaps_interface.xml for the dbus-c++ interface definition.
//
// Implemented By:
// - ChapsProxyImpl: On the Chaps client side; sends calls over IPC.
// - ChapsServiceImpl: On the Chaps daemon side; receives and implements IPC
// calls.
// - ChapsServiceRedirect: An alternative implementation on the daemon side
// which receives IPC calls and forwards to a PKCS #11 library.
class ChapsInterface {
public:
ChapsInterface() {}
virtual ~ChapsInterface() {}
// The following methods map to PKCS #11 calls. Each method name is identical
// to the corresponding PKCS #11 function name except for the "C_" prefix.
// PKCS #11 v2.20 section 11.5 page 106.
virtual uint32_t GetSlotList(bool token_present,
std::vector<uint32_t>* slot_list) = 0;
// PKCS #11 v2.20 section 11.5 page 108.
virtual uint32_t GetSlotInfo(uint32_t slot_id,
std::string* slot_description,
std::string* manufacturer_id,
uint32_t* flags,
uint8_t* hardware_version_major,
uint8_t* hardware_version_minor,
uint8_t* firmware_version_major,
uint8_t* firmware_version_minor) = 0;
// PKCS #11 v2.20 section 11.5 page 109.
virtual uint32_t GetTokenInfo(uint32_t slot_id,
std::string* label,
std::string* manufacturer_id,
std::string* model,
std::string* serial_number,
uint32_t* flags,
uint32_t* max_session_count,
uint32_t* session_count,
uint32_t* max_session_count_rw,
uint32_t* session_count_rw,
uint32_t* max_pin_len,
uint32_t* min_pin_len,
uint32_t* total_public_memory,
uint32_t* free_public_memory,
uint32_t* total_private_memory,
uint32_t* free_private_memory,
uint8_t* hardware_version_major,
uint8_t* hardware_version_minor,
uint8_t* firmware_version_major,
uint8_t* firmware_version_minor) = 0;
// PKCS #11 v2.20 section 11.5 page 111.
virtual uint32_t GetMechanismList(uint32_t slot_id,
std::vector<uint32_t>* mechanism_list) = 0;
// PKCS #11 v2.20 section 11.5 page 112.
virtual uint32_t GetMechanismInfo(uint32_t slot_id,
uint32_t mechanism_type,
uint32_t* min_key_size,
uint32_t* max_key_size,
uint32_t* flags) = 0;
// PKCS #11 v2.20 section 11.5 page 113.
virtual uint32_t InitToken(uint32_t slot_id, const std::string* so_pin,
const std::string& label) = 0;
// PKCS #11 v2.20 section 11.5 page 115.
virtual uint32_t InitPIN(uint32_t session_id, const std::string* pin) = 0;
// PKCS #11 v2.20 section 11.5 page 116.
virtual uint32_t SetPIN(uint32_t session_id, const std::string* old_pin,
const std::string* new_pin) = 0;
// PKCS #11 v2.20 section 11.6 page 117.
virtual uint32_t OpenSession(uint32_t slot_id, uint32_t flags,
uint32_t* session) = 0;
// PKCS #11 v2.20 section 11.6 page 118.
virtual uint32_t CloseSession(uint32_t session) = 0;
// PKCS #11 v2.20 section 11.6 page 120.
virtual uint32_t CloseAllSessions(uint32_t slot_id) = 0;
// PKCS #11 v2.20 section 11.6 page 120.
virtual uint32_t GetSessionInfo(uint32_t session_id,
uint32_t* slot_id,
uint32_t* state,
uint32_t* flags,
uint32_t* device_error) = 0;
// PKCS #11 v2.20 section 11.6 page 121.
virtual uint32_t GetOperationState(uint32_t session_id,
std::vector<uint8_t>* operation_state) = 0;
// PKCS #11 v2.20 section 11.6 page 123.
virtual uint32_t SetOperationState(
uint32_t session_id,
const std::vector<uint8_t>& operation_state,
uint32_t encryption_key_handle,
uint32_t authentication_key_handle) = 0;
// PKCS #11 v2.20 section 11.6 page 125.
virtual uint32_t Login(uint32_t session_id,
uint32_t user_type,
const std::string* pin) = 0;
// PKCS #11 v2.20 section 11.6 page 127.
virtual uint32_t Logout(uint32_t session_id) = 0;
// PKCS #11 v2.20 section 11.7 page 128.
virtual uint32_t CreateObject(uint32_t session_id,
const std::vector<uint8_t>& attributes,
uint32_t* new_object_handle) = 0;
// PKCS #11 v2.20 section 11.7 page 130.
virtual uint32_t CopyObject(uint32_t session_id,
uint32_t object_handle,
const std::vector<uint8_t>& attributes,
uint32_t* new_object_handle) = 0;
// PKCS #11 v2.20 section 11.7 page 131.
virtual uint32_t DestroyObject(uint32_t session_id,
uint32_t object_handle) = 0;
// PKCS #11 v2.20 section 11.7 page 132.
virtual uint32_t GetObjectSize(uint32_t session_id,
uint32_t object_handle,
uint32_t* object_size) = 0;
// PKCS #11 v2.20 section 11.7 page 133.
virtual uint32_t GetAttributeValue(uint32_t session_id,
uint32_t object_handle,
const std::vector<uint8_t>& attributes_in,
std::vector<uint8_t>* attributes_out) = 0;
// PKCS #11 v2.20 section 11.7 page 135.
virtual uint32_t SetAttributeValue(
uint32_t session_id,
uint32_t object_handle,
const std::vector<uint8_t>& attributes) = 0;
// PKCS #11 v2.20 section 11.7 page 136.
virtual uint32_t FindObjectsInit(uint32_t session_id,
const std::vector<uint8_t>& attributes) = 0;
// PKCS #11 v2.20 section 11.7 page 137.
virtual uint32_t FindObjects(uint32_t session_id,
uint32_t max_object_count,
std::vector<uint32_t>* object_list) = 0;
// PKCS #11 v2.20 section 11.7 page 138.
virtual uint32_t FindObjectsFinal(uint32_t session_id) = 0;
// PKCS #11 v2.20 section 11.8 page 139.
virtual uint32_t EncryptInit(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.8 page 140.
virtual uint32_t Encrypt(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.8 page 141.
virtual uint32_t EncryptUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.8 page 141.
virtual uint32_t EncryptFinal(uint32_t session_id,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.9 page 144.
virtual uint32_t DecryptInit(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.9 page 145.
virtual uint32_t Decrypt(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.9 page 146.
virtual uint32_t DecryptUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.9 page 146.
virtual uint32_t DecryptFinal(uint32_t session_id,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.10 page 148.
virtual uint32_t DigestInit(
uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter) = 0;
// PKCS #11 v2.20 section 11.10 page 149.
virtual uint32_t Digest(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* digest) = 0;
// PKCS #11 v2.20 section 11.10 page 150.
virtual uint32_t DigestUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in) = 0;
// PKCS #11 v2.20 section 11.10 page 150.
virtual uint32_t DigestKey(uint32_t session_id,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.10 page 151.
virtual uint32_t DigestFinal(uint32_t session_id,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* digest) = 0;
// PKCS #11 v2.20 section 11.11 page 152.
virtual uint32_t SignInit(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.11 page 153.
virtual uint32_t Sign(uint32_t session_id,
const std::vector<uint8_t>& data,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* signature) = 0;
// PKCS #11 v2.20 section 11.11 page 154.
virtual uint32_t SignUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_part) = 0;
// PKCS #11 v2.20 section 11.11 page 154.
virtual uint32_t SignFinal(uint32_t session_id,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* signature) = 0;
// PKCS #11 v2.20 section 11.11 page 155.
virtual uint32_t SignRecoverInit(
uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.11 page 156.
virtual uint32_t SignRecover(uint32_t session_id,
const std::vector<uint8_t>& data,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* signature) = 0;
// PKCS #11 v2.20 section 11.12 page 157.
virtual uint32_t VerifyInit(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.12 page 158.
virtual uint32_t Verify(uint32_t session_id,
const std::vector<uint8_t>& data,
const std::vector<uint8_t>& signature) = 0;
// PKCS #11 v2.20 section 11.12 page 159.
virtual uint32_t VerifyUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_part) = 0;
// PKCS #11 v2.20 section 11.12 page 159.
virtual uint32_t VerifyFinal(uint32_t session_id,
const std::vector<uint8_t>& signature) = 0;
// PKCS #11 v2.20 section 11.12 page 161.
virtual uint32_t VerifyRecoverInit(
uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t key_handle) = 0;
// PKCS #11 v2.20 section 11.12 page 161.
virtual uint32_t VerifyRecover(uint32_t session_id,
const std::vector<uint8_t>& signature,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data) = 0;
// PKCS #11 v2.20 section 11.13 page 163.
virtual uint32_t DigestEncryptUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.13 page 165.
virtual uint32_t DecryptDigestUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.13 page 169.
virtual uint32_t SignEncryptUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.13 page 171.
virtual uint32_t DecryptVerifyUpdate(uint32_t session_id,
const std::vector<uint8_t>& data_in,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* data_out) = 0;
// PKCS #11 v2.20 section 11.14 page 175.
virtual uint32_t GenerateKey(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
const std::vector<uint8_t>& attributes,
uint32_t* key_handle) = 0;
// PKCS #11 v2.20 section 11.14 page 176.
virtual uint32_t GenerateKeyPair(
uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
const std::vector<uint8_t>& public_attributes,
const std::vector<uint8_t>& private_attributes,
uint32_t* public_key_handle,
uint32_t* private_key_handle) = 0;
// PKCS #11 v2.20 section 11.14 page 178.
virtual uint32_t WrapKey(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t wrapping_key_handle,
uint32_t key_handle,
uint32_t max_out_length,
uint32_t* actual_out_length,
std::vector<uint8_t>* wrapped_key) = 0;
// PKCS #11 v2.20 section 11.14 page 180.
virtual uint32_t UnwrapKey(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t wrapping_key_handle,
const std::vector<uint8_t>& wrapped_key,
const std::vector<uint8_t>& attributes,
uint32_t* key_handle) = 0;
// PKCS #11 v2.20 section 11.14 page 182.
virtual uint32_t DeriveKey(uint32_t session_id,
uint32_t mechanism_type,
const std::vector<uint8_t>& mechanism_parameter,
uint32_t base_key_handle,
const std::vector<uint8_t>& attributes,
uint32_t* key_handle) = 0;
// PKCS #11 v2.20 section 11.15 page 184.
virtual uint32_t SeedRandom(uint32_t session_id,
const std::vector<uint8_t>& seed) = 0;
// PKCS #11 v2.20 section 11.15 page 184.
virtual uint32_t GenerateRandom(uint32_t session_id,
uint32_t num_bytes,
std::vector<uint8_t>* random_data) = 0;
private:
DISALLOW_COPY_AND_ASSIGN(ChapsInterface);
};
} // namespace
#endif // CHAPS_CHAPS_INTERFACE_H