~ubuntu-branches/ubuntu/maverick/gnutls26/maverick-updates

« back to all changes in this revision

Viewing changes to lib/gnutls_algorithms.c

  • Committer: Bazaar Package Importer
  • Author(s): Andreas Metzler
  • Date: 2009-04-14 14:23:19 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20090414142319-ok7xejzbqkofno1q
Tags: 2.6.5-1
* Sync sections in debian/control with override file. libgnutls26-dbg is
  section debug, guile-gnutls is section lisp.
* New upstream version. (Needed for Libtasn1-3 2.0)
* New patch 15_tasn1inpc.diff. Make sure libtasn1 is listed in Libs.private.
* Standards-Version: 3.8.1, no changes required.

Show diffs side-by-side

added added

removed removed

Lines of Context:
156
156
 * Do not add any algorithms in other modes (avoid modified algorithms).
157
157
 * View first: "The order of encryption and authentication for
158
158
 * protecting communications" by Hugo Krawczyk - CRYPTO 2001
 
159
 *
 
160
 * Make sure to updated MAX_CIPHER_BLOCK_SIZE and MAX_CIPHER_KEY_SIZE as well.
159
161
 */
160
162
static const gnutls_cipher_entry algorithms[] = {
161
163
  {"AES-256-CBC", GNUTLS_CIPHER_AES_256_CBC, 16, 32, CIPHER_BLOCK, 16, 0},
171
173
  {"CAMELLIA-128-CBC", GNUTLS_CIPHER_CAMELLIA_128_CBC, 16, 16, CIPHER_BLOCK,
172
174
   16, 0},
173
175
#endif
 
176
 
 
177
#ifdef ENABLE_OPENPGP
 
178
  {"IDEA-PGP-CFB", GNUTLS_CIPHER_IDEA_PGP_CFB, 8, 16, CIPHER_BLOCK, 8, 0},
 
179
  {"3DES-PGP-CFB", GNUTLS_CIPHER_3DES_PGP_CFB, 8, 24, CIPHER_BLOCK, 8, 0},
 
180
  {"CAST5-PGP-CFB", GNUTLS_CIPHER_CAST5_PGP_CFB, 8, 16, CIPHER_BLOCK, 8, 0},
 
181
  {"BLOWFISH-PGP-CFB", GNUTLS_CIPHER_BLOWFISH_PGP_CFB, 8,
 
182
   16 /*actually unlimited */ , CIPHER_BLOCK, 8, 0},
 
183
  {"SAFER-SK128-PGP-CFB", GNUTLS_CIPHER_SAFER_SK128_PGP_CFB, 8, 16,
 
184
   CIPHER_BLOCK, 8, 0},
 
185
  {"AES-128-PGP-CFB", GNUTLS_CIPHER_AES128_PGP_CFB, 16, 16, CIPHER_BLOCK, 16,
 
186
   0},
 
187
  {"AES-192-PGP-CFB", GNUTLS_CIPHER_AES192_PGP_CFB, 16, 24, CIPHER_BLOCK, 16,
 
188
   0},
 
189
  {"AES-256-PGP-CFB", GNUTLS_CIPHER_AES256_PGP_CFB, 16, 32, CIPHER_BLOCK, 16,
 
190
   0},
 
191
  {"TWOFISH-PGP-CFB", GNUTLS_CIPHER_TWOFISH_PGP_CFB, 16, 16, CIPHER_BLOCK, 16,
 
192
   0},
 
193
#endif
174
194
  {"NULL", GNUTLS_CIPHER_NULL, 1, 0, CIPHER_STREAM, 0, 0},
175
195
  {0, 0, 0, 0, 0, 0, 0}
176
196
};
205
225
  const char *name;
206
226
  const char *oid;
207
227
  gnutls_mac_algorithm_t id;
208
 
  size_t key_size; /* in case of mac */
 
228
  size_t key_size;              /* in case of mac */
209
229
};
210
230
typedef struct gnutls_hash_entry gnutls_hash_entry;
211
231
 
215
235
  {"SHA256", HASH_OID_SHA256, GNUTLS_MAC_SHA256, 32},
216
236
  {"SHA384", HASH_OID_SHA384, GNUTLS_MAC_SHA384, 48},
217
237
  {"SHA512", HASH_OID_SHA512, GNUTLS_MAC_SHA512, 64},
218
 
  {"MD2", HASH_OID_MD2, GNUTLS_MAC_MD2, 0}, /* not used as MAC */
 
238
  {"MD2", HASH_OID_MD2, GNUTLS_MAC_MD2, 0},     /* not used as MAC */
219
239
  {"RIPEMD160", HASH_OID_RMD160, GNUTLS_MAC_RMD160, 20},
220
240
  {"NULL", NULL, GNUTLS_MAC_NULL, 0},
221
241
  {0, 0, 0, 0}
241
261
#define GNUTLS_HASH_ALG_LOOP(a) \
242
262
                        GNUTLS_HASH_LOOP( if(p->id == algorithm) { a; break; } )
243
263
 
244
 
 
245
 
/* Compression Section */
246
 
#define GNUTLS_COMPRESSION_ENTRY(name, id, wb, ml, cl) \
247
 
        { #name, name, id, wb, ml, cl}
248
 
 
249
 
 
250
 
#define MAX_COMP_METHODS 5
251
 
const int _gnutls_comp_algorithms_size = MAX_COMP_METHODS;
252
 
 
253
 
/* the compression entry is defined in gnutls_algorithms.h */
254
 
 
255
 
gnutls_compression_entry _gnutls_compression_algorithms[MAX_COMP_METHODS] = {
256
 
  GNUTLS_COMPRESSION_ENTRY (GNUTLS_COMP_NULL, 0x00, 0, 0, 0),
257
 
#ifdef HAVE_LIBZ
258
 
  /* draft-ietf-tls-compression-02 */
259
 
  GNUTLS_COMPRESSION_ENTRY (GNUTLS_COMP_DEFLATE, 0x01, 15, 8, 3),
260
 
#endif
261
 
  {0, 0, 0, 0, 0, 0}
262
 
};
263
 
 
264
 
static const gnutls_compression_method_t supported_compressions[] = {
265
 
#ifdef USE_LZO
266
 
  GNUTLS_COMP_LZO,
267
 
#endif
268
 
#ifdef HAVE_LIBZ
269
 
  GNUTLS_COMP_DEFLATE,
270
 
#endif
271
 
  GNUTLS_COMP_NULL,
272
 
  0
273
 
};
274
 
 
275
 
#define GNUTLS_COMPRESSION_LOOP(b) \
276
 
        const gnutls_compression_entry *p; \
277
 
                for(p = _gnutls_compression_algorithms; p->name != NULL; p++) { b ; }
278
 
#define GNUTLS_COMPRESSION_ALG_LOOP(a) \
279
 
                        GNUTLS_COMPRESSION_LOOP( if(p->id == algorithm) { a; break; } )
280
 
#define GNUTLS_COMPRESSION_ALG_LOOP_NUM(a) \
281
 
                        GNUTLS_COMPRESSION_LOOP( if(p->num == num) { a; break; } )
282
 
 
283
 
 
284
264
/* Key Exchange Section */
285
265
 
286
266
 
688
668
 
689
669
/**
690
670
 * gnutls_mac_get_id - Returns the gnutls id of the specified in string algorithm
691
 
 * @algorithm: is a MAC algorithm name
 
671
 * @name: is a MAC algorithm name
692
672
 *
693
673
 * Convert a string to a #gnutls_mac_algorithm_t value.  The names are
694
674
 * compared in a case insensitive way.
697
677
 *   MAC algorithm, or %GNUTLS_MAC_UNKNOWN on failures.
698
678
 **/
699
679
gnutls_mac_algorithm_t
700
 
gnutls_mac_get_id (const char* name)
 
680
gnutls_mac_get_id (const char *name)
701
681
{
702
682
  gnutls_mac_algorithm_t ret = GNUTLS_MAC_UNKNOWN;
703
683
 
704
 
  GNUTLS_HASH_LOOP( if (strcasecmp( p->name, name)==0) ret = p->id);
 
684
  GNUTLS_HASH_LOOP (if (strcasecmp (p->name, name) == 0) ret = p->id);
705
685
 
706
686
  return ret;
707
687
}
782
762
  return ret;
783
763
}
784
764
 
785
 
/* Compression Functions */
786
 
int
787
 
_gnutls_compression_priority (gnutls_session_t session,
788
 
                              gnutls_compression_method_t algorithm)
789
 
{                               /* actually returns the priority */
790
 
  unsigned int i;
791
 
  for (i = 0;
792
 
       i < session->internals.priorities.compression.algorithms; i++)
793
 
    {
794
 
      if (session->internals.priorities.
795
 
          compression.priority[i] == algorithm)
796
 
        return i;
797
 
    }
798
 
  return -1;
799
 
}
800
 
 
801
 
/**
802
 
 * gnutls_compression_get_name - Returns a string with the name of the specified compression algorithm
803
 
 * @algorithm: is a Compression algorithm
804
 
 *
805
 
 * Convert a #gnutls_compression_method_t value to a string.
806
 
 *
807
 
 * Returns: a pointer to a string that contains the name of the
808
 
 *   specified compression algorithm, or %NULL.
809
 
 **/
810
 
const char *
811
 
gnutls_compression_get_name (gnutls_compression_method_t algorithm)
812
 
{
813
 
  const char *ret = NULL;
814
 
 
815
 
  /* avoid prefix */
816
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->name + sizeof ("GNUTLS_COMP_") - 1);
817
 
 
818
 
  return ret;
819
 
}
820
 
 
821
 
/**
822
 
 * gnutls_compression_get_id - Returns the gnutls id of the specified in string algorithm
823
 
 * @algorithm: is a compression method name
824
 
 *
825
 
 * The names are compared in a case insensitive way.
826
 
 *
827
 
 * Returns: an id of the specified in a string compression method, or
828
 
 *   %GNUTLS_COMP_UNKNOWN on error.
829
 
 **/
830
 
gnutls_compression_method_t
831
 
gnutls_compression_get_id (const char* name)
832
 
{
833
 
  gnutls_compression_method_t ret = GNUTLS_COMP_UNKNOWN;
834
 
 
835
 
  GNUTLS_COMPRESSION_LOOP( if (strcasecmp( p->name+sizeof("GNUTLS_COMP_")-1, name)==0) ret = p->id);
836
 
 
837
 
  return ret;
838
 
}
839
 
 
840
 
/**
841
 
 * gnutls_compression_list - Get a list of supported compression methods
842
 
 *
843
 
 * Get a list of compression methods.  Note that to be able to use LZO
844
 
 * compression, you must link to libgnutls-extra and call
845
 
 * gnutls_global_init_extra().
846
 
 *
847
 
 * Returns: a zero-terminated list of #gnutls_compression_method_t
848
 
 *   integers indicating the available compression methods.
849
 
 **/
850
 
const gnutls_compression_method_t *
851
 
gnutls_compression_list (void)
852
 
{
853
 
  return supported_compressions;
854
 
}
855
 
 
856
 
/* return the tls number of the specified algorithm */
857
 
int
858
 
_gnutls_compression_get_num (gnutls_compression_method_t algorithm)
859
 
{
860
 
  int ret = -1;
861
 
 
862
 
  /* avoid prefix */
863
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->num);
864
 
 
865
 
  return ret;
866
 
}
867
 
 
868
 
int
869
 
_gnutls_compression_get_wbits (gnutls_compression_method_t algorithm)
870
 
{
871
 
  int ret = -1;
872
 
  /* avoid prefix */
873
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->window_bits);
874
 
  return ret;
875
 
}
876
 
 
877
 
int
878
 
_gnutls_compression_get_mem_level (gnutls_compression_method_t algorithm)
879
 
{
880
 
  int ret = -1;
881
 
  /* avoid prefix */
882
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->mem_level);
883
 
  return ret;
884
 
}
885
 
 
886
 
int
887
 
_gnutls_compression_get_comp_level (gnutls_compression_method_t algorithm)
888
 
{
889
 
  int ret = -1;
890
 
  /* avoid prefix */
891
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->comp_level);
892
 
  return ret;
893
 
}
894
 
 
895
 
/* returns the gnutls internal ID of the TLS compression
896
 
 * method num
897
 
 */
898
 
gnutls_compression_method_t
899
 
_gnutls_compression_get_id (int num)
900
 
{
901
 
  gnutls_compression_method_t ret = -1;
902
 
 
903
 
  /* avoid prefix */
904
 
  GNUTLS_COMPRESSION_ALG_LOOP_NUM (ret = p->id);
905
 
 
906
 
  return ret;
907
 
}
908
 
 
909
 
int
910
 
_gnutls_compression_is_ok (gnutls_compression_method_t algorithm)
911
 
{
912
 
  ssize_t ret = -1;
913
 
  GNUTLS_COMPRESSION_ALG_LOOP (ret = p->id);
914
 
  if (ret >= 0)
915
 
    ret = 0;
916
 
  else
917
 
    ret = 1;
918
 
  return ret;
919
 
}
920
 
 
921
 
 
922
 
 
923
765
/* CIPHER functions */
924
766
int
925
767
_gnutls_cipher_get_block_size (gnutls_cipher_algorithm_t algorithm)
936
778
                         gnutls_cipher_algorithm_t algorithm)
937
779
{
938
780
  unsigned int i;
939
 
  for (i = 0;
940
 
       i < session->internals.priorities.cipher.algorithms; i++)
 
781
  for (i = 0; i < session->internals.priorities.cipher.algorithms; i++)
941
782
    {
942
 
      if (session->internals.priorities.
943
 
          cipher.priority[i] == algorithm)
 
783
      if (session->internals.priorities.cipher.priority[i] == algorithm)
944
784
        return i;
945
785
    }
946
786
  return -1;
1015
855
 
1016
856
/**
1017
857
 * gnutls_cipher_get_id - Returns the gnutls id of the specified in string algorithm
1018
 
 * @algorithm: is a MAC algorithm name
 
858
 * @name: is a MAC algorithm name
1019
859
 *
1020
860
 * The names are compared in a case insensitive way.
1021
861
 *
1023
863
 *   the specified cipher, or %GNUTLS_CIPHER_UNKNOWN on error.
1024
864
 **/
1025
865
gnutls_cipher_algorithm_t
1026
 
gnutls_cipher_get_id (const char* name)
 
866
gnutls_cipher_get_id (const char *name)
1027
867
{
1028
868
  gnutls_cipher_algorithm_t ret = GNUTLS_CIPHER_UNKNOWN;
1029
869
 
1030
 
  GNUTLS_LOOP( if (strcasecmp( p->name, name)==0) ret = p->id);
 
870
  GNUTLS_LOOP (if (strcasecmp (p->name, name) == 0) ret = p->id);
1031
871
 
1032
872
  return ret;
1033
873
}
1108
948
 
1109
949
/**
1110
950
 * gnutls_kx_get_id - Returns the gnutls id of the specified in string algorithm
1111
 
 * @algorithm: is a KX name
 
951
 * @name: is a KX name
1112
952
 *
1113
953
 * Convert a string to a #gnutls_kx_algorithm_t value.  The names are
1114
954
 * compared in a case insensitive way.
1117
957
 *   on error.
1118
958
 **/
1119
959
gnutls_kx_algorithm_t
1120
 
gnutls_kx_get_id (const char* name)
 
960
gnutls_kx_get_id (const char *name)
1121
961
{
1122
962
  gnutls_cipher_algorithm_t ret = GNUTLS_KX_UNKNOWN;
1123
963
 
1124
 
  GNUTLS_KX_LOOP( if (strcasecmp( p->name, name)==0) ret = p->algorithm);
 
964
  GNUTLS_KX_LOOP (if (strcasecmp (p->name, name) == 0) ret = p->algorithm);
1125
965
 
1126
966
  return ret;
1127
967
}
1254
1094
}
1255
1095
 
1256
1096
/**
1257
 
  * gnutls_protocol_get_id - Returns the gnutls id of the specified in string protocol
1258
 
  * @algorithm: is a protocol name
1259
 
  *
1260
 
  * The names are compared in a case insensitive way.
1261
 
  *
1262
 
  * Returns: an id of the specified protocol, or
1263
 
  * %GNUTLS_VERSION_UNKNOWN on error.
1264
 
  **/
 
1097
 * gnutls_protocol_get_id - Returns the gnutls id of the specified in string protocol
 
1098
 * @name: is a protocol name
 
1099
 *
 
1100
 * The names are compared in a case insensitive way.
 
1101
 *
 
1102
 * Returns: an id of the specified protocol, or
 
1103
 * %GNUTLS_VERSION_UNKNOWN on error.
 
1104
 **/
1265
1105
gnutls_protocol_t
1266
 
gnutls_protocol_get_id (const char* name)
 
1106
gnutls_protocol_get_id (const char *name)
1267
1107
{
1268
1108
  gnutls_protocol_t ret = GNUTLS_VERSION_UNKNOWN;
1269
1109
 
1270
 
  GNUTLS_VERSION_LOOP( if (strcasecmp( p->name, name)==0) ret = p->id);
 
1110
  GNUTLS_VERSION_LOOP (if (strcasecmp (p->name, name) == 0) ret = p->id);
1271
1111
 
1272
1112
  return ret;
1273
1113
}
1782
1622
  return ret_count;
1783
1623
}
1784
1624
 
1785
 
 
1786
 
/* For compression  */
1787
 
 
1788
 
#define MIN_PRIVATE_COMP_ALGO 0xEF
1789
 
 
1790
 
/* returns the TLS numbers of the compression methods we support 
1791
 
 */
1792
 
#define SUPPORTED_COMPRESSION_METHODS session->internals.priorities.compression.algorithms
1793
 
int
1794
 
_gnutls_supported_compression_methods (gnutls_session_t session,
1795
 
                                       uint8_t ** comp)
1796
 
{
1797
 
  unsigned int i, j;
1798
 
 
1799
 
  *comp = gnutls_malloc (sizeof (uint8_t) * SUPPORTED_COMPRESSION_METHODS);
1800
 
  if (*comp == NULL)
1801
 
    return GNUTLS_E_MEMORY_ERROR;
1802
 
 
1803
 
  for (i = j = 0; i < SUPPORTED_COMPRESSION_METHODS; i++)
1804
 
    {
1805
 
      int tmp = _gnutls_compression_get_num (session->internals.priorities.
1806
 
                                             compression.priority[i]);
1807
 
 
1808
 
      /* remove private compression algorithms, if requested.
1809
 
       */
1810
 
      if (tmp == -1 || (tmp >= MIN_PRIVATE_COMP_ALGO &&
1811
 
                        session->internals.enable_private == 0))
1812
 
        {
1813
 
          gnutls_assert ();
1814
 
          continue;
1815
 
        }
1816
 
 
1817
 
      (*comp)[j] = (uint8_t) tmp;
1818
 
      j++;
1819
 
    }
1820
 
 
1821
 
  if (j == 0)
1822
 
    {
1823
 
      gnutls_assert ();
1824
 
      gnutls_free (*comp);
1825
 
      *comp = NULL;
1826
 
      return GNUTLS_E_NO_COMPRESSION_ALGORITHMS;
1827
 
    }
1828
 
  return j;
1829
 
}
1830
 
 
1831
1625
/**
1832
1626
 * gnutls_certificate_type_get_name - Returns a string with the name of the specified certificate type
1833
1627
 * @type: is a certificate type
1851
1645
}
1852
1646
 
1853
1647
/**
1854
 
  * gnutls_certificate_type_get_id - Returns the gnutls id of the specified in string type
1855
 
  * @name: is a certificate type name
1856
 
  *
1857
 
  * The names are compared in a case insensitive way.
1858
 
  *
1859
 
  * Returns: an id of the specified in a string certificate type, or
1860
 
  * %GNUTLS_CRT_UNKNOWN on error.
1861
 
  **/
 
1648
 * gnutls_certificate_type_get_id - Returns the gnutls id of the specified in string type
 
1649
 * @name: is a certificate type name
 
1650
 *
 
1651
 * The names are compared in a case insensitive way.
 
1652
 *
 
1653
 * Returns: an #gnutls_certificate_type_t for the specified in a
 
1654
 *   string certificate type, or %GNUTLS_CRT_UNKNOWN on error.
 
1655
 **/
1862
1656
gnutls_certificate_type_t
1863
 
gnutls_certificate_type_get_id (const char* name)
 
1657
gnutls_certificate_type_get_id (const char *name)
1864
1658
{
1865
1659
  gnutls_certificate_type_t ret = GNUTLS_CRT_UNKNOWN;
1866
1660
 
1867
 
  if (strcasecmp( name, "X.509")==0 || strcasecmp( name, "X509")==0)
 
1661
  if (strcasecmp (name, "X.509") == 0 || strcasecmp (name, "X509") == 0)
1868
1662
    return GNUTLS_CRT_X509;
1869
 
  if (strcasecmp( name, "OPENPGP")==0)
 
1663
  if (strcasecmp (name, "OPENPGP") == 0)
1870
1664
    return GNUTLS_CRT_OPENPGP;
1871
 
  
 
1665
 
1872
1666
  return ret;
1873
1667
}
1874
1668
 
1952
1746
  {0, 0, 0, 0, 0}
1953
1747
};
1954
1748
 
 
1749
/* Keep the contents of this struct the same as the previous one. */
 
1750
static const gnutls_sign_algorithm_t supported_sign[] = {
 
1751
  GNUTLS_SIGN_RSA_SHA1,
 
1752
  GNUTLS_SIGN_RSA_SHA256,
 
1753
  GNUTLS_SIGN_RSA_SHA384,
 
1754
  GNUTLS_SIGN_RSA_SHA512,
 
1755
  GNUTLS_SIGN_RSA_RMD160,
 
1756
  GNUTLS_SIGN_DSA_SHA1,
 
1757
  GNUTLS_SIGN_RSA_MD5,
 
1758
  GNUTLS_SIGN_RSA_MD2,
 
1759
  0
 
1760
};
 
1761
 
1955
1762
#define GNUTLS_SIGN_LOOP(b) \
1956
1763
  do {                                                                 \
1957
1764
    const gnutls_sign_entry *p;                                        \
1981
1788
  return ret;
1982
1789
}
1983
1790
 
 
1791
/**
 
1792
 * gnutls_sign_list - Get a list of supported public key signature algorithms
 
1793
 *
 
1794
 * Get a list of supported public key signature algorithms.
 
1795
 *
 
1796
 * Returns: a zero-terminated list of #gnutls_sign_algorithm_t
 
1797
 *   integers indicating the available ciphers.
 
1798
 *
 
1799
 **/
 
1800
const gnutls_sign_algorithm_t *
 
1801
gnutls_sign_list (void)
 
1802
{
 
1803
  return supported_sign;
 
1804
}
 
1805
 
 
1806
/**
 
1807
 * gnutls_sign_get_id - Returns the gnutls id of the specified in signature algorithm
 
1808
 * @name: is a MAC algorithm name
 
1809
 *
 
1810
 * The names are compared in a case insensitive way.
 
1811
 *
 
1812
 * Returns: return a #gnutls_sign_algorithm_t value corresponding to
 
1813
 *   the specified cipher, or %GNUTLS_SIGN_UNKNOWN on error.
 
1814
 **/
 
1815
gnutls_sign_algorithm_t
 
1816
gnutls_sign_get_id (const char *name)
 
1817
{
 
1818
  gnutls_sign_algorithm_t ret = GNUTLS_SIGN_UNKNOWN;
 
1819
 
 
1820
  GNUTLS_SIGN_LOOP (if (strcasecmp (p->name, name) == 0) ret = p->id);
 
1821
 
 
1822
  return ret;
 
1823
 
 
1824
}
 
1825
 
 
1826
/**
 
1827
 * gnutls_sign_get_name - Get name string for a #gnutls_sign_algorithm_t
 
1828
 * @algorithm: is a public key signature algorithm
 
1829
 *
 
1830
 * Convert a #gnutls_sign_algorithm_t value to a string.
 
1831
 *
 
1832
 * Returns: a pointer to a string that contains the name of the
 
1833
 *   specified public key signature algorithm, or %NULL.
 
1834
 *
 
1835
 * Since: 2.6.0
 
1836
 **/
 
1837
const char *
 
1838
gnutls_sign_get_name (gnutls_sign_algorithm_t algorithm)
 
1839
{
 
1840
  const char *ret = "SIGN_UNKNOWN";
 
1841
 
 
1842
  GNUTLS_SIGN_LOOP (if (p->id == algorithm) ret = p->name);
 
1843
 
 
1844
  return ret;
 
1845
}
 
1846
 
1984
1847
gnutls_sign_algorithm_t
1985
1848
_gnutls_x509_oid2sign_algorithm (const char *oid)
1986
1849
{
2049
1912
};
2050
1913
 
2051
1914
/**
2052
 
  * gnutls_pk_algorithm_get_name - Returns a string with the name of the specified public key algorithm
2053
 
  * @algorithm: is a pk algorithm
2054
 
  *
2055
 
  * Convert a #gnutls_pk_algorithm_t value to a string.
2056
 
  *
2057
 
  * Returns: a string that contains the name of the specified public
2058
 
  *   key algorithm, or %NULL.
2059
 
  **/
 
1915
 * gnutls_pk_algorithm_get_name - Get string with name of public key algorithm
 
1916
 * @algorithm: is a pk algorithm
 
1917
 *
 
1918
 * Convert a #gnutls_pk_algorithm_t value to a string.
 
1919
 *
 
1920
 * Returns: a string that contains the name of the specified public
 
1921
 *   key algorithm, or %NULL.
 
1922
 **/
2060
1923
const char *
2061
1924
gnutls_pk_algorithm_get_name (gnutls_pk_algorithm_t algorithm)
2062
1925
{
2073
1936
  return ret;
2074
1937
}
2075
1938
 
 
1939
/**
 
1940
 * gnutls_pk_list - Get a list of supported public key algorithms
 
1941
 *
 
1942
 * Get a list of supported public key algorithms.
 
1943
 *
 
1944
 * Returns: a zero-terminated list of #gnutls_pk_algorithm_t integers
 
1945
 *   indicating the available ciphers.
 
1946
 *
 
1947
 * Since: 2.6.0
 
1948
 **/
 
1949
const gnutls_pk_algorithm_t *
 
1950
gnutls_pk_list (void)
 
1951
{
 
1952
  static const gnutls_pk_algorithm_t supported_pks[] = {
 
1953
    GNUTLS_PK_RSA,
 
1954
    GNUTLS_PK_DSA,
 
1955
    0
 
1956
  };
 
1957
 
 
1958
  return supported_pks;
 
1959
}
 
1960
 
 
1961
/**
 
1962
 * gnutls_pk_get_id - Get #gnutls_pk_algorithm_t from a string
 
1963
 * @name: is a string containing a public key algorithm name.
 
1964
 *
 
1965
 * Convert a string to a #gnutls_pk_algorithm_t value.  The names are
 
1966
 * compared in a case insensitive way.  For example,
 
1967
 * gnutls_pk_get_id("RSA") will return %GNUTLS_PK_RSA.
 
1968
 *
 
1969
 * Returns: an #gnutls_pk_algorithm_tid of the specified in a string
 
1970
 *   public key algorithm, or %GNUTLS_PK_UNKNOWN on failures.
 
1971
 *
 
1972
 * Since: 2.6.0
 
1973
 **/
 
1974
gnutls_pk_algorithm_t
 
1975
gnutls_pk_get_id (const char *name)
 
1976
{
 
1977
  if (strcasecmp (name, "RSA") == 0)
 
1978
    return GNUTLS_PK_RSA;
 
1979
  else if (strcasecmp (name, "DSA") == 0)
 
1980
    return GNUTLS_PK_DSA;
 
1981
 
 
1982
  return GNUTLS_PK_UNKNOWN;
 
1983
}
 
1984
 
 
1985
/**
 
1986
 * gnutls_pk_get_name - Get name string with #gnutls_pk_algorithm_t algorithm
 
1987
 * @algorithm: is a public key algorithm
 
1988
 *
 
1989
 * Convert a #gnutls_pk_algorithm_t value to a string.
 
1990
 *
 
1991
 * Returns: a pointer to a string that contains the name of the
 
1992
 *   specified public key algorithm, or %NULL.
 
1993
 *
 
1994
 * Since: 2.6.0
 
1995
 **/
 
1996
const char *
 
1997
gnutls_pk_get_name (gnutls_pk_algorithm_t algorithm)
 
1998
{
 
1999
  const char *p;
 
2000
 
 
2001
  switch (algorithm)
 
2002
    {
 
2003
    case GNUTLS_PK_RSA:
 
2004
      p = "RSA";
 
2005
      break;
 
2006
 
 
2007
    case GNUTLS_PK_DSA:
 
2008
      p = "DSA";
 
2009
      break;
 
2010
 
 
2011
    default:
 
2012
    case GNUTLS_PK_UNKNOWN:
 
2013
      p = "PK_UNKNOWN";
 
2014
      break;
 
2015
    }
 
2016
 
 
2017
  return p;
 
2018
}
 
2019
 
2076
2020
gnutls_pk_algorithm_t
2077
2021
_gnutls_x509_oid2pk_algorithm (const char *oid)
2078
2022
{
2104
2048
 
2105
2049
  return ret;
2106
2050
}
2107