1
/* Copyright (c) 2004-2006, Sara Golemon <sarag@libssh2.org>
4
* Redistribution and use in source and binary forms,
5
* with or without modification, are permitted provided
6
* that the following conditions are met:
8
* Redistributions of source code must retain the above
9
* copyright notice, this list of conditions and the
10
* following disclaimer.
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.
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.
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
38
/* Note: This include file is only needed for using the
39
* publickey SUBSYSTEM which is not the same as publickey
40
* authentication. For authentication you only need libssh2.h
42
* For more information on the publickey subsystem,
43
* refer to IETF draft: secsh-publickey
46
#ifndef LIBSSH2_PUBLICKEY_H
47
#define LIBSSH2_PUBLICKEY_H 1
51
typedef struct _LIBSSH2_PUBLICKEY LIBSSH2_PUBLICKEY;
53
typedef struct _libssh2_publickey_attribute {
55
unsigned long name_len;
57
unsigned long value_len;
59
} libssh2_publickey_attribute;
61
typedef struct _libssh2_publickey_list {
62
unsigned char *packet; /* For freeing */
64
const unsigned char *name;
65
unsigned long name_len;
66
const unsigned char *blob;
67
unsigned long blob_len;
68
unsigned long num_attrs;
69
libssh2_publickey_attribute *attrs; /* free me */
70
} libssh2_publickey_list;
72
/* Generally use the first macro here, but if both name and value are string literals, you can use _fast() to take advantage of preprocessing */
73
#define libssh2_publickey_attribute(name, value, mandatory) \
74
{ (name), strlen(name), (value), strlen(value), (mandatory) },
75
#define libssh2_publickey_attribute_fast(name, value, mandatory) \
76
{ (name), sizeof(name) - 1, (value), sizeof(value) - 1, (mandatory) },
82
/* Publickey Subsystem */
83
LIBSSH2_API LIBSSH2_PUBLICKEY *libssh2_publickey_init(LIBSSH2_SESSION *session);
85
LIBSSH2_API int libssh2_publickey_add_ex(LIBSSH2_PUBLICKEY *pkey,
86
const unsigned char *name,
87
unsigned long name_len,
88
const unsigned char *blob,
89
unsigned long blob_len, char overwrite,
90
unsigned long num_attrs,
91
const libssh2_publickey_attribute attrs[]);
92
#define libssh2_publickey_add(pkey, name, blob, blob_len, overwrite, \
94
libssh2_publickey_add_ex((pkey), (name), strlen(name), (blob), (blob_len), \
95
(overwrite), (num_attrs), (attrs))
97
LIBSSH2_API int libssh2_publickey_remove_ex(LIBSSH2_PUBLICKEY *pkey,
98
const unsigned char *name,
99
unsigned long name_len,
100
const unsigned char *blob,
101
unsigned long blob_len);
102
#define libssh2_publickey_remove(pkey, name, blob, blob_len) \
103
libssh2_publickey_remove_ex((pkey), (name), strlen(name), (blob), (blob_len))
106
libssh2_publickey_list_fetch(LIBSSH2_PUBLICKEY *pkey,
107
unsigned long *num_keys,
108
libssh2_publickey_list **pkey_list);
109
LIBSSH2_API void libssh2_publickey_list_free(LIBSSH2_PUBLICKEY *pkey,
110
libssh2_publickey_list *pkey_list);
112
LIBSSH2_API int libssh2_publickey_shutdown(LIBSSH2_PUBLICKEY *pkey);
118
#endif /* ifndef: LIBSSH2_PUBLICKEY_H */