mirror of
https://github.com/RetroShare/RetroShare.git
synced 2025-01-31 09:43:25 -05:00
7e8d8aea9c
suppressed p3distrib in services git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@4600 b45a01b8-16f6-495d-af2f-9b41ad6348cc
134 lines
3.8 KiB
C++
134 lines
3.8 KiB
C++
/*
|
|
* libretroshare/src/distrib: p3distribverify.h
|
|
*
|
|
* 3P/PQI network interface for RetroShare.
|
|
*
|
|
* Copyright 2008-2010 by Robert Fernie
|
|
* 2011 Christopher Evi-Parker
|
|
*
|
|
* This library is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU Library General Public
|
|
* License Version 2 as published by the Free Software Foundation.
|
|
*
|
|
* This library is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
* Library General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Library General Public
|
|
* License along with this library; if not, write to the Free Software
|
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
|
* USA.
|
|
*
|
|
* Please report all bugs and problems to "retroshare@lunamutt.com".
|
|
*
|
|
*/
|
|
|
|
#ifndef P3DISTRIBVERIFY_H_
|
|
#define P3DISTRIBVERIFY_H_
|
|
|
|
|
|
#include <openssl/ssl.h>
|
|
#include <openssl/evp.h>
|
|
|
|
#include "serialiser/rstlvkeys.h"
|
|
#include "distrib/p3distrib.h"
|
|
|
|
|
|
/*!
|
|
* This contains functionality for performing security
|
|
* operations needed to validate data received in p3GroupDistrib
|
|
* Also has functionality to receive data
|
|
*/
|
|
class p3DistribSecurity {
|
|
|
|
public:
|
|
|
|
p3DistribSecurity();
|
|
~p3DistribSecurity();
|
|
|
|
/*!
|
|
* extracts the public key from an RsTlvSecurityKey
|
|
* @param key RsTlvSecurityKey to extract public RSA key from
|
|
* @return pointer to the public RSA key if successful, null otherwise
|
|
*/
|
|
static RSA *extractPublicKey(RsTlvSecurityKey &key);
|
|
|
|
/*!
|
|
* extracts the public key from an RsTlvSecurityKey
|
|
* @param key RsTlvSecurityKey to extract private RSA key from
|
|
* @return pointer to the private RSA key if successful, null otherwise
|
|
*/
|
|
static RSA *extractPrivateKey(RsTlvSecurityKey &key);
|
|
|
|
/*!
|
|
* stores the rsa public key in a RsTlvSecurityKey
|
|
* @param key RsTlvSecurityKey to store the public rsa key in
|
|
* @param rsa_pub
|
|
*/
|
|
static void setRSAPublicKey(RsTlvSecurityKey &key, RSA *rsa_pub);
|
|
|
|
/*!
|
|
* stores the rsa private key in a RsTlvSecurityKey
|
|
* @param key stores the rsa private key in a RsTlvSecurityKey
|
|
* @param rsa_priv the rsa private key to store
|
|
*/
|
|
static void setRSAPrivateKey(RsTlvSecurityKey &key, RSA *rsa_priv);
|
|
|
|
/*!
|
|
* extracts signature from RSA key
|
|
* @param pubkey
|
|
* @return signature of RSA key in hex format
|
|
*/
|
|
static std::string getRsaKeySign(RSA *pubkey);
|
|
|
|
/*!
|
|
* extracts the signature and stores it in a string
|
|
* in hex format
|
|
* @param data
|
|
* @param len
|
|
* @return
|
|
*/
|
|
static std::string getBinDataSign(void *data, int len);
|
|
|
|
/*!
|
|
* Encrypts data using envelope encryption (taken from open ssl's evp_sealinit )
|
|
* only full publish key holders can encrypt data for given group
|
|
*@param out
|
|
*@param outlen
|
|
*@param in
|
|
*@param inlen
|
|
*/
|
|
static bool encrypt(void *&out, int &outlen, const void *in, int inlen, EVP_PKEY *privateKey);
|
|
|
|
|
|
/**
|
|
* Decrypts data using evelope decryption (taken from open ssl's evp_sealinit )
|
|
* only full publish key holders can decrypt data for a group
|
|
* @param out where decrypted data is written to
|
|
* @param outlen
|
|
* @param in
|
|
* @param inlen
|
|
* @return false if encryption failed
|
|
*/
|
|
static bool decrypt(void *&out, int &outlen, const void *in, int inlen, EVP_PKEY *privateKey);
|
|
|
|
/*!
|
|
* uses grp signature to check if group has been
|
|
* tampered with
|
|
* @param newGrp
|
|
* @return true if group valid false otherwise
|
|
*/
|
|
static bool validateDistribGrp(RsDistribGrp *newGrp);
|
|
|
|
/*!
|
|
* uses groupinfo public key to verify signature of signed message
|
|
* @param info groupinfo for which msg is meant for
|
|
* @param msg
|
|
* @return false if verfication of signature is not passed
|
|
*/
|
|
static bool validateDistribSignedMsg(GroupInfo &info, RsDistribSignedMsg *msg);
|
|
};
|
|
|
|
#endif /* P3DISTRIBVERIFY_H_ */
|