~alinuxninja/nginx-edge/trunk

« back to all changes in this revision

Viewing changes to debian/modules/ngx_pagespeed/psol/include/third_party/boringssl/src/include/openssl/ecdsa.h

  • Committer: Vivian
  • Date: 2015-12-04 18:20:11 UTC
  • Revision ID: git-v1:a36f2bc32e884f7473b3a47040e5411306144d7d
* Do not extract psol.tar.gz

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/* ====================================================================
2
 
 * Copyright (c) 1998-2005 The OpenSSL Project.  All rights reserved.
3
 
 *
4
 
 * Redistribution and use in source and binary forms, with or without
5
 
 * modification, are permitted provided that the following conditions
6
 
 * are met:
7
 
 *
8
 
 * 1. Redistributions of source code must retain the above copyright
9
 
 *    notice, this list of conditions and the following disclaimer.
10
 
 *
11
 
 * 2. Redistributions in binary form must reproduce the above copyright
12
 
 *    notice, this list of conditions and the following disclaimer in
13
 
 *    the documentation and/or other materials provided with the
14
 
 *    distribution.
15
 
 *
16
 
 * 3. All advertising materials mentioning features or use of this
17
 
 *    software must display the following acknowledgment:
18
 
 *    "This product includes software developed by the OpenSSL Project
19
 
 *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
20
 
 *
21
 
 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
22
 
 *    endorse or promote products derived from this software without
23
 
 *    prior written permission. For written permission, please contact
24
 
 *    openssl-core@OpenSSL.org.
25
 
 *
26
 
 * 5. Products derived from this software may not be called "OpenSSL"
27
 
 *    nor may "OpenSSL" appear in their names without prior written
28
 
 *    permission of the OpenSSL Project.
29
 
 *
30
 
 * 6. Redistributions of any form whatsoever must retain the following
31
 
 *    acknowledgment:
32
 
 *    "This product includes software developed by the OpenSSL Project
33
 
 *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
34
 
 *
35
 
 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
36
 
 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
37
 
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
38
 
 * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
39
 
 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
40
 
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
41
 
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
42
 
 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
43
 
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
44
 
 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
45
 
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
46
 
 * OF THE POSSIBILITY OF SUCH DAMAGE.
47
 
 * ====================================================================
48
 
 *
49
 
 * This product includes cryptographic software written by Eric Young
50
 
 * (eay@cryptsoft.com).  This product includes software written by Tim
51
 
 * Hudson (tjh@cryptsoft.com). */
52
 
 
53
 
#ifndef OPENSSL_HEADER_ECDSA_H
54
 
#define OPENSSL_HEADER_ECDSA_H
55
 
 
56
 
#include <openssl/base.h>
57
 
 
58
 
#include <openssl/ec_key.h>
59
 
 
60
 
#if defined(__cplusplus)
61
 
extern "C" {
62
 
#endif
63
 
 
64
 
 
65
 
/* ECDSA contains functions for signing and verifying with the Digital Signature
66
 
 * Algorithm over elliptic curves. */
67
 
 
68
 
 
69
 
/* Signing and verifing. */
70
 
 
71
 
/* ECDSA_sign signs |digest_len| bytes from |digest| with |key| and writes the
72
 
 * resulting signature to |sig|, which must have |ECDSA_size(key)| bytes of
73
 
 * space. On successful exit, |*sig_len| is set to the actual number of bytes
74
 
 * written. The |type| argument should be zero. It returns one on success and
75
 
 * zero otherwise. */
76
 
OPENSSL_EXPORT int ECDSA_sign(int type, const uint8_t *digest,
77
 
                              size_t digest_len, uint8_t *sig,
78
 
                              unsigned int *sig_len, EC_KEY *key);
79
 
 
80
 
/* ECDSA_verify verifies that |sig_len| bytes from |sig| constitute a valid
81
 
 * signature by |key| of |digest|. (The |type| argument should be zero.) It
82
 
 * returns one on success or zero if the signature is invalid or an error
83
 
 * occured. */
84
 
OPENSSL_EXPORT int ECDSA_verify(int type, const uint8_t *digest,
85
 
                                size_t digest_len, const uint8_t *sig,
86
 
                                size_t sig_len, EC_KEY *key);
87
 
 
88
 
/* ECDSA_size returns the maximum size of an ECDSA signature using |key|. It
89
 
 * returns zero on error. */
90
 
OPENSSL_EXPORT size_t ECDSA_size(const EC_KEY *key);
91
 
 
92
 
 
93
 
/* Low-level signing and verification.
94
 
 *
95
 
 * Low-level functions handle signatures as |ECDSA_SIG| structures which allow
96
 
 * the two values in an ECDSA signature to be handled separately. */
97
 
 
98
 
struct ecdsa_sig_st {
99
 
  BIGNUM *r;
100
 
  BIGNUM *s;
101
 
};
102
 
 
103
 
/* ECDSA_SIG_new returns a fresh |ECDSA_SIG| structure or NULL on error. */
104
 
OPENSSL_EXPORT ECDSA_SIG *ECDSA_SIG_new(void);
105
 
 
106
 
/* ECDSA_SIG_free frees |sig| its member |BIGNUM|s. */
107
 
OPENSSL_EXPORT void ECDSA_SIG_free(ECDSA_SIG *sig);
108
 
 
109
 
/* ECDSA_sign signs |digest_len| bytes from |digest| with |key| and returns the
110
 
 * resulting signature structure, or NULL on error. */
111
 
OPENSSL_EXPORT ECDSA_SIG *ECDSA_do_sign(const uint8_t *digest,
112
 
                                        size_t digest_len, EC_KEY *key);
113
 
 
114
 
/* ECDSA_verify verifies that |sig| constitutes a valid signature by |key| of
115
 
 * |digest|. It returns one on success or zero if the signature is invalid or
116
 
 * on error. */
117
 
OPENSSL_EXPORT int ECDSA_do_verify(const uint8_t *digest, size_t digest_len,
118
 
                                   const ECDSA_SIG *sig, EC_KEY *key);
119
 
 
120
 
 
121
 
/* Signing with precomputation.
122
 
 *
123
 
 * Parts of the ECDSA signature can be independent of the message to be signed
124
 
 * thus it's possible to precompute them and reduce the signing latency.
125
 
 *
126
 
 * TODO(fork): remove support for this as it cannot support safe-randomness. */
127
 
 
128
 
/* ECDSA_sign_setup precomputes parts of an ECDSA signing operation. It sets
129
 
 * |*kinv| and |*rp| to the precomputed values and uses the |ctx| argument, if
130
 
 * not NULL. It returns one on success and zero otherwise. */
131
 
OPENSSL_EXPORT int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv,
132
 
                                    BIGNUM **rp);
133
 
 
134
 
/* ECDSA_do_sign_ex is the same as |ECDSA_do_sign| but takes precomputed values
135
 
 * as generated by |ECDSA_sign_setup|. */
136
 
OPENSSL_EXPORT ECDSA_SIG *ECDSA_do_sign_ex(const uint8_t *digest,
137
 
                                           size_t digest_len,
138
 
                                           const BIGNUM *kinv, const BIGNUM *rp,
139
 
                                           EC_KEY *eckey);
140
 
 
141
 
/* ECDSA_sign_ex is the same as |ECDSA_sign| but takes precomputed values as
142
 
 * generated by |ECDSA_sign_setup|. */
143
 
OPENSSL_EXPORT int ECDSA_sign_ex(int type, const uint8_t *digest,
144
 
                                 size_t digest_len, uint8_t *sig,
145
 
                                 unsigned int *sig_len, const BIGNUM *kinv,
146
 
                                 const BIGNUM *rp, EC_KEY *eckey);
147
 
 
148
 
 
149
 
/* ASN.1 functions. */
150
 
 
151
 
/* d2i_ECDSA_SIG parses an ASN.1, DER-encoded, signature from |len| bytes at
152
 
 * |*inp|. If |out| is not NULL then, on exit, a pointer to the result is in
153
 
 * |*out|. If |*out| is already non-NULL on entry then the result is written
154
 
 * directly into |*out|, otherwise a fresh |ECDSA_SIG| is allocated. On
155
 
 * successful exit, |*inp| is advanced past the DER structure. It returns the
156
 
 * result or NULL on error. */
157
 
OPENSSL_EXPORT ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **out, const uint8_t **inp,
158
 
                                        long len);
159
 
 
160
 
/* i2d_ECDSA_SIG marshals a signature from |sig| to an ASN.1, DER
161
 
 * structure. If |outp| is not NULL then the result is written to |*outp| and
162
 
 * |*outp| is advanced just past the output. It returns the number of bytes in
163
 
 * the result, whether written or not, or a negative value on error. */
164
 
OPENSSL_EXPORT int i2d_ECDSA_SIG(const ECDSA_SIG *sig, uint8_t **outp);
165
 
 
166
 
 
167
 
#if defined(__cplusplus)
168
 
}  /* extern C */
169
 
#endif
170
 
 
171
 
#define ECDSA_F_ECDSA_do_sign_ex 100
172
 
#define ECDSA_F_ECDSA_do_verify 101
173
 
#define ECDSA_F_ECDSA_sign_ex 102
174
 
#define ECDSA_F_digest_to_bn 103
175
 
#define ECDSA_F_ecdsa_sign_setup 104
176
 
#define ECDSA_R_BAD_SIGNATURE 100
177
 
#define ECDSA_R_MISSING_PARAMETERS 101
178
 
#define ECDSA_R_NEED_NEW_SETUP_VALUES 102
179
 
#define ECDSA_R_NOT_IMPLEMENTED 103
180
 
#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104
181
 
 
182
 
#endif  /* OPENSSL_HEADER_ECDSA_H */