Skip to content

Обработка ошибок ​

Всё, что отвергнуто из-за ввода, наследует SmCryptoError и делится по тому, что нужно исправить — проблему ключа или проблему шифротекста:

text
SmCryptoError
├── InvalidKeyError                плохой ключ / скаляр
│   └── InvalidPublicKeyError      точка не на кривой, координаты вне диапазона
└── CiphertextError                плохой шифротекст / подпись / сообщение протокола
    ├── InvalidCiphertextError     нарушена структура (длина, ASN.1, кодировка точки)
    └── DecryptionError            структура верна, но проверка не прошла
ts
import { isSmCryptoError } from 'sm-crypto-wasm';

try {
  sm2.decrypt(priv, ct);
} catch (e) {
  if (isSmCryptoError(e)) { /* библиотека отвергла ввод */ }
}

Неверные типы аргументов не оборачиваются ​

СитуацияБросается
null / number / неверная формаTypeError
Пустая строка на входеTypeError
Лимит длины, отрицательный счётчик, неизвестное значение перечисленияRangeError

Это остаётся нативным — ошибка программиста, а не «криптографический отказ».

safeMode: null вместо исключения ​

ts
const pt  = sm2.decrypt(priv, ct, { safeMode: true });                          // string | null
const pt2 = sm4.decryptGCM(key, iv, ct, tag, { aad, safeMode: true });          // string | null
const pt3 = sm9.decrypt(ke, id, ct, { safeMode: true });                        // string | null

safeMode глушит только отказы со стороны шифротекста; ошибки типов всё равно бросаются.

verify не бросает на плохом ключе

sm2.verify / sm9.verify возвращают false для точки не на кривой или неверной подписи — «не прошло» это обычный результат, а не исключение. Исключение бросается только при структурно неверной длине подписи.

Полный справочник

Китайская страница содержит таблицу типичных ошибок по алгоритмам.

Лицензия Apache-2.0