Mercurial > dropbear
comparison libtomcrypt/src/pk/dh/dh_check_pubkey.c @ 1471:6dba84798cd5
Update to libtomcrypt 1.18.1, merged with Dropbear changes
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Fri, 09 Feb 2018 21:44:05 +0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1470:8bba51a55704 | 1471:6dba84798cd5 |
---|---|
1 /* LibTomCrypt, modular cryptographic library -- Tom St Denis | |
2 * | |
3 * LibTomCrypt is a library that provides various cryptographic | |
4 * algorithms in a highly modular and flexible manner. | |
5 * | |
6 * The library is free for all purposes without any express | |
7 * guarantee it works. | |
8 */ | |
9 | |
10 #include "tomcrypt.h" | |
11 | |
12 #ifdef LTC_MDH | |
13 | |
14 /** | |
15 Check DH public key (INTERNAL ONLY, not part of public API) | |
16 @param key The key you wish to test | |
17 @return CRYPT_OK if successful | |
18 */ | |
19 int dh_check_pubkey(dh_key *key) | |
20 { | |
21 void *p_minus1; | |
22 ltc_mp_digit digit; | |
23 int i, digit_count, bits_set = 0, err; | |
24 | |
25 LTC_ARGCHK(key != NULL); | |
26 | |
27 if ((err = mp_init(&p_minus1)) != CRYPT_OK) { | |
28 return err; | |
29 } | |
30 | |
31 /* avoid: y <= 1 OR y >= p-1 */ | |
32 if ((err = mp_sub_d(key->prime, 1, p_minus1)) != CRYPT_OK) { | |
33 goto error; | |
34 } | |
35 if (mp_cmp(key->y, p_minus1) != LTC_MP_LT || mp_cmp_d(key->y, 1) != LTC_MP_GT) { | |
36 err = CRYPT_INVALID_ARG; | |
37 goto error; | |
38 } | |
39 | |
40 /* public key must have more than one bit set */ | |
41 digit_count = mp_get_digit_count(key->y); | |
42 for (i = 0; i < digit_count && bits_set < 2; i++) { | |
43 digit = mp_get_digit(key->y, i); | |
44 while (digit > 0) { | |
45 if (digit & 1) bits_set++; | |
46 digit >>= 1; | |
47 } | |
48 } | |
49 if (bits_set > 1) { | |
50 err = CRYPT_OK; | |
51 } | |
52 else { | |
53 err = CRYPT_INVALID_ARG; | |
54 } | |
55 | |
56 error: | |
57 mp_clear(p_minus1); | |
58 return err; | |
59 } | |
60 | |
61 #endif /* LTC_MDH */ | |
62 | |
63 /* ref: $Format:%D$ */ | |
64 /* git commit: $Format:%H$ */ | |
65 /* commit time: $Format:%ai$ */ |