mirror of
https://github.com/DarkStore-3DS/Project_CTR.git
synced 2026-07-04 00:39:03 +00:00
Cleaned up polarssl.
This commit is contained in:
+1
-138
@@ -189,145 +189,8 @@ int RsaSignVerify(void *data, u64 len, u8 *sign, u8 *mod, u8 *priv_exp, u32 sig_
|
||||
if(rsa_mode == CTR_RSA_VERIFY)
|
||||
rsa_result = rsa_pkcs1_verify(&ctx, RSA_PUBLIC, GetRsaHashType(sig_type), 0, hash, sign);
|
||||
else // CTR_RSA_SIGN
|
||||
rsa_result = ctr_rsa_rsassa_pkcs1_v15_sign(&ctx, RSA_PRIVATE, GetRsaHashType(sig_type), 0, hash, sign);
|
||||
rsa_result = rsa_rsassa_pkcs1_v15_sign(&ctx, RSA_PRIVATE, GetRsaHashType(sig_type), 0, hash, sign);
|
||||
|
||||
rsa_free(&ctx);
|
||||
return rsa_result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Hacked from rsa.c, polarssl doesn't like generating signatures when only D and N are present
|
||||
**/
|
||||
int ctr_rsa_rsassa_pkcs1_v15_sign( rsa_context *ctx,
|
||||
int mode,
|
||||
int hash_id,
|
||||
unsigned int hashlen,
|
||||
const unsigned char *hash,
|
||||
unsigned char *sig )
|
||||
{
|
||||
size_t nb_pad, olen, ret;
|
||||
unsigned char *p = sig;
|
||||
|
||||
if( ctx->padding != RSA_PKCS_V15 )
|
||||
return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
|
||||
|
||||
olen = ctx->len;
|
||||
|
||||
switch( hash_id )
|
||||
{
|
||||
case SIG_RSA_RAW:
|
||||
nb_pad = olen - 3 - hashlen;
|
||||
break;
|
||||
|
||||
case SIG_RSA_MD2:
|
||||
case SIG_RSA_MD4:
|
||||
case SIG_RSA_MD5:
|
||||
nb_pad = olen - 3 - 34;
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA1:
|
||||
nb_pad = olen - 3 - 35;
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA224:
|
||||
nb_pad = olen - 3 - 47;
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA256:
|
||||
nb_pad = olen - 3 - 51;
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA384:
|
||||
nb_pad = olen - 3 - 67;
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA512:
|
||||
nb_pad = olen - 3 - 83;
|
||||
break;
|
||||
|
||||
|
||||
default:
|
||||
return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
|
||||
}
|
||||
|
||||
if( ( nb_pad < 8 ) || ( nb_pad > olen ) )
|
||||
return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
|
||||
|
||||
*p++ = 0;
|
||||
*p++ = RSA_SIGN;
|
||||
memset( p, 0xFF, nb_pad );
|
||||
p += nb_pad;
|
||||
*p++ = 0;
|
||||
|
||||
switch( hash_id )
|
||||
{
|
||||
case SIG_RSA_RAW:
|
||||
memcpy( p, hash, hashlen );
|
||||
break;
|
||||
|
||||
case SIG_RSA_MD2:
|
||||
memcpy( p, ASN1_HASH_MDX, 18 );
|
||||
memcpy( p + 18, hash, 16 );
|
||||
p[13] = 2; break;
|
||||
|
||||
case SIG_RSA_MD4:
|
||||
memcpy( p, ASN1_HASH_MDX, 18 );
|
||||
memcpy( p + 18, hash, 16 );
|
||||
p[13] = 4; break;
|
||||
|
||||
case SIG_RSA_MD5:
|
||||
memcpy( p, ASN1_HASH_MDX, 18 );
|
||||
memcpy( p + 18, hash, 16 );
|
||||
p[13] = 5; break;
|
||||
|
||||
case SIG_RSA_SHA1:
|
||||
memcpy( p, ASN1_HASH_SHA1, 15 );
|
||||
memcpy( p + 15, hash, 20 );
|
||||
break;
|
||||
|
||||
case SIG_RSA_SHA224:
|
||||
memcpy( p, ASN1_HASH_SHA2X, 19 );
|
||||
memcpy( p + 19, hash, 28 );
|
||||
p[1] += 28; p[14] = 4; p[18] += 28; break;
|
||||
|
||||
case SIG_RSA_SHA256:
|
||||
memcpy( p, ASN1_HASH_SHA2X, 19 );
|
||||
memcpy( p + 19, hash, 32 );
|
||||
p[1] += 32; p[14] = 1; p[18] += 32; break;
|
||||
|
||||
case SIG_RSA_SHA384:
|
||||
memcpy( p, ASN1_HASH_SHA2X, 19 );
|
||||
memcpy( p + 19, hash, 48 );
|
||||
p[1] += 48; p[14] = 2; p[18] += 48; break;
|
||||
|
||||
case SIG_RSA_SHA512:
|
||||
memcpy( p, ASN1_HASH_SHA2X, 19 );
|
||||
memcpy( p + 19, hash, 64 );
|
||||
p[1] += 64; p[14] = 3; p[18] += 64; break;
|
||||
|
||||
default:
|
||||
return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
|
||||
}
|
||||
|
||||
mpi T, T1, T2;
|
||||
|
||||
mpi_init( &T ); mpi_init( &T1 ); mpi_init( &T2 );
|
||||
|
||||
MPI_CHK( mpi_read_binary( &T, sig, ctx->len ) );
|
||||
|
||||
if( mpi_cmp_mpi( &T, &ctx->N ) >= 0 )
|
||||
{
|
||||
mpi_free( &T );
|
||||
return( POLARSSL_ERR_RSA_BAD_INPUT_DATA );
|
||||
}
|
||||
|
||||
MPI_CHK( mpi_exp_mod( &T, &T, &ctx->D, &ctx->N, &ctx->RN ) );
|
||||
|
||||
MPI_CHK( mpi_write_binary( &T, sig, olen ) );
|
||||
|
||||
cleanup:
|
||||
|
||||
mpi_free( &T ); mpi_free( &T1 ); mpi_free( &T2 );
|
||||
|
||||
return( 0 );
|
||||
}
|
||||
Reference in New Issue
Block a user