static int rsa_alt_check_pair( const void *pub, const void *prv ) { unsigned char sig[POLARSSL_MPI_MAX_SIZE]; unsigned char hash[32]; size_t sig_len = 0; int ret; if( rsa_alt_get_size( prv ) != rsa_get_size( pub ) ) return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); memset( hash, 0x2a, sizeof( hash ) ); if( ( ret = rsa_alt_sign_wrap( (void *) prv, POLARSSL_MD_NONE, hash, sizeof( hash ), sig, &sig_len, NULL, NULL ) ) != 0 ) { return( ret ); } if( rsa_verify_wrap( (void *) pub, POLARSSL_MD_NONE, hash, sizeof( hash ), sig, sig_len ) != 0 ) { return( POLARSSL_ERR_RSA_KEY_CHECK_FAILED ); } return( 0 ); }
/** Retrieve the maximum possible size of the salt when creating a PKCS#1 PSS signature. @param padding Type of padding (LTC_PKCS_1_PSS only) @param hash_idx The index of the desired hash @param key The RSA key @return The maximum salt length in bytes or INT_MAX on error. */ int rsa_sign_saltlen_get_max_ex(int padding, int hash_idx, rsa_key *key) { int ret = INT_MAX; LTC_ARGCHK(key != NULL); if ((hash_is_valid(hash_idx) == CRYPT_OK) && (padding == LTC_PKCS_1_PSS)) { ret = rsa_get_size(key); if (ret < INT_MAX) { ret -= (hash_descriptor[hash_idx].hashsize + 2); } /* if */ } /* if */ return ret; }