@@ -11,6 +11,9 @@ use elliptic_curve::{
11
11
FieldBytes , FieldBytesSize , PrimeCurve ,
12
12
} ;
13
13
14
+ #[ cfg( all( feature = "rustcrypto" , feature = "rsa" ) ) ]
15
+ use crate :: structures:: Signature ;
16
+
14
17
impl < C > TryFrom < EccSignature > for ecdsa:: Signature < C >
15
18
where
16
19
C : PrimeCurve ,
38
41
}
39
42
}
40
43
41
- // TODO(baloo): impl TryFrom<RsaSignature> for rsa::pkcs1v15::Signature
42
- // TODO(baloo): impl TryFrom<RsaSignature> for rsa::pss::Signature
44
+ // Note: this does not implement `TryFrom<RsaSignature>` because `RsaSignature` does not carry the
45
+ // information whether the signatures was generated using PKCS#1v1.5 or PSS.
46
+ #[ cfg( all( feature = "rustcrypto" , feature = "rsa" ) ) ]
47
+ impl TryFrom < Signature > for rsa:: pkcs1v15:: Signature {
48
+ type Error = Error ;
49
+
50
+ fn try_from ( signature : Signature ) -> Result < Self > {
51
+ let Signature :: RsaSsa ( signature) = signature else {
52
+ return Err ( Error :: local_error ( WrapperErrorKind :: InvalidParam ) ) ;
53
+ } ;
54
+
55
+ Self :: try_from ( signature. signature ( ) . as_bytes ( ) )
56
+ . map_err ( |_| Error :: local_error ( WrapperErrorKind :: InvalidParam ) )
57
+ }
58
+ }
59
+
60
+ // Note: this does not implement `TryFrom<RsaSignature>` because `RsaSignature` does not carry the
61
+ // information whether the signatures was generated using PKCS#1v1.5 or PSS.
62
+ #[ cfg( all( feature = "rustcrypto" , feature = "rsa" ) ) ]
63
+ impl TryFrom < Signature > for rsa:: pss:: Signature {
64
+ type Error = Error ;
65
+
66
+ fn try_from ( signature : Signature ) -> Result < Self > {
67
+ let Signature :: RsaPss ( signature) = signature else {
68
+ return Err ( Error :: local_error ( WrapperErrorKind :: InvalidParam ) ) ;
69
+ } ;
70
+
71
+ Self :: try_from ( signature. signature ( ) . as_bytes ( ) )
72
+ . map_err ( |_| Error :: local_error ( WrapperErrorKind :: InvalidParam ) )
73
+ }
74
+ }
0 commit comments