mirror of
https://github.com/QuasarApp/qca.git
synced 2025-04-28 12:34:31 +00:00
cert to/from pem
svn path=/trunk/kdesupport/qca/; revision=238589
This commit is contained in:
parent
aadd9caa59
commit
e230e66787
3
TODO
3
TODO
@ -1,5 +1,4 @@
|
||||
* cert: toDER
|
||||
* cert: toPEM / fromPEM
|
||||
* cert: do something about QCA_CertProperty
|
||||
|
||||
* ssl/tls (also server support)
|
||||
* sasl (also server support)
|
||||
|
@ -34,6 +34,7 @@ void showCertInfo(const QCA::Cert &cert)
|
||||
printf(" Valid from: %s, until %s\n",
|
||||
cert.notBefore().toString().latin1(),
|
||||
cert.notAfter().toString().latin1());
|
||||
printf(" PEM:\n%s\n", cert.toPEM().latin1());
|
||||
}
|
||||
|
||||
int main()
|
||||
|
@ -74,6 +74,24 @@ static void appendArray(QByteArray *a, const QByteArray &b)
|
||||
memcpy(a->data() + oldsize, b.data(), b.size());
|
||||
}
|
||||
|
||||
static char *bio2buf(BIO *b, unsigned int *len)
|
||||
{
|
||||
char *buf = (char *)malloc(1);
|
||||
int size = 0;
|
||||
while(1) {
|
||||
char block[1024];
|
||||
int ret = BIO_read(b, block, 1024);
|
||||
buf = (char *)realloc(buf, size + ret);
|
||||
memcpy(buf + size, block, ret);
|
||||
size += ret;
|
||||
if(ret != 1024)
|
||||
break;
|
||||
}
|
||||
BIO_free(b);
|
||||
|
||||
*len = size;
|
||||
return buf;
|
||||
}
|
||||
|
||||
class SHA1Context : public QCA_HashContext
|
||||
{
|
||||
@ -524,20 +542,7 @@ public:
|
||||
return;
|
||||
}
|
||||
|
||||
char *buf = (char *)malloc(1);
|
||||
int size = 0;
|
||||
while(1) {
|
||||
char block[1024];
|
||||
int ret = BIO_read(bo, block, 1024);
|
||||
buf = (char *)realloc(buf, size + ret);
|
||||
memcpy(buf + size, block, ret);
|
||||
size += ret;
|
||||
if(ret != 1024)
|
||||
break;
|
||||
}
|
||||
BIO_free(bo);
|
||||
*out = buf;
|
||||
*outlen = size;
|
||||
*out = bio2buf(bo, outlen);
|
||||
}
|
||||
|
||||
bool encrypt(const char *in, unsigned int len, char **out, unsigned int *outlen, bool oaep)
|
||||
@ -714,26 +719,32 @@ public:
|
||||
|
||||
bool createFromPEM(const char *in, unsigned int len)
|
||||
{
|
||||
return false;
|
||||
BIO *bi = BIO_new(BIO_s_mem());
|
||||
BIO_write(bi, in, len);
|
||||
X509 *t = PEM_read_bio_X509(bi, NULL, NULL, NULL);
|
||||
BIO_free(bi);
|
||||
if(!t)
|
||||
return false;
|
||||
fromX509(t);
|
||||
return true;
|
||||
}
|
||||
|
||||
void toDER(char **out, unsigned int *len)
|
||||
void toDER(char **out, unsigned int *outlen)
|
||||
{
|
||||
// extract the raw data
|
||||
//int len = i2d_X509(x, NULL);
|
||||
//QByteArray dat(len);
|
||||
//unsigned char *p = (unsigned char *)dat.data();
|
||||
//i2d_X509(x, &p);
|
||||
//d->dat = dat;
|
||||
|
||||
*out = 0;
|
||||
*len = 0;
|
||||
int len = i2d_X509(x, NULL);
|
||||
unsigned char *buf, *p;
|
||||
buf = (unsigned char *)malloc(len);
|
||||
p = buf;
|
||||
i2d_X509(x, &p);
|
||||
*out = (char *)buf;
|
||||
*outlen = len;
|
||||
}
|
||||
|
||||
void toPEM(char **out, unsigned int *len)
|
||||
void toPEM(char **out, unsigned int *outlen)
|
||||
{
|
||||
*out = 0;
|
||||
*len = 0;
|
||||
BIO *bo = BIO_new(BIO_s_mem());
|
||||
PEM_write_bio_X509(bo, x);
|
||||
*out = bio2buf(bo, outlen);
|
||||
}
|
||||
|
||||
void fromX509(X509 *t)
|
||||
|
25
src/qca.cpp
25
src/qca.cpp
@ -636,7 +636,17 @@ QDateTime Cert::notAfter() const
|
||||
|
||||
QByteArray Cert::toDER() const
|
||||
{
|
||||
return QByteArray();
|
||||
char *out;
|
||||
unsigned int len;
|
||||
d->c->toDER(&out, &len);
|
||||
if(!out)
|
||||
return QByteArray();
|
||||
else {
|
||||
QByteArray buf(len);
|
||||
memcpy(buf.data(), out, len);
|
||||
free(out);
|
||||
return buf;
|
||||
}
|
||||
}
|
||||
|
||||
bool Cert::fromDER(const QByteArray &a)
|
||||
@ -646,7 +656,18 @@ bool Cert::fromDER(const QByteArray &a)
|
||||
|
||||
QString Cert::toPEM() const
|
||||
{
|
||||
return "";
|
||||
char *out;
|
||||
unsigned int len;
|
||||
d->c->toPEM(&out, &len);
|
||||
if(!out)
|
||||
return QByteArray();
|
||||
else {
|
||||
QCString cs;
|
||||
cs.resize(len+1);
|
||||
memcpy(cs.data(), out, len);
|
||||
free(out);
|
||||
return QString::fromLatin1(cs);
|
||||
}
|
||||
}
|
||||
|
||||
bool Cert::fromPEM(const QString &str)
|
||||
|
Loading…
x
Reference in New Issue
Block a user