pub struct DevicePublicKey { /* private fields */ }Expand description
Public types of device identity.
Device identity lives in qualia_dik — an independent, reusable crate that any
project needing “a pair of P-256 identity keys in platform hardware” can use
without accepting this crate’s vault format or sync protocol. They are re-exported
here so that downstream code does not have to depend on both crates.
DevicePublicKey and DeviceSignature are not secret — they are meant to be
printed on QR codes, written to logs, and propagated between devices — so they are
exported separately from the secret types, which makes it visible in an import
list which types may be printed freely.
设备身份公钥(SEC1 未压缩点,65 字节)。
公钥不是秘密:它会被放进二维码、写进日志、在设备之间传播。所以这个类型
实现 Debug 的完整输出,也可以 Clone,与秘密类型相反。
Implementations§
Source§impl DevicePublicKey
impl DevicePublicKey
Sourcepub fn from_sec1_bytes(bytes: &[u8]) -> Result<DevicePublicKey, Error>
pub fn from_sec1_bytes(bytes: &[u8]) -> Result<DevicePublicKey, Error>
从 SEC1 未压缩点构造,并验证它确实是 P-256 曲线上的点。
§为什么必须验证
公钥来自外部输入(二维码、网络)。P-256 上存在非法曲线攻击:把一个 不属于曲线、而属于某个小子群的点交给对方,可以从对方的运算结果里反推出 私钥信息。虽然 ECDSA 验签本身不像 ECDH 那样直接暴露私钥,但让一个非法点 进入后续任何运算都是不必要的风险。
这里用 p256 的完整解析(而不是只检查长度与前缀),它内部会做曲线方程
校验。因此非法点根本无法构造出本类型的值。
§错误
若长度不对、前缀不是 0x04、或该点不在 P-256 上,返回
Error::DevicePublicKeyInvalid。
Sourcepub const fn as_sec1_bytes(&self) -> &[u8; 65]
pub const fn as_sec1_bytes(&self) -> &[u8; 65]
取 SEC1 未压缩点字节。
Trait Implementations§
Source§impl Clone for DevicePublicKey
impl Clone for DevicePublicKey
Source§fn clone(&self) -> DevicePublicKey
fn clone(&self) -> DevicePublicKey
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more