nadesiko3
Version:
Japanese Programming Language
57 lines (56 loc) • 2.67 kB
text/typescript
export default {
// @ハッシュ関数
'ハッシュ値計算時': { // @データSをアルゴリズムALG(sha-256/sha-384/sha-512)のエンコーディングでハッシュ値を計算して変数「対象」に代入する。 // @ はっしゅちけいさんしたとき
type: 'func',
josi: [['へ'], ['を'], ['で']],
pure: true,
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
},
},
}