<div dir="auto">Hello Werner,<div dir="auto"><br><div dir="auto">          Thank you very much for the response. </div><div dir="auto"><br></div><div dir="auto">The way you have shown in the email chain below, I had done same thing in my code as well. Also, I am passing the data of block length size only to gcry_cipher_encrypt and gcry_cipher_decrypt APIs. </div><div dir="auto">Now, my goal is to check, if the AES256 encryption/decryption is same for libgcrypt and Bcrypt library. Thats the reason I am trying to decrypt the data, which was encrypted using Libgcrypt APIs, using Bcrypt APIs on windows.</div><div dir="auto"> </div><div dir="auto">I am pretty sure if I use windows version of Libgcrypt my problem wont be there at all. </div><div dir="auto"><br></div><div dir="auto">I think I myself have to handle the padding while encrypting using Libgcrypt library APIs. </div><div dir="auto"><br></div><div dir="auto">Since, I have to handle padding in my code, is there any APIs in libgcrypt with which I ensure that I am padding the data in standard way? Are there any APIs in Libgcrypt using which I can get padded data along with my plain text data which I can encrypt using gcry_cipher_encrypt? </div><div dir="auto"><br></div><div dir="auto"><br></div><div dir="auto">Thank you in advance. </div><div dir="auto">Best Regards, </div><div dir="auto">Mandar</div><div dir="auto"><br></div></div><br><br><div class="gmail_quote" dir="auto"><div dir="ltr" class="gmail_attr">On Fri, 5 Jun 2020, 2:05 pm Werner Koch, <<a href="mailto:wk@gnupg.org">wk@gnupg.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue,  2 Jun 2020 16:57, Mandar Apte said:<br>
> On windows I am using Bcrypt library which also supports AES 256 in CBC<br>
> mode.<br>
<br>
FWIW, Libgcrypt runs very well on Windows.<br>
<br>
> Hence, I wanted to check, if the Libgcrypt APIs are doing padding<br>
> internally since I am not passing any such instruction to the Libgcrypt<br>
> library explicitly?<br>
<br>
No, Libgcrypt does not do any padding and it expects complete blocks.<br>
gcry_cipher_get_algo_blklen() tells you the block length of the cipher<br>
algorithm.<br>
<br>
There is a flag to enable ciphertext stealing (GCRY_CIPHER_CBC_CTS) but<br>
in this case you need to pass the entire plaintext/ciphertext to the<br>
encrypt/decrypt function; there is no way to do this incremental.<br>
<br>
For the standard padding as used in CMS (S/MIME), you need to handle the<br>
padding in your code; here is a snippet<br>
<br>
 if (last_block_is_incomplete)<br>
   { <br>
      int i,<br>
      int npad = blklen - (buflen % blklen);<br>
<br>
      p = buffer;<br>
      for (n=buflen, i=0; n < bufsize && i < npad; n++, i++)<br>
        p[n] = npad;<br>
      gcry_cipher_encrypt (chd, buffer, n, buffer, n);<br>
    }<br>
<br>
<br>
<br>
Shalom-Salam,<br>
<br>
   Werner<br>
<br>
<br>
--<br>
Die Gedanken sind frei.  Ausnahmen regelt ein Bundesgesetz.<br>
</blockquote></div></div>