Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Remove the psa-crypto-conversions feature from the cryptoki dependency #703

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 23 additions & 7 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ toml = "0.5.8"
serde = { version = "1.0.123", features = ["derive"] }
env_logger = "0.8.3"
log = { version = "0.4.14", features = ["serde"] }
cryptoki = { version = "0.3.1", optional = true, features = ["psa-crypto-conversions"] }
cryptoki = { version = "0.5.0", optional = true, default-features = false }
picky-asn1-der = { version = "0.4.0", optional = true }
picky-asn1 = { version = "0.7.2", optional = true }
tss-esapi = { version = "7.2.0", optional = true }
Expand Down
2 changes: 1 addition & 1 deletion e2e_tests/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ picky-asn1 = "0.3.1"
sha2 = "0.9.3"
serial_test = "0.5.1"
regex = "1.6.0"
cryptoki = "0.3.1"
cryptoki = { version = "0.5.0", default-features = false }
snailquote = "0.3.1"

[features]
Expand Down
21 changes: 12 additions & 9 deletions e2e_tests/tests/all_providers/config/mod.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
// Copyright 2020 Contributors to the Parsec project.
// SPDX-License-Identifier: Apache-2.0
use cryptoki::types::AuthPin;
use e2e_tests::auto_test_keyname;
use e2e_tests::TestClient;
use log::{error, info};
Expand Down Expand Up @@ -456,27 +457,29 @@ fn activate_cred_no_auth() {
#[cfg(feature = "pkcs11-provider")]
fn init_pkcs11_token(lib: &str, so_pin: &str, pin: &str) -> String {
use cryptoki::context::{CInitializeArgs, Pkcs11};
use cryptoki::session::SessionFlags;
use cryptoki::session::UserType;
use std::path::Path;

let pkcs11 = Pkcs11::new(Path::new(lib)).unwrap();
// // initialize the library
pkcs11.initialize(CInitializeArgs::OsThreads).unwrap();
let slot = pkcs11.get_slots_with_token().unwrap().pop().unwrap();
pkcs11.init_token(slot, so_pin, "Test Token").unwrap();
// set flags
let mut flags = SessionFlags::new();
let _ = flags.set_rw_session(true).set_serial_session(true);
pkcs11
.init_token(slot, &AuthPin::new(so_pin.to_string()), "Test Token")
.unwrap();
// open a session
let session = pkcs11.open_session_no_callback(slot, flags).unwrap();
let session = pkcs11.open_rw_session(slot).unwrap();
// log in the session
session.login(UserType::So, Some(so_pin)).unwrap();
session.init_pin(pin).unwrap();
session
.login(UserType::So, Some(&AuthPin::new(so_pin.to_string())))
.unwrap();
session.init_pin(&AuthPin::new(pin.to_string())).unwrap();
// get the token serial number
let token = pkcs11.get_token_info(slot).unwrap();
pkcs11.finalize();
std::str::from_utf8(&token.serialNumber).unwrap().to_owned()
std::str::from_utf8(token.serial_number().as_bytes())
.unwrap()
.to_owned()
}

#[cfg(feature = "pkcs11-provider")]
Expand Down
30 changes: 23 additions & 7 deletions fuzz/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

9 changes: 3 additions & 6 deletions src/providers/pkcs11/asym_encryption.rs
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
// Copyright 2020 Contributors to the Parsec project.
// SPDX-License-Identifier: Apache-2.0
use super::utils::to_response_status;
use super::utils::{algorithm_to_mechanism, to_response_status};
use super::KeyPairType;
use super::Provider;
use crate::authenticators::ApplicationIdentity;
use crate::key_info_managers::KeyIdentity;
use cryptoki::error::Error;
use cryptoki::error::RvError;
use cryptoki::mechanism::Mechanism;
use log::{info, trace};
use parsec_interface::operations::psa_algorithm::{Algorithm, AsymmetricEncryption};
use parsec_interface::operations::{psa_asymmetric_decrypt, psa_asymmetric_encrypt};
use parsec_interface::requests::{ResponseStatus, Result};
use std::convert::TryFrom;

impl Provider {
pub(super) fn psa_asymmetric_encrypt_internal(
Expand All @@ -30,7 +28,7 @@ impl Provider {

op.validate(key_attributes)?;

let mech = Mechanism::try_from(Algorithm::from(op.alg)).map_err(to_response_status)?;
let mech = algorithm_to_mechanism(Algorithm::from(op.alg)).map_err(to_response_status)?;

let session = self.new_session()?;

Expand Down Expand Up @@ -60,8 +58,7 @@ impl Provider {
let key_attributes = self.key_info_store.get_key_attributes(&key_identity)?;

op.validate(key_attributes)?;

let mech = Mechanism::try_from(Algorithm::from(op.alg)).map_err(to_response_status)?;
let mech = algorithm_to_mechanism(Algorithm::from(op.alg)).map_err(to_response_status)?;

let session = self.new_session()?;

Expand Down
9 changes: 3 additions & 6 deletions src/providers/pkcs11/asym_sign.rs
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
// Copyright 2020 Contributors to the Parsec project.
// SPDX-License-Identifier: Apache-2.0
use super::utils::to_response_status;
use super::utils::{algorithm_to_mechanism, to_response_status};
use super::Provider;
use super::{utils, KeyPairType};
use crate::authenticators::ApplicationIdentity;
use crate::key_info_managers::KeyIdentity;
use cryptoki::mechanism::Mechanism;
use log::{info, trace};
use parsec_interface::operations::psa_algorithm::Algorithm;
use parsec_interface::operations::psa_key_attributes::Type;
use parsec_interface::operations::{psa_sign_hash, psa_verify_hash};
use parsec_interface::requests::{ResponseStatus, Result};
use std::convert::TryFrom;

impl Provider {
pub(super) fn psa_sign_hash_internal(
Expand All @@ -30,7 +28,7 @@ impl Provider {

op.validate(key_attributes)?;

let mech = Mechanism::try_from(Algorithm::from(op.alg)).map_err(to_response_status)?;
let mech = algorithm_to_mechanism(Algorithm::from(op.alg)).map_err(to_response_status)?;

let session = self.new_session()?;

Expand Down Expand Up @@ -68,8 +66,7 @@ impl Provider {
let key_attributes = self.key_info_store.get_key_attributes(&key_identity)?;

op.validate(key_attributes)?;

let mech = Mechanism::try_from(Algorithm::from(op.alg)).map_err(to_response_status)?;
let mech = algorithm_to_mechanism(Algorithm::from(op.alg)).map_err(to_response_status)?;

let session = self.new_session()?;

Expand Down
14 changes: 7 additions & 7 deletions src/providers/pkcs11/capability_discovery.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,19 @@
// SPDX-License-Identifier: Apache-2.0

#![allow(trivial_numeric_casts)]
use super::utils::algorithm_to_mechanism;
use super::{utils, Provider};
use crate::authenticators::ApplicationIdentity;
use crate::providers::crypto_capability::CanDoCrypto;
use crate::providers::pkcs11::to_response_status;
use cryptoki::mechanism::{Mechanism, MechanismInfo, MechanismType};
use cryptoki::mechanism::{MechanismInfo, MechanismType};
use cryptoki::types::Ulong;
use log::{info, trace};
use parsec_interface::operations::can_do_crypto;
use parsec_interface::operations::psa_algorithm::*;
use parsec_interface::operations::psa_key_attributes::{Attributes, Type};
use parsec_interface::requests::ResponseStatus::PsaErrorNotSupported;
use parsec_interface::requests::Result;
use std::convert::TryFrom;

impl CanDoCrypto for Provider {
fn can_do_crypto_internal(
Expand Down Expand Up @@ -65,7 +65,7 @@ impl CanDoCrypto for Provider {
.backend
.get_mechanism_list(self.slot_number)
.map_err(to_response_status)?;
let mechanism = Mechanism::try_from(attributes.policy.permitted_algorithms)
let mechanism = algorithm_to_mechanism(attributes.policy.permitted_algorithms)
.map_err(to_response_status)?;
if !(supported_mechanisms.contains(&mechanism.mechanism_type())) {
info!("Mechanism {:?} is not supported", mechanism);
Expand All @@ -77,8 +77,8 @@ impl CanDoCrypto for Provider {
.get_mechanism_info(self.slot_number, mechanism.mechanism_type())
.map_err(to_response_status)?;
if std::any::type_name::<Ulong>() == std::any::type_name::<u64>() {
if !((attributes.bits as u64) >= (*mechanism_info.min_key_size()).into()
&& (attributes.bits as u64) <= (*mechanism_info.max_key_size()).into())
if !((attributes.bits as u64) >= (mechanism_info.min_key_size() as u64)
&& (attributes.bits as u64) <= (mechanism_info.max_key_size()) as u64)
{
info!(
"Incorrect key size {} for mechanism {:?}",
Expand All @@ -87,8 +87,8 @@ impl CanDoCrypto for Provider {
return Err(PsaErrorNotSupported);
}
} else {
if !((attributes.bits as u64) >= (*mechanism_info.min_key_size() as u64)
&& (attributes.bits as u64) <= (*mechanism_info.max_key_size() as u64))
if !((attributes.bits as u64) >= (mechanism_info.min_key_size() as u64)
&& (attributes.bits as u64) <= (mechanism_info.max_key_size() as u64))
{
info!(
"Incorrect key size {} for mechanism {:?}",
Expand Down
6 changes: 3 additions & 3 deletions src/providers/pkcs11/key_management.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// Copyright 2020 Contributors to the Parsec project.
// SPDX-License-Identifier: Apache-2.0
use super::utils::to_response_status;
use super::utils::{algorithm_to_mechanism, to_response_status};
use super::{utils, KeyPairType, Provider};
use crate::authenticators::ApplicationIdentity;
use crate::key_info_managers::KeyIdentity;
Expand All @@ -17,7 +17,7 @@ use parsec_interface::requests::{ResponseStatus, Result};
use parsec_interface::secrecy::ExposeSecret;
use picky_asn1::wrapper::{IntegerAsn1, OctetStringAsn1};
use picky_asn1_x509::RsaPublicKey;
use std::convert::{TryFrom, TryInto};
use std::convert::TryInto;

impl Provider {
/// Find the PKCS 11 object handle corresponding to the key ID and the key type (public,
Expand Down Expand Up @@ -117,7 +117,7 @@ impl Provider {
let mut pub_template = vec![
Attribute::Id(key_id.to_be_bytes().to_vec()),
Attribute::Token(true.into()),
Attribute::AllowedMechanisms(vec![Mechanism::try_from(
Attribute::AllowedMechanisms(vec![algorithm_to_mechanism(
key_attributes.policy.permitted_algorithms,
)
.map_err(to_response_status)?
Expand Down
Loading