001package io.ebean.config.dbplatform.mysql;
002
003import io.ebean.config.dbplatform.AbstractDbEncrypt;
004import io.ebean.config.dbplatform.DbEncryptFunction;
005
006/**
007 * MySql aes_encrypt aes_decrypt based encryption support.
008 *
009 * @author rbygrave
010 */
011public class MySqlDbEncrypt extends AbstractDbEncrypt {
012
013  public MySqlDbEncrypt() {
014    this.varcharEncryptFunction = new MyVarcharFunction();
015    this.dateEncryptFunction = new MyDateFunction();
016  }
017
018  private static class MyVarcharFunction implements DbEncryptFunction {
019
020    @Override
021    public String getDecryptSql(String columnWithTableAlias) {
022      return "CONVERT(AES_DECRYPT(" + columnWithTableAlias + ",?) USING UTF8)";
023    }
024
025    @Override
026    public String getEncryptBindSql() {
027      return "AES_ENCRYPT(?,?)";
028    }
029  }
030
031  private static class MyDateFunction implements DbEncryptFunction {
032
033    @Override
034    public String getDecryptSql(String columnWithTableAlias) {
035      return "STR_TO_DATE(AES_DECRYPT(" + columnWithTableAlias + ",?),'%Y%d%m')";
036    }
037
038    @Override
039    public String getEncryptBindSql() {
040      return "AES_ENCRYPT(DATE_FORMAT(?,'%Y%d%m'),?)";
041    }
042  }
043}