* @GNUTLS_CIPHER_AES_192_GCM: AES in GCM mode with 192-bit keys (AEAD).
* @GNUTLS_CIPHER_AES_128_SIV_GCM: AES in SIV-GCM mode with 128-bit key.
* @GNUTLS_CIPHER_AES_256_SIV_GCM: AES in SIV-GCM mode with 256-bit key.
- * @GNUTLS_CIPHER_AES_128_CFB8: AES in CFB mode with 128-bit keys.
- * @GNUTLS_CIPHER_AES_192_CFB8: AES in CFB mode with 192-bit keys.
- * @GNUTLS_CIPHER_AES_256_CFB8: AES in CFB mode with 256-bit keys.
+ * @GNUTLS_CIPHER_AES_128_CFB: AES in CFB mode with 128-bit keys.
+ * @GNUTLS_CIPHER_AES_192_CFB: AES in CFB mode with 192-bit keys.
+ * @GNUTLS_CIPHER_AES_256_CFB: AES in CFB mode with 256-bit keys.
*
* Enumeration of different symmetric encryption algorithms.
*/
if (cipher == GNUTLS_CIPHER_UNKNOWN)
return TSS2_ESYS_RC_NOT_IMPLEMENTED;
- gnutls_datum_t key_datum = { key, key_bits / 8 };
+ gnutls_datum_t key_datum = { key, (key_bits + 7) / 8 };
gnutls_datum_t iv_datum = { iv, tpm2_aes_iv_size };
if (gnutls_cipher_init(&handle, cipher, &key_datum, &iv_datum) < 0)
if (ret < 0)
return TSS2_ESYS_RC_GENERAL_FAILURE;
- ret = gnutls_privkey_generate(privkey, GNUTLS_PK_EC, 256, 0);
+ ret = gnutls_privkey_generate(privkey, GNUTLS_PK_EC,
+ GNUTLS_CURVE_TO_BITS(curve), 0);
if (ret < 0)
goto fail;
if (pub_tpm_key->publicArea.parameters.rsaDetail.exponent != 0) {
uint32_t exp =
pub_tpm_key->publicArea.parameters.rsaDetail.exponent;
- exponent.size = 3;
- exponent.data = gnutls_malloc(3);
- exponent.data[0] = (exp >> 16) & 0xFF;
- exponent.data[1] = (exp >> 8) & 0xFF;
- exponent.data[2] = exp & 0xFF;
+
+ size_t exp_size = 0;
+ if (exp < 256) {
+ exp_size = 1;
+ } else if (exp < 65536) {
+ exp_size = 2;
+ } else {
+ exp_size = 3;
+ }
+
+ exponent.size = exp_size;
+ exponent.data = gnutls_malloc(exp_size);
+ if (!exponent.data)
+ return TSS2_ESYS_RC_GENERAL_FAILURE;
+
+ for (size_t i = 0; i < exp_size; i++) {
+ exponent.data[exp_size - 1 - i] = (exp >> (8 * i)) &
+ 0xFF;
+ }
} else {
- // Default exponent is 65537
static uint8_t default_exp[] = { 0x01, 0x00, 0x01 };
exponent.data = default_exp;
exponent.size = sizeof(default_exp);