ps-hkey 0.1.0-34

This crate defines the hashkey format and provides methods for resolving them
Documentation
use ps_hash::Hash;

use crate::{Hkey, HkeyFromCompactError, DOUBLE_HASH_SIZE_COMPACT, HASH_SIZE_COMPACT};

impl Hkey {
    pub fn from_compact(bytes: &[u8]) -> Result<Self, HkeyFromCompactError> {
        match bytes.len() {
            HASH_SIZE_COMPACT => Ok(Self::Direct(Hash::validate(bytes)?)),

            DOUBLE_HASH_SIZE_COMPACT => {
                let hash = Hash::validate(&bytes[..HASH_SIZE_COMPACT])?;
                let key = Hash::validate(&bytes[HASH_SIZE_COMPACT..])?;

                if bytes[0] & 1 == 0 {
                    Ok(Self::Encrypted(hash, key))
                } else {
                    Ok(Self::ListRef(hash, key))
                }
            }

            _ => Self::from_raw(bytes).map_err(Into::into),
        }
    }
}