Exemple #1
0
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;
    }
}