[BACK]Return to keynote.h CVS log [TXT][DIR] Up to [local] / src / lib / libkeynote

File: [local] / src / lib / libkeynote / keynote.h (download)

Revision 1.16, Thu Jun 24 21:34:33 2004 UTC (19 years, 11 months ago) by msf
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, OPENBSD_7_4_BASE, OPENBSD_7_4, OPENBSD_7_3_BASE, OPENBSD_7_3, OPENBSD_7_2_BASE, OPENBSD_7_2, OPENBSD_7_1_BASE, OPENBSD_7_1, OPENBSD_7_0_BASE, OPENBSD_7_0, OPENBSD_6_9_BASE, OPENBSD_6_9, OPENBSD_6_8_BASE, OPENBSD_6_8, OPENBSD_6_7_BASE, OPENBSD_6_7, OPENBSD_6_6_BASE, OPENBSD_6_6, OPENBSD_6_5_BASE, OPENBSD_6_5, OPENBSD_6_4_BASE, OPENBSD_6_4, OPENBSD_6_3_BASE, OPENBSD_6_3, OPENBSD_6_2_BASE, OPENBSD_6_2, OPENBSD_6_1_BASE, OPENBSD_6_1, OPENBSD_6_0_BASE, OPENBSD_6_0, OPENBSD_5_9_BASE, OPENBSD_5_9, OPENBSD_5_8_BASE, OPENBSD_5_8, OPENBSD_5_7_BASE, OPENBSD_5_7, OPENBSD_5_6_BASE, OPENBSD_5_6, OPENBSD_5_5_BASE, OPENBSD_5_5, OPENBSD_5_4_BASE, OPENBSD_5_4, OPENBSD_5_3_BASE, OPENBSD_5_3, OPENBSD_5_2_BASE, OPENBSD_5_2, OPENBSD_5_1_BASE, OPENBSD_5_1, OPENBSD_5_0_BASE, OPENBSD_5_0, OPENBSD_4_9_BASE, OPENBSD_4_9, OPENBSD_4_8_BASE, OPENBSD_4_8, OPENBSD_4_7_BASE, OPENBSD_4_7, OPENBSD_4_6_BASE, OPENBSD_4_6, OPENBSD_4_5_BASE, OPENBSD_4_5, OPENBSD_4_4_BASE, OPENBSD_4_4, OPENBSD_4_3_BASE, OPENBSD_4_3, OPENBSD_4_2_BASE, OPENBSD_4_2, OPENBSD_4_1_BASE, OPENBSD_4_1, OPENBSD_4_0_BASE, OPENBSD_4_0, OPENBSD_3_9_BASE, OPENBSD_3_9, OPENBSD_3_8_BASE, OPENBSD_3_8, OPENBSD_3_7_BASE, OPENBSD_3_7, OPENBSD_3_6_BASE, OPENBSD_3_6, HEAD
Changes since 1.15: +3 -1 lines

make keynote.h C++ safe
ok todd@

/* $OpenBSD: keynote.h,v 1.16 2004/06/24 21:34:33 msf Exp $ */
/*
 * The author of this code is Angelos D. Keromytis (angelos@dsl.cis.upenn.edu)
 *
 * This code was written by Angelos D. Keromytis in Philadelphia, PA, USA,
 * in April-May 1998
 *
 * Copyright (C) 1998, 1999 by Angelos D. Keromytis.
 *	
 * Permission to use, copy, and modify this software with or without fee
 * is hereby granted, provided that this entire notice is included in
 * all copies of any software which is or includes a copy or
 * modification of this software. 
 *
 * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
 * IMPLIED WARRANTY. IN PARTICULAR, THE AUTHORS MAKES NO
 * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
 * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
 * PURPOSE.
 */

#ifndef __KEYNOTE_H__
#define __KEYNOTE_H__

struct environment
{
    char               *env_name;
    char               *env_value;
    int                 env_flags;
    regex_t             env_regex;
    struct environment *env_next;
};

struct keynote_deckey
{
    int   dec_algorithm;
    void *dec_key;
};

struct keynote_binary
{
    int   bn_len;
    char *bn_key;
};

struct keynote_keylist
{
    int                     key_alg;
    void                   *key_key;
    char                   *key_stringkey;
    struct keynote_keylist *key_next;
};

#define SIG_DSA_SHA1_HEX              "sig-dsa-sha1-hex:"
#define SIG_DSA_SHA1_HEX_LEN          strlen(SIG_DSA_SHA1_HEX)
#define SIG_DSA_SHA1_BASE64           "sig-dsa-sha1-base64:"
#define SIG_DSA_SHA1_BASE64_LEN       strlen(SIG_DSA_SHA1_BASE64)
#define SIG_RSA_SHA1_PKCS1_HEX        "sig-rsa-sha1-hex:"
#define SIG_RSA_SHA1_PKCS1_HEX_LEN    strlen(SIG_RSA_SHA1_PKCS1_HEX)
#define SIG_RSA_SHA1_PKCS1_BASE64     "sig-rsa-sha1-base64:"
#define SIG_RSA_SHA1_PKCS1_BASE64_LEN strlen(SIG_RSA_SHA1_PKCS1_BASE64)
#define SIG_RSA_MD5_PKCS1_HEX         "sig-rsa-md5-hex:"
#define SIG_RSA_MD5_PKCS1_HEX_LEN     strlen(SIG_RSA_MD5_PKCS1_HEX)
#define SIG_RSA_MD5_PKCS1_BASE64      "sig-rsa-md5-base64:"
#define SIG_RSA_MD5_PKCS1_BASE64_LEN  strlen(SIG_RSA_MD5_PKCS1_BASE64)
#define SIG_ELGAMAL_SHA1_HEX          "sig-elgamal-sha1-hex:"
#define SIG_ELGAMAL_SHA1_HEX_LEN      strlen(SIG_ELGAMAL_SHA1_HEX)
#define SIG_ELGAMAL_SHA1_BASE64       "sig-elgamal-sha1-base64:"
#define SIG_ELGAMAL_SHA1_BASE64_LEN   strlen(SIG_ELGAMAL_SHA1_BASE64)
#define SIG_PGP_NATIVE                "sig-pgp:"
#define SIG_PGP_NATIVE_LEN            strlen(SIG_PGP_NATIVE)
#define SIG_X509_SHA1_BASE64          "sig-x509-sha1-base64:"
#define SIG_X509_SHA1_BASE64_LEN      strlen(SIG_X509_SHA1_BASE64)
#define SIG_X509_SHA1_HEX             "sig-x509-sha1-hex:"
#define SIG_X509_SHA1_HEX_LEN         strlen(SIG_X509_SHA1_HEX)

#define SIGRESULT_UNTOUCHED     0
#define SIGRESULT_FALSE         1
#define SIGRESULT_TRUE          2

#define ENVIRONMENT_FLAG_FUNC   0x0001 /* This is a callback function */
#define ENVIRONMENT_FLAG_REGEX  0x0002 /* Regular expression for name */

#define ASSERT_FLAG_LOCAL       0x0001 /* 
					* Trusted assertion -- means
					* signature is not verified, and
					* authorizer field can 
					* include symbolic names.
				        */
#define ASSERT_FLAG_SIGGEN      0x0002 /*
					* Be a bit more lax with the
					* contents of the Signature:
					* field; to be used in
					* assertion signing only.
					*/
#define ASSERT_FLAG_SIGVER	0x0004 /*
					* To be used in signature verification
					* only.
					*/
#define RESULT_FALSE            0
#define RESULT_TRUE             1

#define KEYNOTE_CALLBACK_INITIALIZE		"_KEYNOTE_CALLBACK_INITIALIZE"
#define KEYNOTE_CALLBACK_CLEANUP		"_KEYNOTE_CALLBACK_CLEANUP"

#define KEYNOTE_VERSION_STRING			"2"

#define ERROR_MEMORY	       -1
#define ERROR_SYNTAX	       -2
#define ERROR_NOTFOUND         -3
#define ERROR_SIGN_FAILURE     -4

#define KEYNOTE_ALGORITHM_UNSPEC       -1
#define KEYNOTE_ALGORITHM_NONE		0
#define KEYNOTE_ALGORITHM_DSA		1
#define KEYNOTE_ALGORITHM_ELGAMAL	2
#define KEYNOTE_ALGORITHM_PGP		3
#define KEYNOTE_ALGORITHM_BINARY        4
#define KEYNOTE_ALGORITHM_X509          5
#define KEYNOTE_ALGORITHM_RSA		6

#define KEYNOTE_ERROR_ANY        0
#define KEYNOTE_ERROR_SYNTAX     1
#define KEYNOTE_ERROR_MEMORY     2
#define KEYNOTE_ERROR_SIGNATURE  3

#define ENCODING_NONE		   0
#define ENCODING_HEX		   1
#define ENCODING_BASE64		   2
#define ENCODING_NATIVE		   3	/* For things like PGP */

#define INTERNAL_ENC_NONE	   0
#define INTERNAL_ENC_PKCS1	   1
#define INTERNAL_ENC_ASN1          2
#define INTERNAL_ENC_NATIVE	   3	/* For things like PGP */

#define KEYNOTE_PUBLIC_KEY         0
#define KEYNOTE_PRIVATE_KEY        1

extern int keynote_errno;

__BEGIN_DECLS
/* Session API */
int    kn_init(void);
int    kn_add_assertion(int, char *, int, int);
int    kn_remove_assertion(int, int);
int    kn_add_action(int, char *, char *, int);
int    kn_remove_action(int, char *);
int    kn_add_authorizer(int, char *);
int    kn_remove_authorizer(int, char *);
int    kn_do_query(int, char **, int);
int    kn_get_failed(int, int, int);
int    kn_cleanup_action_environment(int);
int    kn_close(int);
void   kn_free_key(struct keynote_deckey *);
char  *kn_get_string(char *);

/* Simple API */
int    kn_query(struct environment *, char **, int, char **, int *, int,
		char **, int *, int, char **, int);

/* Aux. routines */
char **kn_read_asserts(char *, int, int *);
int    kn_keycompare(void *, void *, int);
void  *kn_get_authorizer(int, int, int *);
struct keynote_keylist *kn_get_licensees(int, int);

/* ASCII-encoding API */
int    kn_encode_base64(unsigned char const *, unsigned int, char *,
			unsigned int);
int    kn_decode_base64(char const *, unsigned char *, unsigned int);
int    kn_encode_hex(unsigned char *, char **, int);
int    kn_decode_hex(char *, char **);

/* Key-encoding API */
int    kn_decode_key(struct keynote_deckey *, char *, int);
char  *kn_encode_key(struct keynote_deckey *, int, int, int);

/* Crypto API */
char  *kn_sign_assertion(char *, int, char *, char *, int);
int    kn_verify_assertion(char *, int);
__END_DECLS
#endif /* __KEYNOTE_H__ */