@@ -163,7 +163,7 @@ define!(
163
163
// B. Verifying thread safety.
164
164
//
165
165
// 1. Calls towards the specific Pk implementation are done via function pointers.
166
- //
166
+ //
167
167
// - Example call towards Pk:
168
168
// ../../../mbedtls-sys/vendor/library/ssl_srv.c:3707 - mbedtls_pk_decrypt( private_key, p, len, ...
169
169
// - This calls a generic function pointer via:
@@ -174,7 +174,7 @@ define!(
174
174
// - The function pointers are defined via function:
175
175
// ../../../mbedtls-sys/vendor/crypto/library/pk.c:115 - mbedtls_pk_info_from_type
176
176
// - They are as follows: mbedtls_rsa_info / mbedtls_eckey_info / mbedtls_ecdsa_info
177
- // - These are defined in:
177
+ // - These are defined in:
178
178
// ../../../mbedtls-sys/vendor/crypto/library/pk_wrap.c:196
179
179
//
180
180
// C. Checking types one by one.
@@ -222,7 +222,7 @@ define!(
222
222
// mbedtls_ecp_mul_restartable: ../../../mbedtls-sys/vendor/crypto/library/ecp.c:2351
223
223
// MBEDTLS_ECP_INTERNAL_ALT is not defined. (otherwise it might not be safe depending on ecp_init/ecp_free) ../../../mbedtls-sys/build/config.rs:131
224
224
// Passes as const to: mbedtls_ecp_check_privkey / mbedtls_ecp_check_pubkey / mbedtls_ecp_get_type( grp
225
- //
225
+ //
226
226
// - Ignored due to not defined: ecdsa_verify_rs_wrap, ecdsa_sign_rs_wrap, ecdsa_rs_alloc, ecdsa_rs_free
227
227
// (Undefined - MBEDTLS_ECP_RESTARTABLE - ../../../mbedtls-sys/build/config.rs:173)
228
228
//
@@ -1042,7 +1042,6 @@ mod tests {
1042
1042
use super :: * ;
1043
1043
use crate :: hash:: { Type , MdInfo } ;
1044
1044
use crate :: pk:: Type as PkType ;
1045
- use rand:: Rng ;
1046
1045
1047
1046
// This is test data that must match library output *exactly*
1048
1047
const TEST_PEM : & ' static str = "-----BEGIN RSA PRIVATE KEY-----
@@ -1243,6 +1242,7 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
1243
1242
fn rsa_sign_verify_pkcs1v15 ( ) {
1244
1243
let mut pk =
1245
1244
Pk :: generate_rsa ( & mut crate :: test_support:: rand:: test_rng ( ) , 2048 , 0x10001 ) . unwrap ( ) ;
1245
+ let data = b"SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGN" ;
1246
1246
let mut signature = vec ! [ 0u8 ; ( pk. len( ) + 7 ) / 8 ] ;
1247
1247
1248
1248
let digests = [
@@ -1258,43 +1258,30 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
1258
1258
Type :: Ripemd ,
1259
1259
] ;
1260
1260
1261
- for digest in & digests {
1262
- let digest = * digest;
1263
-
1264
- let hash_len = if let Type :: None = digest {
1265
- // signing raw data, can be of random len but can't be 0
1266
- rand:: thread_rng ( ) . gen_range ( 1 , 64 )
1261
+ for & digest in & digests {
1262
+ let data = if let Some ( md @ MdInfo { .. } ) = digest. into ( ) {
1263
+ & data[ ..md. size ( ) ]
1267
1264
} else {
1268
- // mbedtls_pk_sign() and mbedtls_pk_verify() and their extended and
1269
- // restartable variants now require at least the specified hash length if
1270
- // nonzero. Before, for RSA, hash_len was ignored in favor of the length of
1271
- // the specified hash algorithm.
1272
- Into :: < Option < MdInfo > > :: into ( digest)
1273
- . expect ( & format ! ( "Failed to convert {:?} to MdInfo" , digest) )
1274
- . size ( )
1265
+ & data[ ..]
1275
1266
} ;
1276
1267
1277
- let data = rand:: thread_rng ( )
1278
- . gen_iter :: < u8 > ( )
1279
- . take ( hash_len)
1280
- . collect :: < Vec < _ > > ( ) ;
1281
-
1282
1268
let len = pk
1283
1269
. sign (
1284
1270
digest,
1285
- & data,
1271
+ data,
1286
1272
& mut signature,
1287
1273
& mut crate :: test_support:: rand:: test_rng ( ) ,
1288
1274
)
1289
1275
. unwrap ( ) ;
1290
- pk. verify ( digest, & data, & signature[ 0 ..len] ) . unwrap ( ) ;
1276
+ pk. verify ( digest, data, & signature[ 0 ..len] ) . unwrap ( ) ;
1291
1277
}
1292
1278
}
1293
1279
1294
1280
#[ test]
1295
1281
fn rsa_sign_verify_pss ( ) {
1296
1282
let mut pk =
1297
1283
Pk :: generate_rsa ( & mut crate :: test_support:: rand:: test_rng ( ) , 2048 , 0x10001 ) . unwrap ( ) ;
1284
+ let data = b"SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGNATURE TEST SIGN" ;
1298
1285
let mut signature = vec ! [ 0u8 ; ( pk. len( ) + 7 ) / 8 ] ;
1299
1286
1300
1287
let digests = [
@@ -1310,27 +1297,13 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
1310
1297
Type :: Ripemd ,
1311
1298
] ;
1312
1299
1313
- for digest in & digests {
1314
- let digest = * digest;
1315
-
1316
- let hash_len = if let Type :: None = digest {
1317
- // signing raw data, can be of random len but can't be 0
1318
- rand:: thread_rng ( ) . gen_range ( 1 , 64 )
1300
+ for & digest in & digests {
1301
+ let data = if let Some ( md @ MdInfo { .. } ) = digest. into ( ) {
1302
+ & data[ ..md. size ( ) ]
1319
1303
} else {
1320
- // mbedtls_pk_sign() and mbedtls_pk_verify() and their extended and
1321
- // restartable variants now require at least the specified hash length if
1322
- // nonzero. Before, for RSA, hash_len was ignored in favor of the length of
1323
- // the specified hash algorithm.
1324
- Into :: < Option < MdInfo > > :: into ( digest)
1325
- . expect ( & format ! ( "Failed to convert {:?} to MdInfo" , digest) )
1326
- . size ( )
1304
+ & data[ ..]
1327
1305
} ;
1328
1306
1329
- let data = rand:: thread_rng ( )
1330
- . gen_iter :: < u8 > ( )
1331
- . take ( hash_len)
1332
- . collect :: < Vec < _ > > ( ) ;
1333
-
1334
1307
pk. set_options ( Options :: Rsa {
1335
1308
padding : RsaPadding :: Pkcs1V21 { mgf : digest } ,
1336
1309
} ) ;
@@ -1339,7 +1312,7 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
1339
1312
assert ! ( pk
1340
1313
. sign(
1341
1314
digest,
1342
- & data,
1315
+ data,
1343
1316
& mut signature,
1344
1317
& mut crate :: test_support:: rand:: test_rng( )
1345
1318
)
@@ -1348,12 +1321,12 @@ iy6KC991zzvaWY/Ys+q/84Afqa+0qJKQnPuy/7F5GkVdQA/lfbhi
1348
1321
let len = pk
1349
1322
. sign (
1350
1323
digest,
1351
- & data,
1324
+ data,
1352
1325
& mut signature,
1353
1326
& mut crate :: test_support:: rand:: test_rng ( ) ,
1354
1327
)
1355
1328
. unwrap ( ) ;
1356
- pk. verify ( digest, & data, & signature[ 0 ..len] ) . unwrap ( ) ;
1329
+ pk. verify ( digest, data, & signature[ 0 ..len] ) . unwrap ( ) ;
1357
1330
}
1358
1331
}
1359
1332
}
0 commit comments