OpenSSL
1.0.1c
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
crypto
ecdsa
ecs_sign.c
Go to the documentation of this file.
1
/* crypto/ecdsa/ecdsa_sign.c */
2
/* ====================================================================
3
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
*
9
* 1. Redistributions of source code must retain the above copyright
10
* notice, this list of conditions and the following disclaimer.
11
*
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in
14
* the documentation and/or other materials provided with the
15
* distribution.
16
*
17
* 3. All advertising materials mentioning features or use of this
18
* software must display the following acknowledgment:
19
* "This product includes software developed by the OpenSSL Project
20
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
21
*
22
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
23
* endorse or promote products derived from this software without
24
* prior written permission. For written permission, please contact
25
*
[email protected]
.
26
*
27
* 5. Products derived from this software may not be called "OpenSSL"
28
* nor may "OpenSSL" appear in their names without prior written
29
* permission of the OpenSSL Project.
30
*
31
* 6. Redistributions of any form whatsoever must retain the following
32
* acknowledgment:
33
* "This product includes software developed by the OpenSSL Project
34
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
35
*
36
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
37
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
38
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
39
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
40
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
42
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
43
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
44
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
45
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
46
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
47
* OF THE POSSIBILITY OF SUCH DAMAGE.
48
* ====================================================================
49
*
50
* This product includes cryptographic software written by Eric Young
51
* (
[email protected]
). This product includes software written by Tim
52
* Hudson (
[email protected]
).
53
*
54
*/
55
56
#include "
ecs_locl.h
"
57
#ifndef OPENSSL_NO_ENGINE
58
#include <
openssl/engine.h
>
59
#endif
60
#include <
openssl/rand.h
>
61
62
ECDSA_SIG
*
ECDSA_do_sign
(
const
unsigned
char
*dgst,
int
dlen,
EC_KEY
*eckey)
63
{
64
return
ECDSA_do_sign_ex
(dgst, dlen, NULL, NULL, eckey);
65
}
66
67
ECDSA_SIG
*
ECDSA_do_sign_ex
(
const
unsigned
char
*dgst,
int
dlen,
68
const
BIGNUM
*kinv,
const
BIGNUM
*rp,
EC_KEY
*eckey)
69
{
70
ECDSA_DATA
*ecdsa =
ecdsa_check
(eckey);
71
if
(ecdsa == NULL)
72
return
NULL;
73
return
ecdsa->
meth
->
ecdsa_do_sign
(dgst, dlen, kinv, rp, eckey);
74
}
75
76
int
ECDSA_sign
(
int
type
,
const
unsigned
char
*dgst,
int
dlen,
unsigned
char
77
*sig,
unsigned
int
*siglen,
EC_KEY
*eckey)
78
{
79
return
ECDSA_sign_ex
(type, dgst, dlen, sig, siglen, NULL, NULL, eckey);
80
}
81
82
int
ECDSA_sign_ex
(
int
type
,
const
unsigned
char
*dgst,
int
dlen,
unsigned
char
83
*sig,
unsigned
int
*siglen,
const
BIGNUM
*kinv,
const
BIGNUM
*r,
84
EC_KEY
*eckey)
85
{
86
ECDSA_SIG
*s;
87
RAND_seed
(dgst, dlen);
88
s =
ECDSA_do_sign_ex
(dgst, dlen, kinv, r, eckey);
89
if
(s == NULL)
90
{
91
*siglen=0;
92
return
0;
93
}
94
*siglen =
i2d_ECDSA_SIG
(s, &sig);
95
ECDSA_SIG_free
(s);
96
return
1;
97
}
98
99
int
ECDSA_sign_setup
(
EC_KEY
*eckey,
BN_CTX
*ctx_in,
BIGNUM
**kinvp,
100
BIGNUM
**rp)
101
{
102
ECDSA_DATA
*ecdsa =
ecdsa_check
(eckey);
103
if
(ecdsa == NULL)
104
return
0;
105
return
ecdsa->
meth
->
ecdsa_sign_setup
(eckey, ctx_in, kinvp, rp);
106
}
Generated on Thu Jan 10 2013 09:53:36 for OpenSSL by
1.8.2