private AuthEncryptedData initializeSession ( String passwordParam , AuthResponse authResponseParam ) { //IV... byte [ ] ivBytes = UtilGlobal . decodeBase64 ( authResponseParam . getIvBase64 ( ) ) ; //Seed... byte [ ] seedBytes = UtilGlobal . decodeBase64 ( authResponseParam . getSeedBase64 ( ) ) ; //Encrypted Data... byte [ ] encryptedData = UtilGlobal . decodeBase64 ( authResponseParam . getEncryptedDataBase64 ( ) ) ; //HMac from Response... byte [ ] hMacFromResponse = UtilGlobal . decodeBase64 ( authResponseParam . getEncryptedDataHmacBase64 ( ) ) ; //Local HMac... byte [ ] localGeneratedHMac = AES256Local . generateLocalHMAC ( encryptedData , passwordParam , authResponseParam . getSalt ( ) , seedBytes ) ; //Password mismatch... if ( ! Arrays . equals ( hMacFromResponse , localGeneratedHMac ) ) { throw new FluidClientException ( "Login attempt failure." , FluidClientException . ErrorCode . LOGIN_FAILURE ) ; } //Decrypted Initialization Data... byte [ ] decryptedEncryptedData = AES256Local . decryptInitPacket ( encryptedData , passwordParam , authResponseParam . getSalt ( ) , ivBytes , seedBytes ) ; try { JSONObject jsonObj = new JSONObject ( new String ( decryptedEncryptedData ) ) ; return new AuthEncryptedData ( jsonObj ) ; } catch ( JSONException jsonExcept ) { throw new FluidClientException ( jsonExcept . getMessage ( ) , FluidClientException . ErrorCode . JSON_PARSING ) ; } }
Performs HMAC and encryption to initialize the session .