11//! PKCS#1 algorithm params tests
22
33use const_oid:: db;
4- use der:: { asn1:: OctetStringRef , Encode } ;
4+ use der:: {
5+ asn1:: { AnyRef , ObjectIdentifier , OctetStringRef } ,
6+ oid:: AssociatedOid ,
7+ Encode ,
8+ } ;
59use hex_literal:: hex;
610use pkcs1:: { RsaOaepParams , RsaPssParams , TrailerField } ;
711
812/// Default PSS parameters using all default values (SHA1, MGF1)
913const RSA_PSS_PARAMETERS_DEFAULTS : & [ u8 ] = & hex ! ( "3000" ) ;
1014/// Example PSS parameters using SHA256 instead of SHA1
11- const RSA_PSS_PARAMETERS_SHA2_256 : & [ u8 ] = & hex ! ( "3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120 " ) ;
15+ const RSA_PSS_PARAMETERS_SHA2_256 : & [ u8 ] = & hex ! ( "3034a00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500a203020120 " ) ;
1216
1317/// Default OAEP parameters using all default values (SHA1, MGF1, Empty)
1418const RSA_OAEP_PARAMETERS_DEFAULTS : & [ u8 ] = & hex ! ( "3000" ) ;
15- /// Example OAEP parameters using SHA256 instead of SHA1 and 'abc' as label
16- const RSA_OAEP_PARAMETERS_SHA2_256 : & [ u8 ] = & hex ! ( "303fa00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a212301006092a864886f70d0101090403abcdef" ) ;
19+ /// Example OAEP parameters using SHA256 instead of SHA1
20+ const RSA_OAEP_PARAMETERS_SHA2_256 : & [ u8 ] = & hex ! ( "302fa00f300d06096086480165030402010500a11c301a06092a864886f70d010108300d06096086480165030402010500" ) ;
21+
22+ struct Sha1Mock { }
23+ impl AssociatedOid for Sha1Mock {
24+ const OID : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "1.3.14.3.2.26" ) ;
25+ }
26+
27+ struct Sha256Mock { }
28+ impl AssociatedOid for Sha256Mock {
29+ const OID : ObjectIdentifier = ObjectIdentifier :: new_unwrap ( "2.16.840.1.101.3.4.2.1" ) ;
30+ }
1731
1832#[ test]
1933fn decode_pss_param ( ) {
@@ -23,7 +37,7 @@ fn decode_pss_param() {
2337 . hash
2438 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_256 )
2539 . is_ok( ) ) ;
26- assert_eq ! ( param. hash. parameters, None ) ;
40+ assert_eq ! ( param. hash. parameters, Some ( AnyRef :: NULL ) ) ;
2741 assert ! ( param
2842 . mask_gen
2943 . assert_algorithm_oid( db:: rfc5912:: ID_MGF_1 )
@@ -56,7 +70,7 @@ fn decode_pss_param_default() {
5670 . hash
5771 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_1 )
5872 . is_ok( ) ) ;
59- assert_eq ! ( param. hash. parameters, None ) ;
73+ assert_eq ! ( param. hash. parameters, Some ( AnyRef :: NULL ) ) ;
6074 assert ! ( param
6175 . mask_gen
6276 . assert_algorithm_oid( db:: rfc5912:: ID_MGF_1 )
@@ -67,6 +81,10 @@ fn decode_pss_param_default() {
6781 . unwrap( )
6882 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_1 )
6983 . is_ok( ) ) ;
84+ assert_eq ! (
85+ param. mask_gen. parameters. unwrap( ) . parameters,
86+ Some ( AnyRef :: NULL )
87+ ) ;
7088 assert_eq ! ( param. salt_len, 20 ) ;
7189 assert_eq ! ( param. trailer_field, TrailerField :: BC ) ;
7290 assert_eq ! ( param, Default :: default ( ) )
@@ -81,6 +99,23 @@ fn encode_pss_param_default() {
8199 ) ;
82100}
83101
102+ #[ test]
103+ fn new_pss_param ( ) {
104+ let mut buf = [ 0_u8 ; 256 ] ;
105+
106+ let param = RsaPssParams :: new :: < Sha1Mock > ( 20 ) ;
107+ assert_eq ! (
108+ param. encode_to_slice( & mut buf) . unwrap( ) ,
109+ RSA_PSS_PARAMETERS_DEFAULTS
110+ ) ;
111+
112+ let param = RsaPssParams :: new :: < Sha256Mock > ( 32 ) ;
113+ assert_eq ! (
114+ param. encode_to_slice( & mut buf) . unwrap( ) ,
115+ RSA_PSS_PARAMETERS_SHA2_256
116+ ) ;
117+ }
118+
84119#[ test]
85120fn decode_oaep_param ( ) {
86121 let param = RsaOaepParams :: try_from ( RSA_OAEP_PARAMETERS_SHA2_256 ) . unwrap ( ) ;
@@ -89,7 +124,7 @@ fn decode_oaep_param() {
89124 . hash
90125 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_256 )
91126 . is_ok( ) ) ;
92- assert_eq ! ( param. hash. parameters, None ) ;
127+ assert_eq ! ( param. hash. parameters, Some ( AnyRef :: NULL ) ) ;
93128 assert ! ( param
94129 . mask_gen
95130 . assert_algorithm_oid( db:: rfc5912:: ID_MGF_1 )
@@ -104,14 +139,13 @@ fn decode_oaep_param() {
104139 . p_source
105140 . assert_algorithm_oid( db:: rfc5912:: ID_P_SPECIFIED )
106141 . is_ok( ) ) ;
107- assert_eq ! (
108- param
109- . p_source
110- . parameters_any( )
111- . unwrap( )
112- . decode_as:: <OctetStringRef <' _>>( ) ,
113- OctetStringRef :: new( & [ 0xab , 0xcd , 0xef ] )
114- ) ;
142+ assert ! ( param
143+ . p_source
144+ . parameters_any( )
145+ . unwrap( )
146+ . decode_as:: <OctetStringRef <' _>>( )
147+ . unwrap( )
148+ . is_empty( ) , ) ;
115149}
116150
117151#[ test]
@@ -132,7 +166,7 @@ fn decode_oaep_param_default() {
132166 . hash
133167 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_1 )
134168 . is_ok( ) ) ;
135- assert_eq ! ( param. hash. parameters, None ) ;
169+ assert_eq ! ( param. hash. parameters, Some ( AnyRef :: NULL ) ) ;
136170 assert ! ( param
137171 . mask_gen
138172 . assert_algorithm_oid( db:: rfc5912:: ID_MGF_1 )
@@ -143,6 +177,10 @@ fn decode_oaep_param_default() {
143177 . unwrap( )
144178 . assert_algorithm_oid( db:: rfc5912:: ID_SHA_1 )
145179 . is_ok( ) ) ;
180+ assert_eq ! (
181+ param. mask_gen. parameters. unwrap( ) . parameters,
182+ Some ( AnyRef :: NULL )
183+ ) ;
146184 assert ! ( param
147185 . p_source
148186 . assert_algorithm_oid( db:: rfc5912:: ID_P_SPECIFIED )
@@ -165,3 +203,21 @@ fn encode_oaep_param_default() {
165203 RSA_OAEP_PARAMETERS_DEFAULTS
166204 ) ;
167205}
206+
207+ #[ test]
208+ fn new_oaep_param ( ) {
209+ let mut buf = [ 0_u8 ; 256 ] ;
210+
211+ let param = RsaOaepParams :: new :: < Sha1Mock > ( ) ;
212+ assert_eq ! (
213+ param. encode_to_slice( & mut buf) . unwrap( ) ,
214+ RSA_OAEP_PARAMETERS_DEFAULTS
215+ ) ;
216+
217+ let param = RsaOaepParams :: new :: < Sha256Mock > ( ) ;
218+ println ! ( "{:02x?}" , param. encode_to_slice( & mut buf) . unwrap( ) ) ;
219+ assert_eq ! (
220+ param. encode_to_slice( & mut buf) . unwrap( ) ,
221+ RSA_OAEP_PARAMETERS_SHA2_256
222+ ) ;
223+ }
0 commit comments