static int certificate_signature_tag (cxml_handler_t* const _h, cxml_tag_t * const tag) { int rc = 0; cert_cxml_handler_t * h = (cert_cxml_handler_t *)_h; if (cxml_tag_is_open(tag)){ void * key; int alg = 0; if(h->signer_type == 0){ // self signed certificate key = h->verificationKey; if(!key){ fprintf(stderr, "ERROR: Verification key attribute was not provided for self-signed certificate\n"); return -1; } }else{ const char * v = cxml_tag_attr_value(tag, "algorithm"); if (v){ alg = STR2ENUM(_signature_algorithms, v); if (alg < 0){ fprintf(stderr, "%s: Unknown signature algorithm\n", v); return -1; } } if (h->signer == NULL){ fprintf(stderr, "ERROR: Signer certificate name shall be provided\n"); return -1; } // load signer certificate int plen = strlen(_searchPath) + strlen(h->signer); char * path = malloc(plen + 16); cvstrncpy(path, plen + 16, _searchPath, "/", h->signer, ".vkey", NULL); key = ecc_api_key_private_load(path, alg); if (key == NULL){ fprintf(stderr, "%s: Could not load issuing private key\n", path); free(path); return -1; } } cint8_write(alg, &h->ptr, h->end, &rc); rc = ecc_sign(key, h->buf, h->ptr - h->buf - 1, &h->ptr, h->end - h->ptr); } return rc; }
being passed in. Should return a string representation \ of the signature or None\n\ "; static PyObject *py_sign(PyObject *self, PyObject *args, PyObject *kwargs) { PyObject *temp_state, *temp_keypair; ECC_State state; ECC_KeyPair keypair; char *data; if (!PyArg_ParseTuple(args, "zOO", &data, &temp_keypair, &temp_state)) { return NULL; } state = (ECC_State)(PyCObject_AsVoidPtr(temp_state)); keypair = (ECC_KeyPair)(PyCObject_AsVoidPtr(temp_keypair)); ECC_Data result = ecc_sign(data, keypair, state); if ( (result == NULL) || (result->data == NULL) ) Py_RETURN_NONE; return PyString_FromString((const char *)(result->data)); }