Loading CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,11 @@ Changes between 0.9.8a and 0.9.9 [xx XXX xxxx] *) New function EVP_PKEY_asn1_get0_info() to retrieve information about public key algorithms. New option to openssl utility: "list-public-key-algorithms" to print out info. [Steve Henson] *) Implement the Supported Elliptic Curves Extension for ECC ciphersuites from draft-ietf-tls-ecc-12.txt. [Douglas Stebila] Loading apps/openssl.c +48 −5 Original line number Diff line number Diff line Loading @@ -141,6 +141,7 @@ static unsigned long MS_CALLBACK hash(const void *a_void); static int MS_CALLBACK cmp(const void *a_void,const void *b_void); static LHASH *prog_init(void ); static int do_cmd(LHASH *prog,int argc,char *argv[]); static void list_pkey(BIO *out); char *default_config_file=NULL; /* Make sure there is only one when MONOLITH is defined */ Loading Loading @@ -367,6 +368,7 @@ end: #define LIST_STANDARD_COMMANDS "list-standard-commands" #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" #define LIST_CIPHER_COMMANDS "list-cipher-commands" #define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms" static int do_cmd(LHASH *prog, int argc, char *argv[]) { Loading Loading @@ -409,7 +411,8 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) } else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) || (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) || (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0)) (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0) || (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0)) { int list_type; BIO *bio_stdout; Loading @@ -418,6 +421,8 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) list_type = FUNC_TYPE_GENERAL; else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) list_type = FUNC_TYPE_MD; else if (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0) list_type = FUNC_TYPE_PKEY; else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ list_type = FUNC_TYPE_CIPHER; bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); Loading @@ -427,10 +432,15 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) bio_stdout = BIO_push(tmpbio, bio_stdout); } #endif if (list_type == FUNC_TYPE_PKEY) list_pkey(bio_stdout); else { for (fp=functions; fp->name != NULL; fp++) if (fp->type == list_type) BIO_printf(bio_stdout, "%s\n", fp->name); BIO_printf(bio_stdout, "%s\n", fp->name); } BIO_free_all(bio_stdout); ret=0; goto end; Loading Loading @@ -485,6 +495,39 @@ static int SortFnByName(const void *_f1,const void *_f2) return strcmp(f1->name,f2->name); } static void list_pkey(BIO *out) { int i; for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { const EVP_PKEY_ASN1_METHOD *ameth; int pkey_id, pkey_base_id, pkey_flags; const char *pinfo, *pem_str; ameth = EVP_PKEY_asn1_get0(i); EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags, &pinfo, &pem_str, ameth); if (pkey_flags & ASN1_PKEY_ALIAS) { BIO_printf(out, "Name: %s\n", OBJ_nid2ln(pkey_id)); BIO_printf(out, "\tType: Alias to %s\n", OBJ_nid2ln(pkey_base_id)); } else { BIO_printf(out, "Name: %s\n", pinfo); BIO_printf(out, "\tType: %s Algorithm\n", pkey_flags & ASN1_PKEY_DYNAMIC ? "External" : "Builtin"); BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id)); if (pem_str == NULL) pem_str = "(none)"; BIO_printf(out, "\tPEM string: %s\n", pem_str); } } } static LHASH *prog_init(void) { LHASH *ret; Loading apps/progs.h +1 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ extern int ts_main(int argc,char *argv[]); #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 #define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_PKEY 4 typedef struct { int type; Loading apps/progs.pl +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ print <<'EOF'; #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 #define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_PKEY 4 typedef struct { int type; Loading crypto/asn1/ameth_lib.c +19 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,25 @@ int EVP_PKEY_asn1_add(const EVP_PKEY_ASN1_METHOD *ameth) return 1; } int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id, int *ppkey_flags, const char **pinfo, const char **ppem_str, const EVP_PKEY_ASN1_METHOD *ameth) { if (!ameth) return 0; if (ppkey_id) *ppkey_id = ameth->pkey_id; if (ppkey_base_id) *ppkey_base_id = ameth->pkey_base_id; if (ppkey_flags) *ppkey_flags = ameth->pkey_flags; if (pinfo) *pinfo = ameth->info; if (ppem_str) *ppem_str = ameth->pem_str; return 1; } EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, const char *pem_str, const char *info) { Loading Loading
CHANGES +5 −0 Original line number Diff line number Diff line Loading @@ -4,6 +4,11 @@ Changes between 0.9.8a and 0.9.9 [xx XXX xxxx] *) New function EVP_PKEY_asn1_get0_info() to retrieve information about public key algorithms. New option to openssl utility: "list-public-key-algorithms" to print out info. [Steve Henson] *) Implement the Supported Elliptic Curves Extension for ECC ciphersuites from draft-ietf-tls-ecc-12.txt. [Douglas Stebila] Loading
apps/openssl.c +48 −5 Original line number Diff line number Diff line Loading @@ -141,6 +141,7 @@ static unsigned long MS_CALLBACK hash(const void *a_void); static int MS_CALLBACK cmp(const void *a_void,const void *b_void); static LHASH *prog_init(void ); static int do_cmd(LHASH *prog,int argc,char *argv[]); static void list_pkey(BIO *out); char *default_config_file=NULL; /* Make sure there is only one when MONOLITH is defined */ Loading Loading @@ -367,6 +368,7 @@ end: #define LIST_STANDARD_COMMANDS "list-standard-commands" #define LIST_MESSAGE_DIGEST_COMMANDS "list-message-digest-commands" #define LIST_CIPHER_COMMANDS "list-cipher-commands" #define LIST_PUBLIC_KEY_ALGORITHMS "list-public-key-algorithms" static int do_cmd(LHASH *prog, int argc, char *argv[]) { Loading Loading @@ -409,7 +411,8 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) } else if ((strcmp(argv[0],LIST_STANDARD_COMMANDS) == 0) || (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) || (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0)) (strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0) || (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0)) { int list_type; BIO *bio_stdout; Loading @@ -418,6 +421,8 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) list_type = FUNC_TYPE_GENERAL; else if (strcmp(argv[0],LIST_MESSAGE_DIGEST_COMMANDS) == 0) list_type = FUNC_TYPE_MD; else if (strcmp(argv[0],LIST_PUBLIC_KEY_ALGORITHMS) == 0) list_type = FUNC_TYPE_PKEY; else /* strcmp(argv[0],LIST_CIPHER_COMMANDS) == 0 */ list_type = FUNC_TYPE_CIPHER; bio_stdout = BIO_new_fp(stdout,BIO_NOCLOSE); Loading @@ -427,10 +432,15 @@ static int do_cmd(LHASH *prog, int argc, char *argv[]) bio_stdout = BIO_push(tmpbio, bio_stdout); } #endif if (list_type == FUNC_TYPE_PKEY) list_pkey(bio_stdout); else { for (fp=functions; fp->name != NULL; fp++) if (fp->type == list_type) BIO_printf(bio_stdout, "%s\n", fp->name); BIO_printf(bio_stdout, "%s\n", fp->name); } BIO_free_all(bio_stdout); ret=0; goto end; Loading Loading @@ -485,6 +495,39 @@ static int SortFnByName(const void *_f1,const void *_f2) return strcmp(f1->name,f2->name); } static void list_pkey(BIO *out) { int i; for (i = 0; i < EVP_PKEY_asn1_get_count(); i++) { const EVP_PKEY_ASN1_METHOD *ameth; int pkey_id, pkey_base_id, pkey_flags; const char *pinfo, *pem_str; ameth = EVP_PKEY_asn1_get0(i); EVP_PKEY_asn1_get0_info(&pkey_id, &pkey_base_id, &pkey_flags, &pinfo, &pem_str, ameth); if (pkey_flags & ASN1_PKEY_ALIAS) { BIO_printf(out, "Name: %s\n", OBJ_nid2ln(pkey_id)); BIO_printf(out, "\tType: Alias to %s\n", OBJ_nid2ln(pkey_base_id)); } else { BIO_printf(out, "Name: %s\n", pinfo); BIO_printf(out, "\tType: %s Algorithm\n", pkey_flags & ASN1_PKEY_DYNAMIC ? "External" : "Builtin"); BIO_printf(out, "\tOID: %s\n", OBJ_nid2ln(pkey_id)); if (pem_str == NULL) pem_str = "(none)"; BIO_printf(out, "\tPEM string: %s\n", pem_str); } } } static LHASH *prog_init(void) { LHASH *ret; Loading
apps/progs.h +1 −0 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ extern int ts_main(int argc,char *argv[]); #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 #define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_PKEY 4 typedef struct { int type; Loading
apps/progs.pl +1 −0 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ print <<'EOF'; #define FUNC_TYPE_GENERAL 1 #define FUNC_TYPE_MD 2 #define FUNC_TYPE_CIPHER 3 #define FUNC_TYPE_PKEY 4 typedef struct { int type; Loading
crypto/asn1/ameth_lib.c +19 −0 Original line number Diff line number Diff line Loading @@ -186,6 +186,25 @@ int EVP_PKEY_asn1_add(const EVP_PKEY_ASN1_METHOD *ameth) return 1; } int EVP_PKEY_asn1_get0_info(int *ppkey_id, int *ppkey_base_id, int *ppkey_flags, const char **pinfo, const char **ppem_str, const EVP_PKEY_ASN1_METHOD *ameth) { if (!ameth) return 0; if (ppkey_id) *ppkey_id = ameth->pkey_id; if (ppkey_base_id) *ppkey_base_id = ameth->pkey_base_id; if (ppkey_flags) *ppkey_flags = ameth->pkey_flags; if (pinfo) *pinfo = ameth->info; if (ppem_str) *ppem_str = ameth->pem_str; return 1; } EVP_PKEY_ASN1_METHOD* EVP_PKEY_asn1_new(int id, const char *pem_str, const char *info) { Loading