--function test
select gs_encrypt('along','1234@abc','sm4');
select gs_decrypt(gs_encrypt('along','1234@abc','sm4'),'1234@abc','sm4');
select gs_decrypt(gs_encrypt('world','1234@abc','sm4'),'abc@4321','sm4'); --difference key cause error
select gs_encrypt('along','1234@abc5678abcdefghi','sm4'); --key longer than 16 Byte cause error
select gs_decrypt('along','1234@abc','sm4'); --wrong cipher cause error
--insert/select test
create table aes_table(name text);
insert into aes_table values(gs_encrypt('he@#llo','1234@abc','sm4')); --special characters
select gs_decrypt(name,'1234@abc','sm4') from aes_table order by 1;
drop table aes_table;
--column type test
create table aes_type_bytea(name bytea);
create table aes_type_varchar(name varchar(100));
create table aes_type_nvarchar2(name nvarchar2(100));
create table aes_type_int(id int);
create table aes_type_numeric(id numeric);
insert into aes_type_bytea values(gs_encrypt('along','1234@abc','sm4'));
insert into aes_type_varchar values(gs_encrypt('along','1234@abc','sm4'));
insert into aes_type_nvarchar2 values(gs_encrypt('along','1234@abc','sm4'));
insert into aes_type_int values(gs_encrypt('along','1234@abc','sm4'));
insert into aes_type_numeric values(gs_encrypt('along','1234@abc','sm4'));
drop table aes_type_bytea;
drop table aes_type_varchar;
drop table aes_type_nvarchar2;
drop table aes_type_int;
drop table aes_type_numeric;
--data type test
create table aes_data_type(c1 int4, c2 int8, c3 numeric(18,2), c4 float8, c5 money, c6 boolean, c7 varchar(15), c8 text, c9 date, c10 bytea);
insert into aes_data_type values(123456,654321,123.21,654321.123456,100,TRUE,'varchar','text','2017-12-07', 'bytea');
create table aes_data_encrypt(e1 text, e2 text, e3 text, e4 text, e5 text, e6 text, e7 text, e8 text, e9 text, e10 text);
insert into aes_data_encrypt select gs_encrypt(c1,'1234@abc','sm4'), gs_encrypt(c2,'1234@abc','sm4'), gs_encrypt(c3,'1234@abc','sm4'),
gs_encrypt(c4,'1234@abc','sm4'), gs_encrypt(c7,'1234@abc','sm4'), gs_encrypt(c8,'1234@abc','sm4'), gs_encrypt(c9,'1234@abc','sm4') from aes_data_type;
select gs_encrypt(c5,'1234@abc','sm4') from aes_data_type;
select gs_encrypt(c6,'1234@abc','sm4') from aes_data_type;
select gs_encrypt(c10,'1234@abc','sm4') from aes_data_type;
drop table aes_data_type;
drop table aes_data_encrypt;
--boundary test
select gs_decrypt(gs_encrypt('','1234@abc','sm4'),'1234@abc','sm4');
select gs_decrypt(gs_encrypt('along','1234@abc','sm4'),null,'sm4');
select gs_encrypt('along',null,'sm4');
select gs_decrypt(gs_encrypt('comeon','1234567@abcdefgh','sm4'),'1234567@abcdefgh','sm4');
select gs_decrypt(gs_encrypt('aessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfalflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfassasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdfaessasdfasdfasdfsdfadllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdllsdlflsasssasdfaesssdlflssasdfassdsdllsdlflsasssasdfaesssdlflssasdfassdaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlllsdlsdlaaabbllsdlsdlaaabbllsdlsdlaaabbdasdfsdfaasdfasdfsdfsdasdfadsadfasdfadsadfasssdlflssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssssssssdlflssassssdlflssasssasssssssdlflssasssasssassssdlflssasssasssssssdssdlfldlflsasssassssdlflssssdlflssasasssassssdlflssasssasssssssdlflssasssasssssssdlflssasssasssasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssssssssssdlfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfalflsasssasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfassasdfaessdsllaessdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdsllsdlflsasssasdfaessasdfasdfasdfsdfadfdfadfdfaessasdfasdfasdfsdfadllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessllaessdsllsdlflsasssasdfaessfaessdsllsdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflsasssasdfsdlflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdllsdlflsasssasdfaesssdlflssasdfassdsdllsdlflsasssasdfaesssdlflssasdfassdaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlflsasssasdfaessdsllaessdsllsdlflsasssasdfaesssdlflssasdfaessflsasasdfaessflsasssasdfaessllsdlflsasssasdfaesssdlflssasdfassdlflssasdfaessflsasssasdfaessdsllsdlllsdlsdlaaabbllsdlsdlaaabbllsdlsdlaaabbdasdfsdfaasdfasdfsdfsdasdfadsadfasdfadsadfasssdlflssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssdlflssasssassssdlflssaslssassssdlflssasssassssdlflssasssassssdlflssasssassssdlflssasasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssssssssdlflssassssdlflssasssasssssssdlflssasssasssassssdlflssasssasssssssdssdlfldlflsasssassssdlflssssdlflssasasssassssdlflssasssasssssssdlflssasssasssssssdlflssasssasssasssassssdlflssasssassssdlflssasasssassssdlflssasssasssssssdlflssasssassssssssssssdlf','1234@abc','sm4'),'1234@abc','sm4');
select gs_encrypt('along','1234','sm4');
select gs_decrypt(gs_encrypt('comeon','12345678@abcdefgh','sm4'),'12345678@abcdefgh','sm4');