CryptX
view release on metacpan or search on metacpan
src/ltc/pk/rsa/rsa_import_x509.c view on Meta::CPAN
}
if ((err = s_rsa_decode_parameters(&d, &key->params)) != CRYPT_OK) {
return err;
}
key->pss_oaep = 1;
return CRYPT_OK;
}
static LTC_INLINE int s_rsa_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key)
{
int err;
if (s_rsa_1_5_import_spki(in, inlen, key) == CRYPT_OK) {
return CRYPT_OK;
}
if ((err = s_rsa_pss_import_spki(in, inlen, key)) == CRYPT_OK) {
return CRYPT_OK;
}
return err;
}
/**
Import an RSA key from SubjectPublicKeyInfo
@param in The packet to import from
@param inlen It's length (octets)
@param key [out] Destination for newly imported key
@return CRYPT_OK if successful, upon error allocated memory is freed
*/
int rsa_import_spki(const unsigned char *in, unsigned long inlen, rsa_key *key)
{
int err;
LTC_ARGCHK(in != NULL);
LTC_ARGCHK(key != NULL);
LTC_ARGCHK(ltc_mp.name != NULL);
/* init key */
if ((err = rsa_init(key)) != CRYPT_OK) {
return err;
}
if ((err = s_rsa_import_spki(in, inlen, key)) == CRYPT_OK) {
key->type = PK_PUBLIC;
return CRYPT_OK;
}
rsa_free(key);
return err;
}
/**
Import an RSA key from a X.509 certificate
@param in The packet to import from
@param inlen It's length (octets)
@param key [out] Destination for newly imported key
@return CRYPT_OK if successful, upon error allocated memory is freed
*/
int rsa_import_x509(const unsigned char *in, unsigned long inlen, rsa_key *key)
{
ltc_asn1_list *decoded_list;
const ltc_asn1_list *spki;
int err;
LTC_ARGCHK(in != NULL);
LTC_ARGCHK(key != NULL);
LTC_ARGCHK(ltc_mp.name != NULL);
/* init key */
if ((err = rsa_init(key)) != CRYPT_OK) {
return err;
}
/* First try to decode as SubjectPublicKeyInfo */
if (s_rsa_import_spki(in, inlen, key) == CRYPT_OK) {
key->type = PK_PUBLIC;
return CRYPT_OK;
}
/* Now try to extract the SubjectPublicKeyInfo from the Certificate */
if ((err = x509_decode_spki(in, inlen, &decoded_list, &spki)) != CRYPT_OK) {
rsa_free(key);
return err;
}
err = s_rsa_import_spki(spki->data, spki->size, key);
der_free_sequence_flexi(decoded_list);
if (err != CRYPT_OK) {
rsa_free(key);
return err;
}
key->type = PK_PUBLIC;
return CRYPT_OK;
}
#endif /* LTC_MRSA */
( run in 2.413 seconds using v1.01-cache-2.11-cpan-5837b0d9d2c )