package com.lingniu.ingest.protocol.gb32960.model;

/**
 * 数据单元加密方式。GB/T 32960.3-2025 表 2 "数据单元加密方式"。
 *
 * <p>当数据单元存在加密时，应<b>先加密后校验</b>，解析端<b>先校验后解密</b>。
 */
public enum EncryptType {
    /** 0x01：数据不加密。 */
    UNENCRYPTED(0x01),
    /** 0x02：RSA 算法加密。 */
    RSA(0x02),
    /** 0x03：AES（高级加密标准）算法加密。 */
    AES(0x03),
    /** 0x04：SM2 算法加密（2025 版新增）。 */
    SM2(0x04),
    /** 0x05：SM4 算法加密（2025 版新增）。 */
    SM4(0x05),
    /** 0xFE：异常。 */
    ABNORMAL(0xFE),
    /** 0xFF：无效。 */
    INVALID(0xFF);

    private final int code;

    EncryptType(int code) {
        this.code = code;
    }

    public int code() {
        return code;
    }

    public static EncryptType of(int code) {
        for (EncryptType e : values()) if (e.code == code) return e;
        return INVALID;
    }
}
