nnsdk 0.6.2

Cleanroom reverse-engineered bindings for nnsdk (Nintendo Switch SDK)
Documentation
use alloc::{vec, vec::Vec};

#[allow(unused_imports)]
use self::super::root;
pub mod detail;
#[repr(C)]
#[derive(Debug, Copy, Clone)]
pub struct Sha256Context {
    _unused: [u8; 0],
}

extern "C" {
    #[link_name = "\u{1}_ZN2nn6crypto18GenerateSha256HashEPvmPKvm"]
    pub fn GenerateSha256Hash(
        out_hash: *mut u8,
        out_len: root::ulong,
        data: *const u8,
        data_len: root::ulong,
    );
}

pub fn generate_sha256_hash(data: &mut [u8]) -> Vec<u8> {
    let out_len = 32;
    let mut out_hash = vec![0; out_len];
    unsafe {
        GenerateSha256Hash(out_hash.as_mut_ptr(), out_len as u64, data.as_mut_ptr(), data.len() as u64);
    }
    return out_hash;
}

extern "C" {
    #[link_name = "\u{1}_ZN2nn6crypto16DecryptAes128CbcEPvmPKvmS3_mS3_m"]
    pub fn DecryptAes128Cbc(
        out_data: *mut u8,
        out_len: u64,
        key: *const u8,
        key_len: u64,
        iv: *const u8,
        iv_len: u64,
        encrypted_data: *const u8,
        encrypted_data_len: u64,
    );
}


extern "C" {
    #[link_name = "\u{1}_ZN2nn6crypto16EncryptAes128CbcEPvmPKvmS3_mS3_m"]
    pub fn EncryptAes128Cbc(
        out_data: *mut u8,
        out_len: u64,
        key: *const u8,
        key_len: u64,
        iv: *const u8,
        iv_len: u64,
        decrypted_data: *const u8,
        decrypted_data_len: u64,
    );
}


extern "C" {
    #[link_name = "\u{1}_ZN2nn6crypto16DecryptAes128CcmEPvmS1_mPKvmS3_mS3_mS3_mm"]
    pub fn DecryptAes128Ccm(
        arg1: *mut u8,
        arg2: u64,
        arg3: *mut u8,
        arg4: u64,
        arg5: *const u8,
        arg6: u64,
        arg7: *const u8,
        arg8: u64,
        arg9: *const u8,
        arg10: u64,
        arg11: *const u8,
        arg12: u64,
        arg13: u64,
    );
}