UNPKG

butter-lib

Version:

BuTTER Library は、ストレージ上に細分化した状態で保存されているGTFSを基にした時刻表情報を集め、ブラウザ内で必要な情報に加工するライブラリです。DBを使わずにデータ処理をブラウザ内とする

63 lines (57 loc) 1.71 kB
<html> <script> async function fetchAsArrayBuffer(url) { const response = await fetch(url); if (!response.ok) { throw new Error(`Failed to fetch ${url}`); } return await response.arrayBuffer(); } async function pemToPublicKey(pem) { const uint8Array = pemToUint8Array(pem); return await crypto.subtle.importKey( 'spki', uint8Array, { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256', }, false, ['verify'] ); } function pemToUint8Array(pem) { const base64String = pem.replace(/-----[A-Z ]+-----/g, '').trim(); const raw = window.atob(base64String); const uint8Array = new Uint8Array(raw.length); for (let i = 0; i < raw.length; i++) { uint8Array[i] = raw.charCodeAt(i); } return uint8Array; } async function verifySignatureFromUrls(publicKeyUrl, contentUrl, signatureUrl) { const [pem, content, signature] = await Promise.all([ fetch(publicKeyUrl).then((res) => res.text()), fetchAsArrayBuffer(contentUrl), fetchAsArrayBuffer(signatureUrl), ]); const publicKey = await pemToPublicKey(pem); return await crypto.subtle.verify( { name: 'RSASSA-PKCS1-v1_5', }, publicKey, signature, content ); } // 使用例 (async function () { const publicKeyUrl = 'https://pub-ad1f4a48b8ef46779b720e734b0c2e1d.r2.dev/public_key.pem'; const contentUrl = 'https://storage.app.takoyaki3.com/datalist.json'; const signatureUrl = 'https://storage.app.takoyaki3.com/datalist.json.sig'; const isValid = await verifySignatureFromUrls(publicKeyUrl, contentUrl, signatureUrl); console.log('Signature valid?', isValid); })(); </script> </html>