anchor.diff:  
   getuser(Ukey) -> gen_server:call(?MODULE, {getuser, Ukey}).
   
  +updateprofile(Ukey, KeyValList) -> gen_server:call(?MODULE, {updateprofile, Ukey, KeyValList}).
  +
   encrypt(Ukey, IVec, Text) ->
     {ok, Secret} = qredis:q(["GET", lists:concat(["datasmart:users:", Ukey, ":secret"])]),
     {ok, crypto:des_cbc_encrypt(Secret, IVec, Text)}.
  
positive.code:   match_ouKey/1,
    match_auKey/1,
    getuser/1,
    encrypt/3,
    dencrypt/3,
    checkuser/2
  
negative.code: 
  handle_call({register, Email, Password}, _From, State) ->
    MD5Key = hash_md5:build(Email),
    OpenSalt = uuid:to_string(uuid:uuid3(uuid:uuid4(), uuid:to_string(uuid:uuid1()))),
    OUKey = hashPass(MD5Key, OpenSalt, 2),
    Secret = uuid:to_string(uuid:uuid3(uuid:uuid4(), uuid:to_string(uuid:uuid1()))),
    Salt = uuid:to_string(uuid:uuid3(uuid:uuid4(), uuid:to_string(uuid:uuid1()))),
    case qredis:q(["HGETALL", lists:concat(["datasmart:users:", MD5Key, ":profile"])]) of
      {ok, []} ->
        qredis:q(["HSET", lists:concat(["datasmart:users:", MD5Key, ":profile"]), "email", Email]),
        qredis:q(["SET", lists:concat(["datasmart:openkey:", OUKey]), MD5Key]),
        qredis:q(["SET", lists:concat(["datasmart:users:", MD5Key, ":password"]), hashPass(Password, Salt, 20)]),
        qredis:q(["SET", lists:concat(["datasmart:users:", MD5Key, ":salt"]), Salt]),
        qredis:q(["SET", lists:concat(["datasmart:users:", MD5Key, ":secret"]), Secret]),
        qredis:q(["HSETNX", "datasmart:alias", Email, Email]),
        qredis:q(["HSETNX", "datasmart:alias:keys", Email, MD5Key]),
        {reply, {ok, [{email, list_to_binary(Email)}, {oukey, list_to_binary(OUKey)}]}, State};
      _ -> {reply, {error, "Registration Failure, User Exists"}, State}
    end;
  
  handle_call({getukey, Email}, _From, State) ->
  