Moved cPublicKey to its separate file in PolarSSL++.
This commit is contained in:
parent
7e972f6a5d
commit
d9f7ae6a4d
@ -39,6 +39,7 @@ set(SHARED_SRC
|
|||||||
../../src/Crypto.cpp
|
../../src/Crypto.cpp
|
||||||
../../src/PolarSSL++/CtrDrbgContext.cpp
|
../../src/PolarSSL++/CtrDrbgContext.cpp
|
||||||
../../src/PolarSSL++/EntropyContext.cpp
|
../../src/PolarSSL++/EntropyContext.cpp
|
||||||
|
../../src/PolarSSL++/PublicKey.cpp
|
||||||
../../src/PolarSSL++/RsaPrivateKey.cpp
|
../../src/PolarSSL++/RsaPrivateKey.cpp
|
||||||
)
|
)
|
||||||
set(SHARED_HDR
|
set(SHARED_HDR
|
||||||
@ -49,6 +50,7 @@ set(SHARED_HDR
|
|||||||
../../src/Crypto.h
|
../../src/Crypto.h
|
||||||
../../src/PolarSSL++/CtrDrbgContext.h
|
../../src/PolarSSL++/CtrDrbgContext.h
|
||||||
../../src/PolarSSL++/EntropyContext.h
|
../../src/PolarSSL++/EntropyContext.h
|
||||||
|
../../src/PolarSSL++/PublicKey.h
|
||||||
../../src/PolarSSL++/RsaPrivateKey.h
|
../../src/PolarSSL++/RsaPrivateKey.h
|
||||||
)
|
)
|
||||||
set(SHARED_OSS_SRC
|
set(SHARED_OSS_SRC
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#include "Connection.h"
|
#include "Connection.h"
|
||||||
#include "Server.h"
|
#include "Server.h"
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#include "PolarSSL++/PublicKey.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <direct.h> // For _mkdir()
|
#include <direct.h> // For _mkdir()
|
||||||
|
@ -52,84 +52,6 @@ public:
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// cRSAPrivateKey:
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
||||||
// cPublicKey:
|
|
||||||
|
|
||||||
cPublicKey::cPublicKey(const AString & a_PublicKeyDER)
|
|
||||||
{
|
|
||||||
pk_init(&m_Pk);
|
|
||||||
if (pk_parse_public_key(&m_Pk, (const Byte *)a_PublicKeyDER.data(), a_PublicKeyDER.size()) != 0)
|
|
||||||
{
|
|
||||||
ASSERT(!"Cannot parse PubKey");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
InitRnd();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
cPublicKey::~cPublicKey()
|
|
||||||
{
|
|
||||||
pk_free(&m_Pk);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cPublicKey::Decrypt(const Byte * a_EncryptedData, size_t a_EncryptedLength, Byte * a_DecryptedData, size_t a_DecryptedMaxLength)
|
|
||||||
{
|
|
||||||
size_t DecryptedLen = a_DecryptedMaxLength;
|
|
||||||
int res = pk_decrypt(&m_Pk,
|
|
||||||
a_EncryptedData, a_EncryptedLength,
|
|
||||||
a_DecryptedData, &DecryptedLen, a_DecryptedMaxLength,
|
|
||||||
ctr_drbg_random, &m_Ctr_drbg
|
|
||||||
);
|
|
||||||
if (res != 0)
|
|
||||||
{
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return (int)DecryptedLen;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int cPublicKey::Encrypt(const Byte * a_PlainData, size_t a_PlainLength, Byte * a_EncryptedData, size_t a_EncryptedMaxLength)
|
|
||||||
{
|
|
||||||
size_t EncryptedLength = a_EncryptedMaxLength;
|
|
||||||
int res = pk_encrypt(&m_Pk,
|
|
||||||
a_PlainData, a_PlainLength, a_EncryptedData, &EncryptedLength, a_EncryptedMaxLength,
|
|
||||||
ctr_drbg_random, &m_Ctr_drbg
|
|
||||||
);
|
|
||||||
if (res != 0)
|
|
||||||
{
|
|
||||||
return res;
|
|
||||||
}
|
|
||||||
return (int)EncryptedLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cPublicKey::InitRnd(void)
|
|
||||||
{
|
|
||||||
entropy_init(&m_Entropy);
|
|
||||||
const unsigned char pers[] = "rsa_genkey";
|
|
||||||
ctr_drbg_init(&m_Ctr_drbg, entropy_func, &m_Entropy, pers, sizeof(pers) - 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// cAESCFBDecryptor:
|
// cAESCFBDecryptor:
|
||||||
|
|
||||||
|
31
src/Crypto.h
31
src/Crypto.h
@ -14,37 +14,6 @@
|
|||||||
#include "polarssl/entropy.h"
|
#include "polarssl/entropy.h"
|
||||||
#include "polarssl/ctr_drbg.h"
|
#include "polarssl/ctr_drbg.h"
|
||||||
#include "polarssl/sha1.h"
|
#include "polarssl/sha1.h"
|
||||||
#include "polarssl/pk.h"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class cPublicKey
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
cPublicKey(const AString & a_PublicKeyDER);
|
|
||||||
~cPublicKey();
|
|
||||||
|
|
||||||
/** Decrypts the data using the stored public key
|
|
||||||
Both a_EncryptedData and a_DecryptedData must be at least <KeySizeBytes> bytes large.
|
|
||||||
Returns the number of bytes decrypted, or negative number for error. */
|
|
||||||
int Decrypt(const Byte * a_EncryptedData, size_t a_EncryptedLength, Byte * a_DecryptedData, size_t a_DecryptedMaxLength);
|
|
||||||
|
|
||||||
/** Encrypts the data using the stored public key
|
|
||||||
Both a_EncryptedData and a_DecryptedData must be at least <KeySizeBytes> bytes large.
|
|
||||||
Returns the number of bytes decrypted, or negative number for error. */
|
|
||||||
int Encrypt(const Byte * a_PlainData, size_t a_PlainLength, Byte * a_EncryptedData, size_t a_EncryptedMaxLength);
|
|
||||||
|
|
||||||
protected:
|
|
||||||
pk_context m_Pk;
|
|
||||||
entropy_context m_Entropy;
|
|
||||||
ctr_drbg_context m_Ctr_drbg;
|
|
||||||
|
|
||||||
/** Initializes the m_Entropy and m_Ctr_drbg contexts
|
|
||||||
Common part of this object's construction, called from all constructors. */
|
|
||||||
void InitRnd(void);
|
|
||||||
} ;
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -10,6 +10,7 @@ set(SOURCES
|
|||||||
"CallbackSslContext.cpp"
|
"CallbackSslContext.cpp"
|
||||||
"CtrDrbgContext.cpp"
|
"CtrDrbgContext.cpp"
|
||||||
"EntropyContext.cpp"
|
"EntropyContext.cpp"
|
||||||
|
"PublicKey.cpp"
|
||||||
"RsaPrivateKey.cpp"
|
"RsaPrivateKey.cpp"
|
||||||
"SslContext.cpp"
|
"SslContext.cpp"
|
||||||
"X509Cert.cpp"
|
"X509Cert.cpp"
|
||||||
@ -21,6 +22,7 @@ set(HEADERS
|
|||||||
"CallbackSslContext.h"
|
"CallbackSslContext.h"
|
||||||
"CtrDrbgContext.h"
|
"CtrDrbgContext.h"
|
||||||
"EntropyContext.h"
|
"EntropyContext.h"
|
||||||
|
"PublicKey.h"
|
||||||
"RsaPrivateKey.h"
|
"RsaPrivateKey.h"
|
||||||
"SslContext.h"
|
"SslContext.h"
|
||||||
"X509Cert.h"
|
"X509Cert.h"
|
||||||
|
@ -26,6 +26,7 @@ class cCtrDrbgContext
|
|||||||
{
|
{
|
||||||
friend class cSslContext;
|
friend class cSslContext;
|
||||||
friend class cRsaPrivateKey;
|
friend class cRsaPrivateKey;
|
||||||
|
friend class cPublicKey;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** Constructs the context with a new entropy context. */
|
/** Constructs the context with a new entropy context. */
|
||||||
|
73
src/PolarSSL++/PublicKey.cpp
Normal file
73
src/PolarSSL++/PublicKey.cpp
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
|
||||||
|
// PublicKey.cpp
|
||||||
|
|
||||||
|
// Implements the cPublicKey class representing a RSA public key in PolarSSL
|
||||||
|
|
||||||
|
#include "Globals.h"
|
||||||
|
#include "PublicKey.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cPublicKey::cPublicKey(const AString & a_PublicKeyDER)
|
||||||
|
{
|
||||||
|
pk_init(&m_Pk);
|
||||||
|
if (pk_parse_public_key(&m_Pk, (const Byte *)a_PublicKeyDER.data(), a_PublicKeyDER.size()) != 0)
|
||||||
|
{
|
||||||
|
ASSERT(!"Cannot parse PubKey");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
m_CtrDrbg.Initialize("rsa_pubkey", 10);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
cPublicKey::~cPublicKey()
|
||||||
|
{
|
||||||
|
pk_free(&m_Pk);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cPublicKey::Decrypt(const Byte * a_EncryptedData, size_t a_EncryptedLength, Byte * a_DecryptedData, size_t a_DecryptedMaxLength)
|
||||||
|
{
|
||||||
|
size_t DecryptedLen = a_DecryptedMaxLength;
|
||||||
|
int res = pk_decrypt(&m_Pk,
|
||||||
|
a_EncryptedData, a_EncryptedLength,
|
||||||
|
a_DecryptedData, &DecryptedLen, a_DecryptedMaxLength,
|
||||||
|
ctr_drbg_random, m_CtrDrbg.GetInternal()
|
||||||
|
);
|
||||||
|
if (res != 0)
|
||||||
|
{
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
return (int)DecryptedLen;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
int cPublicKey::Encrypt(const Byte * a_PlainData, size_t a_PlainLength, Byte * a_EncryptedData, size_t a_EncryptedMaxLength)
|
||||||
|
{
|
||||||
|
size_t EncryptedLength = a_EncryptedMaxLength;
|
||||||
|
int res = pk_encrypt(&m_Pk,
|
||||||
|
a_PlainData, a_PlainLength, a_EncryptedData, &EncryptedLength, a_EncryptedMaxLength,
|
||||||
|
ctr_drbg_random, m_CtrDrbg.GetInternal()
|
||||||
|
);
|
||||||
|
if (res != 0)
|
||||||
|
{
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
return (int)EncryptedLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
48
src/PolarSSL++/PublicKey.h
Normal file
48
src/PolarSSL++/PublicKey.h
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
|
||||||
|
// PublicKey.h
|
||||||
|
|
||||||
|
// Declares the cPublicKey class representing a RSA public key in PolarSSL
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "CtrDrbgContext.h"
|
||||||
|
#include "polarssl/pk.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class cPublicKey
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/** Constructs the public key out of the DER-encoded pubkey data */
|
||||||
|
cPublicKey(const AString & a_PublicKeyDER);
|
||||||
|
|
||||||
|
~cPublicKey();
|
||||||
|
|
||||||
|
/** Decrypts the data using the stored public key
|
||||||
|
Both a_EncryptedData and a_DecryptedData must be at least <KeySizeBytes> bytes large.
|
||||||
|
Returns the number of bytes decrypted, or negative number for error. */
|
||||||
|
int Decrypt(const Byte * a_EncryptedData, size_t a_EncryptedLength, Byte * a_DecryptedData, size_t a_DecryptedMaxLength);
|
||||||
|
|
||||||
|
/** Encrypts the data using the stored public key
|
||||||
|
Both a_EncryptedData and a_DecryptedData must be at least <KeySizeBytes> bytes large.
|
||||||
|
Returns the number of bytes decrypted, or negative number for error. */
|
||||||
|
int Encrypt(const Byte * a_PlainData, size_t a_PlainLength, Byte * a_EncryptedData, size_t a_EncryptedMaxLength);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
/** The public key PolarSSL representation */
|
||||||
|
pk_context m_Pk;
|
||||||
|
|
||||||
|
/** The random generator used in encryption and decryption */
|
||||||
|
cCtrDrbgContext m_CtrDrbg;
|
||||||
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user