Tor 0.4.9.0-alpha-dev
crypto_s2k.h
Go to the documentation of this file.
1/* Copyright (c) 2001, Matej Pfajfar.
2 * Copyright (c) 2001-2004, Roger Dingledine.
3 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
4 * Copyright (c) 2007-2021, The Tor Project, Inc. */
5/* See LICENSE for licensing information */
6
7/**
8 * \file crypto_s2k.h
9 *
10 * \brief Header for crypto_s2k.c
11 **/
12
13#ifndef TOR_CRYPTO_S2K_H_INCLUDED
14#define TOR_CRYPTO_S2K_H_INCLUDED
15
16#include <stdio.h>
17#include "lib/cc/torint.h"
18
19/** Length of RFC2440-style S2K specifier: the first 8 bytes are a salt, the
20 * 9th describes how much iteration to do. */
21#define S2K_RFC2440_SPECIFIER_LEN 9
23 char *key_out, size_t key_out_len, const char *secret,
24 size_t secret_len, const char *s2k_specifier);
25
26/** Flag for secret-to-key function: do not use scrypt. */
27#define S2K_FLAG_NO_SCRYPT (1u<<0)
28/** Flag for secret-to-key functions: if using a memory-tuned s2k function,
29 * assume that we have limited memory. */
30#define S2K_FLAG_LOW_MEM (1u<<1)
31/** Flag for secret-to-key functions: force use of pbkdf2. Without this, we
32 * default to scrypt, then RFC2440. */
33#define S2K_FLAG_USE_PBKDF2 (1u<<2)
34
35/** Maximum possible output length from secret_to_key_new. */
36#define S2K_MAXLEN 64
37
38/** Error code from secret-to-key functions: all is well */
39#define S2K_OKAY 0
40/** Error code from secret-to-key functions: generic failure */
41#define S2K_FAILED -1
42/** Error code from secret-to-key functions: provided secret didn't match */
43#define S2K_BAD_SECRET -2
44/** Error code from secret-to-key functions: didn't recognize the algorithm */
45#define S2K_BAD_ALGORITHM -3
46/** Error code from secret-to-key functions: specifier wasn't valid */
47#define S2K_BAD_PARAMS -4
48/** Error code from secret-to-key functions: compiled without scrypt */
49#define S2K_NO_SCRYPT_SUPPORT -5
50/** Error code from secret-to-key functions: not enough space to write output.
51 */
52#define S2K_TRUNCATED -6
53/** Error code from secret-to-key functions: Wrong length for specifier. */
54#define S2K_BAD_LEN -7
55
56int secret_to_key_new(uint8_t *buf,
57 size_t buf_len,
58 size_t *len_out,
59 const char *secret, size_t secret_len,
60 unsigned flags);
61
62int secret_to_key_make_specifier(uint8_t *buf, size_t buf_len, unsigned flags);
63
64int secret_to_key_check(const uint8_t *spec_and_key, size_t spec_and_key_len,
65 const char *secret, size_t secret_len);
66
67int secret_to_key_derivekey(uint8_t *key_out, size_t key_out_len,
68 const uint8_t *spec, size_t spec_len,
69 const char *secret, size_t secret_len);
70
71#ifdef CRYPTO_S2K_PRIVATE
72STATIC int secret_to_key_compute_key(uint8_t *key_out, size_t key_out_len,
73 const uint8_t *spec, size_t spec_len,
74 const char *secret, size_t secret_len,
75 int type);
76#endif /* defined(CRYPTO_S2K_PRIVATE) */
77
78#endif /* !defined(TOR_CRYPTO_S2K_H_INCLUDED) */
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)
Definition: crypto_s2k.c:260
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)
Definition: crypto_s2k.c:444
int secret_to_key_check(const uint8_t *spec_and_key, size_t spec_and_key_len, const char *secret, size_t secret_len)
Definition: crypto_s2k.c:488
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)
Definition: crypto_s2k.c:372
int secret_to_key_make_specifier(uint8_t *buf, size_t buf_len, unsigned flags)
Definition: crypto_s2k.c:407
void secret_to_key_rfc2440(char *key_out, size_t key_out_len, const char *secret, size_t secret_len, const char *s2k_specifier)
Definition: crypto_s2k.c:205
#define STATIC
Definition: testsupport.h:32
Integer definitions used throughout Tor.