handle->tag = cc->tag;
handle->setiv = cc->setiv;
handle->getiv = cc->getiv;
+ handle->setkey = cc->setkey;
/* if cc->init() returns GNUTLS_E_NEED_FALLBACK we
* use the default ciphers */
handle->tag = _gnutls_cipher_ops.tag;
handle->setiv = _gnutls_cipher_ops.setiv;
handle->getiv = _gnutls_cipher_ops.getiv;
+ handle->setkey = _gnutls_cipher_ops.setkey;
/* otherwise use generic cipher interface
*/
typedef int (*cipher_setiv_func) (void *hd, const void *iv, size_t);
typedef int (*cipher_getiv_func) (void *hd, void *iv, size_t);
+typedef int (*cipher_setkey_func) (void *hd, const void *key, size_t keysize);
+
typedef void (*cipher_tag_func) (void *hd, void *tag, size_t);
typedef struct {
cipher_tag_func tag;
cipher_setiv_func setiv;
cipher_getiv_func getiv;
+ cipher_setkey_func setkey;
cipher_deinit_func deinit;
} cipher_hd_st;
return handle->getiv(handle->handle, iv, ivlen);
}
+inline static int _gnutls_cipher_setkey(const cipher_hd_st * handle,
+ const void *key, size_t keylen)
+{
+ return handle->setkey(handle->handle, key, keylen);
+}
+
inline static int
_gnutls_cipher_encrypt2(const cipher_hd_st * handle, const void *text,
size_t textlen, void *ciphertext,
mac->output = cc->output;
mac->deinit = cc->deinit;
mac->copy = cc->copy;
+ mac->setkey = cc->setkey;
return 0;
}
mac->output = _gnutls_mac_ops.output;
mac->deinit = _gnutls_mac_ops.deinit;
mac->copy = _gnutls_mac_ops.copy;
+ mac->setkey = _gnutls_mac_ops.setkey;
if (_gnutls_mac_ops.setkey(mac->handle, key, keylen) < 0) {
gnutls_assert();
size_t digestsize);
typedef void (*hash_deinit_func) (void *handle);
typedef void *(*copy_func) (const void *handle);
+typedef int (*setkey_func) (void *handle, const void *key, size_t keysize);
typedef struct {
const mac_entry_st *e;
output_func output;
hash_deinit_func deinit;
copy_func copy;
+ setkey_func setkey;
void *handle;
} mac_hd_st;
return 0;
}
+inline static int
+_gnutls_mac_setkey(mac_hd_st * handle, const void *key, size_t key_size)
+{
+ return handle->setkey(handle->handle, key, key_size);
+}
+
+
void _gnutls_mac_deinit(mac_hd_st * handle, void *digest);
/* Hash interface */