Home | History | Annotate | Line # | Download | only in isccc
      1 /*	$NetBSD: base64.c,v 1.7 2025/01/26 16:25:44 christos Exp $	*/
      2 
      3 /*
      4  * Copyright (C) Internet Systems Consortium, Inc. ("ISC")
      5  *
      6  * SPDX-License-Identifier: MPL-2.0 AND ISC
      7  *
      8  * This Source Code Form is subject to the terms of the Mozilla Public
      9  * License, v. 2.0. If a copy of the MPL was not distributed with this
     10  * file, you can obtain one at https://mozilla.org/MPL/2.0/.
     11  *
     12  * See the COPYRIGHT file distributed with this work for additional
     13  * information regarding copyright ownership.
     14  */
     15 
     16 /*
     17  * 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 /*! \file */
     33 
     34 #include <isc/base64.h>
     35 #include <isc/buffer.h>
     36 #include <isc/region.h>
     37 #include <isc/result.h>
     38 
     39 #include <isccc/base64.h>
     40 #include <isccc/util.h>
     41 
     42 isc_result_t
     43 isccc_base64_encode(isccc_region_t *source, int wordlength,
     44 		    const char *wordbreak, isccc_region_t *target) {
     45 	isc_region_t sr;
     46 	isc_buffer_t tb;
     47 	isc_result_t result;
     48 
     49 	sr.base = source->rstart;
     50 	sr.length = (unsigned int)(source->rend - source->rstart);
     51 	isc_buffer_init(&tb, target->rstart,
     52 			(unsigned int)(target->rend - target->rstart));
     53 
     54 	result = isc_base64_totext(&sr, wordlength, wordbreak, &tb);
     55 	if (result != ISC_R_SUCCESS) {
     56 		return result;
     57 	}
     58 	source->rstart = source->rend;
     59 	target->rstart = isc_buffer_used(&tb);
     60 	return ISC_R_SUCCESS;
     61 }
     62 
     63 isc_result_t
     64 isccc_base64_decode(const char *cstr, isccc_region_t *target) {
     65 	isc_buffer_t b;
     66 	isc_result_t result;
     67 
     68 	isc_buffer_init(&b, target->rstart,
     69 			(unsigned int)(target->rend - target->rstart));
     70 	result = isc_base64_decodestring(cstr, &b);
     71 	if (result != ISC_R_SUCCESS) {
     72 		return result;
     73 	}
     74 	target->rstart = isc_buffer_used(&b);
     75 	return ISC_R_SUCCESS;
     76 }
     77