JavaScript(ブラウザ環境)でProof Key for Code Exchange (RFC 7636) のcode_verifier、code_challenge(code_challenge_methodがS256の場合)を生成するコードを作成した。
実装の要点
Cryptoが利用できないブラウザ(IE10以前など)でも動作するように実装している。(ただし、この場合は乱数生成にMath.random()を使うため乱数の暗号強度はブラウザ実装によっては下がる可能性がある。)
ハッシュ生成にはcrypto-jsを使っている。
なお、乱数生成にもcrypto-jsを利用できるが、crypto-jsの乱数生成処理は3.3.0ではMath.random()、4.0.0ではCryptoを固定で利用するようになっているため、ブラウザのCryptoサポートによって切り替えるように独自実装している。