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