@oh-expo/expo-crypto
v55.0.19-harmony.1
Published
expo-crypto 的 HarmonyOS 适配包(ExpoModule 原生模块双模块,expo-modules-core 体系)
Maintainers
Readme
@oh-expo/expo-crypto
让 expo-crypto(摘要/随机数/AES 加密)在 HarmonyOS / OpenHarmony 上运行的适配包。
通过 expo-modules-core 体系提供双原生模块:ExpoCrypto(摘要与随机数)+ ExpoCryptoAES
(EncryptionKey/SealedData sharedObject + AES-GCM 加密),接口收口自 [email protected] 权威 d.ts。
支持基线
| 项 | 值 |
| --- | --- |
| 适配目标 | [email protected] |
| 运行时底座 | @expo-harmony/[email protected](本地 HAR) |
| 鸿蒙 SDK | API 26(SDK 26.0.0 锚定,@ohos.security.cryptoFramework / @ohos.buffer / @ohos.util) |
| 权限 | 无 |
实现面(接口收口 + 诚实分级)
ExpoCrypto:getRandomValues(整数 TypedArray 填充)/ randomUUID(UUIDv4)/
digestString / digestStringAsync(SHA-1/SHA-256/SHA-384/SHA-512/MD5;hex/base64)/
digest(BufferSource → 输出 ByteView)。
ExpoCryptoAES:EncryptionKey.generate/import/bytes/encoded/size、
SealedData.fromCombined/fromParts/iv/tag/combined/ciphertext + encryptAsync/decryptAsync
(AES-128/192/256-GCM,16 字节 tag,key 内存安全擦除)。
诚实分级:MD2/MD4 为 iOS 专属算法(harmony 侧报 ERR_CRYPTO_DIGEST);AES-GCM 仅支持 16 字节 tag(Harmony 平台限制,ERR_CRYPTO_UNSUPPORTED_TAG_LENGTH)。
快速开始(宿主接入)
- 安装(npm):
npm install @oh-expo/expo-crypto(peer 自动带 expo-crypto 原包与 expo-modules-core); - 从
node_modules/@oh-expo/expo-crypto/local-hars/拷贝expo_crypto.har到宿主harmony/local-hars/,宿主oh-package.json5依赖"@oh-expo/expo-crypto": "file:local-hars/expo_crypto.har"(ohpm 公共源无 @oh-expo scope,本地 HAR 必须用相对路径); - expo-modules 体系模块经 expo-modules-core 运行时注册(无需改 RNOHPackagesFactory);
- JS 侧直接
import * as Crypto from 'expo-crypto'(对外契约由原包提供)。
构建与校验
pnpm har:prepare # hvigorw assembleHar → local-hars/expo_crypto.har
pnpm har:prepack # 发布前校验(必需文件 / scope / -harmony.N 版本 / HAR 产物)状态与来源
- ⚠️ 实现已落盘(接口收口自 npm 实包权威 d.ts,锚定 SDK 26 真实 API); 编译与宿主接入验证状态见 expo-harmony 主仓 [acceptance/ledger.md](S4 前置门口径)。
- 适配细节与接口规格:expo-harmony 主仓
docs/adaptations/expo-crypto.md。
