99
1010#ifdef LTC_DER
1111
12- typedef int (* import_fn )(const unsigned char * , unsigned long , void * );
12+ typedef int (* import_fn )(const unsigned char * , unsigned long , void * );
1313
14- static const import_fn s_import_x509_fns [LTC_PKA_NUM ] = {
14+ #ifdef LTC_CURVE25519
15+ static int s_x25519_import_pub (const unsigned char * in , unsigned long inlen , void * key )
16+ {
17+ return x25519_import_raw (in , inlen , PK_PUBLIC , key );
18+ }
19+ static int s_x25519_import_spki (const unsigned char * in , unsigned long inlen , void * key )
20+ {
21+ return x509_process_public_key_from_spki (in , inlen ,
22+ LTC_OID_X25519 ,
23+ LTC_ASN1_EOL , NULL , NULL ,
24+ s_x25519_import_pub , key );
25+ }
26+
27+ static int s_ed25519_import_pub (const unsigned char * in , unsigned long inlen , void * key )
28+ {
29+ return ed25519_import_raw (in , inlen , PK_PUBLIC , key );
30+ }
31+ static int s_ed25519_import_spki (const unsigned char * in , unsigned long inlen , void * key )
32+ {
33+ return x509_process_public_key_from_spki (in , inlen ,
34+ LTC_OID_ED25519 ,
35+ LTC_ASN1_EOL , NULL , NULL ,
36+ s_ed25519_import_pub , key );
37+ }
38+ #endif
39+
40+ static const import_fn s_import_spki_fns [LTC_PKA_NUM ] = {
1541#ifdef LTC_MRSA
16- [LTC_PKA_RSA ] = (import_fn )rsa_import_x509 ,
17- [LTC_PKA_RSA_PSS ] = (import_fn )rsa_import_x509 ,
42+ [LTC_PKA_RSA ] = (import_fn )rsa_import_spki ,
43+ [LTC_PKA_RSA_PSS ] = (import_fn )rsa_import_spki ,
1844#endif
1945#ifdef LTC_MDSA
20- [LTC_PKA_DSA ] = (import_fn )dsa_import ,
46+ [LTC_PKA_DSA ] = (import_fn )dsa_import_spki ,
2147#endif
2248#ifdef LTC_MECC
23- [LTC_PKA_EC ] = (import_fn )ecc_import_x509 ,
49+ [LTC_PKA_EC ] = (import_fn )ecc_import_subject_public_key_info ,
2450#endif
2551#ifdef LTC_CURVE25519
26- [LTC_PKA_X25519 ] = (import_fn )x25519_import_x509 ,
27- [LTC_PKA_ED25519 ] = (import_fn )ed25519_import_x509 ,
52+ [LTC_PKA_X25519 ] = (import_fn )s_x25519_import_spki ,
53+ [LTC_PKA_ED25519 ] = (import_fn )s_ed25519_import_spki ,
2854#endif
2955};
3056
@@ -41,12 +67,12 @@ int x509_import_spki(const unsigned char *asn1_cert, unsigned long asn1_len, ltc
4167 goto err_out ;
4268 }
4369 if (pka < 0
44- || pka > LTC_ARRAY_SIZE (s_import_x509_fns )
45- || s_import_x509_fns [pka ] == NULL ) {
70+ || pka > LTC_ARRAY_SIZE (s_import_spki_fns )
71+ || s_import_spki_fns [pka ] == NULL ) {
4672 err = CRYPT_PK_INVALID_TYPE ;
4773 goto err_out ;
4874 }
49- if ((err = s_import_x509_fns [pka ](asn1_cert , asn1_len , & k -> u )) == CRYPT_OK ) {
75+ if ((err = s_import_spki_fns [pka ](spki -> data , spki -> size , & k -> u )) == CRYPT_OK ) {
5076 k -> id = pka ;
5177 }
5278err_out :
0 commit comments