Commit d61f1823 authored by unknown's avatar unknown
Browse files

Merge 192.168.0.20:mysql/my50-maint-yassl/

into  neptunus.(none):/home/msvensson/mysql/mysql-5.0-maint

parents 2f4f68be 18a8eaa7
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -44,6 +44,11 @@
        return static_cast<void*>(d);
    }

    // for compilers that want matching delete
    inline void operator delete(void* ptr, Dummy* d) 
    { 
    }

    typedef Dummy* yassl_pointer;

namespace mySTL {
+0 −1
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@
#include "hmac.hpp"
#include "md5.hpp"
#include "sha.hpp"
#include "ripemd.hpp"
#include "openssl/ssl.h"

#ifdef HAVE_EXPLICIT_TEMPLATE_INSTANTIATION
+13 −6
Original line number Diff line number Diff line
@@ -79,7 +79,13 @@ enum ASNIdFlag

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_ALGO_SIZE =  9,
    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
class Signer {
    PublicKey key_;
    char*     name_;
    char      name_[NAME_MAX];
    byte      hash_[SHA_SIZE];
public:
    Signer(const byte* k, word32 kSz, const char* n, const byte* h);
    ~Signer();

    const PublicKey& GetPublicKey()  const { return key_; }
    const char*      GetCommonName() const { return name_; }
    const char*      GetName()       const { return name_; }
    const byte*      GetHash()       const { return hash_; }

private:
@@ -257,8 +264,8 @@ private:
    byte      subjectHash_[SHA_SIZE];   // hash of all Names
    byte      issuerHash_[SHA_SIZE];    // hash of all Names
    byte*     signature_;
    char*     issuer_;                  // CommonName
    char*     subject_;                 // CommonName
    char      issuer_[NAME_MAX];        // Names
    char      subject_[NAME_MAX];       // Names
    bool      verify_;                  // Default to yes, but could be off

    void   ReadHeader();
+52 −12
Original line number Diff line number Diff line
@@ -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)
    : key_(k, kSz), name_(0)
    : key_(k, kSz)
{
    if (n) {
        int sz = strlen(n);
        name_ = NEW_TC char[sz + 1];
        memcpy(name_, n, sz);
        name_[sz] = 0;
    }

    memcpy(hash_, h, SHA::DIGEST_SIZE);
}

Signer::~Signer()
{
    tcArrayDelete(name_);
}


@@ -424,17 +420,19 @@ void DH_Decoder::Decode(DH& key)
CertDecoder::CertDecoder(Source& s, bool decode, SignerList* signers,
                         bool noVerify, CertType ct)
    : 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)
        Decode(signers, ct); 

}


CertDecoder::~CertDecoder()
{
    tcArrayDelete(subject_);
    tcArrayDelete(issuer_);
    tcArrayDelete(signature_);
}

@@ -672,8 +670,12 @@ void CertDecoder::GetName(NameType nt)

    SHA    sha;
    word32 length = GetSequence();  // length of all distinguished names
    assert (length < NAME_MAX);
    length += source_.get_index();

    char*  ptr = (nt == ISSUER) ? issuer_ : subject_;
    word32 idx = 0;

    while (source_.get_index() < length) {
        GetSet();
        GetSequence();
@@ -694,13 +696,49 @@ void CertDecoder::GetName(NameType nt)
            byte   id      = source_.next();  
            b              = source_.next();    // strType
            word32 strLen  = GetLength(source_);
            bool   copy    = false;

            if (id == COMMON_NAME) {
                char*& ptr = (nt == ISSUER) ? issuer_ : subject_;
                ptr = NEW_TC char[strLen + 1];
                memcpy(ptr, source_.get_current(), strLen);
                ptr[strLen] = 0;
                memcpy(&ptr[idx], "/CN=", 4);
                idx += 4;
                copy = true;
            }
            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);
            source_.advance(strLen);
        }
@@ -711,6 +749,8 @@ void CertDecoder::GetName(NameType nt)
            source_.advance(length);
        }
    }
    ptr[idx++] = 0;

    if (nt == ISSUER)
        sha.Final(issuerHash_);
    else
+1 −1
Original line number Diff line number Diff line
# quick and dirty build file for testing different MSDEVs
REM quick and dirty build file for testing different MSDEVs
setlocal 

set myFLAGS= /I../include /I../../mySTL /c /W3 /G6 /O2 
Loading