'H2uuaRpLnHztg4LY'); $hmac2 = new HmacVerificationProvider(fn() => 'eDmteplrpgEb0yYHYpxkjrFP9cr66PPK'); $hmac3 = new HmacVerificationProvider(fn() => 'KB2G4iqhsOO6Y9Eg4cJy6AhpKpMSeIhFelYiCMTSmPvyt43vyY4ubdXGR8SZBbof'); $provider = new NamedVerificationProvider; $provider->register('miku', $hmac1); $provider->register('teto', $hmac2); // test default $token = $provider->sign(false, $procedure, $params); $this->assertTrue(str_starts_with($token, 'miku:')); $this->assertTrue($hmac1->verify(substr($token, 5), false, $procedure, $params)); $this->assertFalse($hmac2->verify(substr($token, 5), false, $procedure, $params)); $this->assertTrue($provider->verify($token, false, $procedure, $params)); // test prefixless for default $token = $hmac1->sign(true, $procedure, $params); $this->assertTrue($provider->verify($token, true, $procedure, $params)); // manually add prefix $token = 'teto:' . $hmac2->sign(false, $procedure, $params); $this->assertTrue($provider->verify($token, false, $procedure, $params)); // other one that needs prefix $token = $provider->signWith('teto', true, $procedure, $params); $this->assertTrue($provider->verify($token, true, $procedure, $params)); $this->assertFalse($provider->verify($token, false, $procedure, $params)); // changing the default $provider->register('neru', $hmac3, true); $token = $provider->sign(false, $procedure, $params); $this->assertTrue(str_starts_with($token, 'neru:')); $this->assertFalse($hmac1->verify(substr($token, 5), false, $procedure, $params)); $this->assertFalse($hmac2->verify(substr($token, 5), false, $procedure, $params)); $this->assertTrue($hmac3->verify(substr($token, 5), false, $procedure, $params)); $this->assertTrue($provider->verify($token, false, $procedure, $params)); // test prefixless for new default $token = $hmac3->sign(true, $procedure, $params); $this->assertTrue($provider->verify($token, true, $procedure, $params)); // this is a bit silly but there's honestly no reason why this shouldn't work $provider->register('gumi', $provider); $token = $provider->signWith('gumi', false, $procedure, $params); $this->assertTrue(str_starts_with($token, 'gumi:neru:')); $this->assertFalse($hmac1->verify(substr($token, 10), false, $procedure, $params)); $this->assertFalse($hmac2->verify(substr($token, 10), false, $procedure, $params)); $this->assertTrue($hmac3->verify(substr($token, 10), false, $procedure, $params)); $this->assertTrue($provider->verify(substr($token, 5), false, $procedure, $params)); $this->assertTrue($provider->verify($token, false, $procedure, $params)); } }