pkce-js
Version:
Generate PKCE verifier and code_challenge in a simple way.
28 lines (21 loc) • 735 B
text/typescript
import sha256 from 'crypto-js/sha256';
import base64 from 'crypto-js/enc-base64';
//@ts-ignore
import secureRandom from 'secure-random';
export function randomString(length: number): string {
let rs = '';
const mask =
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~';
const bytes = secureRandom(length);
const scale = 256 / mask.length; // 256 = 0 to 0xFF (randomBytes)
for (let i = 0; i < length; i++) {
rs += mask.charAt(Math.floor(bytes[i] / scale));
}
return rs;
}
export function b64Sha256Hash(str: string): string {
return base64.stringify(sha256(str));
}
export function base64Url(str: string): string {
return str.replace(/=/g, '').replace(/\+/g, '-').replace(/\//g, '_');
}