/*
* Copyright (C) 2017 Nikos Mavrogiannopoulos
*
* Author: Nikos Mavrogiannopoulos
*
* This file is part of GnuTLS.
*
* The GnuTLS is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful, but
* WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see
*
*/
/* This file contains the definitions of OpenPGP stub functions
* for ABI compatibility.
*/
#include "gnutls_int.h"
#include
#include
int gnutls_openpgp_crt_init(gnutls_openpgp_crt_t * key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
void gnutls_openpgp_crt_deinit(gnutls_openpgp_crt_t key)
{
return;
}
int gnutls_openpgp_crt_import(gnutls_openpgp_crt_t key,
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_export(gnutls_openpgp_crt_t key,
gnutls_openpgp_crt_fmt_t format,
void *output_data,
size_t * output_data_size)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_export2(gnutls_openpgp_crt_t key,
gnutls_openpgp_crt_fmt_t format,
gnutls_datum_t * out)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_print(gnutls_openpgp_crt_t cert,
gnutls_certificate_print_formats_t
format, gnutls_datum_t * out)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_key_usage(gnutls_openpgp_crt_t key,
unsigned int *key_usage)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_fingerprint(gnutls_openpgp_crt_t key,
void *fpr, size_t * fprlen)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_fingerprint(gnutls_openpgp_crt_t
key,
unsigned int idx,
void *fpr, size_t * fprlen)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_name(gnutls_openpgp_crt_t key,
int idx, char *buf, size_t * sizeof_buf)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
gnutls_pk_algorithm_t
gnutls_openpgp_crt_get_pk_algorithm(gnutls_openpgp_crt_t key,
unsigned int *bits)
{
return GNUTLS_PK_UNKNOWN;
}
int gnutls_openpgp_crt_get_version(gnutls_openpgp_crt_t key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
time_t gnutls_openpgp_crt_get_creation_time(gnutls_openpgp_crt_t key)
{
return (time_t)-1;
}
time_t gnutls_openpgp_crt_get_expiration_time(gnutls_openpgp_crt_t key)
{
return (time_t)-1;
}
int gnutls_openpgp_crt_get_key_id(gnutls_openpgp_crt_t key,
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_check_hostname(gnutls_openpgp_crt_t key,
const char *hostname)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_check_hostname2(gnutls_openpgp_crt_t key,
const char *hostname, unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_openpgp_crt_check_email(gnutls_openpgp_crt_t key, const char *email, unsigned flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_revoked_status(gnutls_openpgp_crt_t key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_count(gnutls_openpgp_crt_t key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_idx(gnutls_openpgp_crt_t key,
const gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_revoked_status
(gnutls_openpgp_crt_t key, unsigned int idx)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
gnutls_pk_algorithm_t
gnutls_openpgp_crt_get_subkey_pk_algorithm(gnutls_openpgp_crt_t
key,
unsigned int idx,
unsigned int *bits)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
time_t
gnutls_openpgp_crt_get_subkey_creation_time
(gnutls_openpgp_crt_t key, unsigned int idx)
{
return (time_t)-1;
}
time_t
gnutls_openpgp_crt_get_subkey_expiration_time
(gnutls_openpgp_crt_t key, unsigned int idx)
{
return (time_t)-1;
}
int gnutls_openpgp_crt_get_subkey_id(gnutls_openpgp_crt_t key,
unsigned int idx,
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_usage(gnutls_openpgp_crt_t key,
unsigned int idx,
unsigned int *key_usage)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_pk_dsa_raw(gnutls_openpgp_crt_t
crt, unsigned int idx,
gnutls_datum_t * p,
gnutls_datum_t * q,
gnutls_datum_t * g,
gnutls_datum_t * y)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_subkey_pk_rsa_raw(gnutls_openpgp_crt_t
crt, unsigned int idx,
gnutls_datum_t * m,
gnutls_datum_t * e)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_pk_dsa_raw(gnutls_openpgp_crt_t crt,
gnutls_datum_t * p,
gnutls_datum_t * q,
gnutls_datum_t * g,
gnutls_datum_t * y)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_pk_rsa_raw(gnutls_openpgp_crt_t crt,
gnutls_datum_t * m,
gnutls_datum_t * e)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_preferred_key_id(gnutls_openpgp_crt_t
key,
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_openpgp_crt_set_preferred_key_id(gnutls_openpgp_crt_t key,
const
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/* privkey stuff.
*/
int gnutls_openpgp_privkey_init(gnutls_openpgp_privkey_t * key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
void gnutls_openpgp_privkey_deinit(gnutls_openpgp_privkey_t key)
{
return;
}
gnutls_pk_algorithm_t
gnutls_openpgp_privkey_get_pk_algorithm
(gnutls_openpgp_privkey_t key, unsigned int *bits)
{
return GNUTLS_PK_UNKNOWN;
}
gnutls_sec_param_t
gnutls_openpgp_privkey_sec_param(gnutls_openpgp_privkey_t key)
{
return 0;
}
int gnutls_openpgp_privkey_import(gnutls_openpgp_privkey_t key,
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t format,
const char *password,
unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_fingerprint(gnutls_openpgp_privkey_t
key, void *fpr,
size_t * fprlen)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_subkey_fingerprint
(gnutls_openpgp_privkey_t key, unsigned int idx, void *fpr,
size_t * fprlen)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_key_id(gnutls_openpgp_privkey_t key,
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_subkey_count(gnutls_openpgp_privkey_t key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_subkey_idx(gnutls_openpgp_privkey_t
key,
const
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_subkey_revoked_status
(gnutls_openpgp_privkey_t key, unsigned int idx)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_revoked_status
(gnutls_openpgp_privkey_t key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
gnutls_pk_algorithm_t
gnutls_openpgp_privkey_get_subkey_pk_algorithm
(gnutls_openpgp_privkey_t key, unsigned int idx, unsigned int *bits)
{
return GNUTLS_PK_UNKNOWN;
}
time_t
gnutls_openpgp_privkey_get_subkey_expiration_time
(gnutls_openpgp_privkey_t key, unsigned int idx)
{
return (time_t)-1;
}
int gnutls_openpgp_privkey_get_subkey_id(gnutls_openpgp_privkey_t
key, unsigned int idx,
gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
time_t
gnutls_openpgp_privkey_get_subkey_creation_time
(gnutls_openpgp_privkey_t key, unsigned int idx)
{
return (time_t)-1;
}
int gnutls_openpgp_privkey_export_subkey_dsa_raw
(gnutls_openpgp_privkey_t pkey, unsigned int idx,
gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * g,
gnutls_datum_t * y, gnutls_datum_t * x)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_export_subkey_rsa_raw
(gnutls_openpgp_privkey_t pkey, unsigned int idx,
gnutls_datum_t * m, gnutls_datum_t * e, gnutls_datum_t * d,
gnutls_datum_t * p, gnutls_datum_t * q, gnutls_datum_t * u)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_export_dsa_raw(gnutls_openpgp_privkey_t
pkey, gnutls_datum_t * p,
gnutls_datum_t * q,
gnutls_datum_t * g,
gnutls_datum_t * y,
gnutls_datum_t * x)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_export_rsa_raw(gnutls_openpgp_privkey_t
pkey, gnutls_datum_t * m,
gnutls_datum_t * e,
gnutls_datum_t * d,
gnutls_datum_t * p,
gnutls_datum_t * q,
gnutls_datum_t * u)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_export(gnutls_openpgp_privkey_t key,
gnutls_openpgp_crt_fmt_t format,
const char *password,
unsigned int flags,
void *output_data,
size_t * output_data_size)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_export2(gnutls_openpgp_privkey_t key,
gnutls_openpgp_crt_fmt_t format,
const char *password,
unsigned int flags,
gnutls_datum_t * out)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_set_preferred_key_id
(gnutls_openpgp_privkey_t key, const gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_privkey_get_preferred_key_id
(gnutls_openpgp_privkey_t key, gnutls_openpgp_keyid_t keyid)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_get_auth_subkey(gnutls_openpgp_crt_t crt,
gnutls_openpgp_keyid_t
keyid, unsigned int flag)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/* Keyring stuff.
*/
int gnutls_openpgp_keyring_init(gnutls_openpgp_keyring_t * keyring)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
void gnutls_openpgp_keyring_deinit(gnutls_openpgp_keyring_t keyring)
{
return;
}
int gnutls_openpgp_keyring_import(gnutls_openpgp_keyring_t keyring,
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_keyring_check_id(gnutls_openpgp_keyring_t ring,
const gnutls_openpgp_keyid_t
keyid, unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_verify_ring(gnutls_openpgp_crt_t key,
gnutls_openpgp_keyring_t
keyring, unsigned int flags,
unsigned int *verify
/* the output of the verification */
)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_crt_verify_self(gnutls_openpgp_crt_t key,
unsigned int flags,
unsigned int *verify)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_keyring_get_crt(gnutls_openpgp_keyring_t ring,
unsigned int idx,
gnutls_openpgp_crt_t * cert)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_openpgp_keyring_get_crt_count(gnutls_openpgp_keyring_t ring)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
void
gnutls_openpgp_set_recv_key_function(gnutls_session_t session,
gnutls_openpgp_recv_key_func func)
{
return;
}
int gnutls_certificate_set_openpgp_key
(gnutls_certificate_credentials_t res,
gnutls_openpgp_crt_t crt, gnutls_openpgp_privkey_t pkey)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_certificate_get_openpgp_key(gnutls_certificate_credentials_t res,
unsigned index,
gnutls_openpgp_privkey_t *key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_certificate_get_openpgp_crt(gnutls_certificate_credentials_t res,
unsigned index,
gnutls_openpgp_crt_t **crt_list,
unsigned *crt_list_size)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_certificate_set_openpgp_key_file
(gnutls_certificate_credentials_t res, const char *certfile,
const char *keyfile, gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_certificate_set_openpgp_key_mem
(gnutls_certificate_credentials_t res,
const gnutls_datum_t * cert, const gnutls_datum_t * key,
gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_certificate_set_openpgp_key_file2
(gnutls_certificate_credentials_t res, const char *certfile,
const char *keyfile, const char *subkey_id,
gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int
gnutls_certificate_set_openpgp_key_mem2
(gnutls_certificate_credentials_t res,
const gnutls_datum_t * cert, const gnutls_datum_t * key,
const char *subkey_id, gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_certificate_set_openpgp_keyring_mem
(gnutls_certificate_credentials_t c, const unsigned char *data,
size_t dlen, gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
int gnutls_certificate_set_openpgp_keyring_file
(gnutls_certificate_credentials_t c, const char *file,
gnutls_openpgp_crt_fmt_t format)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pubkey_import_openpgp:
* @key: The public key
* @crt: The certificate to be imported
* @flags: should be zero
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 2.12.0
**/
int gnutls_pubkey_import_openpgp(gnutls_pubkey_t key,
gnutls_openpgp_crt_t crt,
unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pubkey_import_openpgp_raw:
* @pkey: The public key
* @data: The public key data to be imported
* @format: The format of the public key
* @keyid: The key id to use (optional)
* @flags: Should be zero
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.1.3
**/
int gnutls_pubkey_import_openpgp_raw(gnutls_pubkey_t pkey,
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t
format,
const gnutls_openpgp_keyid_t
keyid, unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pubkey_get_key_id:
* @key: Holds the public key
* @flags: should be one of the flags from %gnutls_keyid_flags_t
* @output_data: will contain the key ID
* @output_data_size: holds the size of output_data (and will be
* replaced by the actual size of parameters)
* @subkey: ignored
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 2.12.0
**/
int
gnutls_pubkey_get_openpgp_key_id(gnutls_pubkey_t key,
unsigned int flags,
unsigned char *output_data,
size_t * output_data_size,
unsigned int *subkey)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_privkey_import_openpgp:
* @pkey: The private key
* @key: The private key to be imported
* @flags: Flags for the import
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 2.12.0
**/
int gnutls_privkey_import_openpgp(gnutls_privkey_t pkey,
gnutls_openpgp_privkey_t key,
unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_privkey_export_openpgp:
* @pkey: The private key
* @key: Location for the key to be exported.
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.4.0
*/
int gnutls_privkey_export_openpgp(gnutls_privkey_t pkey,
gnutls_openpgp_privkey_t * key)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_privkey_import_openpgp_raw:
* @pkey: The private key
* @data: The private key data to be imported
* @format: The format of the private key
* @keyid: The key id to use (optional)
* @password: A password (optional)
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.1.0
**/
int gnutls_privkey_import_openpgp_raw(gnutls_privkey_t pkey,
const gnutls_datum_t * data,
gnutls_openpgp_crt_fmt_t
format,
const gnutls_openpgp_keyid_t
keyid, const char *password)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pcert_import_openpgp_raw:
* @pcert: The pcert structure
* @cert: The raw certificate to be imported
* @format: The format of the certificate
* @keyid: The key ID to use (NULL for the master key)
* @flags: zero for now
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.0
**/
int gnutls_pcert_import_openpgp_raw(gnutls_pcert_st * pcert,
const gnutls_datum_t * cert,
gnutls_openpgp_crt_fmt_t
format,
gnutls_openpgp_keyid_t keyid,
unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pcert_import_openpgp:
* @pcert: The pcert structure
* @crt: The raw certificate to be imported
* @flags: zero for now
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.0
**/
int gnutls_pcert_import_openpgp(gnutls_pcert_st * pcert,
gnutls_openpgp_crt_t crt,
unsigned int flags)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_pcert_export_x509:
* @pcert: The pcert structure.
* @crt: An initialized #gnutls_openpgp_crt_t.
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.4.0
*/
int gnutls_pcert_export_openpgp(gnutls_pcert_st * pcert,
gnutls_openpgp_crt_t * crt)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_openpgp_privkey_sign_hash:
* @session: is a gnutls session
* @status: is ignored
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*/
void
gnutls_openpgp_send_cert(gnutls_session_t session,
gnutls_openpgp_crt_status_t status)
{
return;
}
/**
* gnutls_certificate_get_peers_subkey_id:
* @session: is a gnutls session
* @id: will contain the ID
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*
* Since: 3.1.3
**/
int gnutls_certificate_get_peers_subkey_id(gnutls_session_t session,
gnutls_datum_t * id)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}
/**
* gnutls_openpgp_privkey_sign_hash:
* @key: Holds the key
* @hash: holds the data to be signed
* @signature: will contain newly allocated signature
*
* This function is no-op.
*
* Returns: %GNUTLS_E_UNIMPLEMENTED_FEATURE.
*/
int
gnutls_openpgp_privkey_sign_hash(gnutls_openpgp_privkey_t key,
const gnutls_datum_t * hash,
gnutls_datum_t * signature)
{
return GNUTLS_E_UNIMPLEMENTED_FEATURE;
}