xref: /netbsd-src/crypto/external/bsd/openssl.old/dist/doc/man3/EVP_EncodeInit.pod (revision 4724848cf0da353df257f730694b7882798e5daf)
1*4724848cSchristos=pod
2*4724848cSchristos
3*4724848cSchristos=head1 NAME
4*4724848cSchristos
5*4724848cSchristosEVP_ENCODE_CTX_new, EVP_ENCODE_CTX_free, EVP_ENCODE_CTX_copy,
6*4724848cSchristosEVP_ENCODE_CTX_num, EVP_EncodeInit, EVP_EncodeUpdate, EVP_EncodeFinal,
7*4724848cSchristosEVP_EncodeBlock, EVP_DecodeInit, EVP_DecodeUpdate, EVP_DecodeFinal,
8*4724848cSchristosEVP_DecodeBlock - EVP base 64 encode/decode routines
9*4724848cSchristos
10*4724848cSchristos=head1 SYNOPSIS
11*4724848cSchristos
12*4724848cSchristos #include <openssl/evp.h>
13*4724848cSchristos
14*4724848cSchristos EVP_ENCODE_CTX *EVP_ENCODE_CTX_new(void);
15*4724848cSchristos void EVP_ENCODE_CTX_free(EVP_ENCODE_CTX *ctx);
16*4724848cSchristos int EVP_ENCODE_CTX_copy(EVP_ENCODE_CTX *dctx, EVP_ENCODE_CTX *sctx);
17*4724848cSchristos int EVP_ENCODE_CTX_num(EVP_ENCODE_CTX *ctx);
18*4724848cSchristos void EVP_EncodeInit(EVP_ENCODE_CTX *ctx);
19*4724848cSchristos int EVP_EncodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
20*4724848cSchristos                      const unsigned char *in, int inl);
21*4724848cSchristos void EVP_EncodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
22*4724848cSchristos int EVP_EncodeBlock(unsigned char *t, const unsigned char *f, int n);
23*4724848cSchristos
24*4724848cSchristos void EVP_DecodeInit(EVP_ENCODE_CTX *ctx);
25*4724848cSchristos int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
26*4724848cSchristos                      const unsigned char *in, int inl);
27*4724848cSchristos int EVP_DecodeFinal(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl);
28*4724848cSchristos int EVP_DecodeBlock(unsigned char *t, const unsigned char *f, int n);
29*4724848cSchristos
30*4724848cSchristos=head1 DESCRIPTION
31*4724848cSchristos
32*4724848cSchristosThe EVP encode routines provide a high-level interface to base 64 encoding and
33*4724848cSchristosdecoding. Base 64 encoding converts binary data into a printable form that uses
34*4724848cSchristosthe characters A-Z, a-z, 0-9, "+" and "/" to represent the data. For every 3
35*4724848cSchristosbytes of binary data provided 4 bytes of base 64 encoded data will be produced
36*4724848cSchristosplus some occasional newlines (see below). If the input data length is not a
37*4724848cSchristosmultiple of 3 then the output data will be padded at the end using the "="
38*4724848cSchristoscharacter.
39*4724848cSchristos
40*4724848cSchristosEVP_ENCODE_CTX_new() allocates, initializes and returns a context to be used for
41*4724848cSchristosthe encode/decode functions.
42*4724848cSchristos
43*4724848cSchristosEVP_ENCODE_CTX_free() cleans up an encode/decode context B<ctx> and frees up the
44*4724848cSchristosspace allocated to it.
45*4724848cSchristos
46*4724848cSchristosEncoding of binary data is performed in blocks of 48 input bytes (or less for
47*4724848cSchristosthe final block). For each 48 byte input block encoded 64 bytes of base 64 data
48*4724848cSchristosis output plus an additional newline character (i.e. 65 bytes in total). The
49*4724848cSchristosfinal block (which may be less than 48 bytes) will output 4 bytes for every 3
50*4724848cSchristosbytes of input. If the data length is not divisible by 3 then a full 4 bytes is
51*4724848cSchristosstill output for the final 1 or 2 bytes of input. Similarly a newline character
52*4724848cSchristoswill also be output.
53*4724848cSchristos
54*4724848cSchristosEVP_EncodeInit() initialises B<ctx> for the start of a new encoding operation.
55*4724848cSchristos
56*4724848cSchristosEVP_EncodeUpdate() encode B<inl> bytes of data found in the buffer pointed to by
57*4724848cSchristosB<in>. The output is stored in the buffer B<out> and the number of bytes output
58*4724848cSchristosis stored in B<*outl>. It is the caller's responsibility to ensure that the
59*4724848cSchristosbuffer at B<out> is sufficiently large to accommodate the output data. Only full
60*4724848cSchristosblocks of data (48 bytes) will be immediately processed and output by this
61*4724848cSchristosfunction. Any remainder is held in the B<ctx> object and will be processed by a
62*4724848cSchristossubsequent call to EVP_EncodeUpdate() or EVP_EncodeFinal(). To calculate the
63*4724848cSchristosrequired size of the output buffer add together the value of B<inl> with the
64*4724848cSchristosamount of unprocessed data held in B<ctx> and divide the result by 48 (ignore
65*4724848cSchristosany remainder). This gives the number of blocks of data that will be processed.
66*4724848cSchristosEnsure the output buffer contains 65 bytes of storage for each block, plus an
67*4724848cSchristosadditional byte for a NUL terminator. EVP_EncodeUpdate() may be called
68*4724848cSchristosrepeatedly to process large amounts of input data. In the event of an error
69*4724848cSchristosEVP_EncodeUpdate() will set B<*outl> to 0 and return 0. On success 1 will be
70*4724848cSchristosreturned.
71*4724848cSchristos
72*4724848cSchristosEVP_EncodeFinal() must be called at the end of an encoding operation. It will
73*4724848cSchristosprocess any partial block of data remaining in the B<ctx> object. The output
74*4724848cSchristosdata will be stored in B<out> and the length of the data written will be stored
75*4724848cSchristosin B<*outl>. It is the caller's responsibility to ensure that B<out> is
76*4724848cSchristossufficiently large to accommodate the output data which will never be more than
77*4724848cSchristos65 bytes plus an additional NUL terminator (i.e. 66 bytes in total).
78*4724848cSchristos
79*4724848cSchristosEVP_ENCODE_CTX_copy() can be used to copy a context B<sctx> to a context
80*4724848cSchristosB<dctx>. B<dctx> must be initialized before calling this function.
81*4724848cSchristos
82*4724848cSchristosEVP_ENCODE_CTX_num() will return the number of as yet unprocessed bytes still to
83*4724848cSchristosbe encoded or decoded that are pending in the B<ctx> object.
84*4724848cSchristos
85*4724848cSchristosEVP_EncodeBlock() encodes a full block of input data in B<f> and of length
86*4724848cSchristosB<n> and stores it in B<t>. For every 3 bytes of input provided 4 bytes of
87*4724848cSchristosoutput data will be produced. If B<n> is not divisible by 3 then the block is
88*4724848cSchristosencoded as a final block of data and the output is padded such that it is always
89*4724848cSchristosdivisible by 4. Additionally a NUL terminator character will be added. For
90*4724848cSchristosexample if 16 bytes of input data is provided then 24 bytes of encoded data is
91*4724848cSchristoscreated plus 1 byte for a NUL terminator (i.e. 25 bytes in total). The length of
92*4724848cSchristosthe data generated I<without> the NUL terminator is returned from the function.
93*4724848cSchristos
94*4724848cSchristosEVP_DecodeInit() initialises B<ctx> for the start of a new decoding operation.
95*4724848cSchristos
96*4724848cSchristosEVP_DecodeUpdate() decodes B<inl> characters of data found in the buffer pointed
97*4724848cSchristosto by B<in>. The output is stored in the buffer B<out> and the number of bytes
98*4724848cSchristosoutput is stored in B<*outl>. It is the caller's responsibility to ensure that
99*4724848cSchristosthe buffer at B<out> is sufficiently large to accommodate the output data. This
100*4724848cSchristosfunction will attempt to decode as much data as possible in 4 byte chunks. Any
101*4724848cSchristoswhitespace, newline or carriage return characters are ignored. Any partial chunk
102*4724848cSchristosof unprocessed data (1, 2 or 3 bytes) that remains at the end will be held in
103*4724848cSchristosthe B<ctx> object and processed by a subsequent call to EVP_DecodeUpdate(). If
104*4724848cSchristosany illegal base 64 characters are encountered or if the base 64 padding
105*4724848cSchristoscharacter "=" is encountered in the middle of the data then the function returns
106*4724848cSchristos-1 to indicate an error. A return value of 0 or 1 indicates successful
107*4724848cSchristosprocessing of the data. A return value of 0 additionally indicates that the last
108*4724848cSchristosinput data characters processed included the base 64 padding character "=" and
109*4724848cSchristostherefore no more non-padding character data is expected to be processed. For
110*4724848cSchristosevery 4 valid base 64 bytes processed (ignoring whitespace, carriage returns and
111*4724848cSchristosline feeds), 3 bytes of binary output data will be produced (or less at the end
112*4724848cSchristosof the data where the padding character "=" has been used).
113*4724848cSchristos
114*4724848cSchristosEVP_DecodeFinal() must be called at the end of a decoding operation. If there
115*4724848cSchristosis any unprocessed data still in B<ctx> then the input data must not have been
116*4724848cSchristosa multiple of 4 and therefore an error has occurred. The function will return -1
117*4724848cSchristosin this case. Otherwise the function returns 1 on success.
118*4724848cSchristos
119*4724848cSchristosEVP_DecodeBlock() will decode the block of B<n> characters of base 64 data
120*4724848cSchristoscontained in B<f> and store the result in B<t>. Any leading whitespace will be
121*4724848cSchristostrimmed as will any trailing whitespace, newlines, carriage returns or EOF
122*4724848cSchristoscharacters. After such trimming the length of the data in B<f> must be divisible
123*4724848cSchristosby 4. For every 4 input bytes exactly 3 output bytes will be produced. The
124*4724848cSchristosoutput will be padded with 0 bits if necessary to ensure that the output is
125*4724848cSchristosalways 3 bytes for every 4 input bytes. This function will return the length of
126*4724848cSchristosthe data decoded or -1 on error.
127*4724848cSchristos
128*4724848cSchristos=head1 RETURN VALUES
129*4724848cSchristos
130*4724848cSchristosEVP_ENCODE_CTX_new() returns a pointer to the newly allocated EVP_ENCODE_CTX
131*4724848cSchristosobject or NULL on error.
132*4724848cSchristos
133*4724848cSchristosEVP_ENCODE_CTX_num() returns the number of bytes pending encoding or decoding in
134*4724848cSchristosB<ctx>.
135*4724848cSchristos
136*4724848cSchristosEVP_EncodeUpdate() returns 0 on error or 1 on success.
137*4724848cSchristos
138*4724848cSchristosEVP_EncodeBlock() returns the number of bytes encoded excluding the NUL
139*4724848cSchristosterminator.
140*4724848cSchristos
141*4724848cSchristosEVP_DecodeUpdate() returns -1 on error and 0 or 1 on success. If 0 is returned
142*4724848cSchristosthen no more non-padding base 64 characters are expected.
143*4724848cSchristos
144*4724848cSchristosEVP_DecodeFinal() returns -1 on error or 1 on success.
145*4724848cSchristos
146*4724848cSchristosEVP_DecodeBlock() returns the length of the data decoded or -1 on error.
147*4724848cSchristos
148*4724848cSchristos=head1 SEE ALSO
149*4724848cSchristos
150*4724848cSchristosL<evp(7)>
151*4724848cSchristos
152*4724848cSchristos=head1 COPYRIGHT
153*4724848cSchristos
154*4724848cSchristosCopyright 2016-2020 The OpenSSL Project Authors. All Rights Reserved.
155*4724848cSchristos
156*4724848cSchristosLicensed under the OpenSSL license (the "License").  You may not use
157*4724848cSchristosthis file except in compliance with the License.  You can obtain a copy
158*4724848cSchristosin the file LICENSE in the source distribution or at
159*4724848cSchristosL<https://www.openssl.org/source/license.html>.
160*4724848cSchristos
161*4724848cSchristos=cut
162