private byte[] computeSignature( final byte[] message )
        {
            final byte[] sig = new byte[16];

            // version
            sig[0] = 0x01;
            sig[1] = 0x00;
            sig[2] = 0x00;
            sig[3] = 0x00;

            // HMAC (first 8 bytes)
            final HMACMD5 hmacMD5 = new HMACMD5( signingKey );
            hmacMD5.update( encodeLong( sequenceNumber ) );
            hmacMD5.update( message );
            final byte[] hmac = hmacMD5.getOutput();
            final byte[] trimmedHmac = new byte[8];
            System.arraycopy( hmac, 0, trimmedHmac, 0, 8 );
            final byte[] encryptedHmac = encrypt( trimmedHmac );
            System.arraycopy( encryptedHmac, 0, sig, 4, 8 );

            // sequence number
            encodeLong( sig, 12, sequenceNumber );

            return sig;
        }
Creates the LMv2 Response from the given hash, client data, and Type 2
challenge.

@param hash
           The NTLMv2 Hash.
@param clientData
           The client data (blob or client challenge).
@param challenge
           The server challenge from the Type 2 message.

@return The response (either NTLMv2 or LMv2, depending on the client
        data).
httpclient5/src/main/java/org/apache/hc/client5/http/impl/auth/NTLMEngineImpl.java