diff options
Diffstat (limited to 'buffer.h')
-rw-r--r-- | buffer.h | 68 |
1 files changed, 32 insertions, 36 deletions
@@ -1,57 +1,58 @@ | |||
1 | /* $OpenBSD: buffer.h,v 1.23 2014/01/12 08:13:13 djm Exp $ */ | 1 | /* $OpenBSD: buffer.h,v 1.25 2014/04/30 05:29:56 djm Exp $ */ |
2 | 2 | ||
3 | /* | 3 | /* |
4 | * Author: Tatu Ylonen <ylo@cs.hut.fi> | 4 | * Copyright (c) 2012 Damien Miller <djm@mindrot.org> |
5 | * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland | ||
6 | * All rights reserved | ||
7 | * Code for manipulating FIFO buffers. | ||
8 | * | 5 | * |
9 | * As far as I am concerned, the code I have written for this software | 6 | * Permission to use, copy, modify, and distribute this software for any |
10 | * can be used freely for any purpose. Any derived versions of this | 7 | * purpose with or without fee is hereby granted, provided that the above |
11 | * software must be clearly marked as such, and if the derived work is | 8 | * copyright notice and this permission notice appear in all copies. |
12 | * incompatible with the protocol description in the RFC file, it must be | 9 | * |
13 | * called by a name other than "ssh" or "Secure Shell". | 10 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
11 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
12 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
13 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
14 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
15 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
16 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
14 | */ | 17 | */ |
15 | 18 | ||
19 | /* Emulation wrappers for legacy OpenSSH buffer API atop sshbuf */ | ||
20 | |||
16 | #ifndef BUFFER_H | 21 | #ifndef BUFFER_H |
17 | #define BUFFER_H | 22 | #define BUFFER_H |
18 | 23 | ||
19 | typedef struct { | 24 | #include "sshbuf.h" |
20 | u_char *buf; /* Buffer for data. */ | 25 | |
21 | u_int alloc; /* Number of bytes allocated for data. */ | 26 | typedef struct sshbuf Buffer; |
22 | u_int offset; /* Offset of first byte containing data. */ | ||
23 | u_int end; /* Offset of last byte containing data. */ | ||
24 | } Buffer; | ||
25 | 27 | ||
26 | void buffer_init(Buffer *); | 28 | #define buffer_init(b) sshbuf_init(b) |
27 | void buffer_clear(Buffer *); | 29 | #define buffer_clear(b) sshbuf_reset(b) |
28 | void buffer_free(Buffer *); | 30 | #define buffer_free(b) sshbuf_free(b) |
31 | #define buffer_dump(b) sshbuf_dump(b, stderr) | ||
29 | 32 | ||
30 | u_int buffer_len(const Buffer *); | 33 | /* XXX cast is safe: sshbuf never stores more than len 2^31 */ |
31 | void *buffer_ptr(const Buffer *); | 34 | #define buffer_len(b) ((u_int) sshbuf_len(b)) |
35 | #define buffer_ptr(b) sshbuf_mutable_ptr(b) | ||
32 | 36 | ||
33 | void buffer_append(Buffer *, const void *, u_int); | 37 | void buffer_append(Buffer *, const void *, u_int); |
34 | void *buffer_append_space(Buffer *, u_int); | 38 | void *buffer_append_space(Buffer *, u_int); |
35 | |||
36 | int buffer_check_alloc(Buffer *, u_int); | 39 | int buffer_check_alloc(Buffer *, u_int); |
37 | |||
38 | void buffer_get(Buffer *, void *, u_int); | 40 | void buffer_get(Buffer *, void *, u_int); |
39 | 41 | ||
40 | void buffer_consume(Buffer *, u_int); | 42 | void buffer_consume(Buffer *, u_int); |
41 | void buffer_consume_end(Buffer *, u_int); | 43 | void buffer_consume_end(Buffer *, u_int); |
42 | 44 | ||
43 | void buffer_dump(const Buffer *); | ||
44 | 45 | ||
45 | int buffer_get_ret(Buffer *, void *, u_int); | 46 | int buffer_get_ret(Buffer *, void *, u_int); |
46 | int buffer_consume_ret(Buffer *, u_int); | 47 | int buffer_consume_ret(Buffer *, u_int); |
47 | int buffer_consume_end_ret(Buffer *, u_int); | 48 | int buffer_consume_end_ret(Buffer *, u_int); |
48 | 49 | ||
49 | #include <openssl/bn.h> | 50 | #include <openssl/bn.h> |
50 | |||
51 | void buffer_put_bignum(Buffer *, const BIGNUM *); | 51 | void buffer_put_bignum(Buffer *, const BIGNUM *); |
52 | void buffer_put_bignum2(Buffer *, const BIGNUM *); | 52 | void buffer_put_bignum2(Buffer *, const BIGNUM *); |
53 | void buffer_get_bignum(Buffer *, BIGNUM *); | 53 | void buffer_get_bignum(Buffer *, BIGNUM *); |
54 | void buffer_get_bignum2(Buffer *, BIGNUM *); | 54 | void buffer_get_bignum2(Buffer *, BIGNUM *); |
55 | void buffer_put_bignum2_from_string(Buffer *, const u_char *, u_int); | ||
55 | 56 | ||
56 | u_short buffer_get_short(Buffer *); | 57 | u_short buffer_get_short(Buffer *); |
57 | void buffer_put_short(Buffer *, u_short); | 58 | void buffer_put_short(Buffer *, u_short); |
@@ -66,13 +67,12 @@ int buffer_get_char(Buffer *); | |||
66 | void buffer_put_char(Buffer *, int); | 67 | void buffer_put_char(Buffer *, int); |
67 | 68 | ||
68 | void *buffer_get_string(Buffer *, u_int *); | 69 | void *buffer_get_string(Buffer *, u_int *); |
69 | void *buffer_get_string_ptr(Buffer *, u_int *); | 70 | const void *buffer_get_string_ptr(Buffer *, u_int *); |
70 | void buffer_put_string(Buffer *, const void *, u_int); | 71 | void buffer_put_string(Buffer *, const void *, u_int); |
71 | char *buffer_get_cstring(Buffer *, u_int *); | 72 | char *buffer_get_cstring(Buffer *, u_int *); |
72 | void buffer_put_cstring(Buffer *, const char *); | 73 | void buffer_put_cstring(Buffer *, const char *); |
73 | 74 | ||
74 | #define buffer_skip_string(b) \ | 75 | #define buffer_skip_string(b) (void)buffer_get_string_ptr(b, NULL); |
75 | do { u_int l = buffer_get_int(b); buffer_consume(b, l); } while (0) | ||
76 | 76 | ||
77 | int buffer_put_bignum_ret(Buffer *, const BIGNUM *); | 77 | int buffer_put_bignum_ret(Buffer *, const BIGNUM *); |
78 | int buffer_get_bignum_ret(Buffer *, BIGNUM *); | 78 | int buffer_get_bignum_ret(Buffer *, BIGNUM *); |
@@ -83,20 +83,16 @@ int buffer_get_int_ret(u_int *, Buffer *); | |||
83 | int buffer_get_int64_ret(u_int64_t *, Buffer *); | 83 | int buffer_get_int64_ret(u_int64_t *, Buffer *); |
84 | void *buffer_get_string_ret(Buffer *, u_int *); | 84 | void *buffer_get_string_ret(Buffer *, u_int *); |
85 | char *buffer_get_cstring_ret(Buffer *, u_int *); | 85 | char *buffer_get_cstring_ret(Buffer *, u_int *); |
86 | void *buffer_get_string_ptr_ret(Buffer *, u_int *); | 86 | const void *buffer_get_string_ptr_ret(Buffer *, u_int *); |
87 | int buffer_get_char_ret(u_char *, Buffer *); | 87 | int buffer_get_char_ret(char *, Buffer *); |
88 | |||
89 | void *buffer_get_bignum2_as_string_ret(Buffer *, u_int *); | ||
90 | void *buffer_get_bignum2_as_string(Buffer *, u_int *); | ||
91 | void buffer_put_bignum2_from_string(Buffer *, const u_char *, u_int); | ||
92 | 88 | ||
93 | #ifdef OPENSSL_HAS_ECC | 89 | #ifdef OPENSSL_HAS_ECC |
94 | #include <openssl/ec.h> | 90 | #include <openssl/ec.h> |
95 | |||
96 | int buffer_put_ecpoint_ret(Buffer *, const EC_GROUP *, const EC_POINT *); | 91 | int buffer_put_ecpoint_ret(Buffer *, const EC_GROUP *, const EC_POINT *); |
97 | void buffer_put_ecpoint(Buffer *, const EC_GROUP *, const EC_POINT *); | 92 | void buffer_put_ecpoint(Buffer *, const EC_GROUP *, const EC_POINT *); |
98 | int buffer_get_ecpoint_ret(Buffer *, const EC_GROUP *, EC_POINT *); | 93 | int buffer_get_ecpoint_ret(Buffer *, const EC_GROUP *, EC_POINT *); |
99 | void buffer_get_ecpoint(Buffer *, const EC_GROUP *, EC_POINT *); | 94 | void buffer_get_ecpoint(Buffer *, const EC_GROUP *, EC_POINT *); |
100 | #endif | 95 | #endif |
101 | 96 | ||
102 | #endif /* BUFFER_H */ | 97 | #endif /* BUFFER_H */ |
98 | |||