signcryption 0.1.3

Library implementing the Toorani-Beheshti signcryption scheme instantiated over Ristretto255 or Ed25519
Documentation
use signcryption::*;

const SENDER_ID: [u8; 6] = *b"sender";
const RECIPIENT_ID: [u8; 9] = *b"recipient";
const INFO: [u8; 24] = [88u8; 24];
const SENDER_PK: [u8; PUBLICKEYBYTES] = [ 92, 127, 15, 236, 22, 65, 66, 152, 106, 218, 24, 223, 124, 9, 80, 217, 56, 39, 146, 94, 206, 6, 176, 230, 161, 36, 123, 106, 58, 48, 76, 124,];
const SIG: [u8; SIGNBYTES] = [252, 253, 22, 187, 250, 103, 209, 189, 112, 108, 19, 5, 4, 65, 153, 172, 71, 227, 208, 254, 83, 28, 201, 115, 181, 38, 64, 45, 128, 119, 25, 79, 84, 78, 114, 37, 39, 254, 98, 254, 162, 181, 217, 47, 198, 161, 35, 131, 142, 191, 64, 236, 218, 223, 41, 238, 178, 199, 179, 124, 251, 207, 53, 9, ];
const CIPHERTEXT: [u8; 20] = [80, 147, 160, 231, 249, 76, 142, 6, 187, 21, 245, 55, 231, 148, 125, 168, 102, 21, 56, 139];


#[test]
fn before_valid_ristretto255() {
  let mut state = SignState::default();
  let mut crypt_key = [0u8; SHAREDBYTES];
  let expected_crypt_key = [23, 146, 18, 164, 242, 57, 76, 92, 129, 40, 222, 98, 38, 161, 25, 37, 37, 81, 122, 188, 39, 210, 159, 2, 79, 139, 122, 145, 47, 103, 220, 40,];
  let sig = [164, 232, 163, 99, 155, 206, 153, 121, 119, 16, 106, 88, 245, 252, 163, 91, 108, 128, 142, 89, 117, 105, 20, 33, 133, 59, 255, 224, 32, 172, 73, 71, 249, 166, 46, 116, 128, 72, 246, 162, 32, 236, 12, 255, 22, 225, 95, 127, 223, 174, 113, 131, 180, 49, 109, 153, 200, 231, 130, 245, 179, 84, 121, 0];
  let recipient_sk = [ 0, 138, 239, 173, 100, 117, 118, 141, 204, 162, 184, 146, 27, 146, 65, 31, 107, 46, 221, 238, 118, 118, 171, 184, 148, 70, 77, 237, 106, 188, 151, 0,];
  verify_before(
    &mut state, &mut crypt_key, &sig, &SENDER_ID,
    &RECIPIENT_ID, &INFO, &SENDER_PK,
    &recipient_sk, Curve::Ristretto255
  ).unwrap(); 
  assert_eq!(crypt_key, expected_crypt_key);
}

#[test]
fn after_valid_ristretto255() {
  use libsodium_sys::crypto_generichash_state as HashState;
  let mut state = SignState {
    h: HashState { opaque: [0x48, 0xc9, 0xbd, 0xf2, 0x67, 0xe6, 0x9, 0x6a, 0x3b, 0xa7, 0xca, 0x84, 0x85, 0xae, 0x67, 0xbb, 0x2b, 0xf8, 0x94, 0xfe, 0x72, 0xf3, 0x6e, 0x3c, 0xf1, 0x36, 0x1d, 0x5f, 0x3a, 0xf5, 0x4f, 0xa5, 0xd1, 0x82, 0xe6, 0xad, 0x7f, 0x52, 0xe, 0x51, 0x1f, 0x6c, 0x3e, 0x2b, 0x8c, 0x68, 0x5, 0x9b, 0x6b, 0xbd, 0x41, 0xfb, 0xab, 0xd9, 0x83, 0x1f, 0x79, 0x21, 0x7e, 0x13, 0x19, 0xcd, 0xe0, 0x5b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x73, 0x69, 0x67, 0x6e, 0x5f, 0x6b, 0x65, 0x79, 0xfc, 0xfd, 0x16, 0xbb, 0xfa, 0x67, 0xd1, 0xbd, 0x70, 0x6c, 0x13, 0x5, 0x4, 0x41, 0x99, 0xac, 0x47, 0xe3, 0xd0, 0xfe, 0x53, 0x1c, 0xc9, 0x73, 0xb5, 0x26, 0x40, 0x2d, 0x80, 0x77, 0x19, 0x4f, 0x6, 0x73, 0x65, 0x6e, 0x64, 0x65, 0x72, 0x9, 0x72, 0x65, 0x63, 0x69, 0x70, 0x69, 0x65, 0x6e, 0x74, 0x18, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x58, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x52, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0,] },
    nonce: [0u8; 32],
    r: [0u8; 32],
    challenge: [0u8; 32],
  };
  assert!(
    verify_after(
      &mut state, &SIG, &SENDER_PK, 
      &CIPHERTEXT, Curve::Ristretto255
    ).is_ok()
  );
}

#[test]
fn public_valid_ristretto255() {
  assert!(
    verify_public(
      &SIG, &SENDER_ID, &RECIPIENT_ID, &INFO, &SENDER_PK, 
      &CIPHERTEXT, Curve::Ristretto255
    ).is_ok()
  );
}

#[test]
fn public_invalid_ristretto255() {
  let mut corrupted_sig = SIG.clone();
  corrupted_sig[0] = 0;
  assert!(
    verify_public(
      &corrupted_sig, &SENDER_ID, &RECIPIENT_ID, &INFO, &SENDER_PK, 
      &CIPHERTEXT, Curve::Ristretto255
    ).is_err()
  );
}