Commit | Line | Data |
---|---|---|
c97fbcf9 MW |
1 | /* -*-c-*- |
2 | * | |
3 | * Useful functions for doing DSA | |
4 | * | |
5 | * (c) 2008 Straylight/Edgeware | |
6 | */ | |
7 | ||
8 | /*----- Licensing notice --------------------------------------------------* | |
9 | * | |
10 | * This file is part of Catacomb. | |
11 | * | |
12 | * Catacomb is free software; you can redistribute it and/or modify | |
13 | * it under the terms of the GNU Library General Public License as | |
14 | * published by the Free Software Foundation; either version 2 of the | |
15 | * License, or (at your option) any later version. | |
16 | * | |
17 | * Catacomb is distributed in the hope that it will be useful, | |
18 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
19 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
20 | * GNU Library General Public License for more details. | |
21 | * | |
22 | * You should have received a copy of the GNU Library General Public | |
23 | * License along with Catacomb; if not, write to the Free | |
24 | * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, | |
25 | * MA 02111-1307, USA. | |
26 | */ | |
27 | ||
28 | /*----- Header files ------------------------------------------------------*/ | |
29 | ||
30 | #include "dsa.h" | |
31 | ||
32 | /*----- Main code ---------------------------------------------------------*/ | |
33 | ||
34 | /* --- @dsa_h2n@ --- * | |
35 | * | |
36 | * Arguments: @mp *d@ = destination integer | |
37 | * @mp *r@ = order of the DSA group | |
38 | * @const void *h@ = pointer to message hash | |
39 | * @size_t hsz@ = size (in bytes) of the hash output | |
40 | * | |
41 | * Returns: Resulting integer. | |
42 | * | |
43 | * Use: Converts a hash to an integer in the demented way necessary | |
44 | * for DSA/ECDSA. This is, of course, completely insane, but | |
45 | * there you go. | |
46 | */ | |
47 | ||
48 | mp *dsa_h2n(mp *d, mp *r, const void *h, size_t hsz) | |
49 | { | |
50 | size_t n = mp_bits(r); | |
51 | size_t l = hsz; | |
52 | size_t s = 0; | |
53 | ||
54 | if (n < 8*l) { | |
55 | l = (n + 7)/8; | |
56 | s = 8*l - n; | |
57 | } | |
58 | d = mp_loadb(d, h, l); | |
59 | if (s) | |
60 | d = mp_lsr(d, d, s); | |
61 | return (d); | |
62 | } | |
63 | ||
64 | /*----- That's all, folks -------------------------------------------------*/ |