/* libsrs - Sender Rewriting Scheme library
*
* Author: James Couzens <jcouzens@obscurity.org>
*
* FILE: main.h
* DESC: main library header file
*
* License:
*
* The libspf Software License, Version 1.0
*
* Copyright (c) 2004 James Couzens. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
*/
#ifndef _MAIN_H
#define _MAIN_H 1
#include "srs.h" /* libsrs structures / defines */
#include "util.h" /* libsrs utility */
#include "crypto.h" /* libsrs crypto */
#include "error.h" /* libsrs error handling */
__BEGIN_DECLS
#define SRS0 0 /* srs address tag type */
#define SRS1 1 /* srs address wrap type */
#define SRS_TAG "SRS0" /* root re-writer tag */
#define SRS_WRAP "SRS1" /* 1 + N re-writer tag */
#define PRECISION (60*60*24) /* used in timestamp creation/validation */
#define THREE_DAYS 259200 /* used when comparing timestamps */
#define TICKSLOTS 1024 /* two base32 chars */
#define MAX_TIMESTAMP 3 /* max len of timestamp */
#define MAX_RTYPE 5 /* max len of an RTYPE (SRS0, SRS1) */
#define MAX_SECRET 32 /* max len of secret */
#define MAX_DIGEST 33 /* max len of digest */
#define MAX_HOSTNAME 256 /* max len of hostname domain */
#define MAX_RWA 1024 /* max len of re-written address */
#define MAX_DEBUG_LEN 1024 /* max len of debug output */
/*
* In ANSI C, and indeed any rational implementation, size_t is also the
* type returned by sizeof(). However, it seems there are some irrational
* implementations out there, in which sizeof() returns an int even though
* size_t is defined as long or unsigned long. To ensure consistent results
* we always use this SIZEOF() macro in place of using sizeof() directly.
*/
#define SIZEOF(object) ((size_t) sizeof(object))
/* for handing debug modes */
#define f_bit_set(fl_bit_vector, bit) ((int)((fl_bit_vector)&(bit)))
srs_t *SRS_init(void);
srs_t *SRS_new(const char *secret, const int32_t age,
const int16_t hash_len, const int16_t hash_min);
srs_t *SRS_del(srs_t *srs);
char *SRS_forward(srs_t *srs, char *sender, char *alias);
char *SRS_reverse(srs_t *srs, char *addr);
char *SRS_compile(srs_t *srs, srs_addr_t *addr);
char *SRS_parse(srs_t *srs, char *user);
char *SRS_timestamp_create(time_t timestamp);
SRS_BOOL SRS_timestamp_check(srs_t *srs, const char *timestamp);
SRS_BOOL SRS_time_check(srs_t *srs);
u_char *SRS_hash_create(const char *secret, const int32_t s_len,
const u_char *data, const int32_t d_len);
SRS_BOOL SRS_hash_verify(const char *secret, const int32_t s_len,
const u_char *data, const int32_t d_len, const u_char *digest,
const int16_t hash_min, const int16_t hash_len);
SRS_BOOL SRS_set_secret(srs_t *srs, const char *s);
__END_DECLS
#endif
/* end main.h */
syntax highlighted by Code2HTML, v. 0.9.1