【发布时间】:2018-08-07 18:34:01
【问题描述】:
我正在尝试扩展 libhydrogen(可在此处找到的开源代码:https://github.com/jedisct1/libhydrogen/)以支持对 Python 中底层库的调用。但是,我遇到了一个奇怪的问题。 具体来说,我有以下代码:
static PyObject* crypto_secretbox_encrypt(PyObject* self, PyObject* args){
char* m;
size_t mlen;
uint64_t msg_id;
char *ctx;
size_t ctx_len;
const uint8_t *key; //this shouldn't matter its secret
size_t key_len;
PyArg_ParseTuple(args, "s#|K|s#|s#", &m, &mlen, &msg_id, &ctx, &ctx_len, &key, &key_len); //only s# accepts null bytes, need to random pointers to store lengths
//printf("Parsed \n");
//printf("MSG: %s, MSG_ID: %" PRIu64 ", CTX: %s\n", m, msg_id, ctx);
if(ctx_len != hydro_secretbox_CONTEXTBYTES){
PyErr_Format(PyExc_ValueError, "Context not of correct size: Received %lu bytes", ctx_len);
return NULL;
}
if(key_len != hydro_secretbox_KEYBYTES){
PyErr_Format(PyExc_ValueError, "Key not of correct size: Received %lu bytes", key_len);
return NULL;
}
它能够成功解析ctx的长度,但是,当它到达key时就会抛出错误,
File "cryptotest.py", line 7, in <module>
c1 = crypto.secretbox_encrypt("message1", 0, "\x00"*8, '\x00'*32);
ValueError: Key not of correct size: Received 140123308032032 bytes
关于为什么我无法成功解析密钥长度的任何想法?
【问题讨论】:
标签: python c python-c-api python-extensions