git.cweiske.de
/
enigma2.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
version: use compile date if commit date is unavailable. default to "(no branch)"
[enigma2.git]
/
lib
/
base
/
etpm.cpp
diff --git
a/lib/base/etpm.cpp
b/lib/base/etpm.cpp
index c264272440e4dfe8117a893adfb3f573c503b503..9a443e0a50566faaf1b585ef68d2f7241e9fc6ef 100644
(file)
--- a/
lib/base/etpm.cpp
+++ b/
lib/base/etpm.cpp
@@
-8,15
+8,16
@@
#include <unistd.h>
#include <openssl/bn.h>
#include <openssl/sha.h>
#include <unistd.h>
#include <openssl/bn.h>
#include <openssl/sha.h>
-#include <lib/base/e
tpm
.h>
+#include <lib/base/e
error
.h>
-DEFINE_REF(eTPM);
+#include "etpm.h"
eTPM::eTPM()
{
struct sockaddr_un addr;
unsigned char buf[8];
eTPM::eTPM()
{
struct sockaddr_un addr;
unsigned char buf[8];
- unsigned int tag, len;
+ unsigned int tag;
+ size_t len;
unsigned char *val;
level2_cert_read = level3_cert_read = false;
unsigned char *val;
level2_cert_read = level3_cert_read = false;
@@
-25,12
+26,14
@@
eTPM::eTPM()
strcpy(addr.sun_path, TPMD_SOCKET);
fd = socket(PF_UNIX, SOCK_STREAM, 0);
strcpy(addr.sun_path, TPMD_SOCKET);
fd = socket(PF_UNIX, SOCK_STREAM, 0);
- if (fd < 0) {
+ if (fd < 0)
+ {
eDebug("[eTPM] socket error");
return;
}
eDebug("[eTPM] socket error");
return;
}
- if (connect(fd, (const struct sockaddr *)&addr, SUN_LEN(&addr)) < 0) {
+ if (connect(fd, (const struct sockaddr *)&addr, SUN_LEN(&addr)) < 0)
+ {
eDebug("[eTPM] connect error");
return;
}
eDebug("[eTPM] connect error");
return;
}
@@
-57,7
+60,7
@@
eTPM::~eTPM()
}
}
-bool eTPM::send_cmd(enum tpmd_cmd cmd, const void *data,
unsigned in
t len)
+bool eTPM::send_cmd(enum tpmd_cmd cmd, const void *data,
size_
t len)
{
unsigned char buf[len + 4];
{
unsigned char buf[len + 4];
@@
-67,7
+70,8
@@
bool eTPM::send_cmd(enum tpmd_cmd cmd, const void *data, unsigned int len)
buf[3] = (len >> 0) & 0xff;
memcpy(&buf[4], data, len);
buf[3] = (len >> 0) & 0xff;
memcpy(&buf[4], data, len);
- if (write(fd, buf, sizeof(buf)) != (ssize_t)sizeof(buf)) {
+ if (write(fd, buf, sizeof(buf)) != (ssize_t)sizeof(buf))
+ {
fprintf(stderr, "%s: incomplete write\n", __func__);
return false;
}
fprintf(stderr, "%s: incomplete write\n", __func__);
return false;
}
@@
-75,12
+79,13
@@
bool eTPM::send_cmd(enum tpmd_cmd cmd, const void *data, unsigned int len)
return true;
}
return true;
}
-void* eTPM::recv_cmd(unsigned int *tag,
unsigned in
t *len)
+void* eTPM::recv_cmd(unsigned int *tag,
size_
t *len)
{
unsigned char buf[4];
void *val;
{
unsigned char buf[4];
void *val;
- if (read(fd, buf, 4) != 4) {
+ if (read(fd, buf, 4) != 4)
+ {
fprintf(stderr, "%s: incomplete read\n", __func__);
return NULL;
}
fprintf(stderr, "%s: incomplete read\n", __func__);
return NULL;
}
@@
-92,7
+97,13
@@
void* eTPM::recv_cmd(unsigned int *tag, unsigned int *len)
if (val == NULL)
return NULL;
if (val == NULL)
return NULL;
- if (read(fd, val, *len) != (ssize_t)*len) {
+ ssize_t rd = read(fd, val, *len);
+ if (rd < 0)
+ {
+ perror("eTPM::recv_cmd read");
+ free(val);
+ }
+ else if ((size_t)rd != *len) {
fprintf(stderr, "%s: incomplete read\n", __func__);
free(val);
return NULL;
fprintf(stderr, "%s: incomplete read\n", __func__);
free(val);
return NULL;
@@
-101,7
+112,7
@@
void* eTPM::recv_cmd(unsigned int *tag, unsigned int *len)
return val;
}
return val;
}
-void eTPM::parse_data(const unsigned char *data,
unsigned in
t datalen)
+void eTPM::parse_data(const unsigned char *data,
size_
t datalen)
{
unsigned int i;
unsigned int tag;
{
unsigned int i;
unsigned int tag;
@@
-130,32
+141,32
@@
void eTPM::parse_data(const unsigned char *data, unsigned int datalen)
}
}
}
}
-
PyObject *
eTPM::getCert(cert_type type)
+
std::string
eTPM::getCert(cert_type type)
{
if (type == TPMD_DT_LEVEL2_CERT && level2_cert_read)
{
if (type == TPMD_DT_LEVEL2_CERT && level2_cert_read)
- return
PyBuffer_FromMemory(
level2_cert, 210);
+ return
std::string((char*)
level2_cert, 210);
else if (type == TPMD_DT_LEVEL3_CERT && level3_cert_read)
else if (type == TPMD_DT_LEVEL3_CERT && level3_cert_read)
- return PyBuffer_FromMemory(level3_cert, 210);
- return Py_None;
-
+ return std::string((char*)level3_cert, 210);
+ return "";
}
}
-
PyObject *eTPM::challenge(PyObject*
rnd)
+
std::string eTPM::challenge(std::string
rnd)
{
{
- if (
PyString_Check(rnd) && PyString_Size(rnd
) == 8)
+ if (
rnd.length(
) == 8)
{
{
- char* buf = PyString_AsString(rnd);
- if (!send_cmd(TPMD_CMD_COMPUTE_SIGNATURE, buf, 8))
- return Py_None;
+ if (!send_cmd(TPMD_CMD_COMPUTE_SIGNATURE, rnd.c_str(), 8))
+ return "";
- unsigned int tag, len;
+ unsigned int tag;
+ size_t len;
unsigned char *val = (unsigned char*)recv_cmd(&tag, &len);
if (tag != TPMD_CMD_COMPUTE_SIGNATURE)
unsigned char *val = (unsigned char*)recv_cmd(&tag, &len);
if (tag != TPMD_CMD_COMPUTE_SIGNATURE)
- return
Py_None
;
+ return
""
;
- return PyBuffer_FromMemory(val, len);
+ std::string ret((char*)val, len);
+ free(val);
+ return ret;
}
}
- else
- return Py_None;
+ return "";
}
}