@ -78,6 +78,81 @@ int rsa_get_d(void *context, size_t hdrlen, unsigned char tag,
return 0 ;
}
int rsa_get_p ( void * context , size_t hdrlen , unsigned char tag ,
const void * value , size_t vlen )
{
struct rsa_key * key = context ;
/* invalid key provided */
if ( ! value | | ! vlen | | vlen > key - > n_sz )
return - EINVAL ;
key - > p = value ;
key - > p_sz = vlen ;
return 0 ;
}
int rsa_get_q ( void * context , size_t hdrlen , unsigned char tag ,
const void * value , size_t vlen )
{
struct rsa_key * key = context ;
/* invalid key provided */
if ( ! value | | ! vlen | | vlen > key - > n_sz )
return - EINVAL ;
key - > q = value ;
key - > q_sz = vlen ;
return 0 ;
}
int rsa_get_dp ( void * context , size_t hdrlen , unsigned char tag ,
const void * value , size_t vlen )
{
struct rsa_key * key = context ;
/* invalid key provided */
if ( ! value | | ! vlen | | vlen > key - > n_sz )
return - EINVAL ;
key - > dp = value ;
key - > dp_sz = vlen ;
return 0 ;
}
int rsa_get_dq ( void * context , size_t hdrlen , unsigned char tag ,
const void * value , size_t vlen )
{
struct rsa_key * key = context ;
/* invalid key provided */
if ( ! value | | ! vlen | | vlen > key - > n_sz )
return - EINVAL ;
key - > dq = value ;
key - > dq_sz = vlen ;
return 0 ;
}
int rsa_get_qinv ( void * context , size_t hdrlen , unsigned char tag ,
const void * value , size_t vlen )
{
struct rsa_key * key = context ;
/* invalid key provided */
if ( ! value | | ! vlen | | vlen > key - > n_sz )
return - EINVAL ;
key - > qinv = value ;
key - > qinv_sz = vlen ;
return 0 ;
}
/**
* rsa_parse_pub_key ( ) - decodes the BER encoded buffer and stores in the
* provided struct rsa_key , pointers to the raw key as is ,