1*d3273b5bSchristos /* $NetBSD: dsa.h,v 1.2 2017/01/28 21:31:47 christos Exp $ */ 2ca1c9b0cSelric 3ca1c9b0cSelric /* 4ca1c9b0cSelric * Copyright (c) 2006 Kungliga Tekniska Högskolan 5ca1c9b0cSelric * (Royal Institute of Technology, Stockholm, Sweden). 6ca1c9b0cSelric * All rights reserved. 7ca1c9b0cSelric * 8ca1c9b0cSelric * Redistribution and use in source and binary forms, with or without 9ca1c9b0cSelric * modification, are permitted provided that the following conditions 10ca1c9b0cSelric * are met: 11ca1c9b0cSelric * 12ca1c9b0cSelric * 1. Redistributions of source code must retain the above copyright 13ca1c9b0cSelric * notice, this list of conditions and the following disclaimer. 14ca1c9b0cSelric * 15ca1c9b0cSelric * 2. Redistributions in binary form must reproduce the above copyright 16ca1c9b0cSelric * notice, this list of conditions and the following disclaimer in the 17ca1c9b0cSelric * documentation and/or other materials provided with the distribution. 18ca1c9b0cSelric * 19ca1c9b0cSelric * 3. Neither the name of the Institute nor the names of its contributors 20ca1c9b0cSelric * may be used to endorse or promote products derived from this software 21ca1c9b0cSelric * without specific prior written permission. 22ca1c9b0cSelric * 23ca1c9b0cSelric * THIS SOFTWARE IS PROVIDED BY THE INSTITUTE AND CONTRIBUTORS ``AS IS'' AND 24ca1c9b0cSelric * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 25ca1c9b0cSelric * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 26ca1c9b0cSelric * ARE DISCLAIMED. IN NO EVENT SHALL THE INSTITUTE OR CONTRIBUTORS BE LIABLE 27ca1c9b0cSelric * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 28ca1c9b0cSelric * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 29ca1c9b0cSelric * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 30ca1c9b0cSelric * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 31ca1c9b0cSelric * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 32ca1c9b0cSelric * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 33ca1c9b0cSelric * SUCH DAMAGE. 34ca1c9b0cSelric */ 35ca1c9b0cSelric 36ca1c9b0cSelric /* 37b40995a4Selric * Id 38ca1c9b0cSelric */ 39ca1c9b0cSelric 40ca1c9b0cSelric #ifndef _HEIM_DSA_H 41ca1c9b0cSelric #define _HEIM_DSA_H 1 42ca1c9b0cSelric 43ca1c9b0cSelric #include <hcrypto/bn.h> 44ca1c9b0cSelric 45ca1c9b0cSelric /* symbol renaming */ 46b9d004c6Schristos #define DSA hc_DSA 47b9d004c6Schristos #define DSA_METHOD hc_DSA_METHOD 48ca1c9b0cSelric #define DSA_null_method hc_DSA_null_method 49ca1c9b0cSelric #define DSA_new hc_DSA_new 50ca1c9b0cSelric #define DSA_free hc_DSA_free 51ca1c9b0cSelric #define DSA_up_ref hc_DSA_up_ref 52ca1c9b0cSelric #define DSA_set_default_method hc_DSA_set_default_method 53ca1c9b0cSelric #define DSA_get_default_method hc_DSA_get_default_method 54ca1c9b0cSelric #define DSA_set_method hc_DSA_set_method 55ca1c9b0cSelric #define DSA_get_method hc_DSA_get_method 56ca1c9b0cSelric #define DSA_set_app_data hc_DSA_set_app_data 57ca1c9b0cSelric #define DSA_get_app_data hc_DSA_get_app_data 58ca1c9b0cSelric #define DSA_size hc_DSA_size 59ca1c9b0cSelric #define DSA_verify hc_DSA_verify 60ca1c9b0cSelric 61ca1c9b0cSelric /* 62ca1c9b0cSelric * 63ca1c9b0cSelric */ 64ca1c9b0cSelric 65ca1c9b0cSelric 66ca1c9b0cSelric typedef struct DSA DSA; 67ca1c9b0cSelric typedef struct DSA_METHOD DSA_METHOD; 68ca1c9b0cSelric typedef struct DSA_SIG DSA_SIG; 69ca1c9b0cSelric 70ca1c9b0cSelric struct DSA_SIG { 71ca1c9b0cSelric BIGNUM *r; 72ca1c9b0cSelric BIGNUM *s; 73ca1c9b0cSelric }; 74ca1c9b0cSelric 75ca1c9b0cSelric struct DSA_METHOD { 76ca1c9b0cSelric const char *name; 77ca1c9b0cSelric DSA_SIG * (*dsa_do_sign)(const unsigned char *, int, DSA *); 78ca1c9b0cSelric int (*dsa_sign_setup)(DSA *, BN_CTX *, BIGNUM **, BIGNUM **); 79ca1c9b0cSelric int (*dsa_do_verify)(const unsigned char *, int, DSA_SIG *, DSA *); 80ca1c9b0cSelric int (*dsa_mod_exp)(DSA *, BIGNUM *, BIGNUM *, BIGNUM *, 81ca1c9b0cSelric BIGNUM *, BIGNUM *, BIGNUM *, BN_CTX *, 82ca1c9b0cSelric BN_MONT_CTX *); 83ca1c9b0cSelric int (*bn_mod_exp)(DSA *, BIGNUM *, BIGNUM *, const BIGNUM *, 84ca1c9b0cSelric const BIGNUM *, BN_CTX *, 85ca1c9b0cSelric BN_MONT_CTX *); 86ca1c9b0cSelric int (*init)(DSA *); 87ca1c9b0cSelric int (*finish)(DSA *); 88ca1c9b0cSelric int flags; 89ca1c9b0cSelric void *app_data; 90ca1c9b0cSelric }; 91ca1c9b0cSelric 92ca1c9b0cSelric struct DSA { 93ca1c9b0cSelric int pad; 94ca1c9b0cSelric long version; 95ca1c9b0cSelric int write_params; 96ca1c9b0cSelric BIGNUM *p; 97ca1c9b0cSelric BIGNUM *q; 98ca1c9b0cSelric BIGNUM *g; 99ca1c9b0cSelric 100ca1c9b0cSelric BIGNUM *pub_key; 101ca1c9b0cSelric BIGNUM *priv_key; 102ca1c9b0cSelric 103ca1c9b0cSelric BIGNUM *kinv; 104ca1c9b0cSelric BIGNUM *r; 105ca1c9b0cSelric int flags; 106ca1c9b0cSelric void *method_mont_p; 107ca1c9b0cSelric int references; 108ca1c9b0cSelric struct dsa_CRYPTO_EX_DATA { 109ca1c9b0cSelric void *sk; 110ca1c9b0cSelric int dummy; 111ca1c9b0cSelric } ex_data; 112ca1c9b0cSelric const DSA_METHOD *meth; 113ca1c9b0cSelric void *engine; 114ca1c9b0cSelric }; 115ca1c9b0cSelric 116ca1c9b0cSelric /* 117ca1c9b0cSelric * 118ca1c9b0cSelric */ 119ca1c9b0cSelric 120ca1c9b0cSelric const DSA_METHOD *DSA_null_method(void); 121ca1c9b0cSelric 122ca1c9b0cSelric /* 123ca1c9b0cSelric * 124ca1c9b0cSelric */ 125ca1c9b0cSelric 126ca1c9b0cSelric DSA * DSA_new(void); 127ca1c9b0cSelric void DSA_free(DSA *); 128ca1c9b0cSelric int DSA_up_ref(DSA *); 129ca1c9b0cSelric 130ca1c9b0cSelric void DSA_set_default_method(const DSA_METHOD *); 131ca1c9b0cSelric const DSA_METHOD * DSA_get_default_method(void); 132ca1c9b0cSelric 133ca1c9b0cSelric const DSA_METHOD * DSA_get_method(const DSA *); 134ca1c9b0cSelric int DSA_set_method(DSA *, const DSA_METHOD *); 135ca1c9b0cSelric 136ca1c9b0cSelric void DSA_set_app_data(DSA *, void *arg); 137ca1c9b0cSelric void * DSA_get_app_data(DSA *); 138ca1c9b0cSelric 139ca1c9b0cSelric int DSA_size(const DSA *); 140ca1c9b0cSelric 141ca1c9b0cSelric int DSA_verify(int, const unsigned char *, int, 142ca1c9b0cSelric const unsigned char *, int, DSA *); 143ca1c9b0cSelric 144ca1c9b0cSelric #endif /* _HEIM_DSA_H */ 145