everscale-types 0.1.2

A set of primitive types and utilities for the Everscale blockchain.
Documentation
use std::borrow::Cow;

use ed25519_dalek::Signer;

/// Signs arbitrary data using the key and optional signature id.
pub fn sign_with_signature_id(
    key: &ed25519_dalek::SigningKey,
    data: &[u8],
    signature_id: Option<i32>,
) -> ed25519_dalek::Signature {
    let data = extend_signature_with_id(data, signature_id);
    key.sign(&data)
}

/// Prepares arbitrary data for signing.
pub fn extend_signature_with_id(data: &[u8], signature_id: Option<i32>) -> Cow<'_, [u8]> {
    match signature_id {
        Some(signature_id) => {
            let mut result = Vec::with_capacity(4 + data.len());
            result.extend_from_slice(&signature_id.to_be_bytes());
            result.extend_from_slice(data);
            Cow::Owned(result)
        }
        None => Cow::Borrowed(data),
    }
}