Skip to content

Commit

Permalink
BCertificate: fixup the API
Browse files Browse the repository at this point in the history
* Add an operator== and a copy constructor
* Make the getters const so they are easier to use
  • Loading branch information
pulkomandy committed Nov 8, 2015
1 parent ba307a1 commit 6c32f50
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 30 deletions.
24 changes: 12 additions & 12 deletions headers/os/net/Certificate.h
Expand Up @@ -12,30 +12,30 @@

class BCertificate {
public:
BCertificate(const BCertificate& other);
~BCertificate();

int Version();
int Version() const;

time_t StartDate() const;
time_t ExpirationDate() const;

time_t StartDate();
time_t ExpirationDate();
bool IsValidAuthority() const;
bool IsSelfSigned() const;

bool IsValidAuthority();
bool IsSelfSigned();
BString Issuer() const;
BString Subject() const;
BString SignatureAlgorithm() const;

BString Issuer();
BString Subject();
BString SignatureAlgorithm();
BString String() const;

BString String();
bool operator==(const BCertificate& other);

private:
friend class BSecureSocket::Private;
class Private;
BCertificate(Private* data);

BCertificate(const BCertificate& other);
// copy-construction not allowed

Private* fPrivate;
};

Expand Down
66 changes: 48 additions & 18 deletions src/kits/network/libnetapi/Certificate.cpp
Expand Up @@ -58,65 +58,71 @@ BCertificate::BCertificate(Private* data)
}


BCertificate::BCertificate(const BCertificate& other)
{
fPrivate = new<std::nothrow>BCertificate::Private(other.fPrivate);
}


BCertificate::~BCertificate()
{
delete fPrivate;
}


int
BCertificate::Version()
BCertificate::Version() const
{
return X509_get_version(fPrivate->fX509) + 1;
}


time_t
BCertificate::StartDate()
BCertificate::StartDate() const
{
return parse_ASN1(X509_get_notBefore(fPrivate->fX509));
}


time_t
BCertificate::ExpirationDate()
BCertificate::ExpirationDate() const
{
return parse_ASN1(X509_get_notAfter(fPrivate->fX509));
}


bool
BCertificate::IsValidAuthority()
BCertificate::IsValidAuthority() const
{
return X509_check_ca(fPrivate->fX509) > 0;
}


bool
BCertificate::IsSelfSigned()
BCertificate::IsSelfSigned() const
{
return X509_check_issued(fPrivate->fX509, fPrivate->fX509) == X509_V_OK;
}


BString
BCertificate::Issuer()
BCertificate::Issuer() const
{
X509_NAME* name = X509_get_issuer_name(fPrivate->fX509);
return decode_X509_NAME(name);
}


BString
BCertificate::Subject()
BCertificate::Subject() const
{
X509_NAME* name = X509_get_subject_name(fPrivate->fX509);
return decode_X509_NAME(name);
}


BString
BCertificate::SignatureAlgorithm()
BCertificate::SignatureAlgorithm() const
{
int algorithmIdentifier = OBJ_obj2nid(
fPrivate->fX509->cert_info->key->algor->algorithm);
Expand All @@ -130,7 +136,7 @@ BCertificate::SignatureAlgorithm()


BString
BCertificate::String()
BCertificate::String() const
{
BIO *buffer = BIO_new(BIO_s_mem());
X509_print_ex(buffer, fPrivate->fX509, XN_FLAG_COMPAT, X509_FLAG_COMPAT);
Expand All @@ -144,18 +150,36 @@ BCertificate::String()
}


bool
BCertificate::operator==(const BCertificate& other)
{
return X509_cmp(fPrivate.fX509, other.fPrivate.fX509) == 0;
}


// #pragma mark - BCertificate::Private


BCertificate::Private::Private(X509* data)
: fX509(data)
: fX509(X509_dup(data))
{
}


BCertificate::Private::~Private()
{
sk_X509_pop_free(chain, X509_free)
}


#else


BCertificate::BCertificate(const BCertificate& other)
{
}


BCertificate::BCertificate(Private* data)
{
}
Expand All @@ -167,59 +191,65 @@ BCertificate::~BCertificate()


time_t
BCertificate::StartDate()
BCertificate::StartDate() const
{
return B_NOT_SUPPORTED;
}


time_t
BCertificate::ExpirationDate()
BCertificate::ExpirationDate() const
{
return B_NOT_SUPPORTED;
}


bool
BCertificate::IsValidAuthority()
BCertificate::IsValidAuthority() const
{
return false;
}


int
BCertificate::Version()
BCertificate::Version() const
{
return B_NOT_SUPPORTED;
}


BString
BCertificate::Issuer()
BCertificate::Issuer() const
{
return BString();
}


BString
BCertificate::Subject()
BCertificate::Subject() const
{
return BString();
}


BString
BCertificate::SignatureAlgorithm()
BCertificate::SignatureAlgorithm() const
{
return BString();
}


BString
BCertificate::String()
BCertificate::String() const
{
return BString();
}


bool
BCertificate::operator==(const BCertificate& other)
{
return false;
}

#endif
1 change: 1 addition & 0 deletions src/kits/network/libnetapi/CertificatePrivate.h
Expand Up @@ -13,6 +13,7 @@
class BCertificate::Private {
public:
Private(X509* data);
~Private();

public:
X509* fX509;
Expand Down

0 comments on commit 6c32f50

Please sign in to comment.