mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 12:32:27 +01:00
Import from upstream yassl
extra/yassl/mySTL/helpers.hpp: Import patch yassl.diff extra/yassl/taocrypt/include/asn.hpp: Import patch yassl.diff extra/yassl/taocrypt/src/asn.cpp: Import patch yassl.diff extra/yassl/taocrypt/src/make.bat: Import patch yassl.diff extra/yassl/taocrypt/src/template_instnt.cpp: Import patch yassl.diff extra/yassl/testsuite/test.hpp: Import patch yassl.diff
This commit is contained in:
parent
609e96e1db
commit
4c00a5c90d
6 changed files with 73 additions and 22 deletions
|
@ -44,6 +44,11 @@
|
||||||
return static_cast<void*>(d);
|
return static_cast<void*>(d);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// for compilers that want matching delete
|
||||||
|
inline void operator delete(void* ptr, Dummy* d)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
typedef Dummy* yassl_pointer;
|
typedef Dummy* yassl_pointer;
|
||||||
|
|
||||||
namespace mySTL {
|
namespace mySTL {
|
||||||
|
|
|
@ -79,7 +79,13 @@ enum ASNIdFlag
|
||||||
|
|
||||||
enum DNTags
|
enum DNTags
|
||||||
{
|
{
|
||||||
COMMON_NAME = 0x03
|
COMMON_NAME = 0x03, // CN
|
||||||
|
SUR_NAME = 0x04, // SN
|
||||||
|
COUNTRY_NAME = 0x06, // C
|
||||||
|
LOCALITY_NAME = 0x07, // L
|
||||||
|
STATE_NAME = 0x08, // ST
|
||||||
|
ORG_NAME = 0x0a, // O
|
||||||
|
ORGUNIT_NAME = 0x0b // OU
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -92,7 +98,8 @@ enum Constants
|
||||||
MAX_SEQ_SZ = 5, // enum(seq|con) + length(4)
|
MAX_SEQ_SZ = 5, // enum(seq|con) + length(4)
|
||||||
MAX_ALGO_SIZE = 9,
|
MAX_ALGO_SIZE = 9,
|
||||||
MAX_DIGEST_SZ = 25, // SHA + enum(Bit or Octet) + length(4)
|
MAX_DIGEST_SZ = 25, // SHA + enum(Bit or Octet) + length(4)
|
||||||
DSA_SIG_SZ = 40
|
DSA_SIG_SZ = 40,
|
||||||
|
NAME_MAX = 512 // max total of all included names
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -205,14 +212,14 @@ enum { SHA_SIZE = 20 };
|
||||||
// A Signing Authority
|
// A Signing Authority
|
||||||
class Signer {
|
class Signer {
|
||||||
PublicKey key_;
|
PublicKey key_;
|
||||||
char* name_;
|
char name_[NAME_MAX];
|
||||||
byte hash_[SHA_SIZE];
|
byte hash_[SHA_SIZE];
|
||||||
public:
|
public:
|
||||||
Signer(const byte* k, word32 kSz, const char* n, const byte* h);
|
Signer(const byte* k, word32 kSz, const char* n, const byte* h);
|
||||||
~Signer();
|
~Signer();
|
||||||
|
|
||||||
const PublicKey& GetPublicKey() const { return key_; }
|
const PublicKey& GetPublicKey() const { return key_; }
|
||||||
const char* GetCommonName() const { return name_; }
|
const char* GetName() const { return name_; }
|
||||||
const byte* GetHash() const { return hash_; }
|
const byte* GetHash() const { return hash_; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -257,8 +264,8 @@ private:
|
||||||
byte subjectHash_[SHA_SIZE]; // hash of all Names
|
byte subjectHash_[SHA_SIZE]; // hash of all Names
|
||||||
byte issuerHash_[SHA_SIZE]; // hash of all Names
|
byte issuerHash_[SHA_SIZE]; // hash of all Names
|
||||||
byte* signature_;
|
byte* signature_;
|
||||||
char* issuer_; // CommonName
|
char issuer_[NAME_MAX]; // Names
|
||||||
char* subject_; // CommonName
|
char subject_[NAME_MAX]; // Names
|
||||||
bool verify_; // Default to yes, but could be off
|
bool verify_; // Default to yes, but could be off
|
||||||
|
|
||||||
void ReadHeader();
|
void ReadHeader();
|
||||||
|
|
|
@ -213,21 +213,17 @@ void PublicKey::AddToEnd(const byte* data, word32 len)
|
||||||
|
|
||||||
|
|
||||||
Signer::Signer(const byte* k, word32 kSz, const char* n, const byte* h)
|
Signer::Signer(const byte* k, word32 kSz, const char* n, const byte* h)
|
||||||
: key_(k, kSz), name_(0)
|
: key_(k, kSz)
|
||||||
{
|
{
|
||||||
if (n) {
|
|
||||||
int sz = strlen(n);
|
int sz = strlen(n);
|
||||||
name_ = NEW_TC char[sz + 1];
|
|
||||||
memcpy(name_, n, sz);
|
memcpy(name_, n, sz);
|
||||||
name_[sz] = 0;
|
name_[sz] = 0;
|
||||||
}
|
|
||||||
|
|
||||||
memcpy(hash_, h, SHA::DIGEST_SIZE);
|
memcpy(hash_, h, SHA::DIGEST_SIZE);
|
||||||
}
|
}
|
||||||
|
|
||||||
Signer::~Signer()
|
Signer::~Signer()
|
||||||
{
|
{
|
||||||
tcArrayDelete(name_);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -424,17 +420,19 @@ void DH_Decoder::Decode(DH& key)
|
||||||
CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers,
|
CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers,
|
||||||
bool noVerify, CertType ct)
|
bool noVerify, CertType ct)
|
||||||
: BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0),
|
: BER_Decoder(s), certBegin_(0), sigIndex_(0), sigLength_(0),
|
||||||
signature_(0), issuer_(0), subject_(0), verify_(!noVerify)
|
signature_(0), verify_(!noVerify)
|
||||||
{
|
{
|
||||||
|
issuer_[0] = 0;
|
||||||
|
subject_[0] = 0;
|
||||||
|
|
||||||
if (decode)
|
if (decode)
|
||||||
Decode(signers, ct);
|
Decode(signers, ct);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
CertDecoder::~CertDecoder()
|
CertDecoder::~CertDecoder()
|
||||||
{
|
{
|
||||||
tcArrayDelete(subject_);
|
|
||||||
tcArrayDelete(issuer_);
|
|
||||||
tcArrayDelete(signature_);
|
tcArrayDelete(signature_);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -672,8 +670,12 @@ void CertDecoder::GetName(NameType nt)
|
||||||
|
|
||||||
SHA sha;
|
SHA sha;
|
||||||
word32 length = GetSequence(); // length of all distinguished names
|
word32 length = GetSequence(); // length of all distinguished names
|
||||||
|
assert (length < NAME_MAX);
|
||||||
length += source_.get_index();
|
length += source_.get_index();
|
||||||
|
|
||||||
|
char* ptr = (nt == ISSUER) ? issuer_ : subject_;
|
||||||
|
word32 idx = 0;
|
||||||
|
|
||||||
while (source_.get_index() < length) {
|
while (source_.get_index() < length) {
|
||||||
GetSet();
|
GetSet();
|
||||||
GetSequence();
|
GetSequence();
|
||||||
|
@ -694,13 +696,49 @@ void CertDecoder::GetName(NameType nt)
|
||||||
byte id = source_.next();
|
byte id = source_.next();
|
||||||
b = source_.next(); // strType
|
b = source_.next(); // strType
|
||||||
word32 strLen = GetLength(source_);
|
word32 strLen = GetLength(source_);
|
||||||
|
bool copy = false;
|
||||||
|
|
||||||
if (id == COMMON_NAME) {
|
if (id == COMMON_NAME) {
|
||||||
char*& ptr = (nt == ISSUER) ? issuer_ : subject_;
|
memcpy(&ptr[idx], "/CN=", 4);
|
||||||
ptr = NEW_TC char[strLen + 1];
|
idx += 4;
|
||||||
memcpy(ptr, source_.get_current(), strLen);
|
copy = true;
|
||||||
ptr[strLen] = 0;
|
|
||||||
}
|
}
|
||||||
|
else if (id == SUR_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/SN=", 4);
|
||||||
|
idx += 4;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
else if (id == COUNTRY_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/C=", 3);
|
||||||
|
idx += 3;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
else if (id == LOCALITY_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/L=", 3);
|
||||||
|
idx += 3;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
else if (id == STATE_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/ST=", 4);
|
||||||
|
idx += 4;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
else if (id == ORG_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/O=", 3);
|
||||||
|
idx += 3;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
else if (id == ORGUNIT_NAME) {
|
||||||
|
memcpy(&ptr[idx], "/OU=", 4);
|
||||||
|
idx += 4;
|
||||||
|
copy = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (copy) {
|
||||||
|
memcpy(&ptr[idx], source_.get_current(), strLen);
|
||||||
|
idx += strLen;
|
||||||
|
}
|
||||||
|
|
||||||
sha.Update(source_.get_current(), strLen);
|
sha.Update(source_.get_current(), strLen);
|
||||||
source_.advance(strLen);
|
source_.advance(strLen);
|
||||||
}
|
}
|
||||||
|
@ -711,6 +749,8 @@ void CertDecoder::GetName(NameType nt)
|
||||||
source_.advance(length);
|
source_.advance(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ptr[idx++] = 0;
|
||||||
|
|
||||||
if (nt == ISSUER)
|
if (nt == ISSUER)
|
||||||
sha.Final(issuerHash_);
|
sha.Final(issuerHash_);
|
||||||
else
|
else
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
# quick and dirty build file for testing different MSDEVs
|
REM quick and dirty build file for testing different MSDEVs
|
||||||
setlocal
|
setlocal
|
||||||
|
|
||||||
set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2
|
set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2
|
||||||
|
|
|
@ -30,7 +30,6 @@
|
||||||
#include "sha.hpp"
|
#include "sha.hpp"
|
||||||
#include "md5.hpp"
|
#include "md5.hpp"
|
||||||
#include "hmac.hpp"
|
#include "hmac.hpp"
|
||||||
#include "ripemd.hpp"
|
|
||||||
#include "pwdbased.hpp"
|
#include "pwdbased.hpp"
|
||||||
#include "algebra.hpp"
|
#include "algebra.hpp"
|
||||||
#include "vector.hpp"
|
#include "vector.hpp"
|
||||||
|
|
|
@ -305,8 +305,8 @@ inline void showPeer(SSL* ssl)
|
||||||
char* subject = X509_NAME_oneline(X509_get_subject_name(peer), 0, 0);
|
char* subject = X509_NAME_oneline(X509_get_subject_name(peer), 0, 0);
|
||||||
|
|
||||||
printf("peer's cert info:\n");
|
printf("peer's cert info:\n");
|
||||||
printf("issuer is: %s\n", issuer);
|
printf("issuer : %s\n", issuer);
|
||||||
printf("subject is: %s\n", subject);
|
printf("subject: %s\n", subject);
|
||||||
|
|
||||||
free(subject);
|
free(subject);
|
||||||
free(issuer);
|
free(issuer);
|
||||||
|
|
Loading…
Reference in a new issue