1*00b67f09SDavid van Moolenbroek /* $NetBSD: base64.h,v 1.4 2014/12/10 04:38:01 christos Exp $ */ 2*00b67f09SDavid van Moolenbroek 3*00b67f09SDavid van Moolenbroek /* 4*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC") 5*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2001 Internet Software Consortium. 6*00b67f09SDavid van Moolenbroek * 7*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 8*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 9*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 10*00b67f09SDavid van Moolenbroek * 11*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 12*00b67f09SDavid van Moolenbroek * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 13*00b67f09SDavid van Moolenbroek * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 14*00b67f09SDavid van Moolenbroek * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15*00b67f09SDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16*00b67f09SDavid van Moolenbroek * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17*00b67f09SDavid van Moolenbroek * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18*00b67f09SDavid van Moolenbroek * 19*00b67f09SDavid van Moolenbroek * Portions Copyright (C) 2001 Nominum, Inc. 20*00b67f09SDavid van Moolenbroek * 21*00b67f09SDavid van Moolenbroek * Permission to use, copy, modify, and/or distribute this software for any 22*00b67f09SDavid van Moolenbroek * purpose with or without fee is hereby granted, provided that the above 23*00b67f09SDavid van Moolenbroek * copyright notice and this permission notice appear in all copies. 24*00b67f09SDavid van Moolenbroek * 25*00b67f09SDavid van Moolenbroek * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 26*00b67f09SDavid van Moolenbroek * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 27*00b67f09SDavid van Moolenbroek * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 28*00b67f09SDavid van Moolenbroek * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 29*00b67f09SDavid van Moolenbroek * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 30*00b67f09SDavid van Moolenbroek * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 31*00b67f09SDavid van Moolenbroek * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 32*00b67f09SDavid van Moolenbroek */ 33*00b67f09SDavid van Moolenbroek 34*00b67f09SDavid van Moolenbroek /* Id: base64.h,v 1.10 2007/08/28 07:20:43 tbox Exp */ 35*00b67f09SDavid van Moolenbroek 36*00b67f09SDavid van Moolenbroek #ifndef ISCCC_BASE64_H 37*00b67f09SDavid van Moolenbroek #define ISCCC_BASE64_H 1 38*00b67f09SDavid van Moolenbroek 39*00b67f09SDavid van Moolenbroek /*! \file isccc/base64.h */ 40*00b67f09SDavid van Moolenbroek 41*00b67f09SDavid van Moolenbroek #include <isc/lang.h> 42*00b67f09SDavid van Moolenbroek #include <isccc/types.h> 43*00b67f09SDavid van Moolenbroek 44*00b67f09SDavid van Moolenbroek ISC_LANG_BEGINDECLS 45*00b67f09SDavid van Moolenbroek 46*00b67f09SDavid van Moolenbroek /*** 47*00b67f09SDavid van Moolenbroek *** Functions 48*00b67f09SDavid van Moolenbroek ***/ 49*00b67f09SDavid van Moolenbroek 50*00b67f09SDavid van Moolenbroek isc_result_t 51*00b67f09SDavid van Moolenbroek isccc_base64_encode(isccc_region_t *source, int wordlength, 52*00b67f09SDavid van Moolenbroek const char *wordbreak, isccc_region_t *target); 53*00b67f09SDavid van Moolenbroek /*%< 54*00b67f09SDavid van Moolenbroek * Convert data into base64 encoded text. 55*00b67f09SDavid van Moolenbroek * 56*00b67f09SDavid van Moolenbroek * Notes: 57*00b67f09SDavid van Moolenbroek *\li The base64 encoded text in 'target' will be divided into 58*00b67f09SDavid van Moolenbroek * words of at most 'wordlength' characters, separated by 59*00b67f09SDavid van Moolenbroek * the 'wordbreak' string. No parentheses will surround 60*00b67f09SDavid van Moolenbroek * the text. 61*00b67f09SDavid van Moolenbroek * 62*00b67f09SDavid van Moolenbroek * Requires: 63*00b67f09SDavid van Moolenbroek *\li 'source' is a region containing binary data. 64*00b67f09SDavid van Moolenbroek *\li 'target' is a text region containing available space. 65*00b67f09SDavid van Moolenbroek *\li 'wordbreak' points to a null-terminated string of 66*00b67f09SDavid van Moolenbroek * zero or more whitespace characters. 67*00b67f09SDavid van Moolenbroek */ 68*00b67f09SDavid van Moolenbroek 69*00b67f09SDavid van Moolenbroek isc_result_t 70*00b67f09SDavid van Moolenbroek isccc_base64_decode(const char *cstr, isccc_region_t *target); 71*00b67f09SDavid van Moolenbroek /*%< 72*00b67f09SDavid van Moolenbroek * Decode a null-terminated base64 string. 73*00b67f09SDavid van Moolenbroek * 74*00b67f09SDavid van Moolenbroek * Requires: 75*00b67f09SDavid van Moolenbroek *\li 'cstr' is non-null. 76*00b67f09SDavid van Moolenbroek *\li 'target' is a valid region. 77*00b67f09SDavid van Moolenbroek * 78*00b67f09SDavid van Moolenbroek * Returns: 79*00b67f09SDavid van Moolenbroek *\li #ISC_R_SUCCESS -- the entire decoded representation of 'cstring' 80*00b67f09SDavid van Moolenbroek * fit in 'target'. 81*00b67f09SDavid van Moolenbroek *\li #ISC_R_BADBASE64 -- 'cstr' is not a valid base64 encoding. 82*00b67f09SDavid van Moolenbroek *\li #ISC_R_NOSPACE -- 'target' is not big enough. 83*00b67f09SDavid van Moolenbroek */ 84*00b67f09SDavid van Moolenbroek 85*00b67f09SDavid van Moolenbroek ISC_LANG_ENDDECLS 86*00b67f09SDavid van Moolenbroek 87*00b67f09SDavid van Moolenbroek #endif /* ISCCC_BASE64_H */ 88