xref: /openbsd-src/lib/libkeynote/keynote.h (revision 4d8bb350158fcfd621c1d150eaa8e093d4774a28)
1*4d8bb350Smsf /* $OpenBSD: keynote.h,v 1.16 2004/06/24 21:34:33 msf Exp $ */
2983e9580Sangelos /*
3983e9580Sangelos  * The author of this code is Angelos D. Keromytis (angelos@dsl.cis.upenn.edu)
4983e9580Sangelos  *
5983e9580Sangelos  * This code was written by Angelos D. Keromytis in Philadelphia, PA, USA,
6983e9580Sangelos  * in April-May 1998
7983e9580Sangelos  *
8983e9580Sangelos  * Copyright (C) 1998, 1999 by Angelos D. Keromytis.
9983e9580Sangelos  *
105e4ac158Sderaadt  * Permission to use, copy, and modify this software with or without fee
11983e9580Sangelos  * is hereby granted, provided that this entire notice is included in
12983e9580Sangelos  * all copies of any software which is or includes a copy or
13983e9580Sangelos  * modification of this software.
14983e9580Sangelos  *
15983e9580Sangelos  * THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR
16983e9580Sangelos  * IMPLIED WARRANTY. IN PARTICULAR, THE AUTHORS MAKES NO
17983e9580Sangelos  * REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE
18983e9580Sangelos  * MERCHANTABILITY OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
19983e9580Sangelos  * PURPOSE.
20983e9580Sangelos  */
21983e9580Sangelos 
22a8a6ad51Sangelos #ifndef __KEYNOTE_H__
23a8a6ad51Sangelos #define __KEYNOTE_H__
24983e9580Sangelos 
25983e9580Sangelos struct environment
26983e9580Sangelos {
27983e9580Sangelos     char               *env_name;
28983e9580Sangelos     char               *env_value;
29983e9580Sangelos     int                 env_flags;
30983e9580Sangelos     regex_t             env_regex;
31983e9580Sangelos     struct environment *env_next;
32983e9580Sangelos };
33983e9580Sangelos 
34983e9580Sangelos struct keynote_deckey
35983e9580Sangelos {
36983e9580Sangelos     int   dec_algorithm;
37983e9580Sangelos     void *dec_key;
38983e9580Sangelos };
39983e9580Sangelos 
40983e9580Sangelos struct keynote_binary
41983e9580Sangelos {
42983e9580Sangelos     int   bn_len;
43983e9580Sangelos     char *bn_key;
44983e9580Sangelos };
45983e9580Sangelos 
469186b70cSangelos struct keynote_keylist
479186b70cSangelos {
489186b70cSangelos     int                     key_alg;
499186b70cSangelos     void                   *key_key;
509186b70cSangelos     char                   *key_stringkey;
519186b70cSangelos     struct keynote_keylist *key_next;
529186b70cSangelos };
539186b70cSangelos 
54983e9580Sangelos #define SIG_DSA_SHA1_HEX              "sig-dsa-sha1-hex:"
55983e9580Sangelos #define SIG_DSA_SHA1_HEX_LEN          strlen(SIG_DSA_SHA1_HEX)
56983e9580Sangelos #define SIG_DSA_SHA1_BASE64           "sig-dsa-sha1-base64:"
57983e9580Sangelos #define SIG_DSA_SHA1_BASE64_LEN       strlen(SIG_DSA_SHA1_BASE64)
58983e9580Sangelos #define SIG_RSA_SHA1_PKCS1_HEX        "sig-rsa-sha1-hex:"
59983e9580Sangelos #define SIG_RSA_SHA1_PKCS1_HEX_LEN    strlen(SIG_RSA_SHA1_PKCS1_HEX)
60983e9580Sangelos #define SIG_RSA_SHA1_PKCS1_BASE64     "sig-rsa-sha1-base64:"
61983e9580Sangelos #define SIG_RSA_SHA1_PKCS1_BASE64_LEN strlen(SIG_RSA_SHA1_PKCS1_BASE64)
62983e9580Sangelos #define SIG_RSA_MD5_PKCS1_HEX         "sig-rsa-md5-hex:"
63983e9580Sangelos #define SIG_RSA_MD5_PKCS1_HEX_LEN     strlen(SIG_RSA_MD5_PKCS1_HEX)
64983e9580Sangelos #define SIG_RSA_MD5_PKCS1_BASE64      "sig-rsa-md5-base64:"
65983e9580Sangelos #define SIG_RSA_MD5_PKCS1_BASE64_LEN  strlen(SIG_RSA_MD5_PKCS1_BASE64)
66983e9580Sangelos #define SIG_ELGAMAL_SHA1_HEX          "sig-elgamal-sha1-hex:"
67983e9580Sangelos #define SIG_ELGAMAL_SHA1_HEX_LEN      strlen(SIG_ELGAMAL_SHA1_HEX)
68983e9580Sangelos #define SIG_ELGAMAL_SHA1_BASE64       "sig-elgamal-sha1-base64:"
69983e9580Sangelos #define SIG_ELGAMAL_SHA1_BASE64_LEN   strlen(SIG_ELGAMAL_SHA1_BASE64)
70983e9580Sangelos #define SIG_PGP_NATIVE                "sig-pgp:"
71983e9580Sangelos #define SIG_PGP_NATIVE_LEN            strlen(SIG_PGP_NATIVE)
72983e9580Sangelos #define SIG_X509_SHA1_BASE64          "sig-x509-sha1-base64:"
73983e9580Sangelos #define SIG_X509_SHA1_BASE64_LEN      strlen(SIG_X509_SHA1_BASE64)
74983e9580Sangelos #define SIG_X509_SHA1_HEX             "sig-x509-sha1-hex:"
75983e9580Sangelos #define SIG_X509_SHA1_HEX_LEN         strlen(SIG_X509_SHA1_HEX)
76983e9580Sangelos 
77983e9580Sangelos #define SIGRESULT_UNTOUCHED     0
78983e9580Sangelos #define SIGRESULT_FALSE         1
79983e9580Sangelos #define SIGRESULT_TRUE          2
80983e9580Sangelos 
81983e9580Sangelos #define ENVIRONMENT_FLAG_FUNC   0x0001 /* This is a callback function */
82983e9580Sangelos #define ENVIRONMENT_FLAG_REGEX  0x0002 /* Regular expression for name */
83983e9580Sangelos 
84983e9580Sangelos #define ASSERT_FLAG_LOCAL       0x0001 /*
85983e9580Sangelos 					* Trusted assertion -- means
86983e9580Sangelos 					* signature is not verified, and
87983e9580Sangelos 					* authorizer field can
88983e9580Sangelos 					* include symbolic names.
89983e9580Sangelos 				        */
90983e9580Sangelos #define ASSERT_FLAG_SIGGEN      0x0002 /*
91983e9580Sangelos 					* Be a bit more lax with the
92983e9580Sangelos 					* contents of the Signature:
93983e9580Sangelos 					* field; to be used in
94983e9580Sangelos 					* assertion signing only.
95983e9580Sangelos 					*/
96983e9580Sangelos #define ASSERT_FLAG_SIGVER	0x0004 /*
97983e9580Sangelos 					* To be used in signature verification
98983e9580Sangelos 					* only.
99983e9580Sangelos 					*/
100983e9580Sangelos #define RESULT_FALSE            0
101983e9580Sangelos #define RESULT_TRUE             1
102983e9580Sangelos 
103983e9580Sangelos #define KEYNOTE_CALLBACK_INITIALIZE		"_KEYNOTE_CALLBACK_INITIALIZE"
104983e9580Sangelos #define KEYNOTE_CALLBACK_CLEANUP		"_KEYNOTE_CALLBACK_CLEANUP"
105983e9580Sangelos 
106983e9580Sangelos #define KEYNOTE_VERSION_STRING			"2"
107983e9580Sangelos 
108983e9580Sangelos #define ERROR_MEMORY	       -1
109983e9580Sangelos #define ERROR_SYNTAX	       -2
110983e9580Sangelos #define ERROR_NOTFOUND         -3
111983e9580Sangelos #define ERROR_SIGN_FAILURE     -4
112983e9580Sangelos 
113983e9580Sangelos #define KEYNOTE_ALGORITHM_UNSPEC       -1
114983e9580Sangelos #define KEYNOTE_ALGORITHM_NONE		0
115983e9580Sangelos #define KEYNOTE_ALGORITHM_DSA		1
116983e9580Sangelos #define KEYNOTE_ALGORITHM_ELGAMAL	2
117983e9580Sangelos #define KEYNOTE_ALGORITHM_PGP		3
118983e9580Sangelos #define KEYNOTE_ALGORITHM_BINARY        4
119983e9580Sangelos #define KEYNOTE_ALGORITHM_X509          5
120983e9580Sangelos #define KEYNOTE_ALGORITHM_RSA		6
121983e9580Sangelos 
122983e9580Sangelos #define KEYNOTE_ERROR_ANY        0
123983e9580Sangelos #define KEYNOTE_ERROR_SYNTAX     1
124983e9580Sangelos #define KEYNOTE_ERROR_MEMORY     2
125983e9580Sangelos #define KEYNOTE_ERROR_SIGNATURE  3
126983e9580Sangelos 
127983e9580Sangelos #define ENCODING_NONE		   0
128983e9580Sangelos #define ENCODING_HEX		   1
129983e9580Sangelos #define ENCODING_BASE64		   2
130983e9580Sangelos #define ENCODING_NATIVE		   3	/* For things like PGP */
131983e9580Sangelos 
132983e9580Sangelos #define INTERNAL_ENC_NONE	   0
133983e9580Sangelos #define INTERNAL_ENC_PKCS1	   1
134983e9580Sangelos #define INTERNAL_ENC_ASN1          2
135983e9580Sangelos #define INTERNAL_ENC_NATIVE	   3	/* For things like PGP */
136983e9580Sangelos 
137983e9580Sangelos #define KEYNOTE_PUBLIC_KEY         0
138983e9580Sangelos #define KEYNOTE_PRIVATE_KEY        1
139983e9580Sangelos 
140983e9580Sangelos extern int keynote_errno;
141983e9580Sangelos 
142*4d8bb350Smsf __BEGIN_DECLS
143983e9580Sangelos /* Session API */
144983e9580Sangelos int    kn_init(void);
145983e9580Sangelos int    kn_add_assertion(int, char *, int, int);
146983e9580Sangelos int    kn_remove_assertion(int, int);
147983e9580Sangelos int    kn_add_action(int, char *, char *, int);
148983e9580Sangelos int    kn_remove_action(int, char *);
149983e9580Sangelos int    kn_add_authorizer(int, char *);
150983e9580Sangelos int    kn_remove_authorizer(int, char *);
151983e9580Sangelos int    kn_do_query(int, char **, int);
152983e9580Sangelos int    kn_get_failed(int, int, int);
1539186b70cSangelos int    kn_cleanup_action_environment(int);
154983e9580Sangelos int    kn_close(int);
1554cd5b1f2Sangelos void   kn_free_key(struct keynote_deckey *);
156c5ba4a6fSangelos char  *kn_get_string(char *);
157983e9580Sangelos 
158983e9580Sangelos /* Simple API */
159983e9580Sangelos int    kn_query(struct environment *, char **, int, char **, int *, int,
160983e9580Sangelos 		char **, int *, int, char **, int);
161983e9580Sangelos 
162983e9580Sangelos /* Aux. routines */
163983e9580Sangelos char **kn_read_asserts(char *, int, int *);
1642350ed37Sangelos int    kn_keycompare(void *, void *, int);
1659186b70cSangelos void  *kn_get_authorizer(int, int, int *);
1669186b70cSangelos struct keynote_keylist *kn_get_licensees(int, int);
167983e9580Sangelos 
168983e9580Sangelos /* ASCII-encoding API */
169983e9580Sangelos int    kn_encode_base64(unsigned char const *, unsigned int, char *,
170983e9580Sangelos 			unsigned int);
171983e9580Sangelos int    kn_decode_base64(char const *, unsigned char *, unsigned int);
172983e9580Sangelos int    kn_encode_hex(unsigned char *, char **, int);
173983e9580Sangelos int    kn_decode_hex(char *, char **);
174983e9580Sangelos 
175983e9580Sangelos /* Key-encoding API */
176983e9580Sangelos int    kn_decode_key(struct keynote_deckey *, char *, int);
177983e9580Sangelos char  *kn_encode_key(struct keynote_deckey *, int, int, int);
178983e9580Sangelos 
179983e9580Sangelos /* Crypto API */
180983e9580Sangelos char  *kn_sign_assertion(char *, int, char *, char *, int);
181983e9580Sangelos int    kn_verify_assertion(char *, int);
182*4d8bb350Smsf __END_DECLS
183a8a6ad51Sangelos #endif /* __KEYNOTE_H__ */
184