solve the replay attack problem by adding an AbstractDigestBackend class