The vulnerability exists in the sm2 crate's public-key encryption implementation. The core issue lies in the internal decrypt function located in sm2/src/pke/decrypting.rs. This function uses slice::split_at to parse the provided ciphertext without first validating its length. As confirmed by the patch, the vulnerable code let (c1, c) = cipher.split_at(c1_len as usize); was replaced with a safe alternative ciphertext.split_at_checked(c1_len as usize).ok_or(Error)?;. If an attacker provides a ciphertext that is shorter than the expected length, the split_at call will panic, causing the thread to unwind and potentially crashing the entire application, resulting in a denial of service. The vulnerability is exposed through several public methods of the DecryptingKey struct, namely decrypt, decrypt_der, and decrypt_digest, which all act as entry points and pass untrusted input to the vulnerable internal decrypt function. The provided proofs-of-concept demonstrate how to trigger the panic by calling DecryptingKey::decrypt with a short buffer and DecryptingKey::decrypt_der with a crafted ASN.1 structure.