package org.xdi.oxauth.model.authorize; import org.apache.commons.codec.binary.Hex; import org.testng.annotations.Test; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import static org.testng.Assert.*; /** * @author Yuriy Zabrovarnyy * @version 0.9, 21/03/2016 */ public class CodeVerifierTest { @Test public void verifierAndChallengeMatch() throws NoSuchAlgorithmException, UnsupportedEncodingException { assertMatch(CodeVerifier.CodeChallengeMethod.PLAIN); assertMatch(CodeVerifier.CodeChallengeMethod.S256); assertFalse(CodeVerifier.matched(null, "", "invalid_code")); } @Test public void verify() { String codeChallenge = CodeVerifier.generateCodeChallenge(CodeVerifier.CodeChallengeMethod.S256, "dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk"); assertEquals(codeChallenge, "E9Melhoa2OwvFrEMTJguCHaoeK1t8URWbuGJSstw-cM"); } @Test public void codeVerificationGenerator() { for (int i = 0; i < 10; i++) { assertTrue(CodeVerifier.isCodeVerifierValid(CodeVerifier.generateCodeVerifier())); } } private static void assertMatch(CodeVerifier.CodeChallengeMethod type) throws NoSuchAlgorithmException, UnsupportedEncodingException { CodeVerifier verifier = new CodeVerifier(type); System.out.println(verifier); if (type == CodeVerifier.CodeChallengeMethod.PLAIN) { assertEquals(verifier.getCodeChallenge(), verifier.getCodeVerifier()); return; } MessageDigest md = MessageDigest.getInstance(type.getMessageDigestString()); md.update(verifier.getCodeVerifier().getBytes("UTF-8")); // Change this to "UTF-16" if needed byte[] digest = md.digest(); assertEquals(Hex.encodeHexString(digest), verifier.getCodeChallenge()); } }