Codebase list libcryptx-perl / bd80049
LTC sync + dh tuning Karel Miko 6 years ago
5 changed file(s) with 22 addition(s) and 22 deletion(s). Raw diff Collapse all Expand all
146146 for (x = 0; x < cipher_blocksize; x++) {
147147 md->chc.state[x] ^= T[0][x] ^ T[1][x];
148148 }
149 XFREE(key);
150149 #ifdef LTC_CLEAN_STACK
151150 zeromem(T, sizeof(T));
152 zeromem(&key, sizeof(key));
151 zeromem(key, sizeof(*key));
153152 #endif
153 XFREE(key);
154154 return CRYPT_OK;
155155 }
156156
186186 void dh_sizes(int *low, int *high);
187187 int dh_get_size(dh_key *key);
188188
189 int dh_make_key_internal(prng_state *prng, int wprng, dh_key *key); /* for internal use only */
190 int dh_make_key_ex(prng_state *prng, int wprng, const char *base_hex, const char *prime_hex, dh_key *key);
189191 int dh_make_key(prng_state *prng, int wprng, int keysize, dh_key *key);
190 int dh_make_key_ex(prng_state *prng, int wprng, const char *g, const char *p, dh_key *key);
191 int dh_make_key_ex_main(prng_state *prng, int wprng, dh_key *key);
192192 void dh_free(dh_key *key);
193193
194194 int dh_export(unsigned char *out, unsigned long *outlen, int type, dh_key *key);
195195 int dh_import(const unsigned char *in, unsigned long inlen, dh_key *key);
196196 int dh_import_raw(unsigned char *in, unsigned long inlen, int type,
197 const char *base, const char *prime, dh_key *key);
197 const char *base_hex, const char *prime_hex, dh_key *key);
198198
199199 int dh_shared_secret(dh_key *private_key, dh_key *public_key,
200200 unsigned char *out, unsigned long *outlen);
6565 #endif
6666 };
6767 short ready; /* ready flag 0-1 */
68 LTC_MUTEX_TYPE(lock); /* lock */
68 LTC_MUTEX_TYPE(lock) /* lock */
6969 } prng_state;
7070
7171 /** PRNG descriptor */
134134 }
135135 if ((err = mp_read_radix(key->base, sets[key->idx].base, 64)) != CRYPT_OK) { goto error; }
136136 if ((err = mp_read_radix(key->prime, sets[key->idx].prime, 64)) != CRYPT_OK) { goto error; }
137 return dh_make_key_ex_main(prng, wprng, key);
137 return dh_make_key_internal(prng, wprng, key);
138138 error:
139139 mp_clear_multi(key->base, key->prime, NULL);
140140 return err;
150150 @param key [out] Where the newly created DH key will be stored
151151 @return CRYPT_OK if successful, note: on error all allocated memory will be freed automatically.
152152 */
153 int dh_make_key_ex(prng_state *prng, int wprng, const char *base, const char *prime, dh_key *key)
153 int dh_make_key_ex(prng_state *prng, int wprng, const char *base_hex, const char *prime_hex, dh_key *key)
154154 {
155155 int err;
156156
157 LTC_ARGCHK(base != NULL);
158 LTC_ARGCHK(prime != NULL);
157 LTC_ARGCHK(base_hex != NULL);
158 LTC_ARGCHK(prime_hex != NULL);
159159 LTC_ARGCHK(key != NULL);
160160
161161 /* good prng? */
166166 if ((err = mp_init_multi(&key->base, &key->prime, NULL)) != CRYPT_OK) {
167167 goto error;
168168 }
169 if ((err = mp_read_radix(key->base, base, 16)) != CRYPT_OK) { goto error; }
170 if ((err = mp_read_radix(key->prime, prime, 16)) != CRYPT_OK) { goto error; }
169 if ((err = mp_read_radix(key->base, base_hex, 16)) != CRYPT_OK) { goto error; }
170 if ((err = mp_read_radix(key->prime, prime_hex, 16)) != CRYPT_OK) { goto error; }
171171 key->idx = SUPPLIED_PRIME;
172 return dh_make_key_ex_main(prng, wprng, key);
172 return dh_make_key_internal(prng, wprng, key);
173173 error:
174174 mp_clear_multi(key->base, key->prime, NULL);
175175 return err;
176176 }
177177
178178
179 int dh_make_key_ex_main(prng_state *prng, int wprng, dh_key *key)
179 int dh_make_key_internal(prng_state *prng, int wprng, dh_key *key)
180180 {
181181 unsigned char *buf = NULL;
182182 int err, keysize;
323323 @return CRYPT_OK if successful, on error all allocated memory is freed automatically
324324 */
325325 int dh_import_raw(unsigned char *in, unsigned long inlen, int type,
326 const char *base, const char *prime, dh_key *key)
326 const char *base_hex, const char *prime_hex, dh_key *key)
327327 {
328328 int err;
329329
330 LTC_ARGCHK(in != NULL);
331 LTC_ARGCHK(base != NULL);
332 LTC_ARGCHK(prime != NULL);
333 LTC_ARGCHK(key != NULL);
330 LTC_ARGCHK(in != NULL);
331 LTC_ARGCHK(base_hex != NULL);
332 LTC_ARGCHK(prime_hex != NULL);
333 LTC_ARGCHK(key != NULL);
334334
335335 if ((err = mp_init_multi(&key->x, &key->y, &key->base, &key->prime, NULL)) != CRYPT_OK) {
336336 goto error;
337337 }
338 if ((err = mp_read_radix(key->base, base, 16)) != CRYPT_OK) { goto error; }
339 if ((err = mp_read_radix(key->prime, prime, 16)) != CRYPT_OK) { goto error; }
338 if ((err = mp_read_radix(key->base, base_hex, 16)) != CRYPT_OK) { goto error; }
339 if ((err = mp_read_radix(key->prime, prime_hex, 16)) != CRYPT_OK) { goto error; }
340340 key->idx = SUPPLIED_PRIME;
341341
342342 if (type == PK_PRIVATE) {
8383 }
8484 if ((err = mp_copy(key->base, pubkey.base)) != CRYPT_OK) { goto LBL_ERR; }
8585 if ((err = mp_copy(key->prime, pubkey.prime)) != CRYPT_OK) { goto LBL_ERR; }
86 if ((err = dh_make_key_ex_main(prng, wprng, &pubkey)) != CRYPT_OK) {
86 if ((err = dh_make_key_internal(prng, wprng, &pubkey)) != CRYPT_OK) {
8787 goto LBL_ERR;
8888 }
8989