123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
-
-
-
-
-
- #ifndef __SRS2_H__
- #define __SRS2_H__
-
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #ifdef __APPLE__
- #include <sys/types.h>
- #endif
-
-
- #ifndef __BEGIN_DECLS
- #define __BEGIN_DECLS
- #define __END_DECLS
- #endif
-
- __BEGIN_DECLS
-
- #define SRS_VERSION_MAJOR 1
- #define SRS_VERSION_MINOR 0
- #define SRS_VERSION_PATCHLEVEL 14
- #define SRS_VERSION_FROM(m, n, p) (((m) << 16) + ((n) << 8) + (p))
- #define SRS_VERSION SRS_VERSION_FROM(SRS_VERSION_MAJOR, \
- SRS_VERSION_MINOR, \
- SRS_VERSION_PATCHLEVEL)
-
-
- #undef TRUE
- #define TRUE 1
- #undef FALSE
- #define FALSE 0
-
- #define SRSSEP '='
- #define SRS0TAG "SRS0"
- #define SRS1TAG "SRS1"
-
-
-
- #define SRS_ERRTYPE_MASK 0xF000
- #define SRS_ERRTYPE_NONE 0x0000
- #define SRS_ERRTYPE_CONFIG 0x1000
- #define SRS_ERRTYPE_INPUT 0x2000
- #define SRS_ERRTYPE_SYNTAX 0x4000
- #define SRS_ERRTYPE_SRS 0x8000
-
- #define SRS_SUCCESS (0)
- #define SRS_ENOTSRSADDRESS (1)
- #define SRS_ENOTREWRITTEN (2)
-
- #define SRS_ENOSECRETS (SRS_ERRTYPE_CONFIG | 1)
- #define SRS_ESEPARATORINVALID (SRS_ERRTYPE_CONFIG | 2)
-
- #define SRS_ENOSENDERATSIGN (SRS_ERRTYPE_INPUT | 1)
- #define SRS_EBUFTOOSMALL (SRS_ERRTYPE_INPUT | 2)
-
- #define SRS_ENOSRS0HOST (SRS_ERRTYPE_SYNTAX | 1)
- #define SRS_ENOSRS0USER (SRS_ERRTYPE_SYNTAX | 2)
- #define SRS_ENOSRS0HASH (SRS_ERRTYPE_SYNTAX | 3)
- #define SRS_ENOSRS0STAMP (SRS_ERRTYPE_SYNTAX | 4)
- #define SRS_ENOSRS1HOST (SRS_ERRTYPE_SYNTAX | 5)
- #define SRS_ENOSRS1USER (SRS_ERRTYPE_SYNTAX | 6)
- #define SRS_ENOSRS1HASH (SRS_ERRTYPE_SYNTAX | 7)
- #define SRS_EBADTIMESTAMPCHAR (SRS_ERRTYPE_SYNTAX | 8)
- #define SRS_EHASHTOOSHORT (SRS_ERRTYPE_SYNTAX | 9)
-
- #define SRS_ETIMESTAMPOUTOFDATE (SRS_ERRTYPE_SRS | 1)
- #define SRS_EHASHINVALID (SRS_ERRTYPE_SRS | 2)
-
- #define SRS_ERROR_TYPE(x) ((x) & SRS_ERRTYPE_MASK)
-
-
-
- #define SRS_IS_SRS_ADDRESS(x) ( \
- (strncasecmp((x), "SRS", 3) == 0) && \
- (strchr("01", (x)[3]) != NULL) && \
- (strchr("-+=", (x)[4]) != NULL) \
- )
-
- typedef void *(*srs_malloc_t)(size_t);
- typedef void *(*srs_realloc_t)(void *, size_t);
- typedef void (*srs_free_t)(void *);
-
- typedef int srs_bool;
-
- typedef
- struct _srs_t {
-
- char **secrets;
- int numsecrets;
- char separator;
-
-
- int maxage;
- int hashlength;
- int hashmin;
-
-
- srs_bool alwaysrewrite;
- srs_bool noforward;
- srs_bool noreverse;
- char **neverrewrite;
- } srs_t;
-
-
- int srs_set_malloc(srs_malloc_t m, srs_realloc_t r, srs_free_t f);
- srs_t *srs_new();
- void srs_init(srs_t *srs);
- void srs_free(srs_t *srs);
- int srs_forward(srs_t *srs, char *buf, unsigned buflen,
- const char *sender, const char *alias);
- int srs_forward_alloc(srs_t *srs, char **sptr,
- const char *sender, const char *alias);
- int srs_reverse(srs_t *srs, char *buf, unsigned buflen,
- const char *sender);
- int srs_reverse_alloc(srs_t *srs, char **sptr, const char *sender);
- const char *
- srs_strerror(int code);
- int srs_add_secret(srs_t *srs, const char *secret);
- const char *
- srs_get_secret(srs_t *srs, int idx);
-
- int srs_timestamp_create(srs_t *srs, char *buf, time_t now);
- int srs_timestamp_check(srs_t *srs, const char *stamp);
-
- #define SRS_PARAM_DECLARE(n, t) \
- int srs_set_ ## n (srs_t *srs, t value); \
- t srs_get_ ## n (srs_t *srs);
-
- SRS_PARAM_DECLARE(alwaysrewrite, srs_bool)
- SRS_PARAM_DECLARE(separator, char)
- SRS_PARAM_DECLARE(maxage, int)
- SRS_PARAM_DECLARE(hashlength, int)
- SRS_PARAM_DECLARE(hashmin, int)
- SRS_PARAM_DECLARE(noforward, srs_bool)
- SRS_PARAM_DECLARE(noreverse, srs_bool)
-
-
-
- typedef unsigned long ULONG;
- typedef unsigned char sha_byte;
-
- #define SHA_BLOCKSIZE 64
- #define SHA_DIGESTSIZE 20
-
- typedef struct {
- ULONG digest[5];
- ULONG count_lo, count_hi;
- sha_byte data[SHA_BLOCKSIZE];
- int local;
- } SHA_INFO;
-
- typedef
- struct _srs_hmac_ctx_t {
- SHA_INFO sctx;
- char ipad[SHA_BLOCKSIZE + 1];
- char opad[SHA_BLOCKSIZE + 1];
- } srs_hmac_ctx_t;
-
- void srs_hmac_init(srs_hmac_ctx_t *ctx, char *secret, unsigned len);
- void srs_hmac_update(srs_hmac_ctx_t *ctx, char *data, unsigned len);
- void srs_hmac_fini(srs_hmac_ctx_t *ctx, char *out);
-
-
- __END_DECLS
-
- #endif
|