| | 923 | static int list_algorithms(void) |
| | 924 | { |
| | 925 | int i; |
| | 926 | const char *aname; |
| | 927 | |
| | 928 | if (verbose) |
| | 929 | printf("Card supports %d algorithm(s)\n\n",card->algorithm_count); |
| | 930 | |
| | 931 | for (i=0; i < card->algorithm_count; i++) { |
| | 932 | switch (card->algorithms[i].algorithm) { |
| | 933 | case SC_ALGORITHM_RSA: |
| | 934 | aname = "rsa"; |
| | 935 | break; |
| | 936 | case SC_ALGORITHM_DSA: |
| | 937 | aname = "dsa"; |
| | 938 | aname = "ec"; |
| | 939 | break; |
| | 940 | case SC_ALGORITHM_DES: |
| | 941 | aname = "des"; |
| | 942 | break; |
| | 943 | case SC_ALGORITHM_3DES: |
| | 944 | aname = "3des"; |
| | 945 | break; |
| | 946 | case SC_ALGORITHM_MD5: |
| | 947 | aname = "md5"; |
| | 948 | break; |
| | 949 | case SC_ALGORITHM_SHA1: |
| | 950 | aname = "sha1"; |
| | 951 | break; |
| | 952 | case SC_ALGORITHM_PBKDF2: |
| | 953 | aname = "pbkdf2"; |
| | 954 | break; |
| | 955 | case SC_ALGORITHM_PBES2: |
| | 956 | aname = "pbes2"; |
| | 957 | break; |
| | 958 | default: |
| | 959 | aname = "unknown"; |
| | 960 | break; |
| | 961 | } |
| | 962 | |
| | 963 | printf("Algorithm: %s\n", aname); |
| | 964 | printf("Key length: %d\n", card->algorithms[i].key_length); |
| | 965 | printf("Flags:"); |
| | 966 | if (card->algorithms[i].flags & SC_ALGORITHM_ONBOARD_KEY_GEN) |
| | 967 | printf(" onboard key generation"); |
| | 968 | if (card->algorithms[i].flags & SC_ALGORITHM_NEED_USAGE) |
| | 969 | printf(" needs usage"); |
| | 970 | if ( card->algorithms[i].algorithm == SC_ALGORITHM_RSA) { |
| | 971 | int padding = card->algorithms[i].flags |
| | 972 | & SC_ALGORITHM_RSA_PADS; |
| | 973 | int hashes = card->algorithms[i].flags |
| | 974 | & SC_ALGORITHM_RSA_HASHES; |
| | 975 | |
| | 976 | printf(" padding ("); |
| | 977 | if (padding == SC_ALGORITHM_RSA_PAD_NONE) |
| | 978 | printf(" none"); |
| | 979 | if (padding & SC_ALGORITHM_RSA_PAD_PKCS1) |
| | 980 | printf(" pkcs1"); |
| | 981 | if (padding & SC_ALGORITHM_RSA_PAD_ANSI) |
| | 982 | printf(" ansi"); |
| | 983 | if (padding & SC_ALGORITHM_RSA_PAD_ISO9796) |
| | 984 | printf(" iso9796"); |
| | 985 | |
| | 986 | printf(" ) "); |
| | 987 | printf("hashes ("); |
| | 988 | if (hashes & SC_ALGORITHM_RSA_HASH_NONE) |
| | 989 | printf(" none"); |
| | 990 | if (hashes & SC_ALGORITHM_RSA_HASH_SHA1) |
| | 991 | printf(" sha1"); |
| | 992 | if (hashes & SC_ALGORITHM_RSA_HASH_MD5) |
| | 993 | printf(" MD5"); |
| | 994 | if (hashes & SC_ALGORITHM_RSA_HASH_MD5_SHA1) |
| | 995 | printf(" md5-sha1"); |
| | 996 | if (hashes & SC_ALGORITHM_RSA_HASH_RIPEMD160) |
| | 997 | printf(" ripemd160"); |
| | 998 | printf(" )"); |
| | 999 | } |
| | 1000 | printf("\n"); |
| | 1001 | if (card->algorithms[i].algorithm == SC_ALGORITHM_RSA |
| | 1002 | && card->algorithms[i].u._rsa.exponent) { |
| | 1003 | printf("RSA public exponent: %lu\n", (unsigned long) |
| | 1004 | card->algorithms[i].u._rsa.exponent); |
| | 1005 | } |
| | 1006 | |
| | 1007 | if (i < card->algorithm_count) |
| | 1008 | printf("\n"); |
| | 1009 | } |
| | 1010 | return 0; |
| | 1011 | } |
| | 1012 | |