001package io.ebean.config.dbplatform.sqlserver;
002
003import io.ebean.config.dbplatform.AbstractDbEncrypt;
004import io.ebean.config.dbplatform.DbEncryptFunction;
005
006/**
007 * SQL Server EncryptByPassPhrase DecryptByPassPhrase based encryption support.
008 */
009public class SqlServerDbEncrypt extends AbstractDbEncrypt {
010
011  public SqlServerDbEncrypt() {
012    this.varcharEncryptFunction = new VarcharFunction();
013    this.dateEncryptFunction = new DateFunction();
014  }
015
016  @Override
017  public boolean isBindEncryptDataFirst() {
018    return false;
019  }
020
021  private static class VarcharFunction implements DbEncryptFunction {
022
023    @Override
024    public String getDecryptSql(String columnWithTableAlias) {
025      return "convert(nvarchar,DecryptByPassPhrase(?," + columnWithTableAlias + "))";
026    }
027
028    @Override
029    public String getEncryptBindSql() {
030      return "EncryptByPassPhrase(?,?)";
031    }
032  }
033
034  private static class DateFunction implements DbEncryptFunction {
035
036    @Override
037    public String getDecryptSql(String columnWithTableAlias) {
038      return "cast(convert(nvarchar,DecryptByPassPhrase(?," + columnWithTableAlias + ")) as date)";
039    }
040
041    @Override
042    public String getEncryptBindSql() {
043      return "EncryptByPassPhrase(?,format(?,'yyyy-MM-dd'))";
044    }
045  }
046}