Skip to content

Commit

Permalink
Merge pull request #1885 from kujirahand/fix_calc_hash_in_browser
Browse files Browse the repository at this point in the history
ブラウザ版の『ハッシュ値計算時』の問題を修正、『ハッシュ値計算』『ランダムUUID生成』『ランダム配列生成』命令を追加 #1884
  • Loading branch information
kujirahand authored Dec 24, 2024
2 parents fe6d60f + c4ce981 commit cc02629
Showing 1 changed file with 45 additions and 15 deletions.
60 changes: 45 additions & 15 deletions src/plugin_browser_crypto.mts
Original file line number Diff line number Diff line change
Expand Up @@ -4,23 +4,53 @@ export default {
type: 'func',
josi: [['へ'], ['を'], ['で']],
pure: true,
fn: function (func: any, s: any, alg: any, sys: any) {
func = sys.__findVar(func, null) // 文字列指定なら関数に変換
// convert
const buffer = new TextEncoder().encode(s)
crypto.subtle.digest(alg, buffer).then(function (hash: any) {
const codes: string[] = []
const view = new DataView(hash)
for (let i = 0; i < view.byteLength; i += 4) {
const v = view.getUint32(i)
const h = v.toString(16)
const pad = '00' + h
codes.push(pad.substr(pad.length - 2, 2))
}
const res = sys.__setSysVar('対象', codes.join(''))
fn: function (func: any, s: string, alg: string, sys: any) {
func = sys.__findVar(func, null) // 文字列指定なら関数に変換(コールバック関数)
// (ref) https://developer.mozilla.org/ja/docs/Web/API/SubtleCrypto/digest
const msgUint8 = new TextEncoder().encode(s) // (utf-8 の) Uint8Array にエンコードする
// メッセージをハッシュする
crypto.subtle.digest(alg, msgUint8).then(function (hashBuffer: ArrayBuffer) {
const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join(""); // バイト列を 16 進文字列に変換する
const res = sys.__setSysVar('対象', hashHex)
func(res)
})
},
return_none: true
}
},
'ハッシュ値計算': { // @データSをアルゴリズムALG(sha-256/sha-384/sha-512)のエンコーディングでハッシュ値を計算して返す // @ はっしゅちけいさん
type: 'func',
josi: [['を'], ['で']],
pure: true,
asyncFn: true,
fn: async function (s: string, alg: string, sys: any) {
const msgUint8 = new TextEncoder().encode(s) // (utf-8 の) Uint8Array にエンコードする
const hashBuffer = await crypto.subtle.digest(alg, msgUint8)
const hashArray = Array.from(new Uint8Array(hashBuffer)); // バッファーをバイト列に変換する
const hashHex = hashArray
.map((b) => b.toString(16).padStart(2, "0"))
.join(""); // バイト列を 16 進文字列に変換する
return hashHex
},
},
'ランダムUUID生成': { // @ランダムに生成された36文字のv4 UUID(文字列)を返す // @ らんだむUUIDせいせい
type: 'func',
josi: [],
pure: true,
fn: function (sys: any) {
return window.crypto.randomUUID()
},
},
'ランダム配列生成': { // @暗号強度の強い乱数のバイト配列(Uint8Array)を指定個数返す // @ らんだむはいれつせいせい
type: 'func',
josi: [['の']],
pure: true,
fn: function (cnt: number, sys: any) {
const array = new Uint8Array(cnt);
window.crypto.getRandomValues(array);
return array
},
},
}

0 comments on commit cc02629

Please sign in to comment.