Ejemplo n.º 1
0
        private string SelectColumnBuilder(List <string> columns, CryptOptions cryptOptions)
        {
            if (columns == null || columns.Count <= 0)
            {
                return("*");
            }

            DecryptFuncBuilder(cryptOptions, out string decryptFuncBegin, out string decryptFuncEnd);

            StringBuilder columnsBuilder;

            columnsBuilder = new StringBuilder();
            for (int i = 0; i < columns.Count; i++)
            {
                columnsBuilder.Append(decryptFuncBegin);
                columnsBuilder.Append(columns[i]);
                if (i != columns.Count - 1)
                {
                    columnsBuilder.Append(", ");
                }
                columnsBuilder.Append(decryptFuncEnd);
            }

            return(columnsBuilder.ToString());
        }
Ejemplo n.º 2
0
 public async Task <int> Insert(CryptOptions cryptOptions,
                                string tableName,
                                List <string> values,
                                List <string> columnNames = null)
 {
     return(await MainInsert(cryptOptions, tableName, columnNames, values));
 }
Ejemplo n.º 3
0
 public async Task <List <TResult> > Select <TResult>(CryptOptions cryptOptions,
                                                      string fromTable,
                                                      List <string> columnNames = null,
                                                      string where   = null,
                                                      string orderBy = null,
                                                      bool isDesc    = false)
 {
     return(await MainSelect <TResult>(cryptOptions, columnNames, fromTable, where, orderBy, isDesc));
 }
Ejemplo n.º 4
0
        private void EncryptFuncBuilder(CryptOptions cryptOptions, out string cryptFuncBegin, out string cryptFuncEnd)
        {
            cryptFuncBegin = string.Empty;
            cryptFuncEnd   = string.Empty;

            switch (cryptOptions.ChipherAlgo)
            {
            case ChipherAlgo.NoCrypt:
                return;

            case ChipherAlgo.Blowfish:
                cryptFuncBegin = "encrypt(";
                cryptFuncEnd   = $", \'{cryptOptions.SecretKey}\', \'bf\')";
                return;

            case ChipherAlgo.AES_128:
                cryptFuncBegin = "encrypt(";
                cryptFuncEnd   = $", \'{cryptOptions.SecretKey}\', \'aes\')";
                return;

            case ChipherAlgo.PGP_AES_128:
                cryptFuncEnd += "\'cipher-algo=aes128\')";
                break;

            case ChipherAlgo.PGP_AES_192:
                cryptFuncEnd += "\'cipher-algo=aes192\')";
                break;

            case ChipherAlgo.PGP_AES_256:
                cryptFuncEnd += "\'cipher-algo=aes256\')";
                break;

            case ChipherAlgo.PGP_Blowfish:
                cryptFuncEnd += "\'cipher-algo=bf\')";
                break;

            case ChipherAlgo.PGP_Cast5:
                cryptFuncEnd += "\'cipher-algo=cast5\')";
                break;

            case ChipherAlgo.PGP_ThripleDes:
                cryptFuncEnd += "\'cipher-algo=3des\')";
                break;
            }

            if (cryptOptions.IsPGPSymmetry)
            {
                cryptFuncBegin = "pgp_sym_encrypt(";
                cryptFuncEnd   = $", \'{cryptOptions.SecretKey}\', ";
            }
            else
            {
                cryptFuncBegin = "pgp_pub_encrypt(";
                cryptFuncEnd   = $", dearmor(\'{cryptOptions.PublicKey}\'), ";
            }
        }
Ejemplo n.º 5
0
        public async Task <List <string> > GetOriginalTable(string tableName, CryptOptions cryptOptions)
        {
            var byteList = await _postgreServer.Select <byte[]>(cryptOptions, tableName, columns, null, null, false);

            List <string> result = new List <string>();

            foreach (var item in byteList)
            {
                result.Add(Encoding.UTF8.GetString(item));
            }
            return(result);
        }
Ejemplo n.º 6
0
        private async Task <int> MainInsert(CryptOptions cryptOptions,
                                            string tableName,
                                            List <string> columnList,
                                            List <string> valueList)
        {
            string values = ValueBuilder(valueList, cryptOptions);

            string columns = InsertColumnBuilder(columnList);

            string command = $"insert into {tableName}{columns} values {values}";

            return(await ExecuteNonQuery(command));
        }
Ejemplo n.º 7
0
        private async Task <List <TResult> > MainSelect <TResult>(CryptOptions cryptOptions,
                                                                  List <string> columnNames,
                                                                  string fromTable,
                                                                  string where,
                                                                  string orderBy,
                                                                  bool isDesc)
        {
            string columns = SelectColumnBuilder(columnNames, cryptOptions);

            string orderByAndDesc = OrderByBuilder(orderBy, isDesc);

            if (!string.IsNullOrEmpty(where))
            {
                where = ' ' + where;
            }

            string command = $"select {columns} from {fromTable}{where}{orderByAndDesc}";

            return(await ExecuteReader <TResult>(command));
        }
Ejemplo n.º 8
0
        private void DecryptFuncBuilder(CryptOptions cryptOptions, out string decryptFuncBegin, out string decryptFuncEnd)
        {
            decryptFuncBegin = string.Empty;
            decryptFuncEnd   = string.Empty;

            switch (cryptOptions.ChipherAlgo)
            {
            case ChipherAlgo.NoCrypt:
                return;

            case ChipherAlgo.AES_128:
                decryptFuncBegin = "decrypt(";
                decryptFuncEnd   = $", \'{cryptOptions.SecretKey}\', \'aes\')";
                break;

            case ChipherAlgo.Blowfish:
                decryptFuncBegin = "decrypt(";
                decryptFuncEnd   = $", \'{cryptOptions.SecretKey}\', \'bf\')";
                break;

            default:
            {
                if (cryptOptions.IsPGPSymmetry)
                {
                    decryptFuncBegin = "pgp_sym_decrypt_bytea(";
                    decryptFuncEnd   = ", \'" + cryptOptions.SecretKey + "\')";
                }
                else
                {
                    decryptFuncBegin = "pgp_pub_decrypt_bytea(";
                    string pass = string.Empty;
                    if (!string.IsNullOrEmpty(cryptOptions.SecretKeyPassword))
                    {
                        pass = "******" + cryptOptions.SecretKeyPassword + "\'";
                    }
                    decryptFuncEnd = ", dearmor(\'" + cryptOptions.SecretKey + "\'), " + pass + " )";
                }
            }
            break;
            }
        }
Ejemplo n.º 9
0
        private string ValueBuilder(List <string> values, CryptOptions cryptOptions)
        {
            StringBuilder valuesBuilder = new StringBuilder("(");

            for (int i = 0; i < values.Count; i++)
            {
                EncryptFuncBuilder(cryptOptions, out string cryptFuncBegin, out string cryptFuncEnd);

                valuesBuilder.Append(cryptFuncBegin);
                valuesBuilder.Append("\'");
                valuesBuilder.Append(values[i]);
                valuesBuilder.Append("\'");
                valuesBuilder.Append(cryptFuncEnd);

                if (i != values.Count - 1)
                {
                    valuesBuilder.Append(", ");
                }
            }
            valuesBuilder.Append(")");

            return(valuesBuilder.ToString());
        }
Ejemplo n.º 10
0
 public async Task TableAdd(string tableName, string value, CryptOptions cryptOptions)
 {
     await _postgreServer.Insert(cryptOptions, tableName, new List <string>() { value }, columns);
 }