1 /* This Source Code Form is subject to the terms of the Mozilla Public 2 * License, v. 2.0. If a copy of the MPL was not distributed with this 3 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 4 5 /* 6 * Public prototypes for base64 encoding/decoding. 7 */ 8 #ifndef _NSSB64_H_ 9 #define _NSSB64_H_ 10 11 #include "utilrename.h" 12 #include "seccomon.h" 13 #include "nssb64t.h" 14 15 SEC_BEGIN_PROTOS 16 17 /* 18 * Functions to start a base64 decoding/encoding context. 19 */ 20 21 extern NSSBase64Decoder * 22 NSSBase64Decoder_Create(PRInt32 (*output_fn)(void *, const unsigned char *, 23 PRInt32), 24 void *output_arg); 25 26 extern NSSBase64Encoder * 27 NSSBase64Encoder_Create(PRInt32 (*output_fn)(void *, const char *, PRInt32), 28 void *output_arg); 29 30 /* 31 * Push data through the decoder/encoder, causing the output_fn (provided 32 * to Create) to be called with the decoded/encoded data. 33 */ 34 35 extern SECStatus 36 NSSBase64Decoder_Update(NSSBase64Decoder *data, const char *buffer, 37 PRUint32 size); 38 39 extern SECStatus 40 NSSBase64Encoder_Update(NSSBase64Encoder *data, const unsigned char *buffer, 41 PRUint32 size); 42 43 /* 44 * When you're done processing, call this to close the context. 45 * If "abort_p" is false, then calling this may cause the output_fn 46 * to be called one last time (as the last buffered data is flushed out). 47 */ 48 49 extern SECStatus 50 NSSBase64Decoder_Destroy(NSSBase64Decoder *data, PRBool abort_p); 51 52 extern SECStatus 53 NSSBase64Encoder_Destroy(NSSBase64Encoder *data, PRBool abort_p); 54 55 /* 56 * Perform base64 decoding from an ascii string "inStr" to an Item. 57 * The length of the input must be provided as "inLen". The Item 58 * may be provided (as "outItemOpt"); you can also pass in a NULL 59 * and the Item will be allocated for you. 60 * 61 * In any case, the data within the Item will be allocated for you. 62 * All allocation will happen out of the passed-in "arenaOpt", if non-NULL. 63 * If "arenaOpt" is NULL, standard allocation (heap) will be used and 64 * you will want to free the result via SECITEM_FreeItem. 65 * 66 * Return value is NULL on error, the Item (allocated or provided) otherwise. 67 */ 68 extern SECItem * 69 NSSBase64_DecodeBuffer(PLArenaPool *arenaOpt, SECItem *outItemOpt, 70 const char *inStr, unsigned int inLen); 71 72 /* 73 * Perform base64 encoding of binary data "inItem" to an ascii string. 74 * The output buffer may be provided (as "outStrOpt"); you can also pass 75 * in a NULL and the buffer will be allocated for you. The result will 76 * be null-terminated, and if the buffer is provided, "maxOutLen" must 77 * specify the maximum length of the buffer and will be checked to 78 * supply sufficient space space for the encoded result. (If "outStrOpt" 79 * is NULL, "maxOutLen" is ignored.) 80 * 81 * If "outStrOpt" is NULL, allocation will happen out of the passed-in 82 * "arenaOpt", if *it* is non-NULL, otherwise standard allocation (heap) 83 * will be used. 84 * 85 * Return value is NULL on error, the output buffer (allocated or provided) 86 * otherwise. 87 */ 88 extern char * 89 NSSBase64_EncodeItem(PLArenaPool *arenaOpt, char *outStrOpt, 90 unsigned int maxOutLen, SECItem *inItem); 91 92 SEC_END_PROTOS 93 94 #endif /* _NSSB64_H_ */ 95