libssh2_publickey.h 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /* Copyright (c) 2004-2006, Sara Golemon <sarag@libssh2.org>
  2. * All rights reserved.
  3. *
  4. * Redistribution and use in source and binary forms,
  5. * with or without modification, are permitted provided
  6. * that the following conditions are met:
  7. *
  8. * Redistributions of source code must retain the above
  9. * copyright notice, this list of conditions and the
  10. * following disclaimer.
  11. *
  12. * Redistributions in binary form must reproduce the above
  13. * copyright notice, this list of conditions and the following
  14. * disclaimer in the documentation and/or other materials
  15. * provided with the distribution.
  16. *
  17. * Neither the name of the copyright holder nor the names
  18. * of any other contributors may be used to endorse or
  19. * promote products derived from this software without
  20. * specific prior written permission.
  21. *
  22. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
  23. * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
  24. * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  25. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  26. * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
  27. * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  28. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  29. * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
  30. * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  31. * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
  32. * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  33. * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  34. * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY
  35. * OF SUCH DAMAGE.
  36. */
  37. /* Note: This include file is only needed for using the
  38. * publickey SUBSYSTEM which is not the same as publickey
  39. * authentication. For authentication you only need libssh2.h
  40. *
  41. * For more information on the publickey subsystem,
  42. * refer to IETF draft: secsh-publickey
  43. */
  44. #ifndef LIBSSH2_PUBLICKEY_H
  45. #define LIBSSH2_PUBLICKEY_H 1
  46. #include "libssh2.h"
  47. typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY;
  48. typedef struct _libssh2_publickey_attribute {
  49. const char *name;
  50. unsigned long name_len;
  51. const char *value;
  52. unsigned long value_len;
  53. char mandatory;
  54. } libssh2_publickey_attribute;
  55. typedef struct _libssh2_publickey_list {
  56. unsigned char *packet; /* For freeing */
  57. const unsigned char *name;
  58. unsigned long name_len;
  59. const unsigned char *blob;
  60. unsigned long blob_len;
  61. unsigned long num_attrs;
  62. libssh2_publickey_attribute *attrs; /* free me */
  63. } libssh2_publickey_list;
  64. /* Generally use the first macro here, but if both name and value are string
  65. literals, you can use _fast() to take advantage of preprocessing */
  66. #define libssh2_publickey_attribute(name, value, mandatory) \
  67. { (name), strlen(name), (value), strlen(value), (mandatory) },
  68. #define libssh2_publickey_attribute_fast(name, value, mandatory) \
  69. { (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) },
  70. #ifdef __cplusplus
  71. extern "C" {
  72. #endif
  73. /* Publickey Subsystem */
  74. LIBSSH2_API LIBSSH2_PUBLICKEY *
  75. libssh2_publickey_init(LIBSSH2_SESSION *session);
  76. LIBSSH2_API int
  77. libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey,
  78. const unsigned char *name,
  79. unsigned long name_len,
  80. const unsigned char *blob,
  81. unsigned long blob_len, char overwrite,
  82. unsigned long num_attrs,
  83. const libssh2_publickey_attribute attrs[]);
  84. #define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \
  85. num_attrs, attrs) \
  86. libssh2_publickey_add_ex((pkey), (name), strlen(name), (blob), (blob_len), \
  87. (overwrite), (num_attrs), (attrs))
  88. LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey,
  89. const unsigned char *name,
  90. unsigned long name_len,
  91. const unsigned char *blob,
  92. unsigned long blob_len);
  93. #define libssh2_publickey_remove(pkey, name, blob, blob_len) \
  94. libssh2_publickey_remove_ex((pkey), (name), strlen(name), (blob), (blob_len))
  95. LIBSSH2_API int
  96. libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey,
  97. unsigned long *num_keys,
  98. libssh2_publickey_list **pkey_list);
  99. LIBSSH2_API void
  100. libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey,
  101. libssh2_publickey_list *pkey_list);
  102. LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey);
  103. #ifdef __cplusplus
  104. } /* extern "C" */
  105. #endif
  106. #endif /* ifndef: LIBSSH2_PUBLICKEY_H */