int newepoch_gen(char *out,epoch_item_t *ep,setup_params_t *setup) { char *accstr = NULL; int elem_size = 0; //update the accumulator acc_update(ep->acc,ep->epls.act,ep->epls.rvk,setup); ep->epoch++; //sign epoch revoked list sign_list_rsa(ep->s_rvk,setup,ep->epls.rvk); //sign epoch added list sign_list_rsa(ep->s_new,setup,ep->epls.act); elem_size = element_length_in_bytes(ep->acc->elem); accstr = (char *) malloc(elem_size); if(!accstr) { pbgp_error("newepoch :: %s\n",strerror(errno)); return -1; } element_snprintf(accstr,elem_size,"%B",ep->acc->elem); //sign accumulator value sign_rsa(ep->s_acc,setup,(uint8_t *)accstr); //dump envelope newepoch_save(out,ep,setup); free(accstr); return 0; }
__attribute__((visibility("default"))) int openssl_sign_data( const keymaster0_device_t*, const void* params, const uint8_t* keyBlob, const size_t keyBlobLength, const uint8_t* data, const size_t dataLength, uint8_t** signedData, size_t* signedDataLength) { if (data == NULL) { ALOGW("input data to sign == NULL"); return -1; } else if (signedData == NULL || signedDataLength == NULL) { ALOGW("output signature buffer == NULL"); return -1; } Unique_EVP_PKEY pkey(unwrap_key(keyBlob, keyBlobLength)); if (pkey.get() == NULL) { return -1; } int type = EVP_PKEY_type(pkey->type); if (type == EVP_PKEY_DSA) { const keymaster_dsa_sign_params_t* sign_params = reinterpret_cast<const keymaster_dsa_sign_params_t*>(params); return sign_dsa(pkey.get(), const_cast<keymaster_dsa_sign_params_t*>(sign_params), data, dataLength, signedData, signedDataLength); } else if (type == EVP_PKEY_EC) { const keymaster_ec_sign_params_t* sign_params = reinterpret_cast<const keymaster_ec_sign_params_t*>(params); return sign_ec(pkey.get(), const_cast<keymaster_ec_sign_params_t*>(sign_params), data, dataLength, signedData, signedDataLength); } else if (type == EVP_PKEY_RSA) { const keymaster_rsa_sign_params_t* sign_params = reinterpret_cast<const keymaster_rsa_sign_params_t*>(params); return sign_rsa(pkey.get(), const_cast<keymaster_rsa_sign_params_t*>(sign_params), data, dataLength, signedData, signedDataLength); } else { ALOGW("Unsupported key type"); return -1; } }