source: trunk/libtransmission/crypto.h

Last change on this file was 14726, checked in by jordan, 5 years ago

crypto.h and crypto-utils.h can't use #pragma once, it breaks our name munging in crypto-test-ref.h

  • Property svn:keywords set to Date Rev Author Id
File size: 2.5 KB
Line 
1/*
2 * This file Copyright (C) 2007-2014 Mnemosyne LLC
3 *
4 * It may be used under the GNU GPL versions 2 or 3
5 * or any future license endorsed by Mnemosyne LLC.
6 *
7 * $Id: crypto.h 14726 2016-03-29 19:02:26Z mikedld $
8 */
9
10#ifndef __TRANSMISSION__
11 #error only libtransmission should #include this header.
12#endif
13
14#ifndef TR_ENCRYPTION_H
15#define TR_ENCRYPTION_H
16
17#include <inttypes.h>
18
19#include "crypto-utils.h"
20#include "utils.h" /* TR_GNUC_NULL_TERMINATED */
21
22/**
23*** @addtogroup peers
24*** @{
25**/
26
27enum
28{
29  KEY_LEN = 96
30};
31
32/** @brief Holds state information for encrypted peer communications */
33typedef struct
34{
35    tr_rc4_ctx_t    dec_key;
36    tr_rc4_ctx_t    enc_key;
37    tr_dh_ctx_t     dh;
38    uint8_t         myPublicKey[KEY_LEN];
39    tr_dh_secret_t  mySecret;
40    uint8_t         torrentHash[SHA_DIGEST_LENGTH];
41    bool            isIncoming;
42    bool            torrentHashIsSet;
43}
44tr_crypto;
45
46/** @brief construct a new tr_crypto object */
47void tr_cryptoConstruct (tr_crypto * crypto, const uint8_t * torrentHash, bool isIncoming);
48
49/** @brief destruct an existing tr_crypto object */
50void tr_cryptoDestruct (tr_crypto * crypto);
51
52
53void tr_cryptoSetTorrentHash (tr_crypto * crypto, const uint8_t * torrentHash);
54
55const uint8_t* tr_cryptoGetTorrentHash (const tr_crypto * crypto);
56
57bool           tr_cryptoHasTorrentHash (const tr_crypto * crypto);
58
59bool           tr_cryptoComputeSecret (tr_crypto *     crypto,
60                                       const uint8_t * peerPublicKey);
61
62const uint8_t* tr_cryptoGetMyPublicKey (const tr_crypto * crypto,
63                                        int *             setme_len);
64
65void           tr_cryptoDecryptInit (tr_crypto * crypto);
66
67void           tr_cryptoDecrypt (tr_crypto *  crypto,
68                                 size_t       buflen,
69                                 const void * buf_in,
70                                 void *       buf_out);
71
72void           tr_cryptoEncryptInit (tr_crypto * crypto);
73
74void           tr_cryptoEncrypt (tr_crypto *  crypto,
75                                 size_t       buflen,
76                                 const void * buf_in,
77                                 void *       buf_out);
78
79bool           tr_cryptoSecretKeySha1 (const tr_crypto * crypto,
80                                       const void      * prepend_data,
81                                       size_t            prepend_data_size,
82                                       const void      * append_data,
83                                       size_t            append_data_size,
84                                       uint8_t         * hash);
85
86/* @} */
87
88#endif
Note: See TracBrowser for help on using the repository browser.