base64.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 1996-2017 The Squid Software Foundation and contributors
3  *
4  * Squid software is distributed under GPLv2+ license and includes
5  * contributions from numerous individuals and organizations.
6  * Please see the COPYING and CONTRIBUTORS files for details.
7  */
8 
9 #ifndef _SQUID_BASE64_H
10 #define _SQUID_BASE64_H
11 
12 #if HAVE_NETTLE_BASE64_H && HAVE_NETTLE30_BASE64
13 #include <nettle/base64.h>
14 
15 #else /* Base64 functions copied from Nettle 3.0 under GPLv2, with adjustments */
16 
17 #ifdef __cplusplus
18 extern "C" {
19 #endif
20 
21 // Decoding functions
22 
25 # define BASE64_DECODE_LENGTH(length) ((((length) + 1) * 6) / 8)
26 
28 {
29  unsigned word; /* Leftover bits */
30  unsigned bits; /* Number buffered bits */
31 
32  /* Number of padding characters encountered */
33  unsigned padding;
34 };
35 
36 void base64_decode_init(struct base64_decode_ctx *ctx);
37 
38 /* Returns 1 on success, 0 on error. DST should point to an area of
39  * size at least BASE64_DECODE_LENGTH(length). The amount of data
40  * generated is returned in *DST_LENGTH.
41  */
43  size_t *dst_length,
44  uint8_t *dst,
45  size_t src_length,
46  const uint8_t *src);
47 
48 /* Returns 1 on success. */
49 int base64_decode_final(struct base64_decode_ctx *ctx);
50 
51 // Encoding functions
52 
53 /* Maximum length of output for base64_encode_update. NOTE: Doesn't
54  * include any padding that base64_encode_final may add. */
55 /* We have at most 4 buffered bits, and a total of (4 + length * 8) bits. */
56 # define BASE64_ENCODE_LENGTH(length) (((length) * 8 + 4)/6)
57 
58 /* Maximum length of output generated by base64_encode_final. */
59 # define BASE64_ENCODE_FINAL_LENGTH 3
60 
61 /* Exact length of output generated by base64_encode_raw, including
62  * padding.
63  */
64 # define BASE64_ENCODE_RAW_LENGTH(length) ((((length) + 2)/3)*4)
65 
67 {
68  unsigned word; /* Leftover bits */
69  unsigned bits; /* Number of bits, always 0, 2, or 4. */
70 };
71 
72 void base64_encode_init(struct base64_encode_ctx *ctx);
73 
75 size_t base64_encode_single(struct base64_encode_ctx *ctx, uint8_t *dst, uint8_t src);
76 
77 /* Returns the number of output characters. DST should point to an
78  * area of size at least BASE64_ENCODE_LENGTH(length).
79  */
80 size_t base64_encode_update(struct base64_encode_ctx *ctx, uint8_t *dst, size_t length, const uint8_t *src);
81 
83 size_t base64_encode_final(struct base64_encode_ctx *ctx, uint8_t *dst);
84 
85 #ifdef __cplusplus
86 }
87 #endif
88 
89 #endif /* HAVE_NETTLE_BASE64_H */
90 
93 # define base64_encode_len(length) (BASE64_ENCODE_LENGTH(length)+BASE64_ENCODE_FINAL_LENGTH+1)
94 
95 #endif /* _SQUID_BASE64_H */
96 
unsigned bits
Definition: base64.h:69
void base64_decode_init(struct base64_decode_ctx *ctx)
Definition: base64.c:58
size_t base64_encode_final(struct base64_encode_ctx *ctx, uint8_t *dst)
DST should point to an area of size at least BASE64_ENCODE_FINAL_LENGTH.
Definition: base64.c:253
size_t base64_encode_single(struct base64_encode_ctx *ctx, uint8_t *dst, uint8_t src)
Encodes a single byte. Returns amount of output (always 1 or 2).
Definition: base64.c:189
void base64_encode_init(struct base64_encode_ctx *ctx)
Definition: base64.c:182
unsigned padding
Definition: base64.h:33
unsigned word
Definition: base64.h:29
int base64_decode_update(struct base64_decode_ctx *ctx, size_t *dst_length, uint8_t *dst, size_t src_length, const uint8_t *src)
Definition: base64.c:107
size_t base64_encode_update(struct base64_encode_ctx *ctx, uint8_t *dst, size_t length, const uint8_t *src)
Definition: base64.c:213
unsigned word
Definition: base64.h:68
int base64_decode_final(struct base64_decode_ctx *ctx)
Definition: base64.c:137
unsigned bits
Definition: base64.h:30

 

Introduction

Documentation

Support

Miscellaneous

Web Site Translations

Mirrors