diff --git a/cryptoki-rustcrypto/src/rsa/pkcs1v15.rs b/cryptoki-rustcrypto/src/rsa/pkcs1v15.rs
index 04535b98..2756dd24 100644
--- a/cryptoki-rustcrypto/src/rsa/pkcs1v15.rs
+++ b/cryptoki-rustcrypto/src/rsa/pkcs1v15.rs
@@ -2,12 +2,8 @@
 // SPDX-License-Identifier: Apache-2.0
 
 use cryptoki::object::{Attribute, AttributeType, KeyType, ObjectClass, ObjectHandle};
-use der::AnyRef;
-use rsa::{
-    pkcs1,
-    pkcs1v15::{Signature, VerifyingKey},
-};
-use spki::{AlgorithmIdentifierRef, AssociatedAlgorithmIdentifier, SignatureAlgorithmIdentifier};
+use rsa::pkcs1v15::{RsaSignatureAssociatedOid, Signature, VerifyingKey};
+use spki::{AlgorithmIdentifier, AssociatedAlgorithmIdentifier, SignatureAlgorithmIdentifier};
 use std::convert::TryFrom;
 
 use super::{read_key, DigestSigning, Error};
@@ -71,9 +67,14 @@ impl<D: DigestSigning, S: SessionLike> Signer<D, S> {
     }
 }
 
-impl<D: DigestSigning, S: SessionLike> AssociatedAlgorithmIdentifier for Signer<D, S> {
-    type Params = AnyRef<'static>;
-    const ALGORITHM_IDENTIFIER: AlgorithmIdentifierRef<'static> = pkcs1::ALGORITHM_ID;
+impl<D, S> AssociatedAlgorithmIdentifier for Signer<D, S>
+where
+    D: DigestSigning,
+    S: SessionLike,
+{
+    type Params = <VerifyingKey<D> as AssociatedAlgorithmIdentifier>::Params;
+    const ALGORITHM_IDENTIFIER: AlgorithmIdentifier<Self::Params> =
+        <VerifyingKey<D> as AssociatedAlgorithmIdentifier>::ALGORITHM_IDENTIFIER;
 }
 
 impl<D: DigestSigning, S: SessionLike> signature::Keypair for Signer<D, S> {
@@ -99,12 +100,13 @@ impl<D: DigestSigning, S: SessionLike> signature::Signer<Signature> for Signer<D
     }
 }
 
-impl<D: DigestSigning, S: SessionLike> SignatureAlgorithmIdentifier for Signer<D, S> {
-    type Params = AnyRef<'static>;
+impl<D, S> SignatureAlgorithmIdentifier for Signer<D, S>
+where
+    S: SessionLike,
+    D: DigestSigning + RsaSignatureAssociatedOid,
+{
+    type Params = <VerifyingKey<D> as SignatureAlgorithmIdentifier>::Params;
 
-    const SIGNATURE_ALGORITHM_IDENTIFIER: AlgorithmIdentifierRef<'static> =
-        AlgorithmIdentifierRef {
-            oid: D::OID,
-            parameters: Some(AnyRef::NULL),
-        };
+    const SIGNATURE_ALGORITHM_IDENTIFIER: AlgorithmIdentifier<Self::Params> =
+        <VerifyingKey<D> as SignatureAlgorithmIdentifier>::SIGNATURE_ALGORITHM_IDENTIFIER;
 }
diff --git a/cryptoki-rustcrypto/src/rsa/pss.rs b/cryptoki-rustcrypto/src/rsa/pss.rs
index 5c29a83c..cd579b47 100644
--- a/cryptoki-rustcrypto/src/rsa/pss.rs
+++ b/cryptoki-rustcrypto/src/rsa/pss.rs
@@ -2,13 +2,12 @@
 // SPDX-License-Identifier: Apache-2.0
 
 use cryptoki::object::{Attribute, AttributeType, KeyType, ObjectClass, ObjectHandle};
-use der::{asn1::ObjectIdentifier, oid::AssociatedOid, Any, AnyRef};
+use der::AnyRef;
 use rsa::{
-    pkcs1::{self, RsaPssParams},
+    pkcs1,
     pkcs8::{self},
     pss::{get_default_pss_signature_algo_id, Signature, VerifyingKey},
 };
-use signature::digest::Digest;
 use spki::{
     AlgorithmIdentifierOwned, AlgorithmIdentifierRef, AssociatedAlgorithmIdentifier,
     DynSignatureAlgorithmIdentifier,