<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">I thought I would post one more code set, save some other programmers some time.<div><br></div><div>If you are coming from bouncy castle on java.  (which you should be to avoid the export requirement thing)</div><div><br></div><div>Your java code should probably look something like this, maybe this can be optimized, stick the cipher in the constructor, not an issue for me at the moment, not sure why I was worried len would not be getOutputSize():</div><div><br></div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">package</span> piratecore.crypt;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> java.util.Arrays;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> javax.crypto.spec.IvParameterSpec;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> javax.crypto.spec.SecretKeySpec;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.BufferedBlockCipher;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.CipherParameters;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.engines.AESEngine;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.modes.CBCBlockCipher;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.paddings.BlockCipherPadding;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.paddings.PKCS7Padding;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.params.KeyParameter;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> org.bouncycastle.crypto.params.ParametersWithIV;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">import</span> piratecore.exceptions.CryptoException;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span style="color: #a1006a">public</span> <span style="color: #a1006a">class</span> CryptorAES <span style="color: #a1006a">extends</span> Cryptor</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre"> </span>CipherParameters <span style="color: #3c00d3">params</span>;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">  </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #a1006a">public</span> CryptorAES (SecretKeySpec secretKey, IvParameterSpec iv)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(46, 149, 113); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">         </span></span>// setup cipher parameters with key and IV</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">  </span>    KeyParameter keyParam = <span style="color: #a1006a">new</span> KeyParameter(secretKey.getEncoded());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>    <span style="color: #3c00d3">params</span> = <span style="color: #a1006a">new</span> ParametersWithIV(keyParam, iv.getIV());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">   </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(119, 119, 119); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">      </span></span>@Override</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #a1006a">public</span> <span style="color: #a1006a">byte</span>[] decrypt(<span style="color: #a1006a">byte</span>[] bytes) <span style="color: #a1006a">throws</span> CryptoException</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(161, 0, 106); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span>try</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    BlockCipherPadding padding = <span style="color: #a1006a">new</span> PKCS7Padding();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    BufferedBlockCipher cipher = <span style="color: #a1006a">new</span> PaddedBufferedBlockCipher(</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">              </span>            <span style="color: #a1006a">new</span> CBCBlockCipher(<span style="color: #a1006a">new</span> AESEngine()), padding);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">              </span>    cipher.reset();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span>    cipher.init(<span style="color: #a1006a">false</span>, <span style="color: #3c00d3">params</span>);<span class="Apple-tab-span" style="white-space:pre">               </span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">            </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">byte</span>[] out = <span style="color: #a1006a">new</span> <span style="color: #a1006a">byte</span>[cipher.getOutputSize(bytes.<span style="color: #3c00d3">length</span>)];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    <span style="color: #a1006a">int</span> len = cipher.processBytes(bytes, 0, bytes.<span style="color: #3c00d3">length</span>, out, 0);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    len += cipher.doFinal(out, len);</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">              </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">if</span> (len == out.<span style="color: #3c00d3">length</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    <span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #a1006a">return</span> out;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">               </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">return</span> Arrays.copyOf(out, len);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #a1006a">catch</span> (Exception e)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #a1006a">throw</span> <span style="color: #a1006a">new</span> CryptoException(e);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(119, 119, 119); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"> </span></span>@Override</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #a1006a">public</span> <span style="color: #a1006a">byte</span>[] encrypt(<span style="color: #a1006a">byte</span>[] bytes) <span style="color: #a1006a">throws</span> CryptoException</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">       </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; color: rgb(161, 0, 106); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span>try</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    BlockCipherPadding padding = <span style="color: #a1006a">new</span> PKCS7Padding();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    BufferedBlockCipher cipher = <span style="color: #a1006a">new</span> PaddedBufferedBlockCipher(</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">              </span>            <span style="color: #a1006a">new</span> CBCBlockCipher(<span style="color: #a1006a">new</span> AESEngine()), padding);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; min-height: 15px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">              </span>    cipher.reset();</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span>    cipher.init(<span style="color: #a1006a">true</span>, <span style="color: #3c00d3">params</span>);<span class="Apple-tab-span" style="white-space:pre">                </span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">            </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">byte</span>[] out = <span style="color: #a1006a">new</span> <span style="color: #a1006a">byte</span>[cipher.getOutputSize(bytes.<span style="color: #3c00d3">length</span>)];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    <span style="color: #a1006a">int</span> len = cipher.processBytes(bytes, 0, bytes.<span style="color: #3c00d3">length</span>, out, 0);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    len += cipher.doFinal(out, len);</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">              </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">if</span> (len == out.<span style="color: #3c00d3">length</span>)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">         </span>    <span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #a1006a">return</span> out;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Monaco; min-height: 15.0px"><span class="Apple-tab-span" style="white-space:pre">               </span>    <br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>    <span style="color: #a1006a">return</span> Arrays.copyOf(out, len);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">          </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span><span style="color: #a1006a">catch</span> (Exception e)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">            </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                        </span><span style="color: #a1006a">throw</span> <span style="color: #a1006a">new</span> CryptoException(e);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">                </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; "><span class="Apple-tab-span" style="white-space:pre">        </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Monaco; ">}</div></div><div><br></div><div><br></div><div>And your botan code should probably look something like this:</div><div><br></div><div>(header)</div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(126, 71, 36); ">#ifndef __pirate_core_crypt_CryptorAES_h__</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(126, 71, 36); ">#define __pirate_core_crypt_CryptorAES_h__</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #7e4724">#include </span>"Cryptor.h"</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #cd00a6">namespace</span> pirate {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">namespace<span style="color: #000000"> core {</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">namespace<span style="color: #000000"> crypt {</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #cd00a6">class</span> CryptorAES : <span style="color: #cd00a6">public</span> <span style="color: #418288">Cryptor</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">protected<span style="color: #000000">:</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span><span style="color: #418288">Key</span> key;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">        </span><span style="color: #418288">IV</span> iv;</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">     </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">public<span style="color: #000000">:</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span><span style="color: #cd00a6">static</span> <span style="color: #cd00a6">const</span> <span style="color: #418288">IV</span> NullIV;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">public<span style="color: #000000">:</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span>CryptorAES (<span style="color: #cd00a6">const</span> <span style="color: #418288">Key</span> &_key, <span style="color: #cd00a6">const</span> <span style="color: #418288">IV</span> &_iv) :</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">             </span><span style="color: #418288">key</span>(_key),</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">              </span><span style="color: #418288">iv</span>(_iv)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre"> </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre"> </span>}</div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">    </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">       </span><span style="color: #cd00a6">virtual</span> <span style="color: #418288">Block</span> encrypt (<span style="color: #cd00a6">const</span> <span style="color: #418288">Block</span> &bytes) <span style="color: #cd00a6">throw</span> (CryptoException);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre"> </span><span style="color: #cd00a6">virtual</span> <span style="color: #418288">Block</span> decrypt (<span style="color: #cd00a6">const</span> <span style="color: #418288">Block</span> &bytes) <span style="color: #cd00a6">throw</span> (CryptoException);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">} ;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 142, 0); "><span style="color: #000000">} </span>// namespace</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 142, 0); "><span style="color: #000000">} </span>// namespace</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(0, 142, 0); "><span style="color: #000000">} </span>// namespace</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(126, 71, 36); ">#endif</div></div><div><br></div><div><br></div><div>(cpp)</div><div><br></div><div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #7e4724">#include </span>"CryptorAES.h"</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(225, 0, 0); "><span style="color: #7e4724">#include </span><botan/botan.h></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(126, 71, 36); ">#include <span style="color: #e10000"><sstream></span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(65, 130, 136); "><span style="color: #cd00a6">using</span><span style="color: #000000"> </span><span style="color: #cd00a6">namespace</span><span style="color: #000000"> </span>pirate<span style="color: #000000">::</span>core<span style="color: #000000">::</span>crypt<span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">using<span style="color: #000000"> </span>namespace<span style="color: #000000"> </span><span style="color: #418288">pirate</span><span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); ">using<span style="color: #000000"> </span>namespace<span style="color: #000000"> </span><span style="color: #8000af">Botan</span><span style="color: #000000">;</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #cd00a6">const</span> <span style="color: #418288">IV</span> <span style="color: #418288">CryptorAES</span>::NullIV = <span style="color: #255a5e">filledBlock</span>(<span style="color: #4e00e0">16</span>, <span style="color: #4e00e0">0</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #418288">Block</span> <span style="color: #418288">CryptorAES</span>::encrypt (<span style="color: #cd00a6">const</span> <span style="color: #418288">Block</span> &block) <span style="color: #cd00a6">throw</span> (CryptoException)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">    </span></span>try<span style="color: #000000"> </span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">           </span></span>SymmetricKey<span style="color: #000000"> _key (</span>OctetString<span style="color: #000000">((</span><span style="color: #cd00a6">const</span><span style="color: #000000"> </span>byte<span style="color: #000000"> *)</span><span style="color: #418288">key</span><span style="color: #000000">.</span><span style="color: #4b0086">data</span><span style="color: #000000">(), </span><span style="color: #418288">key</span><span style="color: #000000">.</span><span style="color: #4b0086">size</span><span style="color: #000000">()));</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">               </span></span>InitializationVector<span style="color: #000000"> _iv (</span>OctetString<span style="color: #000000">((</span><span style="color: #cd00a6">const</span><span style="color: #000000"> </span>byte<span style="color: #000000"> *)</span><span style="color: #418288">iv</span><span style="color: #000000">.</span><span style="color: #4b0086">data</span><span style="color: #000000">(), </span><span style="color: #418288">iv</span><span style="color: #000000">.</span><span style="color: #4b0086">size</span><span style="color: #000000">()));</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">           </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">               </span><span style="color: #8000af">Pipe</span> pipe(<span style="color: #4b0086">get_cipher</span>(<span style="color: #e10000">"AES/CBC/PKCS7"</span>, _key, _iv, <span style="color: #4b0086">ENCRYPTION</span>));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">          </span>pipe.<span style="color: #4b0086">process_msg</span>(block.<span style="color: #4b0086">data</span>(), block.<span style="color: #4b0086">size</span>());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(75, 0, 134); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span><span style="color: #cd00a6">return</span><span style="color: #000000"> </span><span style="color: #255a5e">fromString</span><span style="color: #000000">(pipe.</span>read_all_as_string<span style="color: #000000">());</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">   </span></span><span style="color: #cd00a6">catch</span><span style="color: #000000"> (</span>std<span style="color: #000000">::</span>exception<span style="color: #000000"> &e)</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(65, 130, 136); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span><span style="color: #cd00a6">throw</span><span style="color: #000000"> </span>CryptoException<span style="color: #000000">(e.</span><span style="color: #4b0086">what</span><span style="color: #000000">());</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; min-height: 13px; "><br></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span style="color: #418288">Block</span> <span style="color: #418288">CryptorAES</span>::decrypt (<span style="color: #cd00a6">const</span> <span style="color: #418288">Block</span> &block) <span style="color: #cd00a6">throw</span> (CryptoException)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(205, 0, 166); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre"> </span></span>try<span style="color: #000000"> </span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">  </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">           </span></span>SymmetricKey<span style="color: #000000"> _key (</span>OctetString<span style="color: #000000">((</span><span style="color: #cd00a6">const</span><span style="color: #000000"> </span>byte<span style="color: #000000"> *)</span><span style="color: #418288">key</span><span style="color: #000000">.</span><span style="color: #4b0086">data</span><span style="color: #000000">(), </span><span style="color: #418288">key</span><span style="color: #000000">.</span><span style="color: #4b0086">size</span><span style="color: #000000">()));</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">               </span></span>InitializationVector<span style="color: #000000"> _iv (</span>OctetString<span style="color: #000000">((</span><span style="color: #cd00a6">const</span><span style="color: #000000"> </span>byte<span style="color: #000000"> *)</span><span style="color: #418288">iv</span><span style="color: #000000">.</span><span style="color: #4b0086">data</span><span style="color: #000000">(), </span><span style="color: #418288">iv</span><span style="color: #000000">.</span><span style="color: #4b0086">size</span><span style="color: #000000">()));</span></div><p style="margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; min-height: 13.0px"><span class="Apple-tab-span" style="white-space:pre">           </span><br class="webkit-block-placeholder"></p><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">               </span><span style="color: #8000af">Pipe</span> pipe(<span style="color: #4b0086">get_cipher</span>(<span style="color: #e10000">"AES/CBC/PKCS7"</span>, _key, _iv, <span style="color: #4b0086">DECRYPTION</span>));</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">          </span>pipe.<span style="color: #4b0086">process_msg</span>(block.<span style="color: #4b0086">data</span>(), block.<span style="color: #4b0086">size</span>());</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(75, 0, 134); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span><span style="color: #cd00a6">return</span><span style="color: #000000"> </span><span style="color: #255a5e">fromString</span><span style="color: #000000">(pipe.</span>read_all_as_string<span style="color: #000000">());</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">      </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(128, 0, 175); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">   </span></span><span style="color: #cd00a6">catch</span><span style="color: #000000"> (</span>std<span style="color: #000000">::</span>exception<span style="color: #000000"> &e)</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">        </span>{</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; color: rgb(65, 130, 136); "><span style="color: #000000"><span class="Apple-tab-span" style="white-space:pre">          </span></span><span style="color: #cd00a6">throw</span><span style="color: #000000"> </span>CryptoException<span style="color: #000000">(e.</span><span style="color: #4b0086">what</span><span style="color: #000000">());</span></div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; "><span class="Apple-tab-span" style="white-space:pre">   </span>}</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 11px/normal Menlo; ">}</div></div><div><br></div><div><br></div><div><br></div><div>Thanks again for all the hard work with botan.  I think I have all the functionality I need at the moment.</div><div>Keep up the awesome work!</div><div><br></div><div>I've actually shown your code to friends a few times in the past.</div><div><br></div><div>If you want to read some other awesome code, check out Eberly's stuff:  <a href="http://www.geometrictools.com/">http://www.geometrictools.com/</a></div><div>It's also perfect.</div><div><br></div><div>-tim</div><div><br></div><div><br></div></body></html>