1/* 2 * Portions Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC") 3 * Portions Copyright (C) 2001 Internet Software Consortium. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 10 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 11 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 12 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * 17 * Portions Copyright (C) 2001 Nominum, Inc. 18 * 19 * Permission to use, copy, modify, and/or distribute this software for any 20 * purpose with or without fee is hereby granted, provided that the above 21 * copyright notice and this permission notice appear in all copies. 22 * 23 * THE SOFTWARE IS PROVIDED "AS IS" AND ISC AND NOMINUM DISCLAIMS ALL 24 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES 25 * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY 26 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 27 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 28 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 29 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 30 */ 31 32/* $Id: base64.c,v 1.8 2007/08/28 07:20:43 tbox Exp $ */ 33 34/*! \file */ 35 36#include <config.h> 37 38#include <isc/base64.h> 39#include <isc/buffer.h> 40#include <isc/region.h> 41#include <isc/result.h> 42 43#include <isccc/base64.h> 44#include <isccc/result.h> 45#include <isccc/util.h> 46 47isc_result_t 48isccc_base64_encode(isccc_region_t *source, int wordlength, 49 const char *wordbreak, isccc_region_t *target) 50{ 51 isc_region_t sr; 52 isc_buffer_t tb; 53 isc_result_t result; 54 55 sr.base = source->rstart; 56 sr.length = source->rend - source->rstart; 57 isc_buffer_init(&tb, target->rstart, target->rend - target->rstart); 58 59 result = isc_base64_totext(&sr, wordlength, wordbreak, &tb); 60 if (result != ISC_R_SUCCESS) 61 return (result); 62 source->rstart = source->rend; 63 target->rstart = isc_buffer_used(&tb); 64 return (ISC_R_SUCCESS); 65} 66 67isc_result_t 68isccc_base64_decode(const char *cstr, isccc_region_t *target) { 69 isc_buffer_t b; 70 isc_result_t result; 71 72 isc_buffer_init(&b, target->rstart, target->rend - target->rstart); 73 result = isc_base64_decodestring(cstr, &b); 74 if (result != ISC_R_SUCCESS) 75 return (result); 76 target->rstart = isc_buffer_used(&b); 77 return (ISC_R_SUCCESS); 78} 79