Files
tor/src/common/crypto_s2k.h
T
Nick Mathewson fcdcb377a4 Add another year to our copyright dates.
Because in 95 years, we or our successors will surely care about
enforcing the BSD license terms on this code.  Right?
2014-10-28 15:30:16 -04:00

74 lines
2.8 KiB
C

/* Copyright (c) 2001, Matej Pfajfar.
* Copyright (c) 2001-2004, Roger Dingledine.
* Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
* Copyright (c) 2007-2014, The Tor Project, Inc. */
/* See LICENSE for licensing information */
#ifndef TOR_CRYPTO_S2K_H_INCLUDED
#define TOR_CRYPTO_S2K_H_INCLUDED
#include <stdio.h>
#include "torint.h"
/** Length of RFC2440-style S2K specifier: the first 8 bytes are a salt, the
* 9th describes how much iteration to do. */
#define S2K_RFC2440_SPECIFIER_LEN 9
void secret_to_key_rfc2440(
char *key_out, size_t key_out_len, const char *secret,
size_t secret_len, const char *s2k_specifier);
/** Flag for secret-to-key function: do not use scrypt. */
#define S2K_FLAG_NO_SCRYPT (1u<<0)
/** Flag for secret-to-key functions: if using a memory-tuned s2k function,
* assume that we have limited memory. */
#define S2K_FLAG_LOW_MEM (1u<<1)
/** Flag for secret-to-key functions: force use of pbkdf2. Without this, we
* default to scrypt, then RFC2440. */
#define S2K_FLAG_USE_PBKDF2 (1u<<2)
/** Maximum possible output length from secret_to_key_new. */
#define S2K_MAXLEN 64
/** Error code from secret-to-key functions: all is well */
#define S2K_OKAY 0
/** Error code from secret-to-key functions: generic failure */
#define S2K_FAILED -1
/** Error code from secret-to-key functions: provided secret didn't match */
#define S2K_BAD_SECRET -2
/** Error code from secret-to-key functions: didn't recognize the algorithm */
#define S2K_BAD_ALGORITHM -3
/** Error code from secret-to-key functions: specifier wasn't valid */
#define S2K_BAD_PARAMS -4
/** Error code from secret-to-key functions: compiled without scrypt */
#define S2K_NO_SCRYPT_SUPPORT -5
/** Error code from secret-to-key functions: not enough space to write output.
*/
#define S2K_TRUNCATED -6
/** Error code from secret-to-key functions: Wrong length for specifier. */
#define S2K_BAD_LEN -7
int secret_to_key_new(uint8_t *buf,
size_t buf_len,
size_t *len_out,
const char *secret, size_t secret_len,
unsigned flags);
int secret_to_key_make_specifier(uint8_t *buf, size_t buf_len, unsigned flags);
int secret_to_key_check(const uint8_t *spec_and_key, size_t spec_and_key_len,
const char *secret, size_t secret_len);
int secret_to_key_derivekey(uint8_t *key_out, size_t key_out_len,
const uint8_t *spec, size_t spec_len,
const char *secret, size_t secret_len);
#ifdef CRYPTO_S2K_PRIVATE
STATIC int secret_to_key_compute_key(uint8_t *key_out, size_t key_out_len,
const uint8_t *spec, size_t spec_len,
const char *secret, size_t secret_len,
int type);
#endif
#endif