Concatenate the tag to the output buffer
Concatenate the tag to the output buffer.
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 9efad55..11a805e 100755
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -1508,6 +1508,9 @@
if( alg == PSA_ALG_GCM )
{
mbedtls_gcm_context gcm;
+ if( ciphertext_size < ( plaintext_length + sizeof( tag ) ) )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+
mbedtls_gcm_init( &gcm );
ret = mbedtls_gcm_setkey( &gcm, cipher_info->base->cipher,
( const unsigned char * )slot->data.raw.data, key_bits );
@@ -1528,12 +1531,16 @@
return( mbedtls_to_psa_error( ret ) );
}
- //TODO: append the tag to the output buffer and update the output buffer length.
mbedtls_gcm_free( &gcm );
}
else if( alg == PSA_ALG_CCM )
{
mbedtls_ccm_context ccm;
+ if( ciphertext_size < ( plaintext_length + sizeof( tag ) ) )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+ if( nonce_length < 7 || nonce_length > 13 )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+
mbedtls_ccm_init( &ccm );
ret = mbedtls_ccm_setkey( &ccm, cipher_info->base->cipher,
( const unsigned char * )slot->data.raw.data, key_bits );
@@ -1554,9 +1561,10 @@
return( mbedtls_to_psa_error( ret ) );
}
- //TODO: append the tag to the output buffer and update the output buffer length.
mbedtls_ccm_free( &ccm );
}
+ memcpy( ciphertext + plaintext_length, tag, sizeof( tag ) );
+ return( PSA_SUCCESS );
}
psa_status_t psa_aead_decrypt( psa_key_slot_t key,
@@ -1598,6 +1606,9 @@
if( alg == PSA_ALG_GCM )
{
mbedtls_gcm_context gcm;
+ if( plaintext_size < ( ciphertext_length + 8 + sizeof( tag ) ) )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+
mbedtls_gcm_init( &gcm );
ret = mbedtls_gcm_setkey( &gcm, cipher_info->base->cipher,
( const unsigned char * )slot->data.raw.data, key_bits );
@@ -1618,12 +1629,17 @@
return( mbedtls_to_psa_error( ret ) );
}
- //TODO: append the tag to the output buffer and update the output buffer length.
mbedtls_gcm_free( &gcm );
+ memcpy( plaintext + ciphertext_length + 8, tag, sizeof( tag ) );
}
else if( alg == PSA_ALG_CCM )
{
mbedtls_ccm_context ccm;
+ if( plaintext_size < ( ciphertext_length + sizeof( tag ) ) )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+ if( nonce_length < 7 || nonce_length > 13 )
+ return( PSA_ERROR_INVALID_ARGUMENT );
+
mbedtls_ccm_init( &ccm );
ret = mbedtls_ccm_setkey( &ccm, cipher_info->base->cipher,
( const unsigned char * )slot->data.raw.data, key_bits );
@@ -1644,10 +1660,9 @@
return( mbedtls_to_psa_error( ret ) );
}
- //TODO: append the tag to the output buffer and update the output buffer length.
mbedtls_ccm_free( &ccm );
+ memcpy( plaintext + ciphertext_length, tag, sizeof( tag ) );
}
-
return( PSA_SUCCESS );
}