This file is indexed.

/usr/include/dkim.h is in libdkim-dev 1:1.0.21-3build1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
/*****************************************************************************
*  Copyright 2005 Alt-N Technologies, Ltd. 
*
*  Licensed under the Apache License, Version 2.0 (the "License"); 
*  you may not use this file except in compliance with the License. 
*  You may obtain a copy of the License at 
*
*      http://www.apache.org/licenses/LICENSE-2.0 
*
*  This code incorporates intellectual property owned by Yahoo! and licensed 
*  pursuant to the Yahoo! DomainKeys Patent License Agreement.
*
*  Unless required by applicable law or agreed to in writing, software 
*  distributed under the License is distributed on an "AS IS" BASIS, 
*  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
*  See the License for the specific language governing permissions and 
*  limitations under the License.
*
*****************************************************************************/

#ifdef WIN32
#define DKIM_CALL	WINAPI
#else
#define DKIM_CALL
#define MAKELONG(a,b) ((long)(((unsigned)(a) & 0xffff) | (((unsigned)(b) & 0xffff) << 16)))
#endif


#ifdef __cplusplus
extern "C" {
#endif

// DKIM Body hash versions
#define DKIM_BODYHASH_ALLMAN_1	1
#define DKIM_BODYHASH_IETF_1	2
#define DKIM_BODYHASH_BOTH		DKIM_BODYHASH_ALLMAN_1 | DKIM_BODYHASH_IETF_1

// DKIM hash algorithms
#define DKIM_HASH_SHA1			1
#define DKIM_HASH_SHA256		2
#define DKIM_HASH_SHA1_AND_256  DKIM_HASH_SHA1 | DKIM_HASH_SHA256

// DKIM canonicalization methods
#define DKIM_CANON_SIMPLE		1
#define DKIM_CANON_NOWSP		2
#define DKIM_CANON_RELAXED		3

#define DKIM_SIGN_SIMPLE			MAKELONG(DKIM_CANON_SIMPLE,DKIM_CANON_SIMPLE)
#define DKIM_SIGN_SIMPLE_RELAXED	MAKELONG(DKIM_CANON_RELAXED,DKIM_CANON_SIMPLE)
#define DKIM_SIGN_RELAXED			MAKELONG(DKIM_CANON_RELAXED,DKIM_CANON_RELAXED)
#define DKIM_SIGN_RELAXED_SIMPLE	MAKELONG(DKIM_CANON_SIMPLE,DKIM_CANON_RELAXED)

// DKIM Error codes
#define DKIM_SUCCESS						0		// operation successful
#define DKIM_FAIL							-1		// verify error: message is suspicious
#define DKIM_BAD_SYNTAX						-2		// signature error: DKIM-Signature could not parse or has bad tags/values
#define DKIM_SIGNATURE_BAD					-3		// signature error: RSA verify failed
#define DKIM_SIGNATURE_BAD_BUT_TESTING		-4		// signature error: RSA verify failed but testing
#define DKIM_SIGNATURE_EXPIRED				-5		// signature error: x= is old
#define DKIM_SELECTOR_INVALID				-6		// signature error: selector doesn't parse or contains invalid values
#define DKIM_SELECTOR_GRANULARITY_MISMATCH	-7		// signature error: selector g= doesn't match i=
#define DKIM_SELECTOR_KEY_REVOKED			-8		// signature error: selector p= empty
#define DKIM_SELECTOR_DOMAIN_NAME_TOO_LONG	-9		// signature error: selector domain name too long to request
#define DKIM_SELECTOR_DNS_TEMP_FAILURE		-10		// signature error: temporary dns failure requesting selector
#define DKIM_SELECTOR_DNS_PERM_FAILURE		-11		// signature error: permanent dns failure requesting selector
#define DKIM_SELECTOR_PUBLIC_KEY_INVALID	-12		// signature error: selector p= value invalid or wrong format
#define DKIM_NO_SIGNATURES					-13		// process error, no sigs
#define DKIM_NO_VALID_SIGNATURES			-14		// process error, no valid sigs
#define DKIM_BODY_HASH_MISMATCH				-15		// sigature verify error: message body does not hash to bh value
#define DKIM_SELECTOR_ALGORITHM_MISMATCH	-16		// signature error: selector h= doesn't match signature a=
#define DKIM_STAT_INCOMPAT					-17		// signature error: incompatible v=
#define DKIM_UNSIGNED_FROM					-18		// signature error: not all message's From headers in signature
#define DKIM_OUT_OF_MEMORY					-20		// memory allocation failed
#define DKIM_INVALID_CONTEXT				-21		// DKIMContext structure invalid for this operation
#define DKIM_NO_SENDER						-22		// signing error: Could not find From: or Sender: header in message
#define DKIM_BAD_PRIVATE_KEY				-23		// signing error: Could not parse private key
#define DKIM_BUFFER_TOO_SMALL				-24		// signing error: Buffer passed in is not large enough
#define DKIM_MAX_ERROR						-25		// set this to 1 greater than the highest error code (but negative)

// DKIM_SUCCESS									// verify result: all signatures verified
												// signature result: signature verified
#define DKIM_FINISHED_BODY					1	// process result: no more message body is needed
#define DKIM_PARTIAL_SUCCESS				2	// verify result: at least one but not all signatures verified
#define DKIM_NEUTRAL						3	// verify result: no signatures verified but message is not suspicous
#define DKIM_SUCCESS_BUT_EXTRA				4	// signature result: signature verified but it did not include all of the body



// This function is called once for each header in the message
// return 1 to include this header in the signature and 0 to exclude.
typedef int (DKIM_CALL *DKIMHEADERCALLBACK)(const char* szHeader);

// This function is called to retrieve a TXT record from DNS
typedef int (DKIM_CALL *DKIMDNSCALLBACK)(const char* szFQDN, char* szBuffer, int nBufLen );

#ifdef _WIN32
#include <pshpack1.h>
#endif

typedef struct DKIMContext_t
{
	unsigned int reserved1;
	unsigned int reserved2;
	void*		 reserved3;
} DKIMContext;

typedef struct DKIMSignOptions_t
{
	int nCanon;								// canonization 
	int nIncludeBodyLengthTag;				// 0 = don't include l= tag, 1 = include l= tag
	int nIncludeTimeStamp;					// 0 = don't include t= tag, 1 = include t= tag
	int nIncludeQueryMethod;				// 0 = don't include q= tag, 1 = include q= tag
	char szSelector[80];					// selector - required
	char szDomain[256];						// domain - optional - if empty, domain is computed from sender
	char szIdentity[256];					// for i= tag, if empty tag will not be included in sig
	unsigned long expireTime;				// for x= tag, if 0 tag will not be included in sig
	DKIMHEADERCALLBACK pfnHeaderCallback;	// header callback
	char szRequiredHeaders[256];			// colon-separated list of headers that must be signed
	int nHash;								// use one of the DKIM_HASH_xx constants here
											// even if not present in the message
	int nIncludeCopiedHeaders;				// 0 = don't include z= tag, 1 = include z= tag
	int nIncludeBodyHash;					// use one of the DKIM_BODYHASH_xx constants here
} DKIMSignOptions;							

typedef struct DKIMVerifyOptions_t
{
	DKIMDNSCALLBACK pfnSelectorCallback;	// selector record callback
	DKIMDNSCALLBACK pfnPracticesCallback;	// ADSP record callback
	int nHonorBodyLengthTag;				// 0 = ignore l= tag, 1 = use l= tag to limit the amount of body verified
	int nCheckPractices;					// 0 = use default (unknown) practices, 1 = request and use author domain signing practices
	int nSubjectRequired;					// 0 = subject is required to be signed, 1 = not required
	int nSaveCanonicalizedData;				// 0 = canonicalized data is not saved, 1 = canonicalized data is saved
	int nAllowUnsignedFromHeaders;			// 0 = From headers not included in the signature are not allowed, 1 = allowed
} DKIMVerifyOptions;

typedef struct DKIMVerifyDetails_t
{
	char *szSignature;
	char *szSignatureDomain;
	char *szIdentityDomain;
	char *szCanonicalizedData;
	int nResult;
} DKIMVerifyDetails;


#ifdef _WIN32
#include <poppack.h>
#endif

int DKIM_CALL DKIMSignInit( DKIMContext* pSignContext, DKIMSignOptions* pOptions );
int DKIM_CALL DKIMSignProcess( DKIMContext* pSignContext, char* szBuffer, int nBufLength );
int DKIM_CALL DKIMSignGetSig( DKIMContext* pSignContext, char* szPrivKey, char* szSignature, int nSigLength );
int DKIM_CALL DKIMSignGetSig2( DKIMContext* pSignContext, char* szPrivKey, char** pszSignature );
void DKIM_CALL DKIMSignFree( DKIMContext* pSignContext );

int DKIM_CALL DKIMVerifyInit( DKIMContext* pVerifyContext, DKIMVerifyOptions* pOptions );
int DKIM_CALL DKIMVerifyProcess( DKIMContext* pVerifyContext, const char* szBuffer, int nBufLength );
int DKIM_CALL DKIMVerifyResults( DKIMContext* pVerifyContext );
int DKIM_CALL DKIMVerifyGetDetails( DKIMContext* pVerifyContext, int* nSigCount, DKIMVerifyDetails** pDetails, char* szPractices );
void DKIM_CALL DKIMVerifyFree( DKIMContext* pVerifyContext );

const char *DKIM_CALL DKIMVersion();

const char *DKIM_CALL DKIMGetErrorString( int ErrorCode );

#ifdef __cplusplus
}
#endif