This file is indexed.

/usr/include/thunderbird-11.0.1/mimemsig.h is in thunderbird-dev 11.0.1+build1-0ubuntu2.

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
/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* ***** BEGIN LICENSE BLOCK *****
 * Version: MPL 1.1/GPL 2.0/LGPL 2.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (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.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is mozilla.org code.
 *
 * The Initial Developer of the Original Code is
 * Netscape Communications Corporation.
 * Portions created by the Initial Developer are Copyright (C) 1998
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Alternatively, the contents of this file may be used under the terms of
 * either of the GNU General Public License Version 2 or later (the "GPL"),
 * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
 * in which case the provisions of the GPL or the LGPL are applicable instead
 * of those above. If you wish to allow use of your version of this file only
 * under the terms of either the GPL or the LGPL, and not to allow others to
 * use your version of this file under the terms of the MPL, indicate your
 * decision by deleting the provisions above and replace them with the notice
 * and other provisions required by the GPL or the LGPL. If you do not delete
 * the provisions above, a recipient may use your version of this file under
 * the terms of any one of the MPL, the GPL or the LGPL.
 *
 * ***** END LICENSE BLOCK ***** */

#ifndef _MIMEMSIG_H_
#define _MIMEMSIG_H_

#include "mimemult.h"
#include "mimepbuf.h"
#include "modmimee.h"

/* The MimeMultipartSigned class implements the multipart/signed MIME
   container, which provides a general method of associating a cryptographic
   signature to an arbitrary MIME object.

   The MimeMultipartSigned class provides the following methods:

   void *crypto_init (MimeObject *multipart_object)

     This is called with the object, the object->headers of which should be
   used to initialize the dexlateion engine.  NULL indicates failure;
   otherwise, an opaque closure object should be returned.

   int crypto_data_hash (const char *data, PRInt32 data_size,
             void *crypto_closure)

     This is called with the raw data, for which a signature has been computed.
   The crypto module should examine this, and compute a signature for it.

   int crypto_data_eof (void *crypto_closure, bool abort_p)

     This is called when no more data remains.  If `abort_p' is true, then the
   crypto module may choose to discard any data rather than processing it,
   as we're terminating abnormally.

   int crypto_signature_init (void *crypto_closure,
                              MimeObject *multipart_object,
                MimeHeaders *signature_hdrs)

     This is called after crypto_data_eof() and just before the first call to
   crypto_signature_hash().  The crypto module may wish to do some
   initialization here, or may wish to examine the actual headers of the
   signature object itself.

   int crypto_signature_hash (const char *data, PRInt32 data_size,
                void *crypto_closure)

     This is called with the raw data of the detached signature block.  It will
   be called after crypto_data_eof() has been called to signify the end of
   the data which is signed.  This data is the data of the signature itself.

   int crypto_signature_eof (void *crypto_closure, bool abort_p)

     This is called when no more signature data remains.  If `abort_p' is true,
   then the crypto module may choose to discard any data rather than
   processing it, as we're terminating abnormally.

   char * crypto_generate_html (void *crypto_closure)

     This is called after `crypto_signature_eof' but before `crypto_free'.
   The crypto module should return a newly-allocated string of HTML code
   which explains the status of the dexlateion to the user (whether the
   signature checks out, etc.)

   void crypto_free (void *crypto_closure)

     This will be called when we're all done, after `crypto_signature_eof' and
   `crypto_emit_html'.  It is intended to free any data represented by the
   crypto_closure.
 */

typedef struct MimeMultipartSignedClass MimeMultipartSignedClass;
typedef struct MimeMultipartSigned      MimeMultipartSigned;

typedef enum {
  MimeMultipartSignedPreamble,
  MimeMultipartSignedBodyFirstHeader,
  MimeMultipartSignedBodyHeaders,
  MimeMultipartSignedBodyFirstLine,
  MimeMultipartSignedBodyLine,
  MimeMultipartSignedSignatureHeaders,
  MimeMultipartSignedSignatureFirstLine,
  MimeMultipartSignedSignatureLine,
  MimeMultipartSignedEpilogue
} MimeMultipartSignedParseState;

struct MimeMultipartSignedClass {
  MimeMultipartClass multipart;

  /* Callbacks used by dexlateion (really, signature verification) module. */
  void * (*crypto_init) (MimeObject *multipart_object);

  int (*crypto_data_hash)      (const char *data, PRInt32 data_size,
                void *crypto_closure);
  int (*crypto_signature_hash) (const char *data, PRInt32 data_size,
                void *crypto_closure);

  int (*crypto_data_eof)      (void *crypto_closure, bool abort_p);
  int (*crypto_signature_eof) (void *crypto_closure, bool abort_p);

  int (*crypto_signature_init) (void *crypto_closure,
                MimeObject *multipart_object,
                MimeHeaders *signature_hdrs);

  char * (*crypto_generate_html) (void *crypto_closure);

  void (*crypto_free) (void *crypto_closure);
};

extern "C" MimeMultipartSignedClass mimeMultipartSignedClass;

struct MimeMultipartSigned {
  MimeMultipart multipart;
  MimeMultipartSignedParseState state;  /* State of parser */

  void *crypto_closure;           /* Opaque data used by signature
                      verification module. */

  MimeHeaders *body_hdrs;        /* The headers of the signed object. */
  MimeHeaders *sig_hdrs;        /* The headers of the signature. */

  MimePartBufferData *part_buffer;      /* The buffered body of the signed
                       object (see mimepbuf.h) */

  MimeDecoderData *sig_decoder_data;  /* The signature is probably base64
                       encoded; this is the decoder used
                       to get raw bits out of it. */
};

#endif /* _MIMEMSIG_H_ */