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 */
009public class MySqlDbEncrypt extends AbstractDbEncrypt {
010
011  public MySqlDbEncrypt() {
012    this.varcharEncryptFunction = new MyVarcharFunction();
013    this.dateEncryptFunction = new MyDateFunction();
014  }
015
016  private static class MyVarcharFunction implements DbEncryptFunction {
017
018    @Override
019    public String getDecryptSql(String columnWithTableAlias) {
020      return "CONVERT(AES_DECRYPT(" + columnWithTableAlias + ",?) USING UTF8)";
021    }
022
023    @Override
024    public String getEncryptBindSql() {
025      return "AES_ENCRYPT(?,?)";
026    }
027  }
028
029  private static class MyDateFunction implements DbEncryptFunction {
030
031    @Override
032    public String getDecryptSql(String columnWithTableAlias) {
033      return "STR_TO_DATE(AES_DECRYPT(" + columnWithTableAlias + ",?),'%Y%d%m')";
034    }
035
036    @Override
037    public String getEncryptBindSql() {
038      return "AES_ENCRYPT(DATE_FORMAT(?,'%Y%d%m'),?)";
039    }
040  }
041}