AES-XTS is defined in NIST 800-38E
As for your question on GF multiplication, unfortunately I don’t have a refernce for it.
Regards,
Mbed TLS Support
Ron
Link to AES XTS implementation which you gave also has link to how multiplication should be done in references[2].
But the problem what we are facing is:
There is a standard for AES XTS IEEE P1619/D16 and that has code implementation (See Annex C) for generation of IV for the next AES block using GF(2^128) multiplication. There is a difference in multiplication operation mentioned in standard and MBEDTLS AES XTS implementation Hence if same plaintext is given to two implementations generated cipher text is different.
One difference I could see is the way multiplication is performed in both the implementations. Standard code does operation on one byte at a time whereas MBEDTLS multiplication implementation does operation on 64 bits (8 bytes). We need to know which standard/RFC followed by MBEDTLS AES XTS for multiplication which is implemented in mbedtls_gf128mul_x_ble function in aes.c file.
Can you please help us to figure out which implementation is correct and should be used?
I’ve just implemented this on our system.
From what I can see the mbedtls implementation matches that in P1619/D16.
The test vectors/keys etc in mbedtls are the same and give the same results as in the document.
Have you run the self test program to make sure nothing else is wrong ?