{"version":3,"file":"cryptos.mjs","names":[],"sources":["../src/macros/env.ts","../src/std/crypto/hmac/hmac.ts","../src/std/codec/helpers.ts","../src/std/crypto/hmac/web_hmac.ts","../src/std/crypto/hmac/mod.ts","../src/std/crypto/md/md5.ts","../src/std/crypto/md/mod.ts","../src/std/crypto/random/mina_random.ts","../src/std/crypto/random/web_random.ts","../src/std/crypto/random/mod.ts","../src/std/crypto/rsa/mina_rsa.ts","../src/std/crypto/rsa/web_rsa.ts","../src/std/crypto/rsa/mod.ts","../src/std/crypto/sha/sha.ts","../src/std/crypto/sha/web_sha.ts","../src/std/crypto/sha/mod.ts"],"sourcesContent":["/**\n * @internal\n * 小游戏环境宏模块。\n */\n\n/**\n * 小游戏环境宏。\n *\n * 可通过打包工具在 build 时修改，如 esbuild webpack vite 等。\n */\ndeclare const __MINIGAME_STD_MINA__: boolean;\n\n/**\n * 如果在小游戏环境中返回 true，否则返回 false。\n */\nexport const IS_MINA = __MINIGAME_STD_MINA__;\n","/**\n * @internal\n * 基于哈希的消息认证码实现。需要一个消息摘要对象，\n * 例如可以从 forge.md.sha1 或 forge.md.md5 获取。\n *\n * @author Dave Longley\n *\n * Copyright (c) 2010-2012 Digital Bazaar, Inc. All rights reserved.\n */\n\nimport { tryAsyncResult, type AsyncIOResult } from 'happy-rusty';\nimport { ByteStringBuffer, sha1, sha256, sha384, sha512, type HashAlgorithmCreator } from 'rsa-oaep-encryption';\nimport { encodeByteString } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { SHA } from '../crypto_defines.ts';\n\n/**\n * 创建一个使用指定消息摘要对象的 HMAC 对象。\n *\n * @param sha - SHA 哈希算法。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns HMAC 计算结果的十六进制字符串。\n */\nexport function createHMAC(sha: SHA, key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return tryAsyncResult(() => {\n        let shaAlgorithmCreator: HashAlgorithmCreator;\n\n        switch (sha) {\n            case 'SHA-1': {\n                shaAlgorithmCreator = sha1;\n                break;\n            }\n            case 'SHA-256': {\n                shaAlgorithmCreator = sha256;\n                break;\n            }\n            case 'SHA-384': {\n                shaAlgorithmCreator = sha384;\n                break;\n            }\n            case 'SHA-512': {\n                shaAlgorithmCreator = sha512;\n                break;\n            }\n        }\n\n        const shaAlgorithm = shaAlgorithmCreator.create();\n\n        let keyBuffer = new ByteStringBuffer(encodeByteString(key));\n\n        // 如果密钥长度超过 blocksize，则对其进行哈希\n        let keylen = keyBuffer.length();\n        if (keylen > shaAlgorithm.blockLength) {\n            shaAlgorithm.start();\n            shaAlgorithm.update(keyBuffer.bytes());\n            keyBuffer = shaAlgorithm.digest();\n        }\n\n        // 将密钥混合到内部和外部填充中\n        // ipadding = [0x36 * blocksize] ^ key\n        // opadding = [0x5C * blocksize] ^ key\n        const ipadding = new ByteStringBuffer();\n        const opadding = new ByteStringBuffer();\n\n        keylen = keyBuffer.length();\n        for (let i = 0; i < keylen; ++i) {\n            const tmp = keyBuffer.at(i);\n            ipadding.putByte(0x36 ^ tmp);\n            opadding.putByte(0x5c ^ tmp);\n        }\n\n        // 如果密钥短于 blocksize，添加额外的填充\n        if (keylen < shaAlgorithm.blockLength) {\n            const tmp = shaAlgorithm.blockLength - keylen;\n            for (let i = 0; i < tmp; ++i) {\n                ipadding.putByte(0x36);\n                opadding.putByte(0x5c);\n            }\n        }\n\n        // 摘要计算方式如下: hash(opadding | hash(ipadding | message))\n\n        // 准备进行内部哈希\n        // hash(ipadding | message)\n        shaAlgorithm.start();\n        shaAlgorithm.update(ipadding.bytes());\n\n        // 更新消息\n        shaAlgorithm.update(encodeByteString(data));\n\n        // 计算最终摘要: hash(opadding | hash(ipadding | message))\n        const inner = shaAlgorithm.digest().bytes();\n        shaAlgorithm.start();\n        shaAlgorithm.update(opadding.bytes());\n        shaAlgorithm.update(inner);\n\n        return shaAlgorithm.digest().toHex();\n    });\n}\n","/**\n * @internal\n * 内部使用的编解码辅助函数。\n */\n\nimport type { DataSource } from '../defines.ts';\nimport { bufferSourceToBytes } from '../internal/mod.ts';\nimport { encodeUtf8 } from './mod.ts';\n\n/**\n * 将 DataSource 转换为 Uint8Array。\n * - 字符串：先 UTF-8 编码\n * - BufferSource：转换为 Uint8Array\n * @param data - 需要转换的数据。\n * @returns 转换后的 `Uint8Array`。\n */\nexport function dataSourceToBytes(data: DataSource): Uint8Array<ArrayBuffer> {\n    return typeof data === 'string'\n        ? encodeUtf8(data)\n        : bufferSourceToBytes(data);\n}\n","/**\n * @internal\n * Web 平台的 HMAC 实现。\n */\n\nimport { tryAsyncResult, type AsyncIOResult } from 'happy-rusty';\nimport { dataSourceToBytes } from '../../codec/helpers.ts';\nimport { encodeHex } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { SHA } from '../crypto_defines.ts';\n\n/**\n * 使用 Web Crypto API 创建 HMAC。\n * @param hash - SHA 哈希算法。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns HMAC 计算结果的十六进制字符串。\n */\nexport function createHMAC(hash: SHA, key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return tryAsyncResult(async () => {\n        const encodedKey = dataSourceToBytes(key);\n        const encodedData = dataSourceToBytes(data);\n\n        // 导入密钥\n        const cryptoKey = await crypto.subtle.importKey(\n            'raw', // 密钥格式\n            encodedKey, // 密钥数据\n            { name: 'HMAC', hash: { name: hash } }, // 算法\n            false, // 是否可导出\n            ['sign'], // 用途\n        );\n\n        // 生成 HMAC\n        const hashBuffer = await crypto.subtle.sign(\n            'HMAC', // 算法\n            cryptoKey, // 密钥\n            encodedData, // 消息\n        );\n\n        return encodeHex(hashBuffer);\n    });\n}","import type { AsyncIOResult } from 'happy-rusty';\nimport { IS_MINA } from '../../../macros/env.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { SHA } from '../crypto_defines.ts';\nimport { createHMAC as pureCreateHMAC } from './hmac.ts';\nimport { createHMAC as webCreateHMAC } from './web_hmac.ts';\n\n/**\n * 使用 SHA-1 算法计算 HMAC。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的 HMAC 字符串。\n * @since 1.8.0\n * @example\n * ```ts\n * const hmac = (await sha1HMAC('secret-key', 'Hello, World!')).unwrap();\n * console.log(hmac); // 十六进制 HMAC 字符串\n * ```\n */\nexport function sha1HMAC(key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return shaHMAC('SHA-1', key, data);\n}\n\n/**\n * 使用 SHA-256 算法计算 HMAC。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的 HMAC 字符串。\n * @since 1.8.0\n * @example\n * ```ts\n * const hmac = (await sha256HMAC('secret-key', 'Hello, World!')).unwrap();\n * console.log(hmac); // 十六进制 HMAC 字符串\n * ```\n */\nexport function sha256HMAC(key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return shaHMAC('SHA-256', key, data);\n}\n\n/**\n * 使用 SHA-384 算法计算 HMAC。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的 HMAC 字符串。\n * @since 1.8.0\n * @example\n * ```ts\n * const hmac = (await sha384HMAC('secret-key', 'Hello, World!')).unwrap();\n * console.log(hmac); // 十六进制 HMAC 字符串\n * ```\n */\nexport function sha384HMAC(key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return shaHMAC('SHA-384', key, data);\n}\n\n/**\n * 使用 SHA-512 算法计算 HMAC。\n * @param key - 密钥，可以是字符串或 BufferSource。\n * @param data - 需要计算 HMAC 的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的 HMAC 字符串。\n * @since 1.8.0\n * @example\n * ```ts\n * const hmac = (await sha512HMAC('secret-key', 'Hello, World!')).unwrap();\n * console.log(hmac); // 十六进制 HMAC 字符串\n * ```\n */\nexport function sha512HMAC(key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return shaHMAC('SHA-512', key, data);\n}\n\n// #region Internal Functions\n\n/**\n * 使用指定 SHA 算法计算 HMAC。\n */\nfunction shaHMAC(sha: SHA, key: DataSource, data: DataSource): AsyncIOResult<string> {\n    return (IS_MINA ? pureCreateHMAC : webCreateHMAC)(sha, key, data);\n}\n\n// #endregion\n","// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license.\n// This module is browser compatible.\n\n/**\n * Forked from https://github.com/denoland/std/blob/0.160.0/hash/md5.ts\n */\n\nimport { dataSourceToBytes } from '../../codec/helpers.ts';\nimport { encodeHex } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\n\n// #region Internal Variables\n\nconst BLOCK_SIZE = 64 as const;\n\n// #endregion\n\n/**\n * MD5 哈希计算类，支持流式更新。\n * @since 1.0.0\n * @example\n * ```ts\n * // 基本用法\n * const hash = new Md5().update('Hello, World!').toString();\n * console.log(hash); // '65a8e27d8879283831b664bd8b7f0ad4'\n *\n * // 流式更新\n * const md5 = new Md5();\n * md5.update('Hello, ');\n * md5.update('World!');\n * console.log(md5.toString()); // '65a8e27d8879283831b664bd8b7f0ad4'\n *\n * // 获取 ArrayBuffer\n * const buffer = new Md5().update('test').digest();\n * ```\n */\nexport class Md5 {\n    private a = 0x67452301;\n    private b = 0xefcdab89;\n    private c = 0x98badcfe;\n    private d = 0x10325476;\n    private block = new Uint8Array(BLOCK_SIZE);\n    private pos = 0;\n    private n0 = 0;\n    private n1 = 0;\n\n    /**\n     * 累加已处理的消息长度。\n     *\n     * n0 和 n1 共同组成一个 64 位计数器，用于记录消息的总字节数。\n     * - n0: 低 32 位\n     * - n1: 高 32 位\n     *\n     * 当 n0 溢出（超过 0xffffffff，即 2^32 - 1）时，需要向 n1 进位。\n     *\n     * @param len - 本次处理的字节数\n     */\n    private addLength(len: number): void {\n        let n0 = this.n0;\n        n0 += len;\n        /*\n         * v8 ignore: 此分支仅在处理超过 4GB（2^32 字节）数据时触发。\n         * 在常规测试环境中无法覆盖此边界条件，故排除在覆盖率统计之外。\n         */\n        /* v8 ignore start */\n        if (n0 > 0xffffffff) this.n1 += 1;\n        /* v8 ignore stop */\n        this.n0 = n0 >>> 0;\n    }\n\n    private hash(block: Uint8Array): void {\n        let a = this.a;\n        let b = this.b;\n        let c = this.c;\n        let d = this.d;\n\n        const blk = (i: number): number =>\n            block[i] |\n            (block[i + 1] << 8) |\n            (block[i + 2] << 16) |\n            (block[i + 3] << 24);\n\n        const rol32 = (x: number, n: number): number => (x << n) | (x >>> (32 - n));\n\n        const x0 = blk(0);\n        const x1 = blk(4);\n        const x2 = blk(8);\n        const x3 = blk(12);\n        const x4 = blk(16);\n        const x5 = blk(20);\n        const x6 = blk(24);\n        const x7 = blk(28);\n        const x8 = blk(32);\n        const x9 = blk(36);\n        const xa = blk(40);\n        const xb = blk(44);\n        const xc = blk(48);\n        const xd = blk(52);\n        const xe = blk(56);\n        const xf = blk(60);\n\n        // 第 1 轮\n        a = b + rol32((((c ^ d) & b) ^ d) + a + x0 + 0xd76aa478, 7);\n        d = a + rol32((((b ^ c) & a) ^ c) + d + x1 + 0xe8c7b756, 12);\n        c = d + rol32((((a ^ b) & d) ^ b) + c + x2 + 0x242070db, 17);\n        b = c + rol32((((d ^ a) & c) ^ a) + b + x3 + 0xc1bdceee, 22);\n        a = b + rol32((((c ^ d) & b) ^ d) + a + x4 + 0xf57c0faf, 7);\n        d = a + rol32((((b ^ c) & a) ^ c) + d + x5 + 0x4787c62a, 12);\n        c = d + rol32((((a ^ b) & d) ^ b) + c + x6 + 0xa8304613, 17);\n        b = c + rol32((((d ^ a) & c) ^ a) + b + x7 + 0xfd469501, 22);\n        a = b + rol32((((c ^ d) & b) ^ d) + a + x8 + 0x698098d8, 7);\n        d = a + rol32((((b ^ c) & a) ^ c) + d + x9 + 0x8b44f7af, 12);\n        c = d + rol32((((a ^ b) & d) ^ b) + c + xa + 0xffff5bb1, 17);\n        b = c + rol32((((d ^ a) & c) ^ a) + b + xb + 0x895cd7be, 22);\n        a = b + rol32((((c ^ d) & b) ^ d) + a + xc + 0x6b901122, 7);\n        d = a + rol32((((b ^ c) & a) ^ c) + d + xd + 0xfd987193, 12);\n        c = d + rol32((((a ^ b) & d) ^ b) + c + xe + 0xa679438e, 17);\n        b = c + rol32((((d ^ a) & c) ^ a) + b + xf + 0x49b40821, 22);\n\n        // 第 2 轮\n        a = b + rol32((((b ^ c) & d) ^ c) + a + x1 + 0xf61e2562, 5);\n        d = a + rol32((((a ^ b) & c) ^ b) + d + x6 + 0xc040b340, 9);\n        c = d + rol32((((d ^ a) & b) ^ a) + c + xb + 0x265e5a51, 14);\n        b = c + rol32((((c ^ d) & a) ^ d) + b + x0 + 0xe9b6c7aa, 20);\n        a = b + rol32((((b ^ c) & d) ^ c) + a + x5 + 0xd62f105d, 5);\n        d = a + rol32((((a ^ b) & c) ^ b) + d + xa + 0x02441453, 9);\n        c = d + rol32((((d ^ a) & b) ^ a) + c + xf + 0xd8a1e681, 14);\n        b = c + rol32((((c ^ d) & a) ^ d) + b + x4 + 0xe7d3fbc8, 20);\n        a = b + rol32((((b ^ c) & d) ^ c) + a + x9 + 0x21e1cde6, 5);\n        d = a + rol32((((a ^ b) & c) ^ b) + d + xe + 0xc33707d6, 9);\n        c = d + rol32((((d ^ a) & b) ^ a) + c + x3 + 0xf4d50d87, 14);\n        b = c + rol32((((c ^ d) & a) ^ d) + b + x8 + 0x455a14ed, 20);\n        a = b + rol32((((b ^ c) & d) ^ c) + a + xd + 0xa9e3e905, 5);\n        d = a + rol32((((a ^ b) & c) ^ b) + d + x2 + 0xfcefa3f8, 9);\n        c = d + rol32((((d ^ a) & b) ^ a) + c + x7 + 0x676f02d9, 14);\n        b = c + rol32((((c ^ d) & a) ^ d) + b + xc + 0x8d2a4c8a, 20);\n\n        // 第 3 轮\n        a = b + rol32((b ^ c ^ d) + a + x5 + 0xfffa3942, 4);\n        d = a + rol32((a ^ b ^ c) + d + x8 + 0x8771f681, 11);\n        c = d + rol32((d ^ a ^ b) + c + xb + 0x6d9d6122, 16);\n        b = c + rol32((c ^ d ^ a) + b + xe + 0xfde5380c, 23);\n        a = b + rol32((b ^ c ^ d) + a + x1 + 0xa4beea44, 4);\n        d = a + rol32((a ^ b ^ c) + d + x4 + 0x4bdecfa9, 11);\n        c = d + rol32((d ^ a ^ b) + c + x7 + 0xf6bb4b60, 16);\n        b = c + rol32((c ^ d ^ a) + b + xa + 0xbebfbc70, 23);\n        a = b + rol32((b ^ c ^ d) + a + xd + 0x289b7ec6, 4);\n        d = a + rol32((a ^ b ^ c) + d + x0 + 0xeaa127fa, 11);\n        c = d + rol32((d ^ a ^ b) + c + x3 + 0xd4ef3085, 16);\n        b = c + rol32((c ^ d ^ a) + b + x6 + 0x04881d05, 23);\n        a = b + rol32((b ^ c ^ d) + a + x9 + 0xd9d4d039, 4);\n        d = a + rol32((a ^ b ^ c) + d + xc + 0xe6db99e5, 11);\n        c = d + rol32((d ^ a ^ b) + c + xf + 0x1fa27cf8, 16);\n        b = c + rol32((c ^ d ^ a) + b + x2 + 0xc4ac5665, 23);\n\n        // 第 4 轮\n        a = b + rol32((c ^ (b | ~d)) + a + x0 + 0xf4292244, 6);\n        d = a + rol32((b ^ (a | ~c)) + d + x7 + 0x432aff97, 10);\n        c = d + rol32((a ^ (d | ~b)) + c + xe + 0xab9423a7, 15);\n        b = c + rol32((d ^ (c | ~a)) + b + x5 + 0xfc93a039, 21);\n        a = b + rol32((c ^ (b | ~d)) + a + xc + 0x655b59c3, 6);\n        d = a + rol32((b ^ (a | ~c)) + d + x3 + 0x8f0ccc92, 10);\n        c = d + rol32((a ^ (d | ~b)) + c + xa + 0xffeff47d, 15);\n        b = c + rol32((d ^ (c | ~a)) + b + x1 + 0x85845dd1, 21);\n        a = b + rol32((c ^ (b | ~d)) + a + x8 + 0x6fa87e4f, 6);\n        d = a + rol32((b ^ (a | ~c)) + d + xf + 0xfe2ce6e0, 10);\n        c = d + rol32((a ^ (d | ~b)) + c + x6 + 0xa3014314, 15);\n        b = c + rol32((d ^ (c | ~a)) + b + xd + 0x4e0811a1, 21);\n        a = b + rol32((c ^ (b | ~d)) + a + x4 + 0xf7537e82, 6);\n        d = a + rol32((b ^ (a | ~c)) + d + xb + 0xbd3af235, 10);\n        c = d + rol32((a ^ (d | ~b)) + c + x2 + 0x2ad7d2bb, 15);\n        b = c + rol32((d ^ (c | ~a)) + b + x9 + 0xeb86d391, 21);\n\n        this.a = (this.a + a) >>> 0;\n        this.b = (this.b + b) >>> 0;\n        this.c = (this.c + c) >>> 0;\n        this.d = (this.d + d) >>> 0;\n    }\n\n    /**\n     * 更新内部状态。\n     * @param data - 要更新的数据，数据大小不能超过 2^32 字节。\n     */\n    update(data: DataSource): this {\n        const msg = dataSourceToBytes(data);\n\n        let pos = this.pos;\n        const free = BLOCK_SIZE - pos;\n\n        if (msg.length < free) {\n            this.block.set(msg, pos);\n            pos += msg.length;\n        } else {\n            // 哈希第一个块\n            this.block.set(msg.slice(0, free), pos);\n            this.hash(this.block);\n\n            // 哈希尽可能多的块\n            let i = free;\n            while (i + BLOCK_SIZE <= msg.length) {\n                this.hash(msg.slice(i, i + BLOCK_SIZE));\n                i += BLOCK_SIZE;\n            }\n\n            // 存储剩余数据\n            this.block.fill(0).set(msg.slice(i), 0);\n            pos = msg.length - i;\n        }\n\n        this.pos = pos;\n        this.addLength(msg.length);\n\n        return this;\n    }\n\n    /**\n     * 返回最终的哈希值。\n     */\n    digest(): ArrayBuffer {\n        let padLen = BLOCK_SIZE - this.pos;\n        if (padLen < 9) padLen += BLOCK_SIZE;\n\n        const pad = new Uint8Array(padLen);\n\n        pad[0] = 0x80;\n\n        const n0 = this.n0 << 3;\n        const n1 = (this.n1 << 3) | (this.n0 >>> 29);\n        pad[pad.length - 8] = n0 & 0xff;\n        pad[pad.length - 7] = (n0 >>> 8) & 0xff;\n        pad[pad.length - 6] = (n0 >>> 16) & 0xff;\n        pad[pad.length - 5] = (n0 >>> 24) & 0xff;\n        pad[pad.length - 4] = n1 & 0xff;\n        pad[pad.length - 3] = (n1 >>> 8) & 0xff;\n        pad[pad.length - 2] = (n1 >>> 16) & 0xff;\n        pad[pad.length - 1] = (n1 >>> 24) & 0xff;\n\n        this.update(pad.buffer);\n\n        const hash = new ArrayBuffer(16);\n        const hashView = new DataView(hash);\n        hashView.setUint32(0, this.a, true);\n        hashView.setUint32(4, this.b, true);\n        hashView.setUint32(8, this.c, true);\n        hashView.setUint32(12, this.d, true);\n\n        return hash;\n    }\n\n    /**\n     * 以十六进制字符串形式返回哈希值。\n     */\n    toString(): string {\n        return encodeHex(this.digest());\n    }\n}","import type { DataSource } from '../../defines.ts';\nimport { Md5 } from './md5.ts';\n\nexport { Md5 } from './md5.ts';\n\n/**\n * 计算字符串或 Buffer 的 MD5 值。\n * @param data - 需要计算 MD5 值的数据，可以是字符串或 BufferSource。\n * @returns 计算得到的 MD5 十六进制字符串（32 位）。\n * @since 1.0.0\n * @example\n * ```ts\n * const hash = md5('Hello, World!');\n * console.log(hash); // '65a8e27d8879283831b664bd8b7f0ad4'\n * ```\n */\nexport function md5(data: DataSource): string {\n    return new Md5().update(data).toString();\n}","/**\n * @internal\n * 小游戏平台的随机数生成实现。\n */\n\nimport { Lazy, type AsyncIOResult } from 'happy-rusty';\nimport { encodeHex } from '../../codec/mod.ts';\nimport { asyncIOResultify } from '../../utils/mod.ts';\nimport type { UUID } from './random_defines.ts';\n\n/**\n * 缓存加密模块。\n */\nconst cryptoManager = /*#__PURE__*/ Lazy(() => wx.getUserCryptoManager());\n\n/**\n * 生成指定长度的加密随机字节数组。\n * @param length - 要生成的随机字节数。\n * @returns 返回包含随机字节的 Uint8Array。\n */\nexport async function getRandomValues(length: number): AsyncIOResult<Uint8Array<ArrayBuffer>> {\n    const result = await asyncIOResultify(cryptoManager.force().getRandomValues)({\n        length,\n    });\n\n    return result.map(x => new Uint8Array(x.randomValues));\n}\n\n/**\n * 生成符合 RFC 4122 规范的 UUID v4。\n * @returns 返回生成的 UUID 字符串。\n */\nexport async function randomUUID(): AsyncIOResult<UUID> {\n    const bytesRes = await getRandomValues(16);\n\n    return bytesRes.map<UUID>(bytes => {\n        // 设置版本号（4）和变体（8, 9, A, B）\n        bytes[6] = (bytes[6] & 0x0f) | 0x40; // 0100xxxx\n        bytes[8] = (bytes[8] & 0x3f) | 0x80; // 10xxxxxx\n\n        const hex = encodeHex(bytes);\n        return `${ hex.slice(0, 8) }-${ hex.slice(8, 12) }-${ hex.slice(12, 16) }-${ hex.slice(16, 20) }-${ hex.slice(20) }`;\n    });\n}","/**\n * @internal\n * Web 平台的随机数生成实现。\n */\n\nimport { tryResult, type IOResult } from 'happy-rusty';\nimport type { UUID } from './random_defines.ts';\n\n/**\n * 生成指定长度的加密随机字节数组。\n * @param length - 要生成的随机字节数。\n * @returns 返回包含随机字节的 Uint8Array。\n */\nexport function getRandomValues(length: number): IOResult<Uint8Array<ArrayBuffer>> {\n    const bytes = new Uint8Array(length);\n\n    return tryResult(() => crypto.getRandomValues(bytes));\n}\n\n/**\n * 生成符合 RFC 4122 规范的 UUID v4。\n * @returns 返回生成的 UUID 字符串。\n */\nexport function randomUUID(): UUID {\n    return crypto.randomUUID();\n}","import { Ok, type AsyncIOResult } from 'happy-rusty';\nimport { IS_MINA } from '../../../macros/env.ts';\nimport { validatePositiveInteger } from '../../internal/mod.ts';\nimport {\n    getRandomValues as minaGetRandomValues,\n    randomUUID as minaRandomUUID,\n} from './mina_random.ts';\nimport type { UUID } from './random_defines.ts';\nimport {\n    getRandomValues as webGetRandomValues,\n    randomUUID as webRandomUUID,\n} from './web_random.ts';\n\nexport * from './random_defines.ts';\n\n/**\n * 获取密码学安全的随机数。\n * @param length - 要生成的随机字节数。\n * @returns 包含随机数据的 Uint8Array，封装在 IOResult 中。\n * @since 1.7.0\n * @example\n * ```ts\n * const result = await getRandomValues(16);\n * if (result.isOk()) {\n *     console.log(result.unwrap()); // Uint8Array(16) [...]\n * }\n * ```\n */\nexport function getRandomValues(length: number): AsyncIOResult<Uint8Array<ArrayBuffer>> {\n    const validateResult = validatePositiveInteger(length, 'length');\n    if (validateResult.isErr()) {\n        return Promise.resolve(validateResult.asErr());\n    }\n\n    return IS_MINA\n        ? minaGetRandomValues(length)\n        : Promise.resolve(webGetRandomValues(length));\n}\n\n/**\n * 生成符合 RFC 4122 标准的 UUID v4。\n * @returns UUID 字符串，封装在 IOResult 中。\n * @since 1.7.0\n * @example\n * ```ts\n * const result = await randomUUID();\n * if (result.isOk()) {\n *     console.log(result.unwrap()); // 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'\n * }\n * ```\n */\nexport function randomUUID(): AsyncIOResult<UUID> {\n    return IS_MINA\n        ? minaRandomUUID()\n        : Promise.resolve(Ok(webRandomUUID()));\n}","/**\n * @internal\n * 小游戏平台的 RSA 加密实现。\n */\n\nimport { Ok, tryResult, type AsyncIOResult, type IOResult } from 'happy-rusty';\nimport { importPublicKey as importKey, sha1, sha256, sha384, sha512 } from 'rsa-oaep-encryption';\nimport { decodeUtf8, encodeBase64 } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { RSAPublicKey, SHA } from '../crypto_defines.ts';\n\n/**\n * 从 PEM 编码的字符串导入用于加密的公钥。\n * @param pem - PEM 编码的字符串。\n * @param hash - 哈希算法。\n * @returns RSA 公钥对象。\n */\nexport function importPublicKey(pem: string, hash: SHA): AsyncIOResult<RSAPublicKey> {\n    const publicKeyRes = tryResult(() => importKey(pem));\n    if (publicKeyRes.isErr()) return Promise.resolve(publicKeyRes.asErr());\n\n    const shaFactory = getShaFactory(hash);\n    const publicKey = publicKeyRes.unwrap();\n\n    const encrypt = (data: DataSource): IOResult<ArrayBuffer> => {\n        return tryResult(() => {\n            const decodedData = typeof data === 'string'\n                ? data\n                // 可能抛异常\n                : decodeUtf8(data);\n            return publicKey.encrypt(decodedData, shaFactory.create());\n        });\n    };\n\n    return Promise.resolve(Ok({\n        encrypt(data: DataSource): AsyncIOResult<ArrayBuffer> {\n            return Promise.resolve(encrypt(data));\n        },\n\n        encryptToString(data: DataSource): AsyncIOResult<string> {\n            return Promise.resolve(encrypt(data).map(encodeBase64));\n        },\n    }));\n}\n\n// #region Internal Functions\n\n/**\n * 根据算法名称获取 SHA 哈希工厂。\n */\nfunction getShaFactory(hash: SHA): typeof sha1 {\n    switch (hash) {\n        case 'SHA-1': {\n            return sha1;\n        }\n        case 'SHA-256': {\n            return sha256;\n        }\n        case 'SHA-384': {\n            return sha384;\n        }\n        case 'SHA-512': {\n            return sha512;\n        }\n    }\n}\n\n// #endregion","/**\n * @internal\n * Web 平台的 RSA 加密实现。\n */\n\nimport { Err, tryAsyncResult, type AsyncIOResult } from 'happy-rusty';\nimport { dataSourceToBytes } from '../../codec/helpers.ts';\nimport { decodeByteString, encodeBase64 } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { RSAPublicKey, SHA } from '../crypto_defines.ts';\n\n/**\n * 从 PEM 编码的字符串导入用于加密的公钥。\n * @param pem - PEM 编码的字符串。\n * @param hash - 哈希算法。\n * @returns RSA 公钥对象。\n */\nexport function importPublicKey(pem: string, hash: SHA): AsyncIOResult<RSAPublicKey> {\n    const rMessage = /\\s*-----BEGIN ([A-Z0-9- ]+)-----\\r?\\n?([\\x21-\\x7e\\s]+?(?:\\r?\\n\\r?\\n))?([:A-Za-z0-9+/=\\s]+?)-----END \\1-----/g;\n    const match = rMessage.exec(pem);\n\n    if (!match) {\n        return Promise.resolve(Err(new TypeError('Invalid PEM formatted message')));\n    }\n\n    pem = match[3];\n\n    return tryAsyncResult(async () => {\n        const keyData = decodeByteString(atob(pem));\n\n        const publicKey = await crypto.subtle.importKey(\n            'spki',\n            keyData,\n            {\n                name: 'RSA-OAEP',\n                hash,\n            },\n            false,\n            [\n                'encrypt',\n            ],\n        );\n\n        return {\n            encrypt(data: DataSource): AsyncIOResult<ArrayBuffer> {\n                return encrypt(publicKey, data);\n            },\n\n            async encryptToString(data: DataSource): AsyncIOResult<string> {\n                const result = await encrypt(publicKey, data);\n                return result.map(encodeBase64);\n            },\n        };\n    });\n}\n\n// #region Internal Functions\n\n/**\n * 使用公钥加密数据。\n */\nfunction encrypt(publicKey: CryptoKey, data: DataSource): AsyncIOResult<ArrayBuffer> {\n    return tryAsyncResult(() => {\n        return crypto.subtle.encrypt(\n            {\n                name: 'RSA-OAEP',\n            },\n            publicKey,\n            dataSourceToBytes(data),\n        );\n    });\n}\n\n// #endregion","import { Err, type AsyncIOResult } from 'happy-rusty';\nimport { IS_MINA } from '../../../macros/env.ts';\nimport type { RSAPublicKey, SHA } from '../crypto_defines.ts';\nimport { importPublicKey as minaImportPublicKey } from './mina_rsa.ts';\nimport { importPublicKey as webImportPublicKey } from './web_rsa.ts';\n\n/**\n * 从 PEM 格式的字符串导入 RSA 公钥，用于加密操作。\n * @param pem - PEM 格式的公钥字符串。\n * @param hash - 用于 OAEP 填充的哈希算法（SHA-1、SHA-256、SHA-384 或 SHA-512）。\n * @returns RSA 公钥对象，包含 encrypt 方法用于加密数据。\n * @since 1.6.0\n * @example\n * ```ts\n * const publicKey = (await importPublicKey(pemString, 'SHA-256')).unwrap();\n *\n * // 加密并返回 ArrayBuffer\n * const encrypted = (await publicKey.encrypt('Hello, World!')).unwrap();\n *\n * // 加密并返回 Base64 字符串\n * const encryptedStr = (await publicKey.encryptToString('Hello, World!')).unwrap();\n * ```\n */\nexport function importPublicKey(pem: string, hash: SHA): AsyncIOResult<RSAPublicKey> {\n    if (\n        hash !== 'SHA-1'\n        && hash !== 'SHA-256'\n        && hash !== 'SHA-384'\n        && hash !== 'SHA-512'\n    ) {\n        return Promise.resolve(Err(new TypeError(`Unsupported hash algorithm: ${hash}`)));\n    }\n\n    return (IS_MINA ? minaImportPublicKey : webImportPublicKey)(pem, hash);\n}","/**\n * @internal\n * 小游戏平台的 SHA 哈希实现。\n */\n\nimport { sha1 as SHA1, sha256 as SHA256, sha384 as SHA384, sha512 as SHA512 } from 'rsa-oaep-encryption';\nimport { encodeByteString } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\n\n/**\n * 计算 SHA-1 哈希值。\n * @param data - 要计算哈希的数据。\n * @returns 返回十六进制格式的哈希字符串。\n */\nexport function sha1(data: DataSource): string {\n    return SHA1.create().update(encodeByteString(data)).digest().toHex();\n}\n\n/**\n * 计算 SHA-256 哈希值。\n * @param data - 要计算哈希的数据。\n * @returns 返回十六进制格式的哈希字符串。\n */\nexport function sha256(data: DataSource): string {\n    return SHA256.create().update(encodeByteString(data)).digest().toHex();\n}\n\n/**\n * 计算 SHA-384 哈希值。\n * @param data - 要计算哈希的数据。\n * @returns 返回十六进制格式的哈希字符串。\n */\nexport function sha384(data: DataSource): string {\n    return SHA384.create().update(encodeByteString(data)).digest().toHex();\n}\n\n/**\n * 计算 SHA-512 哈希值。\n * @param data - 要计算哈希的数据。\n * @returns 返回十六进制格式的哈希字符串。\n */\nexport function sha512(data: DataSource): string {\n    return SHA512.create().update(encodeByteString(data)).digest().toHex();\n}","/**\n * @internal\n * Web 平台的 SHA 哈希实现。\n */\n\nimport { tryAsyncResult, type AsyncIOResult } from 'happy-rusty';\nimport { dataSourceToBytes } from '../../codec/helpers.ts';\nimport { encodeHex } from '../../codec/mod.ts';\nimport type { DataSource } from '../../defines.ts';\nimport type { SHA } from '../crypto_defines.ts';\n\n/**\n * 根据不同 SHA 算法计算字符串或者 buffer 的哈希值，结果用16进制字符串表示。\n * @param data - 需要计算哈希值的数据。\n * @param hash - SHA 算法。\n * @returns 计算得到的哈希值。\n */\nexport function sha(data: DataSource, hash: SHA): AsyncIOResult<string> {\n    return tryAsyncResult(async () => {\n        const digest = await crypto.subtle.digest(hash, dataSourceToBytes(data));\n        return encodeHex(digest);\n    });\n}","import { Ok, type AsyncIOResult } from 'happy-rusty';\nimport { IS_MINA } from '../../../macros/env.ts';\nimport type { DataSource } from '../../defines.ts';\nimport { sha1 as pureSha1, sha256 as pureSha256, sha384 as pureSha384, sha512 as pureSha512 } from './sha.ts';\nimport { sha as webSHA } from './web_sha.ts';\n\n/**\n * 计算数据的 SHA-1 哈希值。\n * @param data - 需要计算哈希的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的哈希字符串。\n * @since 1.6.0\n * @example\n * ```ts\n * const hash = await sha1('Hello, World!');\n * if (hash.isOk()) {\n *     console.log(hash.unwrap()); // 十六进制哈希字符串\n * }\n * ```\n */\nexport function sha1(data: DataSource): AsyncIOResult<string> {\n    return IS_MINA\n        ? Promise.resolve(Ok(pureSha1(data)))\n        : webSHA(data, 'SHA-1');\n}\n\n/**\n * 计算数据的 SHA-256 哈希值。\n * @param data - 需要计算哈希的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的哈希字符串。\n * @since 1.0.0\n * @example\n * ```ts\n * const hash = await sha256('Hello, World!');\n * if (hash.isOk()) {\n *     console.log(hash.unwrap()); // 十六进制哈希字符串\n * }\n * ```\n */\nexport function sha256(data: DataSource): AsyncIOResult<string> {\n    return IS_MINA\n        ? Promise.resolve(Ok(pureSha256(data)))\n        : webSHA(data, 'SHA-256');\n}\n\n/**\n * 计算数据的 SHA-384 哈希值。\n * @param data - 需要计算哈希的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的哈希字符串。\n * @since 1.6.0\n * @example\n * ```ts\n * const hash = await sha384('Hello, World!');\n * if (hash.isOk()) {\n *     console.log(hash.unwrap()); // 十六进制哈希字符串\n * }\n * ```\n */\nexport function sha384(data: DataSource): AsyncIOResult<string> {\n    return IS_MINA\n        ? Promise.resolve(Ok(pureSha384(data)))\n        : webSHA(data, 'SHA-384');\n}\n\n/**\n * 计算数据的 SHA-512 哈希值。\n * @param data - 需要计算哈希的数据，可以是字符串或 BufferSource。\n * @returns 返回十六进制格式的哈希字符串。\n * @since 1.6.0\n * @example\n * ```ts\n * const hash = await sha512('Hello, World!');\n * if (hash.isOk()) {\n *     console.log(hash.unwrap()); // 十六进制哈希字符串\n * }\n * ```\n */\nexport function sha512(data: DataSource): AsyncIOResult<string> {\n    return IS_MINA\n        ? Promise.resolve(Ok(pureSha512(data)))\n        : webSHA(data, 'SHA-512');\n}\n"],"mappings":"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"}