public ReceivingKey receiving_key()
        {
            IntPtr ptr_rk = SnarkDllApi.Key_SpendingKey_ReceivingKey(this.ToArray());

            byte[] by_rk = new byte[32];
            System.Runtime.InteropServices.Marshal.Copy(ptr_rk, by_rk, 0, 32);

            return(new ReceivingKey(new UInt256(by_rk)));

            //return new ReceivingKey(NoteEncryption.generate_privkey(this));
        }
        public ViewingKey viewing_key()
        {
            IntPtr ptr_vk = SnarkDllApi.Key_SpendingKey_ReceivingKey(this.ToArray());

            byte[] by_a_pk   = new byte[32];
            byte[] by_sk_enc = new byte[32];
            System.Runtime.InteropServices.Marshal.Copy(ptr_vk, by_a_pk, 0, 32);
            System.Runtime.InteropServices.Marshal.Copy(ptr_vk + 32, by_sk_enc, 0, 32);

            return(new ViewingKey(new UInt256(by_a_pk), new ReceivingKey(new UInt256(by_sk_enc))));
            //return new ViewingKey(PRFClass.PRF_addr_a_pk(this), receiving_key());
        }