Home | History | Annotate | Line # | Download | only in lib
      1 /*-
      2  * Copyright (c) 2009 The NetBSD Foundation, Inc.
      3  * All rights reserved.
      4  *
      5  * This code is derived from software contributed to The NetBSD Foundation
      6  * by Alistair Crooks (agc (at) NetBSD.org)
      7  *
      8  * Redistribution and use in source and binary forms, with or without
      9  * modification, are permitted provided that the following conditions
     10  * are met:
     11  * 1. Redistributions of source code must retain the above copyright
     12  *    notice, this list of conditions and the following disclaimer.
     13  * 2. Redistributions in binary form must reproduce the above copyright
     14  *    notice, this list of conditions and the following disclaimer in the
     15  *    documentation and/or other materials provided with the distribution.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
     18  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
     19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
     20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
     21  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
     24  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
     25  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
     26  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     27  * POSSIBILITY OF SUCH DAMAGE.
     28  */
     29 /*
     30  * Copyright (c) 2005-2008 Nominet UK (www.nic.uk)
     31  * All rights reserved.
     32  * Contributors: Ben Laurie, Rachel Willmer. The Contributors have asserted
     33  * their moral rights under the UK Copyright Design and Patents Act 1988 to
     34  * be recorded as the authors of this copyright work.
     35  *
     36  * Licensed under the Apache License, Version 2.0 (the "License"); you may not
     37  * use this file except in compliance with the License.
     38  *
     39  * You may obtain a copy of the License at
     40  *     http://www.apache.org/licenses/LICENSE-2.0
     41  *
     42  * Unless required by applicable law or agreed to in writing, software
     43  * distributed under the License is distributed on an "AS IS" BASIS,
     44  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     45  *
     46  * See the License for the specific language governing permissions and
     47  * limitations under the License.
     48  */
     49 
     50 #ifndef READERWRITER_H_
     51 #define READERWRITER_H_
     52 
     53 #include "create.h"
     54 
     55 #include "memory.h"
     56 
     57 /* if this is defined, we'll use mmap in preference to file ops */
     58 #define USE_MMAP_FOR_FILES      1
     59 
     60 void pgp_reader_set_fd(pgp_stream_t *, int);
     61 void pgp_reader_set_mmap(pgp_stream_t *, int);
     62 void pgp_reader_set_memory(pgp_stream_t *, const void *, size_t);
     63 
     64 /* Do a sum mod 65536 of all bytes read (as needed for secret keys) */
     65 void pgp_reader_push_sum16(pgp_stream_t *);
     66 uint16_t pgp_reader_pop_sum16(pgp_stream_t *);
     67 
     68 void pgp_reader_push_se_ip_data(pgp_stream_t *, pgp_crypt_t *,
     69 				pgp_region_t *);
     70 void pgp_reader_pop_se_ip_data(pgp_stream_t *);
     71 
     72 /* */
     73 unsigned pgp_write_mdc(pgp_output_t *, const uint8_t *);
     74 unsigned pgp_write_se_ip_pktset(pgp_output_t *, const uint8_t *,
     75 		       const unsigned,
     76 		       pgp_crypt_t *);
     77 void pgp_push_enc_crypt(pgp_output_t *, pgp_crypt_t *);
     78 int pgp_push_enc_se_ip(pgp_output_t *, const pgp_key_t *, const char *);
     79 
     80 /* Secret Key checksum */
     81 void pgp_push_checksum_writer(pgp_output_t *, pgp_seckey_t *);
     82 unsigned pgp_pop_skey_checksum_writer(pgp_output_t *);
     83 
     84 
     85 /* memory writing */
     86 void pgp_setup_memory_write(pgp_output_t **, pgp_memory_t **, size_t);
     87 void pgp_teardown_memory_write(pgp_output_t *, pgp_memory_t *);
     88 
     89 /* memory reading */
     90 void pgp_setup_memory_read(pgp_io_t *,
     91 				pgp_stream_t **,
     92 				pgp_memory_t *,
     93 				void *,
     94 				pgp_cb_ret_t callback(const pgp_packet_t *,
     95 					pgp_cbdata_t *),
     96 				unsigned);
     97 void pgp_teardown_memory_read(pgp_stream_t *, pgp_memory_t *);
     98 
     99 /* file writing */
    100 int pgp_setup_file_write(pgp_output_t **, const char *, unsigned);
    101 void pgp_teardown_file_write(pgp_output_t *, int);
    102 
    103 /* file appending */
    104 int pgp_setup_file_append(pgp_output_t **, const char *);
    105 void pgp_teardown_file_append(pgp_output_t *, int);
    106 
    107 /* file reading */
    108 int pgp_setup_file_read(pgp_io_t *,
    109 			pgp_stream_t **,
    110 			const char *,
    111 			void *,
    112 			pgp_cb_ret_t callback(const pgp_packet_t *,
    113 		    			pgp_cbdata_t *),
    114 			unsigned);
    115 void pgp_teardown_file_read(pgp_stream_t *, int);
    116 
    117 unsigned pgp_reader_set_accumulate(pgp_stream_t *, unsigned);
    118 
    119 /* useful callbacks */
    120 pgp_cb_ret_t pgp_litdata_cb(const pgp_packet_t *, pgp_cbdata_t *);
    121 pgp_cb_ret_t pgp_pk_sesskey_cb(const pgp_packet_t *, pgp_cbdata_t *);
    122 pgp_cb_ret_t pgp_get_seckey_cb(const pgp_packet_t *, pgp_cbdata_t *);
    123 
    124 int pgp_getpassphrase(void *, char *, size_t);
    125 
    126 #endif /* READERWRITER_H_ */
    127