seckey 0.12.1

Use `memsec` protected secret memory.
Documentation
use seckey::free;


#[test]
fn free_test_ref() {
    pub struct Bar(u32);

    impl Drop for Bar {
        fn drop(&mut self) {
            assert_eq!(self.0, 0x42);
            self.0 += 1;
        }
    }

    let mut bar = Bar(0x42);

    {
        free(&mut bar);
    }

    assert_eq!(bar.0, 0x42);
}

#[test]
fn free_test_drop() {
    static mut X: usize = 0;

    #[derive(Debug)] struct Bar(usize);
    #[derive(Debug)] struct Baz<T>(T);
    impl Drop for Bar {
        fn drop(&mut self) {
            unsafe {
                X += 1;
                assert_eq!(
                    self.0,
                    if X == 2 { 3 } else { X }
                );
            }
        }
    }

    {
        let bar = Bar(1);
        free(bar);
    }
    assert_eq!(unsafe { X }, 1);

    {
        let bar = Bar(3);
        free(&bar);
    }
    assert_eq!(unsafe { X }, 2);

    {
        let baz = Baz(Bar(3));
        free(baz);
    }
    assert_eq!(unsafe { X }, 3);
}