bindings.rs
   1  /* automatically generated by rust-bindgen 0.68.1 */
   2  
   3  pub type secret_word = usize;
   4  pub type secret_bool = usize;
   5  pub type byte = u8;
   6  #[repr(C)]
   7  #[repr(align(64))]
   8  #[derive(Copy, Clone)]
   9  pub struct ctt_sha256_context {
  10      message_schedule: [u32; 16usize],
  11      buf: [byte; 64usize],
  12      msgLen: u64,
  13  }
  14  #[test]
  15  fn bindgen_test_layout_ctt_sha256_context() {
  16      const UNINIT: ::core::mem::MaybeUninit<ctt_sha256_context> = ::core::mem::MaybeUninit::uninit();
  17      let ptr = UNINIT.as_ptr();
  18      assert_eq!(
  19          ::core::mem::size_of::<ctt_sha256_context>(),
  20          192usize,
  21          concat!("Size of: ", stringify!(ctt_sha256_context))
  22      );
  23      assert_eq!(
  24          ::core::mem::align_of::<ctt_sha256_context>(),
  25          64usize,
  26          concat!("Alignment of ", stringify!(ctt_sha256_context))
  27      );
  28      assert_eq!(
  29          unsafe { ::core::ptr::addr_of!((*ptr).message_schedule) as usize - ptr as usize },
  30          0usize,
  31          concat!(
  32              "Offset of field: ",
  33              stringify!(ctt_sha256_context),
  34              "::",
  35              stringify!(message_schedule)
  36          )
  37      );
  38      assert_eq!(
  39          unsafe { ::core::ptr::addr_of!((*ptr).buf) as usize - ptr as usize },
  40          64usize,
  41          concat!(
  42              "Offset of field: ",
  43              stringify!(ctt_sha256_context),
  44              "::",
  45              stringify!(buf)
  46          )
  47      );
  48      assert_eq!(
  49          unsafe { ::core::ptr::addr_of!((*ptr).msgLen) as usize - ptr as usize },
  50          128usize,
  51          concat!(
  52              "Offset of field: ",
  53              stringify!(ctt_sha256_context),
  54              "::",
  55              stringify!(msgLen)
  56          )
  57      );
  58  }
  59  extern "C" {
  60      #[doc = " Initialize or reinitialize a Sha256 context."]
  61      pub fn ctt_sha256_init(ctx: *mut ctt_sha256_context);
  62  }
  63  extern "C" {
  64      #[doc = " Append a message to a SHA256 context\n  for incremental SHA256 computation\n\n  Security note: the tail of your message might be stored\n  in an internal buffer.\n  if sensitive content is used, ensure that\n  `ctx.finish(...)` and `ctx.clear()` are called as soon as possible.\n  Additionally ensure that the message(s) passed were stored\n  in memory considered secure for your threat model.\n\n  For passwords and secret keys, you MUST NOT use raw SHA-256\n  use a Key Derivation Function instead (KDF)"]
  65      pub fn ctt_sha256_update(
  66          ctx: *mut ctt_sha256_context,
  67          message: *const byte,
  68          message_len: isize,
  69      );
  70  }
  71  extern "C" {
  72      #[doc = " Finalize a SHA256 computation and output the\n  message digest to the `digest` buffer.\n\n  Security note: this does not clear the internal buffer.\n  if sensitive content is used, use \"ctx.clear()\"\n  and also make sure that the message(s) passed were stored\n  in memory considered secure for your threat model.\n\n  For passwords and secret keys, you MUST NOT use raw SHA-256\n  use a Key Derivation Function instead (KDF)"]
  73      pub fn ctt_sha256_finish(ctx: *mut ctt_sha256_context, digest: *mut byte);
  74  }
  75  extern "C" {
  76      #[doc = " Clear the context internal buffers\n  Security note:\n  For passwords and secret keys, you MUST NOT use raw SHA-256\n  use a Key Derivation Function instead (KDF)"]
  77      pub fn ctt_sha256_clear(ctx: *mut ctt_sha256_context);
  78  }
  79  extern "C" {
  80      #[doc = " Compute the SHA-256 hash of message\n  and store the result in digest.\n  Optionally, clear the memory buffer used."]
  81      pub fn ctt_sha256_hash(
  82          digest: *mut byte,
  83          message: *const byte,
  84          message_len: isize,
  85          clear_memory: bool,
  86      );
  87  }
  88  #[repr(C)]
  89  #[derive(Copy, Clone)]
  90  pub struct bls12_381_fr {
  91      limbs: [secret_word; 4usize],
  92  }
  93  #[test]
  94  fn bindgen_test_layout_bls12_381_fr() {
  95      const UNINIT: ::core::mem::MaybeUninit<bls12_381_fr> = ::core::mem::MaybeUninit::uninit();
  96      let ptr = UNINIT.as_ptr();
  97      assert_eq!(
  98          ::core::mem::size_of::<bls12_381_fr>(),
  99          32usize,
 100          concat!("Size of: ", stringify!(bls12_381_fr))
 101      );
 102      assert_eq!(
 103          ::core::mem::align_of::<bls12_381_fr>(),
 104          8usize,
 105          concat!("Alignment of ", stringify!(bls12_381_fr))
 106      );
 107      assert_eq!(
 108          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
 109          0usize,
 110          concat!(
 111              "Offset of field: ",
 112              stringify!(bls12_381_fr),
 113              "::",
 114              stringify!(limbs)
 115          )
 116      );
 117  }
 118  #[repr(C)]
 119  #[derive(Copy, Clone)]
 120  pub struct bls12_381_fp {
 121      limbs: [secret_word; 6usize],
 122  }
 123  #[test]
 124  fn bindgen_test_layout_bls12_381_fp() {
 125      const UNINIT: ::core::mem::MaybeUninit<bls12_381_fp> = ::core::mem::MaybeUninit::uninit();
 126      let ptr = UNINIT.as_ptr();
 127      assert_eq!(
 128          ::core::mem::size_of::<bls12_381_fp>(),
 129          48usize,
 130          concat!("Size of: ", stringify!(bls12_381_fp))
 131      );
 132      assert_eq!(
 133          ::core::mem::align_of::<bls12_381_fp>(),
 134          8usize,
 135          concat!("Alignment of ", stringify!(bls12_381_fp))
 136      );
 137      assert_eq!(
 138          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
 139          0usize,
 140          concat!(
 141              "Offset of field: ",
 142              stringify!(bls12_381_fp),
 143              "::",
 144              stringify!(limbs)
 145          )
 146      );
 147  }
 148  #[repr(C)]
 149  #[derive(Copy, Clone)]
 150  pub struct bls12_381_fp2 {
 151      c: [bls12_381_fp; 2usize],
 152  }
 153  #[test]
 154  fn bindgen_test_layout_bls12_381_fp2() {
 155      const UNINIT: ::core::mem::MaybeUninit<bls12_381_fp2> = ::core::mem::MaybeUninit::uninit();
 156      let ptr = UNINIT.as_ptr();
 157      assert_eq!(
 158          ::core::mem::size_of::<bls12_381_fp2>(),
 159          96usize,
 160          concat!("Size of: ", stringify!(bls12_381_fp2))
 161      );
 162      assert_eq!(
 163          ::core::mem::align_of::<bls12_381_fp2>(),
 164          8usize,
 165          concat!("Alignment of ", stringify!(bls12_381_fp2))
 166      );
 167      assert_eq!(
 168          unsafe { ::core::ptr::addr_of!((*ptr).c) as usize - ptr as usize },
 169          0usize,
 170          concat!(
 171              "Offset of field: ",
 172              stringify!(bls12_381_fp2),
 173              "::",
 174              stringify!(c)
 175          )
 176      );
 177  }
 178  #[repr(C)]
 179  #[derive(Copy, Clone)]
 180  pub struct bls12_381_ec_g1_aff {
 181      x: bls12_381_fp,
 182      y: bls12_381_fp,
 183  }
 184  #[test]
 185  fn bindgen_test_layout_bls12_381_ec_g1_aff() {
 186      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g1_aff> =
 187          ::core::mem::MaybeUninit::uninit();
 188      let ptr = UNINIT.as_ptr();
 189      assert_eq!(
 190          ::core::mem::size_of::<bls12_381_ec_g1_aff>(),
 191          96usize,
 192          concat!("Size of: ", stringify!(bls12_381_ec_g1_aff))
 193      );
 194      assert_eq!(
 195          ::core::mem::align_of::<bls12_381_ec_g1_aff>(),
 196          8usize,
 197          concat!("Alignment of ", stringify!(bls12_381_ec_g1_aff))
 198      );
 199      assert_eq!(
 200          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 201          0usize,
 202          concat!(
 203              "Offset of field: ",
 204              stringify!(bls12_381_ec_g1_aff),
 205              "::",
 206              stringify!(x)
 207          )
 208      );
 209      assert_eq!(
 210          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 211          48usize,
 212          concat!(
 213              "Offset of field: ",
 214              stringify!(bls12_381_ec_g1_aff),
 215              "::",
 216              stringify!(y)
 217          )
 218      );
 219  }
 220  #[repr(C)]
 221  #[derive(Copy, Clone)]
 222  pub struct bls12_381_ec_g1_jac {
 223      x: bls12_381_fp,
 224      y: bls12_381_fp,
 225      z: bls12_381_fp,
 226  }
 227  #[test]
 228  fn bindgen_test_layout_bls12_381_ec_g1_jac() {
 229      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g1_jac> =
 230          ::core::mem::MaybeUninit::uninit();
 231      let ptr = UNINIT.as_ptr();
 232      assert_eq!(
 233          ::core::mem::size_of::<bls12_381_ec_g1_jac>(),
 234          144usize,
 235          concat!("Size of: ", stringify!(bls12_381_ec_g1_jac))
 236      );
 237      assert_eq!(
 238          ::core::mem::align_of::<bls12_381_ec_g1_jac>(),
 239          8usize,
 240          concat!("Alignment of ", stringify!(bls12_381_ec_g1_jac))
 241      );
 242      assert_eq!(
 243          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 244          0usize,
 245          concat!(
 246              "Offset of field: ",
 247              stringify!(bls12_381_ec_g1_jac),
 248              "::",
 249              stringify!(x)
 250          )
 251      );
 252      assert_eq!(
 253          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 254          48usize,
 255          concat!(
 256              "Offset of field: ",
 257              stringify!(bls12_381_ec_g1_jac),
 258              "::",
 259              stringify!(y)
 260          )
 261      );
 262      assert_eq!(
 263          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
 264          96usize,
 265          concat!(
 266              "Offset of field: ",
 267              stringify!(bls12_381_ec_g1_jac),
 268              "::",
 269              stringify!(z)
 270          )
 271      );
 272  }
 273  #[repr(C)]
 274  #[derive(Copy, Clone)]
 275  pub struct bls12_381_ec_g1_prj {
 276      x: bls12_381_fp,
 277      y: bls12_381_fp,
 278      z: bls12_381_fp,
 279  }
 280  #[test]
 281  fn bindgen_test_layout_bls12_381_ec_g1_prj() {
 282      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g1_prj> =
 283          ::core::mem::MaybeUninit::uninit();
 284      let ptr = UNINIT.as_ptr();
 285      assert_eq!(
 286          ::core::mem::size_of::<bls12_381_ec_g1_prj>(),
 287          144usize,
 288          concat!("Size of: ", stringify!(bls12_381_ec_g1_prj))
 289      );
 290      assert_eq!(
 291          ::core::mem::align_of::<bls12_381_ec_g1_prj>(),
 292          8usize,
 293          concat!("Alignment of ", stringify!(bls12_381_ec_g1_prj))
 294      );
 295      assert_eq!(
 296          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 297          0usize,
 298          concat!(
 299              "Offset of field: ",
 300              stringify!(bls12_381_ec_g1_prj),
 301              "::",
 302              stringify!(x)
 303          )
 304      );
 305      assert_eq!(
 306          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 307          48usize,
 308          concat!(
 309              "Offset of field: ",
 310              stringify!(bls12_381_ec_g1_prj),
 311              "::",
 312              stringify!(y)
 313          )
 314      );
 315      assert_eq!(
 316          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
 317          96usize,
 318          concat!(
 319              "Offset of field: ",
 320              stringify!(bls12_381_ec_g1_prj),
 321              "::",
 322              stringify!(z)
 323          )
 324      );
 325  }
 326  #[repr(C)]
 327  #[derive(Copy, Clone)]
 328  pub struct bls12_381_ec_g2_aff {
 329      x: bls12_381_fp2,
 330      y: bls12_381_fp2,
 331  }
 332  #[test]
 333  fn bindgen_test_layout_bls12_381_ec_g2_aff() {
 334      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g2_aff> =
 335          ::core::mem::MaybeUninit::uninit();
 336      let ptr = UNINIT.as_ptr();
 337      assert_eq!(
 338          ::core::mem::size_of::<bls12_381_ec_g2_aff>(),
 339          192usize,
 340          concat!("Size of: ", stringify!(bls12_381_ec_g2_aff))
 341      );
 342      assert_eq!(
 343          ::core::mem::align_of::<bls12_381_ec_g2_aff>(),
 344          8usize,
 345          concat!("Alignment of ", stringify!(bls12_381_ec_g2_aff))
 346      );
 347      assert_eq!(
 348          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 349          0usize,
 350          concat!(
 351              "Offset of field: ",
 352              stringify!(bls12_381_ec_g2_aff),
 353              "::",
 354              stringify!(x)
 355          )
 356      );
 357      assert_eq!(
 358          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 359          96usize,
 360          concat!(
 361              "Offset of field: ",
 362              stringify!(bls12_381_ec_g2_aff),
 363              "::",
 364              stringify!(y)
 365          )
 366      );
 367  }
 368  #[repr(C)]
 369  #[derive(Copy, Clone)]
 370  pub struct bls12_381_ec_g2_jac {
 371      x: bls12_381_fp2,
 372      y: bls12_381_fp2,
 373      z: bls12_381_fp2,
 374  }
 375  #[test]
 376  fn bindgen_test_layout_bls12_381_ec_g2_jac() {
 377      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g2_jac> =
 378          ::core::mem::MaybeUninit::uninit();
 379      let ptr = UNINIT.as_ptr();
 380      assert_eq!(
 381          ::core::mem::size_of::<bls12_381_ec_g2_jac>(),
 382          288usize,
 383          concat!("Size of: ", stringify!(bls12_381_ec_g2_jac))
 384      );
 385      assert_eq!(
 386          ::core::mem::align_of::<bls12_381_ec_g2_jac>(),
 387          8usize,
 388          concat!("Alignment of ", stringify!(bls12_381_ec_g2_jac))
 389      );
 390      assert_eq!(
 391          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 392          0usize,
 393          concat!(
 394              "Offset of field: ",
 395              stringify!(bls12_381_ec_g2_jac),
 396              "::",
 397              stringify!(x)
 398          )
 399      );
 400      assert_eq!(
 401          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 402          96usize,
 403          concat!(
 404              "Offset of field: ",
 405              stringify!(bls12_381_ec_g2_jac),
 406              "::",
 407              stringify!(y)
 408          )
 409      );
 410      assert_eq!(
 411          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
 412          192usize,
 413          concat!(
 414              "Offset of field: ",
 415              stringify!(bls12_381_ec_g2_jac),
 416              "::",
 417              stringify!(z)
 418          )
 419      );
 420  }
 421  #[repr(C)]
 422  #[derive(Copy, Clone)]
 423  pub struct bls12_381_ec_g2_prj {
 424      x: bls12_381_fp2,
 425      y: bls12_381_fp2,
 426      z: bls12_381_fp2,
 427  }
 428  #[test]
 429  fn bindgen_test_layout_bls12_381_ec_g2_prj() {
 430      const UNINIT: ::core::mem::MaybeUninit<bls12_381_ec_g2_prj> =
 431          ::core::mem::MaybeUninit::uninit();
 432      let ptr = UNINIT.as_ptr();
 433      assert_eq!(
 434          ::core::mem::size_of::<bls12_381_ec_g2_prj>(),
 435          288usize,
 436          concat!("Size of: ", stringify!(bls12_381_ec_g2_prj))
 437      );
 438      assert_eq!(
 439          ::core::mem::align_of::<bls12_381_ec_g2_prj>(),
 440          8usize,
 441          concat!("Alignment of ", stringify!(bls12_381_ec_g2_prj))
 442      );
 443      assert_eq!(
 444          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
 445          0usize,
 446          concat!(
 447              "Offset of field: ",
 448              stringify!(bls12_381_ec_g2_prj),
 449              "::",
 450              stringify!(x)
 451          )
 452      );
 453      assert_eq!(
 454          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
 455          96usize,
 456          concat!(
 457              "Offset of field: ",
 458              stringify!(bls12_381_ec_g2_prj),
 459              "::",
 460              stringify!(y)
 461          )
 462      );
 463      assert_eq!(
 464          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
 465          192usize,
 466          concat!(
 467              "Offset of field: ",
 468              stringify!(bls12_381_ec_g2_prj),
 469              "::",
 470              stringify!(z)
 471          )
 472      );
 473  }
 474  extern "C" {
 475      #[must_use]
 476      pub fn ctt_bls12_381_fr_unmarshalBE(
 477          dst: *mut bls12_381_fr,
 478          src: *const byte,
 479          src_len: isize,
 480      ) -> bool;
 481  }
 482  extern "C" {
 483      #[must_use]
 484      pub fn ctt_bls12_381_fr_marshalBE(
 485          dst: *mut byte,
 486          dst_len: isize,
 487          src: *const bls12_381_fr,
 488      ) -> bool;
 489  }
 490  extern "C" {
 491      pub fn ctt_bls12_381_fr_is_eq(a: *const bls12_381_fr, b: *const bls12_381_fr) -> secret_bool;
 492  }
 493  extern "C" {
 494      pub fn ctt_bls12_381_fr_is_zero(a: *const bls12_381_fr) -> secret_bool;
 495  }
 496  extern "C" {
 497      pub fn ctt_bls12_381_fr_is_one(a: *const bls12_381_fr) -> secret_bool;
 498  }
 499  extern "C" {
 500      pub fn ctt_bls12_381_fr_is_minus_one(a: *const bls12_381_fr) -> secret_bool;
 501  }
 502  extern "C" {
 503      pub fn ctt_bls12_381_fr_set_zero(a: *mut bls12_381_fr);
 504  }
 505  extern "C" {
 506      pub fn ctt_bls12_381_fr_set_one(a: *mut bls12_381_fr);
 507  }
 508  extern "C" {
 509      pub fn ctt_bls12_381_fr_set_minus_one(a: *mut bls12_381_fr);
 510  }
 511  extern "C" {
 512      pub fn ctt_bls12_381_fr_neg(r: *mut bls12_381_fr, a: *const bls12_381_fr);
 513  }
 514  extern "C" {
 515      pub fn ctt_bls12_381_fr_neg_in_place(a: *mut bls12_381_fr);
 516  }
 517  extern "C" {
 518      pub fn ctt_bls12_381_fr_sum(
 519          r: *mut bls12_381_fr,
 520          a: *const bls12_381_fr,
 521          b: *const bls12_381_fr,
 522      );
 523  }
 524  extern "C" {
 525      pub fn ctt_bls12_381_fr_add_in_place(a: *mut bls12_381_fr, b: *const bls12_381_fr);
 526  }
 527  extern "C" {
 528      pub fn ctt_bls12_381_fr_diff(
 529          r: *mut bls12_381_fr,
 530          a: *const bls12_381_fr,
 531          b: *const bls12_381_fr,
 532      );
 533  }
 534  extern "C" {
 535      pub fn ctt_bls12_381_fr_sub_in_place(a: *mut bls12_381_fr, b: *const bls12_381_fr);
 536  }
 537  extern "C" {
 538      pub fn ctt_bls12_381_fr_double(r: *mut bls12_381_fr, a: *const bls12_381_fr);
 539  }
 540  extern "C" {
 541      pub fn ctt_bls12_381_fr_double_in_place(a: *mut bls12_381_fr);
 542  }
 543  extern "C" {
 544      pub fn ctt_bls12_381_fr_prod(
 545          r: *mut bls12_381_fr,
 546          a: *const bls12_381_fr,
 547          b: *const bls12_381_fr,
 548      );
 549  }
 550  extern "C" {
 551      pub fn ctt_bls12_381_fr_mul_in_place(a: *mut bls12_381_fr, b: *const bls12_381_fr);
 552  }
 553  extern "C" {
 554      pub fn ctt_bls12_381_fr_square(r: *mut bls12_381_fr, a: *const bls12_381_fr);
 555  }
 556  extern "C" {
 557      pub fn ctt_bls12_381_fr_square_in_place(a: *mut bls12_381_fr);
 558  }
 559  extern "C" {
 560      pub fn ctt_bls12_381_fr_div2(a: *mut bls12_381_fr);
 561  }
 562  extern "C" {
 563      pub fn ctt_bls12_381_fr_inv(r: *mut bls12_381_fr, a: *const bls12_381_fr);
 564  }
 565  extern "C" {
 566      pub fn ctt_bls12_381_fr_inv_in_place(a: *mut bls12_381_fr);
 567  }
 568  extern "C" {
 569      pub fn ctt_bls12_381_fr_ccopy(a: *mut bls12_381_fr, b: *const bls12_381_fr, ctl: secret_bool);
 570  }
 571  extern "C" {
 572      pub fn ctt_bls12_381_fr_cswap(a: *mut bls12_381_fr, b: *mut bls12_381_fr, ctl: secret_bool);
 573  }
 574  extern "C" {
 575      pub fn ctt_bls12_381_fr_cset_zero(a: *mut bls12_381_fr, ctl: secret_bool);
 576  }
 577  extern "C" {
 578      pub fn ctt_bls12_381_fr_cset_one(a: *mut bls12_381_fr, ctl: secret_bool);
 579  }
 580  extern "C" {
 581      pub fn ctt_bls12_381_fr_cneg_in_place(a: *mut bls12_381_fr, ctl: secret_bool);
 582  }
 583  extern "C" {
 584      pub fn ctt_bls12_381_fr_cadd_in_place(
 585          a: *mut bls12_381_fr,
 586          b: *const bls12_381_fr,
 587          ctl: secret_bool,
 588      );
 589  }
 590  extern "C" {
 591      pub fn ctt_bls12_381_fr_csub_in_place(
 592          a: *mut bls12_381_fr,
 593          b: *const bls12_381_fr,
 594          ctl: secret_bool,
 595      );
 596  }
 597  extern "C" {
 598      #[must_use]
 599      pub fn ctt_bls12_381_fp_unmarshalBE(
 600          dst: *mut bls12_381_fp,
 601          src: *const byte,
 602          src_len: isize,
 603      ) -> bool;
 604  }
 605  extern "C" {
 606      #[must_use]
 607      pub fn ctt_bls12_381_fp_marshalBE(
 608          dst: *mut byte,
 609          dst_len: isize,
 610          src: *const bls12_381_fp,
 611      ) -> bool;
 612  }
 613  extern "C" {
 614      pub fn ctt_bls12_381_fp_is_eq(a: *const bls12_381_fp, b: *const bls12_381_fp) -> secret_bool;
 615  }
 616  extern "C" {
 617      pub fn ctt_bls12_381_fp_is_zero(a: *const bls12_381_fp) -> secret_bool;
 618  }
 619  extern "C" {
 620      pub fn ctt_bls12_381_fp_is_one(a: *const bls12_381_fp) -> secret_bool;
 621  }
 622  extern "C" {
 623      pub fn ctt_bls12_381_fp_is_minus_one(a: *const bls12_381_fp) -> secret_bool;
 624  }
 625  extern "C" {
 626      pub fn ctt_bls12_381_fp_set_zero(a: *mut bls12_381_fp);
 627  }
 628  extern "C" {
 629      pub fn ctt_bls12_381_fp_set_one(a: *mut bls12_381_fp);
 630  }
 631  extern "C" {
 632      pub fn ctt_bls12_381_fp_set_minus_one(a: *mut bls12_381_fp);
 633  }
 634  extern "C" {
 635      pub fn ctt_bls12_381_fp_neg(r: *mut bls12_381_fp, a: *const bls12_381_fp);
 636  }
 637  extern "C" {
 638      pub fn ctt_bls12_381_fp_neg_in_place(a: *mut bls12_381_fp);
 639  }
 640  extern "C" {
 641      pub fn ctt_bls12_381_fp_sum(
 642          r: *mut bls12_381_fp,
 643          a: *const bls12_381_fp,
 644          b: *const bls12_381_fp,
 645      );
 646  }
 647  extern "C" {
 648      pub fn ctt_bls12_381_fp_add_in_place(a: *mut bls12_381_fp, b: *const bls12_381_fp);
 649  }
 650  extern "C" {
 651      pub fn ctt_bls12_381_fp_diff(
 652          r: *mut bls12_381_fp,
 653          a: *const bls12_381_fp,
 654          b: *const bls12_381_fp,
 655      );
 656  }
 657  extern "C" {
 658      pub fn ctt_bls12_381_fp_sub_in_place(a: *mut bls12_381_fp, b: *const bls12_381_fp);
 659  }
 660  extern "C" {
 661      pub fn ctt_bls12_381_fp_double(r: *mut bls12_381_fp, a: *const bls12_381_fp);
 662  }
 663  extern "C" {
 664      pub fn ctt_bls12_381_fp_double_in_place(a: *mut bls12_381_fp);
 665  }
 666  extern "C" {
 667      pub fn ctt_bls12_381_fp_prod(
 668          r: *mut bls12_381_fp,
 669          a: *const bls12_381_fp,
 670          b: *const bls12_381_fp,
 671      );
 672  }
 673  extern "C" {
 674      pub fn ctt_bls12_381_fp_mul_in_place(a: *mut bls12_381_fp, b: *const bls12_381_fp);
 675  }
 676  extern "C" {
 677      pub fn ctt_bls12_381_fp_square(r: *mut bls12_381_fp, a: *const bls12_381_fp);
 678  }
 679  extern "C" {
 680      pub fn ctt_bls12_381_fp_square_in_place(a: *mut bls12_381_fp);
 681  }
 682  extern "C" {
 683      pub fn ctt_bls12_381_fp_div2(a: *mut bls12_381_fp);
 684  }
 685  extern "C" {
 686      pub fn ctt_bls12_381_fp_inv(r: *mut bls12_381_fp, a: *const bls12_381_fp);
 687  }
 688  extern "C" {
 689      pub fn ctt_bls12_381_fp_inv_in_place(a: *mut bls12_381_fp);
 690  }
 691  extern "C" {
 692      pub fn ctt_bls12_381_fp_ccopy(a: *mut bls12_381_fp, b: *const bls12_381_fp, ctl: secret_bool);
 693  }
 694  extern "C" {
 695      pub fn ctt_bls12_381_fp_cswap(a: *mut bls12_381_fp, b: *mut bls12_381_fp, ctl: secret_bool);
 696  }
 697  extern "C" {
 698      pub fn ctt_bls12_381_fp_cset_zero(a: *mut bls12_381_fp, ctl: secret_bool);
 699  }
 700  extern "C" {
 701      pub fn ctt_bls12_381_fp_cset_one(a: *mut bls12_381_fp, ctl: secret_bool);
 702  }
 703  extern "C" {
 704      pub fn ctt_bls12_381_fp_cneg_in_place(a: *mut bls12_381_fp, ctl: secret_bool);
 705  }
 706  extern "C" {
 707      pub fn ctt_bls12_381_fp_cadd_in_place(
 708          a: *mut bls12_381_fp,
 709          b: *const bls12_381_fp,
 710          ctl: secret_bool,
 711      );
 712  }
 713  extern "C" {
 714      pub fn ctt_bls12_381_fp_csub_in_place(
 715          a: *mut bls12_381_fp,
 716          b: *const bls12_381_fp,
 717          ctl: secret_bool,
 718      );
 719  }
 720  extern "C" {
 721      pub fn ctt_bls12_381_fp_is_square(a: *const bls12_381_fp) -> secret_bool;
 722  }
 723  extern "C" {
 724      pub fn ctt_bls12_381_fp_invsqrt(r: *mut bls12_381_fp, a: *const bls12_381_fp);
 725  }
 726  extern "C" {
 727      pub fn ctt_bls12_381_fp_invsqrt_in_place(
 728          r: *mut bls12_381_fp,
 729          a: *const bls12_381_fp,
 730      ) -> secret_bool;
 731  }
 732  extern "C" {
 733      pub fn ctt_bls12_381_fp_sqrt_in_place(a: *mut bls12_381_fp);
 734  }
 735  extern "C" {
 736      pub fn ctt_bls12_381_fp_sqrt_if_square_in_place(a: *mut bls12_381_fp) -> secret_bool;
 737  }
 738  extern "C" {
 739      pub fn ctt_bls12_381_fp_sqrt_invsqrt(
 740          sqrt: *mut bls12_381_fp,
 741          invsqrt: *mut bls12_381_fp,
 742          a: *const bls12_381_fp,
 743      );
 744  }
 745  extern "C" {
 746      pub fn ctt_bls12_381_fp_sqrt_invsqrt_if_square(
 747          sqrt: *mut bls12_381_fp,
 748          invsqrt: *mut bls12_381_fp,
 749          a: *const bls12_381_fp,
 750      ) -> secret_bool;
 751  }
 752  extern "C" {
 753      pub fn ctt_bls12_381_fp_sqrt_ratio_if_square(
 754          r: *mut bls12_381_fp,
 755          u: *const bls12_381_fp,
 756          v: *const bls12_381_fp,
 757      ) -> secret_bool;
 758  }
 759  extern "C" {
 760      pub fn ctt_bls12_381_fp2_is_eq(a: *const bls12_381_fp2, b: *const bls12_381_fp2)
 761          -> secret_bool;
 762  }
 763  extern "C" {
 764      pub fn ctt_bls12_381_fp2_is_zero(a: *const bls12_381_fp2) -> secret_bool;
 765  }
 766  extern "C" {
 767      pub fn ctt_bls12_381_fp2_is_one(a: *const bls12_381_fp2) -> secret_bool;
 768  }
 769  extern "C" {
 770      pub fn ctt_bls12_381_fp2_is_minus_one(a: *const bls12_381_fp2) -> secret_bool;
 771  }
 772  extern "C" {
 773      pub fn ctt_bls12_381_fp2_set_zero(a: *mut bls12_381_fp2);
 774  }
 775  extern "C" {
 776      pub fn ctt_bls12_381_fp2_set_one(a: *mut bls12_381_fp2);
 777  }
 778  extern "C" {
 779      pub fn ctt_bls12_381_fp2_set_minus_one(a: *mut bls12_381_fp2);
 780  }
 781  extern "C" {
 782      pub fn ctt_bls12_381_fp2_neg(a: *mut bls12_381_fp2);
 783  }
 784  extern "C" {
 785      pub fn ctt_bls12_381_fp2_sum(
 786          r: *mut bls12_381_fp2,
 787          a: *const bls12_381_fp2,
 788          b: *const bls12_381_fp2,
 789      );
 790  }
 791  extern "C" {
 792      pub fn ctt_bls12_381_fp2_add_in_place(a: *mut bls12_381_fp2, b: *const bls12_381_fp2);
 793  }
 794  extern "C" {
 795      pub fn ctt_bls12_381_fp2_diff(
 796          r: *mut bls12_381_fp2,
 797          a: *const bls12_381_fp2,
 798          b: *const bls12_381_fp2,
 799      );
 800  }
 801  extern "C" {
 802      pub fn ctt_bls12_381_fp2_sub_in_place(a: *mut bls12_381_fp2, b: *const bls12_381_fp2);
 803  }
 804  extern "C" {
 805      pub fn ctt_bls12_381_fp2_double(r: *mut bls12_381_fp2, a: *const bls12_381_fp2);
 806  }
 807  extern "C" {
 808      pub fn ctt_bls12_381_fp2_double_in_place(a: *mut bls12_381_fp2);
 809  }
 810  extern "C" {
 811      pub fn ctt_bls12_381_fp2_conj(r: *mut bls12_381_fp2, a: *const bls12_381_fp2);
 812  }
 813  extern "C" {
 814      pub fn ctt_bls12_381_fp2_conj_in_place(a: *mut bls12_381_fp2);
 815  }
 816  extern "C" {
 817      pub fn ctt_bls12_381_fp2_conjneg(r: *mut bls12_381_fp2, a: *const bls12_381_fp2);
 818  }
 819  extern "C" {
 820      pub fn ctt_bls12_381_fp2_conjneg_in_place(a: *mut bls12_381_fp2);
 821  }
 822  extern "C" {
 823      pub fn ctt_bls12_381_fp2_prod(
 824          r: *mut bls12_381_fp2,
 825          a: *const bls12_381_fp2,
 826          b: *const bls12_381_fp2,
 827      );
 828  }
 829  extern "C" {
 830      pub fn ctt_bls12_381_fp2_mul_in_place(a: *mut bls12_381_fp2, b: *const bls12_381_fp2);
 831  }
 832  extern "C" {
 833      pub fn ctt_bls12_381_fp2_square(r: *mut bls12_381_fp2, a: *const bls12_381_fp2);
 834  }
 835  extern "C" {
 836      pub fn ctt_bls12_381_fp2_square_in_place(a: *mut bls12_381_fp2);
 837  }
 838  extern "C" {
 839      pub fn ctt_bls12_381_fp2_div2(a: *mut bls12_381_fp2);
 840  }
 841  extern "C" {
 842      pub fn ctt_bls12_381_fp2_inv(r: *mut bls12_381_fp2, a: *const bls12_381_fp2);
 843  }
 844  extern "C" {
 845      pub fn ctt_bls12_381_fp2_inv_in_place(a: *mut bls12_381_fp2);
 846  }
 847  extern "C" {
 848      pub fn ctt_bls12_381_fp2_ccopy(
 849          a: *mut bls12_381_fp2,
 850          b: *const bls12_381_fp2,
 851          ctl: secret_bool,
 852      );
 853  }
 854  extern "C" {
 855      pub fn ctt_bls12_381_fp2_cset_zero(a: *mut bls12_381_fp2, ctl: secret_bool);
 856  }
 857  extern "C" {
 858      pub fn ctt_bls12_381_fp2_cset_one(a: *mut bls12_381_fp2, ctl: secret_bool);
 859  }
 860  extern "C" {
 861      pub fn ctt_bls12_381_fp2_cneg_in_place(a: *mut bls12_381_fp2, ctl: secret_bool);
 862  }
 863  extern "C" {
 864      pub fn ctt_bls12_381_fp2_cadd_in_place(
 865          a: *mut bls12_381_fp2,
 866          b: *const bls12_381_fp2,
 867          ctl: secret_bool,
 868      );
 869  }
 870  extern "C" {
 871      pub fn ctt_bls12_381_fp2_csub_in_place(
 872          a: *mut bls12_381_fp2,
 873          b: *const bls12_381_fp2,
 874          ctl: secret_bool,
 875      );
 876  }
 877  extern "C" {
 878      pub fn ctt_bls12_381_fp2_is_square(a: *const bls12_381_fp2) -> secret_bool;
 879  }
 880  extern "C" {
 881      pub fn ctt_bls12_381_fp2_sqrt_in_place(a: *mut bls12_381_fp2);
 882  }
 883  extern "C" {
 884      pub fn ctt_bls12_381_fp2_sqrt_if_square_in_place(a: *mut bls12_381_fp2) -> secret_bool;
 885  }
 886  extern "C" {
 887      pub fn ctt_bls12_381_ec_g1_aff_is_eq(
 888          P: *const bls12_381_ec_g1_aff,
 889          Q: *const bls12_381_ec_g1_aff,
 890      ) -> secret_bool;
 891  }
 892  extern "C" {
 893      pub fn ctt_bls12_381_ec_g1_aff_is_inf(P: *const bls12_381_ec_g1_aff) -> secret_bool;
 894  }
 895  extern "C" {
 896      pub fn ctt_bls12_381_ec_g1_aff_set_inf(P: *mut bls12_381_ec_g1_aff);
 897  }
 898  extern "C" {
 899      pub fn ctt_bls12_381_ec_g1_aff_ccopy(
 900          P: *mut bls12_381_ec_g1_aff,
 901          Q: *const bls12_381_ec_g1_aff,
 902          ctl: secret_bool,
 903      );
 904  }
 905  extern "C" {
 906      pub fn ctt_bls12_381_ec_g1_aff_is_on_curve(
 907          x: *const bls12_381_fp,
 908          y: *const bls12_381_fp,
 909      ) -> secret_bool;
 910  }
 911  extern "C" {
 912      pub fn ctt_bls12_381_ec_g1_aff_neg(P: *mut bls12_381_ec_g1_aff, Q: *const bls12_381_ec_g1_aff);
 913  }
 914  extern "C" {
 915      pub fn ctt_bls12_381_ec_g1_aff_neg_in_place(P: *mut bls12_381_ec_g1_aff);
 916  }
 917  extern "C" {
 918      pub fn ctt_bls12_381_ec_g1_jac_is_eq(
 919          P: *const bls12_381_ec_g1_jac,
 920          Q: *const bls12_381_ec_g1_jac,
 921      ) -> secret_bool;
 922  }
 923  extern "C" {
 924      pub fn ctt_bls12_381_ec_g1_jac_is_inf(P: *const bls12_381_ec_g1_jac) -> secret_bool;
 925  }
 926  extern "C" {
 927      pub fn ctt_bls12_381_ec_g1_jac_set_inf(P: *mut bls12_381_ec_g1_jac);
 928  }
 929  extern "C" {
 930      pub fn ctt_bls12_381_ec_g1_jac_ccopy(
 931          P: *mut bls12_381_ec_g1_jac,
 932          Q: *const bls12_381_ec_g1_jac,
 933          ctl: secret_bool,
 934      );
 935  }
 936  extern "C" {
 937      pub fn ctt_bls12_381_ec_g1_jac_neg(P: *mut bls12_381_ec_g1_jac, Q: *const bls12_381_ec_g1_jac);
 938  }
 939  extern "C" {
 940      pub fn ctt_bls12_381_ec_g1_jac_neg_in_place(P: *mut bls12_381_ec_g1_jac);
 941  }
 942  extern "C" {
 943      pub fn ctt_bls12_381_ec_g1_jac_cneg_in_place(P: *mut bls12_381_ec_g1_jac, ctl: secret_bool);
 944  }
 945  extern "C" {
 946      pub fn ctt_bls12_381_ec_g1_jac_sum(
 947          r: *mut bls12_381_ec_g1_jac,
 948          P: *const bls12_381_ec_g1_jac,
 949          Q: *const bls12_381_ec_g1_jac,
 950      );
 951  }
 952  extern "C" {
 953      pub fn ctt_bls12_381_ec_g1_jac_add_in_place(
 954          P: *mut bls12_381_ec_g1_jac,
 955          Q: *const bls12_381_ec_g1_jac,
 956      );
 957  }
 958  extern "C" {
 959      pub fn ctt_bls12_381_ec_g1_jac_diff(
 960          r: *mut bls12_381_ec_g1_jac,
 961          P: *const bls12_381_ec_g1_jac,
 962          Q: *const bls12_381_ec_g1_jac,
 963      );
 964  }
 965  extern "C" {
 966      pub fn ctt_bls12_381_ec_g1_jac_double(
 967          r: *mut bls12_381_ec_g1_jac,
 968          P: *const bls12_381_ec_g1_jac,
 969      );
 970  }
 971  extern "C" {
 972      pub fn ctt_bls12_381_ec_g1_jac_double_in_place(P: *mut bls12_381_ec_g1_jac);
 973  }
 974  extern "C" {
 975      pub fn ctt_bls12_381_ec_g1_jac_affine(
 976          dst: *mut bls12_381_ec_g1_aff,
 977          src: *const bls12_381_ec_g1_jac,
 978      );
 979  }
 980  extern "C" {
 981      pub fn ctt_bls12_381_ec_g1_jac_from_affine(
 982          dst: *mut bls12_381_ec_g1_jac,
 983          src: *const bls12_381_ec_g1_aff,
 984      );
 985  }
 986  extern "C" {
 987      pub fn ctt_bls12_381_ec_g1_prj_is_eq(
 988          P: *const bls12_381_ec_g1_prj,
 989          Q: *const bls12_381_ec_g1_prj,
 990      ) -> secret_bool;
 991  }
 992  extern "C" {
 993      pub fn ctt_bls12_381_ec_g1_prj_is_inf(P: *const bls12_381_ec_g1_prj) -> secret_bool;
 994  }
 995  extern "C" {
 996      pub fn ctt_bls12_381_ec_g1_prj_set_inf(P: *mut bls12_381_ec_g1_prj);
 997  }
 998  extern "C" {
 999      pub fn ctt_bls12_381_ec_g1_prj_ccopy(
1000          P: *mut bls12_381_ec_g1_prj,
1001          Q: *const bls12_381_ec_g1_prj,
1002          ctl: secret_bool,
1003      );
1004  }
1005  extern "C" {
1006      pub fn ctt_bls12_381_ec_g1_prj_neg(P: *mut bls12_381_ec_g1_prj, Q: *const bls12_381_ec_g1_prj);
1007  }
1008  extern "C" {
1009      pub fn ctt_bls12_381_ec_g1_prj_neg_in_place(P: *mut bls12_381_ec_g1_prj);
1010  }
1011  extern "C" {
1012      pub fn ctt_bls12_381_ec_g1_prj_cneg_in_place(P: *mut bls12_381_ec_g1_prj, ctl: secret_bool);
1013  }
1014  extern "C" {
1015      pub fn ctt_bls12_381_ec_g1_prj_sum(
1016          r: *mut bls12_381_ec_g1_prj,
1017          P: *const bls12_381_ec_g1_prj,
1018          Q: *const bls12_381_ec_g1_prj,
1019      );
1020  }
1021  extern "C" {
1022      pub fn ctt_bls12_381_ec_g1_prj_add_in_place(
1023          P: *mut bls12_381_ec_g1_prj,
1024          Q: *const bls12_381_ec_g1_prj,
1025      );
1026  }
1027  extern "C" {
1028      pub fn ctt_bls12_381_ec_g1_prj_diff(
1029          r: *mut bls12_381_ec_g1_prj,
1030          P: *const bls12_381_ec_g1_prj,
1031          Q: *const bls12_381_ec_g1_prj,
1032      );
1033  }
1034  extern "C" {
1035      pub fn ctt_bls12_381_ec_g1_prj_double(
1036          r: *mut bls12_381_ec_g1_prj,
1037          P: *const bls12_381_ec_g1_prj,
1038      );
1039  }
1040  extern "C" {
1041      pub fn ctt_bls12_381_ec_g1_prj_double_in_place(P: *mut bls12_381_ec_g1_prj);
1042  }
1043  extern "C" {
1044      pub fn ctt_bls12_381_ec_g1_prj_affine(
1045          dst: *mut bls12_381_ec_g1_aff,
1046          src: *const bls12_381_ec_g1_prj,
1047      );
1048  }
1049  extern "C" {
1050      pub fn ctt_bls12_381_ec_g1_prj_from_affine(
1051          dst: *mut bls12_381_ec_g1_prj,
1052          src: *const bls12_381_ec_g1_aff,
1053      );
1054  }
1055  extern "C" {
1056      pub fn ctt_bls12_381_ec_g2_aff_is_eq(
1057          P: *const bls12_381_ec_g2_aff,
1058          Q: *const bls12_381_ec_g2_aff,
1059      ) -> secret_bool;
1060  }
1061  extern "C" {
1062      pub fn ctt_bls12_381_ec_g2_aff_is_inf(P: *const bls12_381_ec_g2_aff) -> secret_bool;
1063  }
1064  extern "C" {
1065      pub fn ctt_bls12_381_ec_g2_aff_set_inf(P: *mut bls12_381_ec_g2_aff);
1066  }
1067  extern "C" {
1068      pub fn ctt_bls12_381_ec_g2_aff_ccopy(
1069          P: *mut bls12_381_ec_g2_aff,
1070          Q: *const bls12_381_ec_g2_aff,
1071          ctl: secret_bool,
1072      );
1073  }
1074  extern "C" {
1075      pub fn ctt_bls12_381_ec_g2_aff_is_on_curve(
1076          x: *const bls12_381_fp2,
1077          y: *const bls12_381_fp2,
1078      ) -> secret_bool;
1079  }
1080  extern "C" {
1081      pub fn ctt_bls12_381_ec_g2_aff_neg(P: *mut bls12_381_ec_g2_aff, Q: *const bls12_381_ec_g2_aff);
1082  }
1083  extern "C" {
1084      pub fn ctt_bls12_381_ec_g2_aff_neg_in_place(P: *mut bls12_381_ec_g2_aff);
1085  }
1086  extern "C" {
1087      pub fn ctt_bls12_381_ec_g2_jac_is_eq(
1088          P: *const bls12_381_ec_g2_jac,
1089          Q: *const bls12_381_ec_g2_jac,
1090      ) -> secret_bool;
1091  }
1092  extern "C" {
1093      pub fn ctt_bls12_381_ec_g2_jac_is_inf(P: *const bls12_381_ec_g2_jac) -> secret_bool;
1094  }
1095  extern "C" {
1096      pub fn ctt_bls12_381_ec_g2_jac_set_inf(P: *mut bls12_381_ec_g2_jac);
1097  }
1098  extern "C" {
1099      pub fn ctt_bls12_381_ec_g2_jac_ccopy(
1100          P: *mut bls12_381_ec_g2_jac,
1101          Q: *const bls12_381_ec_g2_jac,
1102          ctl: secret_bool,
1103      );
1104  }
1105  extern "C" {
1106      pub fn ctt_bls12_381_ec_g2_jac_neg(P: *mut bls12_381_ec_g2_jac, Q: *const bls12_381_ec_g2_jac);
1107  }
1108  extern "C" {
1109      pub fn ctt_bls12_381_ec_g2_jac_neg_in_place(P: *mut bls12_381_ec_g2_jac);
1110  }
1111  extern "C" {
1112      pub fn ctt_bls12_381_ec_g2_jac_cneg_in_place(P: *mut bls12_381_ec_g2_jac, ctl: secret_bool);
1113  }
1114  extern "C" {
1115      pub fn ctt_bls12_381_ec_g2_jac_sum(
1116          r: *mut bls12_381_ec_g2_jac,
1117          P: *const bls12_381_ec_g2_jac,
1118          Q: *const bls12_381_ec_g2_jac,
1119      );
1120  }
1121  extern "C" {
1122      pub fn ctt_bls12_381_ec_g2_jac_add_in_place(
1123          P: *mut bls12_381_ec_g2_jac,
1124          Q: *const bls12_381_ec_g2_jac,
1125      );
1126  }
1127  extern "C" {
1128      pub fn ctt_bls12_381_ec_g2_jac_diff(
1129          r: *mut bls12_381_ec_g2_jac,
1130          P: *const bls12_381_ec_g2_jac,
1131          Q: *const bls12_381_ec_g2_jac,
1132      );
1133  }
1134  extern "C" {
1135      pub fn ctt_bls12_381_ec_g2_jac_double(
1136          r: *mut bls12_381_ec_g2_jac,
1137          P: *const bls12_381_ec_g2_jac,
1138      );
1139  }
1140  extern "C" {
1141      pub fn ctt_bls12_381_ec_g2_jac_double_in_place(P: *mut bls12_381_ec_g2_jac);
1142  }
1143  extern "C" {
1144      pub fn ctt_bls12_381_ec_g2_jac_affine(
1145          dst: *mut bls12_381_ec_g2_aff,
1146          src: *const bls12_381_ec_g2_jac,
1147      );
1148  }
1149  extern "C" {
1150      pub fn ctt_bls12_381_ec_g2_jac_from_affine(
1151          dst: *mut bls12_381_ec_g2_jac,
1152          src: *const bls12_381_ec_g2_aff,
1153      );
1154  }
1155  extern "C" {
1156      pub fn ctt_bls12_381_ec_g2_prj_is_eq(
1157          P: *const bls12_381_ec_g2_prj,
1158          Q: *const bls12_381_ec_g2_prj,
1159      ) -> secret_bool;
1160  }
1161  extern "C" {
1162      pub fn ctt_bls12_381_ec_g2_prj_is_inf(P: *const bls12_381_ec_g2_prj) -> secret_bool;
1163  }
1164  extern "C" {
1165      pub fn ctt_bls12_381_ec_g2_prj_set_inf(P: *mut bls12_381_ec_g2_prj);
1166  }
1167  extern "C" {
1168      pub fn ctt_bls12_381_ec_g2_prj_ccopy(
1169          P: *mut bls12_381_ec_g2_prj,
1170          Q: *const bls12_381_ec_g2_prj,
1171          ctl: secret_bool,
1172      );
1173  }
1174  extern "C" {
1175      pub fn ctt_bls12_381_ec_g2_prj_neg(P: *mut bls12_381_ec_g2_prj, Q: *const bls12_381_ec_g2_prj);
1176  }
1177  extern "C" {
1178      pub fn ctt_bls12_381_ec_g2_prj_neg_in_place(P: *mut bls12_381_ec_g2_prj);
1179  }
1180  extern "C" {
1181      pub fn ctt_bls12_381_ec_g2_prj_cneg_in_place(P: *mut bls12_381_ec_g2_prj, ctl: secret_bool);
1182  }
1183  extern "C" {
1184      pub fn ctt_bls12_381_ec_g2_prj_sum(
1185          r: *mut bls12_381_ec_g2_prj,
1186          P: *const bls12_381_ec_g2_prj,
1187          Q: *const bls12_381_ec_g2_prj,
1188      );
1189  }
1190  extern "C" {
1191      pub fn ctt_bls12_381_ec_g2_prj_add_in_place(
1192          P: *mut bls12_381_ec_g2_prj,
1193          Q: *const bls12_381_ec_g2_prj,
1194      );
1195  }
1196  extern "C" {
1197      pub fn ctt_bls12_381_ec_g2_prj_diff(
1198          r: *mut bls12_381_ec_g2_prj,
1199          P: *const bls12_381_ec_g2_prj,
1200          Q: *const bls12_381_ec_g2_prj,
1201      );
1202  }
1203  extern "C" {
1204      pub fn ctt_bls12_381_ec_g2_prj_double(
1205          r: *mut bls12_381_ec_g2_prj,
1206          P: *const bls12_381_ec_g2_prj,
1207      );
1208  }
1209  extern "C" {
1210      pub fn ctt_bls12_381_ec_g2_prj_double_in_place(P: *mut bls12_381_ec_g2_prj);
1211  }
1212  extern "C" {
1213      pub fn ctt_bls12_381_ec_g2_prj_affine(
1214          dst: *mut bls12_381_ec_g2_aff,
1215          src: *const bls12_381_ec_g2_prj,
1216      );
1217  }
1218  extern "C" {
1219      pub fn ctt_bls12_381_ec_g2_prj_from_affine(
1220          dst: *mut bls12_381_ec_g2_prj,
1221          src: *const bls12_381_ec_g2_aff,
1222      );
1223  }
1224  #[repr(C)]
1225  #[derive(Copy, Clone)]
1226  pub struct bn254_snarks_fr {
1227      limbs: [secret_word; 4usize],
1228  }
1229  #[test]
1230  fn bindgen_test_layout_bn254_snarks_fr() {
1231      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_fr> = ::core::mem::MaybeUninit::uninit();
1232      let ptr = UNINIT.as_ptr();
1233      assert_eq!(
1234          ::core::mem::size_of::<bn254_snarks_fr>(),
1235          32usize,
1236          concat!("Size of: ", stringify!(bn254_snarks_fr))
1237      );
1238      assert_eq!(
1239          ::core::mem::align_of::<bn254_snarks_fr>(),
1240          8usize,
1241          concat!("Alignment of ", stringify!(bn254_snarks_fr))
1242      );
1243      assert_eq!(
1244          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
1245          0usize,
1246          concat!(
1247              "Offset of field: ",
1248              stringify!(bn254_snarks_fr),
1249              "::",
1250              stringify!(limbs)
1251          )
1252      );
1253  }
1254  #[repr(C)]
1255  #[derive(Copy, Clone)]
1256  pub struct bn254_snarks_fp {
1257      limbs: [secret_word; 4usize],
1258  }
1259  #[test]
1260  fn bindgen_test_layout_bn254_snarks_fp() {
1261      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_fp> = ::core::mem::MaybeUninit::uninit();
1262      let ptr = UNINIT.as_ptr();
1263      assert_eq!(
1264          ::core::mem::size_of::<bn254_snarks_fp>(),
1265          32usize,
1266          concat!("Size of: ", stringify!(bn254_snarks_fp))
1267      );
1268      assert_eq!(
1269          ::core::mem::align_of::<bn254_snarks_fp>(),
1270          8usize,
1271          concat!("Alignment of ", stringify!(bn254_snarks_fp))
1272      );
1273      assert_eq!(
1274          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
1275          0usize,
1276          concat!(
1277              "Offset of field: ",
1278              stringify!(bn254_snarks_fp),
1279              "::",
1280              stringify!(limbs)
1281          )
1282      );
1283  }
1284  #[repr(C)]
1285  #[derive(Copy, Clone)]
1286  pub struct bn254_snarks_fp2 {
1287      c: [bn254_snarks_fp; 2usize],
1288  }
1289  #[test]
1290  fn bindgen_test_layout_bn254_snarks_fp2() {
1291      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_fp2> = ::core::mem::MaybeUninit::uninit();
1292      let ptr = UNINIT.as_ptr();
1293      assert_eq!(
1294          ::core::mem::size_of::<bn254_snarks_fp2>(),
1295          64usize,
1296          concat!("Size of: ", stringify!(bn254_snarks_fp2))
1297      );
1298      assert_eq!(
1299          ::core::mem::align_of::<bn254_snarks_fp2>(),
1300          8usize,
1301          concat!("Alignment of ", stringify!(bn254_snarks_fp2))
1302      );
1303      assert_eq!(
1304          unsafe { ::core::ptr::addr_of!((*ptr).c) as usize - ptr as usize },
1305          0usize,
1306          concat!(
1307              "Offset of field: ",
1308              stringify!(bn254_snarks_fp2),
1309              "::",
1310              stringify!(c)
1311          )
1312      );
1313  }
1314  #[repr(C)]
1315  #[derive(Copy, Clone)]
1316  pub struct bn254_snarks_ec_g1_aff {
1317      x: bn254_snarks_fp,
1318      y: bn254_snarks_fp,
1319  }
1320  #[test]
1321  fn bindgen_test_layout_bn254_snarks_ec_g1_aff() {
1322      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g1_aff> =
1323          ::core::mem::MaybeUninit::uninit();
1324      let ptr = UNINIT.as_ptr();
1325      assert_eq!(
1326          ::core::mem::size_of::<bn254_snarks_ec_g1_aff>(),
1327          64usize,
1328          concat!("Size of: ", stringify!(bn254_snarks_ec_g1_aff))
1329      );
1330      assert_eq!(
1331          ::core::mem::align_of::<bn254_snarks_ec_g1_aff>(),
1332          8usize,
1333          concat!("Alignment of ", stringify!(bn254_snarks_ec_g1_aff))
1334      );
1335      assert_eq!(
1336          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1337          0usize,
1338          concat!(
1339              "Offset of field: ",
1340              stringify!(bn254_snarks_ec_g1_aff),
1341              "::",
1342              stringify!(x)
1343          )
1344      );
1345      assert_eq!(
1346          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1347          32usize,
1348          concat!(
1349              "Offset of field: ",
1350              stringify!(bn254_snarks_ec_g1_aff),
1351              "::",
1352              stringify!(y)
1353          )
1354      );
1355  }
1356  #[repr(C)]
1357  #[derive(Copy, Clone)]
1358  pub struct bn254_snarks_ec_g1_jac {
1359      x: bn254_snarks_fp,
1360      y: bn254_snarks_fp,
1361      z: bn254_snarks_fp,
1362  }
1363  #[test]
1364  fn bindgen_test_layout_bn254_snarks_ec_g1_jac() {
1365      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g1_jac> =
1366          ::core::mem::MaybeUninit::uninit();
1367      let ptr = UNINIT.as_ptr();
1368      assert_eq!(
1369          ::core::mem::size_of::<bn254_snarks_ec_g1_jac>(),
1370          96usize,
1371          concat!("Size of: ", stringify!(bn254_snarks_ec_g1_jac))
1372      );
1373      assert_eq!(
1374          ::core::mem::align_of::<bn254_snarks_ec_g1_jac>(),
1375          8usize,
1376          concat!("Alignment of ", stringify!(bn254_snarks_ec_g1_jac))
1377      );
1378      assert_eq!(
1379          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1380          0usize,
1381          concat!(
1382              "Offset of field: ",
1383              stringify!(bn254_snarks_ec_g1_jac),
1384              "::",
1385              stringify!(x)
1386          )
1387      );
1388      assert_eq!(
1389          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1390          32usize,
1391          concat!(
1392              "Offset of field: ",
1393              stringify!(bn254_snarks_ec_g1_jac),
1394              "::",
1395              stringify!(y)
1396          )
1397      );
1398      assert_eq!(
1399          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
1400          64usize,
1401          concat!(
1402              "Offset of field: ",
1403              stringify!(bn254_snarks_ec_g1_jac),
1404              "::",
1405              stringify!(z)
1406          )
1407      );
1408  }
1409  #[repr(C)]
1410  #[derive(Copy, Clone)]
1411  pub struct bn254_snarks_ec_g1_prj {
1412      x: bn254_snarks_fp,
1413      y: bn254_snarks_fp,
1414      z: bn254_snarks_fp,
1415  }
1416  #[test]
1417  fn bindgen_test_layout_bn254_snarks_ec_g1_prj() {
1418      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g1_prj> =
1419          ::core::mem::MaybeUninit::uninit();
1420      let ptr = UNINIT.as_ptr();
1421      assert_eq!(
1422          ::core::mem::size_of::<bn254_snarks_ec_g1_prj>(),
1423          96usize,
1424          concat!("Size of: ", stringify!(bn254_snarks_ec_g1_prj))
1425      );
1426      assert_eq!(
1427          ::core::mem::align_of::<bn254_snarks_ec_g1_prj>(),
1428          8usize,
1429          concat!("Alignment of ", stringify!(bn254_snarks_ec_g1_prj))
1430      );
1431      assert_eq!(
1432          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1433          0usize,
1434          concat!(
1435              "Offset of field: ",
1436              stringify!(bn254_snarks_ec_g1_prj),
1437              "::",
1438              stringify!(x)
1439          )
1440      );
1441      assert_eq!(
1442          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1443          32usize,
1444          concat!(
1445              "Offset of field: ",
1446              stringify!(bn254_snarks_ec_g1_prj),
1447              "::",
1448              stringify!(y)
1449          )
1450      );
1451      assert_eq!(
1452          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
1453          64usize,
1454          concat!(
1455              "Offset of field: ",
1456              stringify!(bn254_snarks_ec_g1_prj),
1457              "::",
1458              stringify!(z)
1459          )
1460      );
1461  }
1462  #[repr(C)]
1463  #[derive(Copy, Clone)]
1464  pub struct bn254_snarks_ec_g2_aff {
1465      x: bn254_snarks_fp2,
1466      y: bn254_snarks_fp2,
1467  }
1468  #[test]
1469  fn bindgen_test_layout_bn254_snarks_ec_g2_aff() {
1470      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g2_aff> =
1471          ::core::mem::MaybeUninit::uninit();
1472      let ptr = UNINIT.as_ptr();
1473      assert_eq!(
1474          ::core::mem::size_of::<bn254_snarks_ec_g2_aff>(),
1475          128usize,
1476          concat!("Size of: ", stringify!(bn254_snarks_ec_g2_aff))
1477      );
1478      assert_eq!(
1479          ::core::mem::align_of::<bn254_snarks_ec_g2_aff>(),
1480          8usize,
1481          concat!("Alignment of ", stringify!(bn254_snarks_ec_g2_aff))
1482      );
1483      assert_eq!(
1484          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1485          0usize,
1486          concat!(
1487              "Offset of field: ",
1488              stringify!(bn254_snarks_ec_g2_aff),
1489              "::",
1490              stringify!(x)
1491          )
1492      );
1493      assert_eq!(
1494          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1495          64usize,
1496          concat!(
1497              "Offset of field: ",
1498              stringify!(bn254_snarks_ec_g2_aff),
1499              "::",
1500              stringify!(y)
1501          )
1502      );
1503  }
1504  #[repr(C)]
1505  #[derive(Copy, Clone)]
1506  pub struct bn254_snarks_ec_g2_jac {
1507      x: bn254_snarks_fp2,
1508      y: bn254_snarks_fp2,
1509      z: bn254_snarks_fp2,
1510  }
1511  #[test]
1512  fn bindgen_test_layout_bn254_snarks_ec_g2_jac() {
1513      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g2_jac> =
1514          ::core::mem::MaybeUninit::uninit();
1515      let ptr = UNINIT.as_ptr();
1516      assert_eq!(
1517          ::core::mem::size_of::<bn254_snarks_ec_g2_jac>(),
1518          192usize,
1519          concat!("Size of: ", stringify!(bn254_snarks_ec_g2_jac))
1520      );
1521      assert_eq!(
1522          ::core::mem::align_of::<bn254_snarks_ec_g2_jac>(),
1523          8usize,
1524          concat!("Alignment of ", stringify!(bn254_snarks_ec_g2_jac))
1525      );
1526      assert_eq!(
1527          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1528          0usize,
1529          concat!(
1530              "Offset of field: ",
1531              stringify!(bn254_snarks_ec_g2_jac),
1532              "::",
1533              stringify!(x)
1534          )
1535      );
1536      assert_eq!(
1537          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1538          64usize,
1539          concat!(
1540              "Offset of field: ",
1541              stringify!(bn254_snarks_ec_g2_jac),
1542              "::",
1543              stringify!(y)
1544          )
1545      );
1546      assert_eq!(
1547          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
1548          128usize,
1549          concat!(
1550              "Offset of field: ",
1551              stringify!(bn254_snarks_ec_g2_jac),
1552              "::",
1553              stringify!(z)
1554          )
1555      );
1556  }
1557  #[repr(C)]
1558  #[derive(Copy, Clone)]
1559  pub struct bn254_snarks_ec_g2_prj {
1560      x: bn254_snarks_fp2,
1561      y: bn254_snarks_fp2,
1562      z: bn254_snarks_fp2,
1563  }
1564  #[test]
1565  fn bindgen_test_layout_bn254_snarks_ec_g2_prj() {
1566      const UNINIT: ::core::mem::MaybeUninit<bn254_snarks_ec_g2_prj> =
1567          ::core::mem::MaybeUninit::uninit();
1568      let ptr = UNINIT.as_ptr();
1569      assert_eq!(
1570          ::core::mem::size_of::<bn254_snarks_ec_g2_prj>(),
1571          192usize,
1572          concat!("Size of: ", stringify!(bn254_snarks_ec_g2_prj))
1573      );
1574      assert_eq!(
1575          ::core::mem::align_of::<bn254_snarks_ec_g2_prj>(),
1576          8usize,
1577          concat!("Alignment of ", stringify!(bn254_snarks_ec_g2_prj))
1578      );
1579      assert_eq!(
1580          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
1581          0usize,
1582          concat!(
1583              "Offset of field: ",
1584              stringify!(bn254_snarks_ec_g2_prj),
1585              "::",
1586              stringify!(x)
1587          )
1588      );
1589      assert_eq!(
1590          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
1591          64usize,
1592          concat!(
1593              "Offset of field: ",
1594              stringify!(bn254_snarks_ec_g2_prj),
1595              "::",
1596              stringify!(y)
1597          )
1598      );
1599      assert_eq!(
1600          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
1601          128usize,
1602          concat!(
1603              "Offset of field: ",
1604              stringify!(bn254_snarks_ec_g2_prj),
1605              "::",
1606              stringify!(z)
1607          )
1608      );
1609  }
1610  extern "C" {
1611      #[must_use]
1612      pub fn ctt_bn254_snarks_fr_unmarshalBE(
1613          dst: *mut bn254_snarks_fr,
1614          src: *const byte,
1615          src_len: isize,
1616      ) -> bool;
1617  }
1618  extern "C" {
1619      #[must_use]
1620      pub fn ctt_bn254_snarks_fr_marshalBE(
1621          dst: *mut byte,
1622          dst_len: isize,
1623          src: *const bn254_snarks_fr,
1624      ) -> bool;
1625  }
1626  extern "C" {
1627      pub fn ctt_bn254_snarks_fr_is_eq(
1628          a: *const bn254_snarks_fr,
1629          b: *const bn254_snarks_fr,
1630      ) -> secret_bool;
1631  }
1632  extern "C" {
1633      pub fn ctt_bn254_snarks_fr_is_zero(a: *const bn254_snarks_fr) -> secret_bool;
1634  }
1635  extern "C" {
1636      pub fn ctt_bn254_snarks_fr_is_one(a: *const bn254_snarks_fr) -> secret_bool;
1637  }
1638  extern "C" {
1639      pub fn ctt_bn254_snarks_fr_is_minus_one(a: *const bn254_snarks_fr) -> secret_bool;
1640  }
1641  extern "C" {
1642      pub fn ctt_bn254_snarks_fr_set_zero(a: *mut bn254_snarks_fr);
1643  }
1644  extern "C" {
1645      pub fn ctt_bn254_snarks_fr_set_one(a: *mut bn254_snarks_fr);
1646  }
1647  extern "C" {
1648      pub fn ctt_bn254_snarks_fr_set_minus_one(a: *mut bn254_snarks_fr);
1649  }
1650  extern "C" {
1651      pub fn ctt_bn254_snarks_fr_neg(r: *mut bn254_snarks_fr, a: *const bn254_snarks_fr);
1652  }
1653  extern "C" {
1654      pub fn ctt_bn254_snarks_fr_neg_in_place(a: *mut bn254_snarks_fr);
1655  }
1656  extern "C" {
1657      pub fn ctt_bn254_snarks_fr_sum(
1658          r: *mut bn254_snarks_fr,
1659          a: *const bn254_snarks_fr,
1660          b: *const bn254_snarks_fr,
1661      );
1662  }
1663  extern "C" {
1664      pub fn ctt_bn254_snarks_fr_add_in_place(a: *mut bn254_snarks_fr, b: *const bn254_snarks_fr);
1665  }
1666  extern "C" {
1667      pub fn ctt_bn254_snarks_fr_diff(
1668          r: *mut bn254_snarks_fr,
1669          a: *const bn254_snarks_fr,
1670          b: *const bn254_snarks_fr,
1671      );
1672  }
1673  extern "C" {
1674      pub fn ctt_bn254_snarks_fr_sub_in_place(a: *mut bn254_snarks_fr, b: *const bn254_snarks_fr);
1675  }
1676  extern "C" {
1677      pub fn ctt_bn254_snarks_fr_double(r: *mut bn254_snarks_fr, a: *const bn254_snarks_fr);
1678  }
1679  extern "C" {
1680      pub fn ctt_bn254_snarks_fr_double_in_place(a: *mut bn254_snarks_fr);
1681  }
1682  extern "C" {
1683      pub fn ctt_bn254_snarks_fr_prod(
1684          r: *mut bn254_snarks_fr,
1685          a: *const bn254_snarks_fr,
1686          b: *const bn254_snarks_fr,
1687      );
1688  }
1689  extern "C" {
1690      pub fn ctt_bn254_snarks_fr_mul_in_place(a: *mut bn254_snarks_fr, b: *const bn254_snarks_fr);
1691  }
1692  extern "C" {
1693      pub fn ctt_bn254_snarks_fr_square(r: *mut bn254_snarks_fr, a: *const bn254_snarks_fr);
1694  }
1695  extern "C" {
1696      pub fn ctt_bn254_snarks_fr_square_in_place(a: *mut bn254_snarks_fr);
1697  }
1698  extern "C" {
1699      pub fn ctt_bn254_snarks_fr_div2(a: *mut bn254_snarks_fr);
1700  }
1701  extern "C" {
1702      pub fn ctt_bn254_snarks_fr_inv(r: *mut bn254_snarks_fr, a: *const bn254_snarks_fr);
1703  }
1704  extern "C" {
1705      pub fn ctt_bn254_snarks_fr_inv_in_place(a: *mut bn254_snarks_fr);
1706  }
1707  extern "C" {
1708      pub fn ctt_bn254_snarks_fr_ccopy(
1709          a: *mut bn254_snarks_fr,
1710          b: *const bn254_snarks_fr,
1711          ctl: secret_bool,
1712      );
1713  }
1714  extern "C" {
1715      pub fn ctt_bn254_snarks_fr_cswap(
1716          a: *mut bn254_snarks_fr,
1717          b: *mut bn254_snarks_fr,
1718          ctl: secret_bool,
1719      );
1720  }
1721  extern "C" {
1722      pub fn ctt_bn254_snarks_fr_cset_zero(a: *mut bn254_snarks_fr, ctl: secret_bool);
1723  }
1724  extern "C" {
1725      pub fn ctt_bn254_snarks_fr_cset_one(a: *mut bn254_snarks_fr, ctl: secret_bool);
1726  }
1727  extern "C" {
1728      pub fn ctt_bn254_snarks_fr_cneg_in_place(a: *mut bn254_snarks_fr, ctl: secret_bool);
1729  }
1730  extern "C" {
1731      pub fn ctt_bn254_snarks_fr_cadd_in_place(
1732          a: *mut bn254_snarks_fr,
1733          b: *const bn254_snarks_fr,
1734          ctl: secret_bool,
1735      );
1736  }
1737  extern "C" {
1738      pub fn ctt_bn254_snarks_fr_csub_in_place(
1739          a: *mut bn254_snarks_fr,
1740          b: *const bn254_snarks_fr,
1741          ctl: secret_bool,
1742      );
1743  }
1744  extern "C" {
1745      #[must_use]
1746      pub fn ctt_bn254_snarks_fp_unmarshalBE(
1747          dst: *mut bn254_snarks_fp,
1748          src: *const byte,
1749          src_len: isize,
1750      ) -> bool;
1751  }
1752  extern "C" {
1753      #[must_use]
1754      pub fn ctt_bn254_snarks_fp_marshalBE(
1755          dst: *mut byte,
1756          dst_len: isize,
1757          src: *const bn254_snarks_fp,
1758      ) -> bool;
1759  }
1760  extern "C" {
1761      pub fn ctt_bn254_snarks_fp_is_eq(
1762          a: *const bn254_snarks_fp,
1763          b: *const bn254_snarks_fp,
1764      ) -> secret_bool;
1765  }
1766  extern "C" {
1767      pub fn ctt_bn254_snarks_fp_is_zero(a: *const bn254_snarks_fp) -> secret_bool;
1768  }
1769  extern "C" {
1770      pub fn ctt_bn254_snarks_fp_is_one(a: *const bn254_snarks_fp) -> secret_bool;
1771  }
1772  extern "C" {
1773      pub fn ctt_bn254_snarks_fp_is_minus_one(a: *const bn254_snarks_fp) -> secret_bool;
1774  }
1775  extern "C" {
1776      pub fn ctt_bn254_snarks_fp_set_zero(a: *mut bn254_snarks_fp);
1777  }
1778  extern "C" {
1779      pub fn ctt_bn254_snarks_fp_set_one(a: *mut bn254_snarks_fp);
1780  }
1781  extern "C" {
1782      pub fn ctt_bn254_snarks_fp_set_minus_one(a: *mut bn254_snarks_fp);
1783  }
1784  extern "C" {
1785      pub fn ctt_bn254_snarks_fp_neg(r: *mut bn254_snarks_fp, a: *const bn254_snarks_fp);
1786  }
1787  extern "C" {
1788      pub fn ctt_bn254_snarks_fp_neg_in_place(a: *mut bn254_snarks_fp);
1789  }
1790  extern "C" {
1791      pub fn ctt_bn254_snarks_fp_sum(
1792          r: *mut bn254_snarks_fp,
1793          a: *const bn254_snarks_fp,
1794          b: *const bn254_snarks_fp,
1795      );
1796  }
1797  extern "C" {
1798      pub fn ctt_bn254_snarks_fp_add_in_place(a: *mut bn254_snarks_fp, b: *const bn254_snarks_fp);
1799  }
1800  extern "C" {
1801      pub fn ctt_bn254_snarks_fp_diff(
1802          r: *mut bn254_snarks_fp,
1803          a: *const bn254_snarks_fp,
1804          b: *const bn254_snarks_fp,
1805      );
1806  }
1807  extern "C" {
1808      pub fn ctt_bn254_snarks_fp_sub_in_place(a: *mut bn254_snarks_fp, b: *const bn254_snarks_fp);
1809  }
1810  extern "C" {
1811      pub fn ctt_bn254_snarks_fp_double(r: *mut bn254_snarks_fp, a: *const bn254_snarks_fp);
1812  }
1813  extern "C" {
1814      pub fn ctt_bn254_snarks_fp_double_in_place(a: *mut bn254_snarks_fp);
1815  }
1816  extern "C" {
1817      pub fn ctt_bn254_snarks_fp_prod(
1818          r: *mut bn254_snarks_fp,
1819          a: *const bn254_snarks_fp,
1820          b: *const bn254_snarks_fp,
1821      );
1822  }
1823  extern "C" {
1824      pub fn ctt_bn254_snarks_fp_mul_in_place(a: *mut bn254_snarks_fp, b: *const bn254_snarks_fp);
1825  }
1826  extern "C" {
1827      pub fn ctt_bn254_snarks_fp_square(r: *mut bn254_snarks_fp, a: *const bn254_snarks_fp);
1828  }
1829  extern "C" {
1830      pub fn ctt_bn254_snarks_fp_square_in_place(a: *mut bn254_snarks_fp);
1831  }
1832  extern "C" {
1833      pub fn ctt_bn254_snarks_fp_div2(a: *mut bn254_snarks_fp);
1834  }
1835  extern "C" {
1836      pub fn ctt_bn254_snarks_fp_inv(r: *mut bn254_snarks_fp, a: *const bn254_snarks_fp);
1837  }
1838  extern "C" {
1839      pub fn ctt_bn254_snarks_fp_inv_in_place(a: *mut bn254_snarks_fp);
1840  }
1841  extern "C" {
1842      pub fn ctt_bn254_snarks_fp_ccopy(
1843          a: *mut bn254_snarks_fp,
1844          b: *const bn254_snarks_fp,
1845          ctl: secret_bool,
1846      );
1847  }
1848  extern "C" {
1849      pub fn ctt_bn254_snarks_fp_cswap(
1850          a: *mut bn254_snarks_fp,
1851          b: *mut bn254_snarks_fp,
1852          ctl: secret_bool,
1853      );
1854  }
1855  extern "C" {
1856      pub fn ctt_bn254_snarks_fp_cset_zero(a: *mut bn254_snarks_fp, ctl: secret_bool);
1857  }
1858  extern "C" {
1859      pub fn ctt_bn254_snarks_fp_cset_one(a: *mut bn254_snarks_fp, ctl: secret_bool);
1860  }
1861  extern "C" {
1862      pub fn ctt_bn254_snarks_fp_cneg_in_place(a: *mut bn254_snarks_fp, ctl: secret_bool);
1863  }
1864  extern "C" {
1865      pub fn ctt_bn254_snarks_fp_cadd_in_place(
1866          a: *mut bn254_snarks_fp,
1867          b: *const bn254_snarks_fp,
1868          ctl: secret_bool,
1869      );
1870  }
1871  extern "C" {
1872      pub fn ctt_bn254_snarks_fp_csub_in_place(
1873          a: *mut bn254_snarks_fp,
1874          b: *const bn254_snarks_fp,
1875          ctl: secret_bool,
1876      );
1877  }
1878  extern "C" {
1879      pub fn ctt_bn254_snarks_fp_is_square(a: *const bn254_snarks_fp) -> secret_bool;
1880  }
1881  extern "C" {
1882      pub fn ctt_bn254_snarks_fp_invsqrt(r: *mut bn254_snarks_fp, a: *const bn254_snarks_fp);
1883  }
1884  extern "C" {
1885      pub fn ctt_bn254_snarks_fp_invsqrt_in_place(
1886          r: *mut bn254_snarks_fp,
1887          a: *const bn254_snarks_fp,
1888      ) -> secret_bool;
1889  }
1890  extern "C" {
1891      pub fn ctt_bn254_snarks_fp_sqrt_in_place(a: *mut bn254_snarks_fp);
1892  }
1893  extern "C" {
1894      pub fn ctt_bn254_snarks_fp_sqrt_if_square_in_place(a: *mut bn254_snarks_fp) -> secret_bool;
1895  }
1896  extern "C" {
1897      pub fn ctt_bn254_snarks_fp_sqrt_invsqrt(
1898          sqrt: *mut bn254_snarks_fp,
1899          invsqrt: *mut bn254_snarks_fp,
1900          a: *const bn254_snarks_fp,
1901      );
1902  }
1903  extern "C" {
1904      pub fn ctt_bn254_snarks_fp_sqrt_invsqrt_if_square(
1905          sqrt: *mut bn254_snarks_fp,
1906          invsqrt: *mut bn254_snarks_fp,
1907          a: *const bn254_snarks_fp,
1908      ) -> secret_bool;
1909  }
1910  extern "C" {
1911      pub fn ctt_bn254_snarks_fp_sqrt_ratio_if_square(
1912          r: *mut bn254_snarks_fp,
1913          u: *const bn254_snarks_fp,
1914          v: *const bn254_snarks_fp,
1915      ) -> secret_bool;
1916  }
1917  extern "C" {
1918      pub fn ctt_bn254_snarks_fp2_is_eq(
1919          a: *const bn254_snarks_fp2,
1920          b: *const bn254_snarks_fp2,
1921      ) -> secret_bool;
1922  }
1923  extern "C" {
1924      pub fn ctt_bn254_snarks_fp2_is_zero(a: *const bn254_snarks_fp2) -> secret_bool;
1925  }
1926  extern "C" {
1927      pub fn ctt_bn254_snarks_fp2_is_one(a: *const bn254_snarks_fp2) -> secret_bool;
1928  }
1929  extern "C" {
1930      pub fn ctt_bn254_snarks_fp2_is_minus_one(a: *const bn254_snarks_fp2) -> secret_bool;
1931  }
1932  extern "C" {
1933      pub fn ctt_bn254_snarks_fp2_set_zero(a: *mut bn254_snarks_fp2);
1934  }
1935  extern "C" {
1936      pub fn ctt_bn254_snarks_fp2_set_one(a: *mut bn254_snarks_fp2);
1937  }
1938  extern "C" {
1939      pub fn ctt_bn254_snarks_fp2_set_minus_one(a: *mut bn254_snarks_fp2);
1940  }
1941  extern "C" {
1942      pub fn ctt_bn254_snarks_fp2_neg(a: *mut bn254_snarks_fp2);
1943  }
1944  extern "C" {
1945      pub fn ctt_bn254_snarks_fp2_sum(
1946          r: *mut bn254_snarks_fp2,
1947          a: *const bn254_snarks_fp2,
1948          b: *const bn254_snarks_fp2,
1949      );
1950  }
1951  extern "C" {
1952      pub fn ctt_bn254_snarks_fp2_add_in_place(a: *mut bn254_snarks_fp2, b: *const bn254_snarks_fp2);
1953  }
1954  extern "C" {
1955      pub fn ctt_bn254_snarks_fp2_diff(
1956          r: *mut bn254_snarks_fp2,
1957          a: *const bn254_snarks_fp2,
1958          b: *const bn254_snarks_fp2,
1959      );
1960  }
1961  extern "C" {
1962      pub fn ctt_bn254_snarks_fp2_sub_in_place(a: *mut bn254_snarks_fp2, b: *const bn254_snarks_fp2);
1963  }
1964  extern "C" {
1965      pub fn ctt_bn254_snarks_fp2_double(r: *mut bn254_snarks_fp2, a: *const bn254_snarks_fp2);
1966  }
1967  extern "C" {
1968      pub fn ctt_bn254_snarks_fp2_double_in_place(a: *mut bn254_snarks_fp2);
1969  }
1970  extern "C" {
1971      pub fn ctt_bn254_snarks_fp2_conj(r: *mut bn254_snarks_fp2, a: *const bn254_snarks_fp2);
1972  }
1973  extern "C" {
1974      pub fn ctt_bn254_snarks_fp2_conj_in_place(a: *mut bn254_snarks_fp2);
1975  }
1976  extern "C" {
1977      pub fn ctt_bn254_snarks_fp2_conjneg(r: *mut bn254_snarks_fp2, a: *const bn254_snarks_fp2);
1978  }
1979  extern "C" {
1980      pub fn ctt_bn254_snarks_fp2_conjneg_in_place(a: *mut bn254_snarks_fp2);
1981  }
1982  extern "C" {
1983      pub fn ctt_bn254_snarks_fp2_prod(
1984          r: *mut bn254_snarks_fp2,
1985          a: *const bn254_snarks_fp2,
1986          b: *const bn254_snarks_fp2,
1987      );
1988  }
1989  extern "C" {
1990      pub fn ctt_bn254_snarks_fp2_mul_in_place(a: *mut bn254_snarks_fp2, b: *const bn254_snarks_fp2);
1991  }
1992  extern "C" {
1993      pub fn ctt_bn254_snarks_fp2_square(r: *mut bn254_snarks_fp2, a: *const bn254_snarks_fp2);
1994  }
1995  extern "C" {
1996      pub fn ctt_bn254_snarks_fp2_square_in_place(a: *mut bn254_snarks_fp2);
1997  }
1998  extern "C" {
1999      pub fn ctt_bn254_snarks_fp2_div2(a: *mut bn254_snarks_fp2);
2000  }
2001  extern "C" {
2002      pub fn ctt_bn254_snarks_fp2_inv(r: *mut bn254_snarks_fp2, a: *const bn254_snarks_fp2);
2003  }
2004  extern "C" {
2005      pub fn ctt_bn254_snarks_fp2_inv_in_place(a: *mut bn254_snarks_fp2);
2006  }
2007  extern "C" {
2008      pub fn ctt_bn254_snarks_fp2_ccopy(
2009          a: *mut bn254_snarks_fp2,
2010          b: *const bn254_snarks_fp2,
2011          ctl: secret_bool,
2012      );
2013  }
2014  extern "C" {
2015      pub fn ctt_bn254_snarks_fp2_cset_zero(a: *mut bn254_snarks_fp2, ctl: secret_bool);
2016  }
2017  extern "C" {
2018      pub fn ctt_bn254_snarks_fp2_cset_one(a: *mut bn254_snarks_fp2, ctl: secret_bool);
2019  }
2020  extern "C" {
2021      pub fn ctt_bn254_snarks_fp2_cneg_in_place(a: *mut bn254_snarks_fp2, ctl: secret_bool);
2022  }
2023  extern "C" {
2024      pub fn ctt_bn254_snarks_fp2_cadd_in_place(
2025          a: *mut bn254_snarks_fp2,
2026          b: *const bn254_snarks_fp2,
2027          ctl: secret_bool,
2028      );
2029  }
2030  extern "C" {
2031      pub fn ctt_bn254_snarks_fp2_csub_in_place(
2032          a: *mut bn254_snarks_fp2,
2033          b: *const bn254_snarks_fp2,
2034          ctl: secret_bool,
2035      );
2036  }
2037  extern "C" {
2038      pub fn ctt_bn254_snarks_fp2_is_square(a: *const bn254_snarks_fp2) -> secret_bool;
2039  }
2040  extern "C" {
2041      pub fn ctt_bn254_snarks_fp2_sqrt_in_place(a: *mut bn254_snarks_fp2);
2042  }
2043  extern "C" {
2044      pub fn ctt_bn254_snarks_fp2_sqrt_if_square_in_place(a: *mut bn254_snarks_fp2) -> secret_bool;
2045  }
2046  extern "C" {
2047      pub fn ctt_bn254_snarks_ec_g1_aff_is_eq(
2048          P: *const bn254_snarks_ec_g1_aff,
2049          Q: *const bn254_snarks_ec_g1_aff,
2050      ) -> secret_bool;
2051  }
2052  extern "C" {
2053      pub fn ctt_bn254_snarks_ec_g1_aff_is_inf(P: *const bn254_snarks_ec_g1_aff) -> secret_bool;
2054  }
2055  extern "C" {
2056      pub fn ctt_bn254_snarks_ec_g1_aff_set_inf(P: *mut bn254_snarks_ec_g1_aff);
2057  }
2058  extern "C" {
2059      pub fn ctt_bn254_snarks_ec_g1_aff_ccopy(
2060          P: *mut bn254_snarks_ec_g1_aff,
2061          Q: *const bn254_snarks_ec_g1_aff,
2062          ctl: secret_bool,
2063      );
2064  }
2065  extern "C" {
2066      pub fn ctt_bn254_snarks_ec_g1_aff_is_on_curve(
2067          x: *const bn254_snarks_fp,
2068          y: *const bn254_snarks_fp,
2069      ) -> secret_bool;
2070  }
2071  extern "C" {
2072      pub fn ctt_bn254_snarks_ec_g1_aff_neg(
2073          P: *mut bn254_snarks_ec_g1_aff,
2074          Q: *const bn254_snarks_ec_g1_aff,
2075      );
2076  }
2077  extern "C" {
2078      pub fn ctt_bn254_snarks_ec_g1_aff_neg_in_place(P: *mut bn254_snarks_ec_g1_aff);
2079  }
2080  extern "C" {
2081      pub fn ctt_bn254_snarks_ec_g1_jac_is_eq(
2082          P: *const bn254_snarks_ec_g1_jac,
2083          Q: *const bn254_snarks_ec_g1_jac,
2084      ) -> secret_bool;
2085  }
2086  extern "C" {
2087      pub fn ctt_bn254_snarks_ec_g1_jac_is_inf(P: *const bn254_snarks_ec_g1_jac) -> secret_bool;
2088  }
2089  extern "C" {
2090      pub fn ctt_bn254_snarks_ec_g1_jac_set_inf(P: *mut bn254_snarks_ec_g1_jac);
2091  }
2092  extern "C" {
2093      pub fn ctt_bn254_snarks_ec_g1_jac_ccopy(
2094          P: *mut bn254_snarks_ec_g1_jac,
2095          Q: *const bn254_snarks_ec_g1_jac,
2096          ctl: secret_bool,
2097      );
2098  }
2099  extern "C" {
2100      pub fn ctt_bn254_snarks_ec_g1_jac_neg(
2101          P: *mut bn254_snarks_ec_g1_jac,
2102          Q: *const bn254_snarks_ec_g1_jac,
2103      );
2104  }
2105  extern "C" {
2106      pub fn ctt_bn254_snarks_ec_g1_jac_neg_in_place(P: *mut bn254_snarks_ec_g1_jac);
2107  }
2108  extern "C" {
2109      pub fn ctt_bn254_snarks_ec_g1_jac_cneg_in_place(
2110          P: *mut bn254_snarks_ec_g1_jac,
2111          ctl: secret_bool,
2112      );
2113  }
2114  extern "C" {
2115      pub fn ctt_bn254_snarks_ec_g1_jac_sum(
2116          r: *mut bn254_snarks_ec_g1_jac,
2117          P: *const bn254_snarks_ec_g1_jac,
2118          Q: *const bn254_snarks_ec_g1_jac,
2119      );
2120  }
2121  extern "C" {
2122      pub fn ctt_bn254_snarks_ec_g1_jac_add_in_place(
2123          P: *mut bn254_snarks_ec_g1_jac,
2124          Q: *const bn254_snarks_ec_g1_jac,
2125      );
2126  }
2127  extern "C" {
2128      pub fn ctt_bn254_snarks_ec_g1_jac_diff(
2129          r: *mut bn254_snarks_ec_g1_jac,
2130          P: *const bn254_snarks_ec_g1_jac,
2131          Q: *const bn254_snarks_ec_g1_jac,
2132      );
2133  }
2134  extern "C" {
2135      pub fn ctt_bn254_snarks_ec_g1_jac_double(
2136          r: *mut bn254_snarks_ec_g1_jac,
2137          P: *const bn254_snarks_ec_g1_jac,
2138      );
2139  }
2140  extern "C" {
2141      pub fn ctt_bn254_snarks_ec_g1_jac_double_in_place(P: *mut bn254_snarks_ec_g1_jac);
2142  }
2143  extern "C" {
2144      pub fn ctt_bn254_snarks_ec_g1_jac_affine(
2145          dst: *mut bn254_snarks_ec_g1_aff,
2146          src: *const bn254_snarks_ec_g1_jac,
2147      );
2148  }
2149  extern "C" {
2150      pub fn ctt_bn254_snarks_ec_g1_jac_from_affine(
2151          dst: *mut bn254_snarks_ec_g1_jac,
2152          src: *const bn254_snarks_ec_g1_aff,
2153      );
2154  }
2155  extern "C" {
2156      pub fn ctt_bn254_snarks_ec_g1_prj_is_eq(
2157          P: *const bn254_snarks_ec_g1_prj,
2158          Q: *const bn254_snarks_ec_g1_prj,
2159      ) -> secret_bool;
2160  }
2161  extern "C" {
2162      pub fn ctt_bn254_snarks_ec_g1_prj_is_inf(P: *const bn254_snarks_ec_g1_prj) -> secret_bool;
2163  }
2164  extern "C" {
2165      pub fn ctt_bn254_snarks_ec_g1_prj_set_inf(P: *mut bn254_snarks_ec_g1_prj);
2166  }
2167  extern "C" {
2168      pub fn ctt_bn254_snarks_ec_g1_prj_ccopy(
2169          P: *mut bn254_snarks_ec_g1_prj,
2170          Q: *const bn254_snarks_ec_g1_prj,
2171          ctl: secret_bool,
2172      );
2173  }
2174  extern "C" {
2175      pub fn ctt_bn254_snarks_ec_g1_prj_neg(
2176          P: *mut bn254_snarks_ec_g1_prj,
2177          Q: *const bn254_snarks_ec_g1_prj,
2178      );
2179  }
2180  extern "C" {
2181      pub fn ctt_bn254_snarks_ec_g1_prj_neg_in_place(P: *mut bn254_snarks_ec_g1_prj);
2182  }
2183  extern "C" {
2184      pub fn ctt_bn254_snarks_ec_g1_prj_cneg_in_place(
2185          P: *mut bn254_snarks_ec_g1_prj,
2186          ctl: secret_bool,
2187      );
2188  }
2189  extern "C" {
2190      pub fn ctt_bn254_snarks_ec_g1_prj_sum(
2191          r: *mut bn254_snarks_ec_g1_prj,
2192          P: *const bn254_snarks_ec_g1_prj,
2193          Q: *const bn254_snarks_ec_g1_prj,
2194      );
2195  }
2196  extern "C" {
2197      pub fn ctt_bn254_snarks_ec_g1_prj_add_in_place(
2198          P: *mut bn254_snarks_ec_g1_prj,
2199          Q: *const bn254_snarks_ec_g1_prj,
2200      );
2201  }
2202  extern "C" {
2203      pub fn ctt_bn254_snarks_ec_g1_prj_diff(
2204          r: *mut bn254_snarks_ec_g1_prj,
2205          P: *const bn254_snarks_ec_g1_prj,
2206          Q: *const bn254_snarks_ec_g1_prj,
2207      );
2208  }
2209  extern "C" {
2210      pub fn ctt_bn254_snarks_ec_g1_prj_double(
2211          r: *mut bn254_snarks_ec_g1_prj,
2212          P: *const bn254_snarks_ec_g1_prj,
2213      );
2214  }
2215  extern "C" {
2216      pub fn ctt_bn254_snarks_ec_g1_prj_double_in_place(P: *mut bn254_snarks_ec_g1_prj);
2217  }
2218  extern "C" {
2219      pub fn ctt_bn254_snarks_ec_g1_prj_affine(
2220          dst: *mut bn254_snarks_ec_g1_aff,
2221          src: *const bn254_snarks_ec_g1_prj,
2222      );
2223  }
2224  extern "C" {
2225      pub fn ctt_bn254_snarks_ec_g1_prj_from_affine(
2226          dst: *mut bn254_snarks_ec_g1_prj,
2227          src: *const bn254_snarks_ec_g1_aff,
2228      );
2229  }
2230  extern "C" {
2231      pub fn ctt_bn254_snarks_ec_g2_aff_is_eq(
2232          P: *const bn254_snarks_ec_g2_aff,
2233          Q: *const bn254_snarks_ec_g2_aff,
2234      ) -> secret_bool;
2235  }
2236  extern "C" {
2237      pub fn ctt_bn254_snarks_ec_g2_aff_is_inf(P: *const bn254_snarks_ec_g2_aff) -> secret_bool;
2238  }
2239  extern "C" {
2240      pub fn ctt_bn254_snarks_ec_g2_aff_set_inf(P: *mut bn254_snarks_ec_g2_aff);
2241  }
2242  extern "C" {
2243      pub fn ctt_bn254_snarks_ec_g2_aff_ccopy(
2244          P: *mut bn254_snarks_ec_g2_aff,
2245          Q: *const bn254_snarks_ec_g2_aff,
2246          ctl: secret_bool,
2247      );
2248  }
2249  extern "C" {
2250      pub fn ctt_bn254_snarks_ec_g2_aff_is_on_curve(
2251          x: *const bn254_snarks_fp2,
2252          y: *const bn254_snarks_fp2,
2253      ) -> secret_bool;
2254  }
2255  extern "C" {
2256      pub fn ctt_bn254_snarks_ec_g2_aff_neg(
2257          P: *mut bn254_snarks_ec_g2_aff,
2258          Q: *const bn254_snarks_ec_g2_aff,
2259      );
2260  }
2261  extern "C" {
2262      pub fn ctt_bn254_snarks_ec_g2_aff_neg_in_place(P: *mut bn254_snarks_ec_g2_aff);
2263  }
2264  extern "C" {
2265      pub fn ctt_bn254_snarks_ec_g2_jac_is_eq(
2266          P: *const bn254_snarks_ec_g2_jac,
2267          Q: *const bn254_snarks_ec_g2_jac,
2268      ) -> secret_bool;
2269  }
2270  extern "C" {
2271      pub fn ctt_bn254_snarks_ec_g2_jac_is_inf(P: *const bn254_snarks_ec_g2_jac) -> secret_bool;
2272  }
2273  extern "C" {
2274      pub fn ctt_bn254_snarks_ec_g2_jac_set_inf(P: *mut bn254_snarks_ec_g2_jac);
2275  }
2276  extern "C" {
2277      pub fn ctt_bn254_snarks_ec_g2_jac_ccopy(
2278          P: *mut bn254_snarks_ec_g2_jac,
2279          Q: *const bn254_snarks_ec_g2_jac,
2280          ctl: secret_bool,
2281      );
2282  }
2283  extern "C" {
2284      pub fn ctt_bn254_snarks_ec_g2_jac_neg(
2285          P: *mut bn254_snarks_ec_g2_jac,
2286          Q: *const bn254_snarks_ec_g2_jac,
2287      );
2288  }
2289  extern "C" {
2290      pub fn ctt_bn254_snarks_ec_g2_jac_neg_in_place(P: *mut bn254_snarks_ec_g2_jac);
2291  }
2292  extern "C" {
2293      pub fn ctt_bn254_snarks_ec_g2_jac_cneg_in_place(
2294          P: *mut bn254_snarks_ec_g2_jac,
2295          ctl: secret_bool,
2296      );
2297  }
2298  extern "C" {
2299      pub fn ctt_bn254_snarks_ec_g2_jac_sum(
2300          r: *mut bn254_snarks_ec_g2_jac,
2301          P: *const bn254_snarks_ec_g2_jac,
2302          Q: *const bn254_snarks_ec_g2_jac,
2303      );
2304  }
2305  extern "C" {
2306      pub fn ctt_bn254_snarks_ec_g2_jac_add_in_place(
2307          P: *mut bn254_snarks_ec_g2_jac,
2308          Q: *const bn254_snarks_ec_g2_jac,
2309      );
2310  }
2311  extern "C" {
2312      pub fn ctt_bn254_snarks_ec_g2_jac_diff(
2313          r: *mut bn254_snarks_ec_g2_jac,
2314          P: *const bn254_snarks_ec_g2_jac,
2315          Q: *const bn254_snarks_ec_g2_jac,
2316      );
2317  }
2318  extern "C" {
2319      pub fn ctt_bn254_snarks_ec_g2_jac_double(
2320          r: *mut bn254_snarks_ec_g2_jac,
2321          P: *const bn254_snarks_ec_g2_jac,
2322      );
2323  }
2324  extern "C" {
2325      pub fn ctt_bn254_snarks_ec_g2_jac_double_in_place(P: *mut bn254_snarks_ec_g2_jac);
2326  }
2327  extern "C" {
2328      pub fn ctt_bn254_snarks_ec_g2_jac_affine(
2329          dst: *mut bn254_snarks_ec_g2_aff,
2330          src: *const bn254_snarks_ec_g2_jac,
2331      );
2332  }
2333  extern "C" {
2334      pub fn ctt_bn254_snarks_ec_g2_jac_from_affine(
2335          dst: *mut bn254_snarks_ec_g2_jac,
2336          src: *const bn254_snarks_ec_g2_aff,
2337      );
2338  }
2339  extern "C" {
2340      pub fn ctt_bn254_snarks_ec_g2_prj_is_eq(
2341          P: *const bn254_snarks_ec_g2_prj,
2342          Q: *const bn254_snarks_ec_g2_prj,
2343      ) -> secret_bool;
2344  }
2345  extern "C" {
2346      pub fn ctt_bn254_snarks_ec_g2_prj_is_inf(P: *const bn254_snarks_ec_g2_prj) -> secret_bool;
2347  }
2348  extern "C" {
2349      pub fn ctt_bn254_snarks_ec_g2_prj_set_inf(P: *mut bn254_snarks_ec_g2_prj);
2350  }
2351  extern "C" {
2352      pub fn ctt_bn254_snarks_ec_g2_prj_ccopy(
2353          P: *mut bn254_snarks_ec_g2_prj,
2354          Q: *const bn254_snarks_ec_g2_prj,
2355          ctl: secret_bool,
2356      );
2357  }
2358  extern "C" {
2359      pub fn ctt_bn254_snarks_ec_g2_prj_neg(
2360          P: *mut bn254_snarks_ec_g2_prj,
2361          Q: *const bn254_snarks_ec_g2_prj,
2362      );
2363  }
2364  extern "C" {
2365      pub fn ctt_bn254_snarks_ec_g2_prj_neg_in_place(P: *mut bn254_snarks_ec_g2_prj);
2366  }
2367  extern "C" {
2368      pub fn ctt_bn254_snarks_ec_g2_prj_cneg_in_place(
2369          P: *mut bn254_snarks_ec_g2_prj,
2370          ctl: secret_bool,
2371      );
2372  }
2373  extern "C" {
2374      pub fn ctt_bn254_snarks_ec_g2_prj_sum(
2375          r: *mut bn254_snarks_ec_g2_prj,
2376          P: *const bn254_snarks_ec_g2_prj,
2377          Q: *const bn254_snarks_ec_g2_prj,
2378      );
2379  }
2380  extern "C" {
2381      pub fn ctt_bn254_snarks_ec_g2_prj_add_in_place(
2382          P: *mut bn254_snarks_ec_g2_prj,
2383          Q: *const bn254_snarks_ec_g2_prj,
2384      );
2385  }
2386  extern "C" {
2387      pub fn ctt_bn254_snarks_ec_g2_prj_diff(
2388          r: *mut bn254_snarks_ec_g2_prj,
2389          P: *const bn254_snarks_ec_g2_prj,
2390          Q: *const bn254_snarks_ec_g2_prj,
2391      );
2392  }
2393  extern "C" {
2394      pub fn ctt_bn254_snarks_ec_g2_prj_double(
2395          r: *mut bn254_snarks_ec_g2_prj,
2396          P: *const bn254_snarks_ec_g2_prj,
2397      );
2398  }
2399  extern "C" {
2400      pub fn ctt_bn254_snarks_ec_g2_prj_double_in_place(P: *mut bn254_snarks_ec_g2_prj);
2401  }
2402  extern "C" {
2403      pub fn ctt_bn254_snarks_ec_g2_prj_affine(
2404          dst: *mut bn254_snarks_ec_g2_aff,
2405          src: *const bn254_snarks_ec_g2_prj,
2406      );
2407  }
2408  extern "C" {
2409      pub fn ctt_bn254_snarks_ec_g2_prj_from_affine(
2410          dst: *mut bn254_snarks_ec_g2_prj,
2411          src: *const bn254_snarks_ec_g2_aff,
2412      );
2413  }
2414  #[repr(C)]
2415  #[derive(Copy, Clone)]
2416  pub struct pallas_fr {
2417      limbs: [secret_word; 4usize],
2418  }
2419  #[test]
2420  fn bindgen_test_layout_pallas_fr() {
2421      const UNINIT: ::core::mem::MaybeUninit<pallas_fr> = ::core::mem::MaybeUninit::uninit();
2422      let ptr = UNINIT.as_ptr();
2423      assert_eq!(
2424          ::core::mem::size_of::<pallas_fr>(),
2425          32usize,
2426          concat!("Size of: ", stringify!(pallas_fr))
2427      );
2428      assert_eq!(
2429          ::core::mem::align_of::<pallas_fr>(),
2430          8usize,
2431          concat!("Alignment of ", stringify!(pallas_fr))
2432      );
2433      assert_eq!(
2434          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
2435          0usize,
2436          concat!(
2437              "Offset of field: ",
2438              stringify!(pallas_fr),
2439              "::",
2440              stringify!(limbs)
2441          )
2442      );
2443  }
2444  #[repr(C)]
2445  #[derive(Copy, Clone)]
2446  pub struct pallas_fp {
2447      limbs: [secret_word; 4usize],
2448  }
2449  #[test]
2450  fn bindgen_test_layout_pallas_fp() {
2451      const UNINIT: ::core::mem::MaybeUninit<pallas_fp> = ::core::mem::MaybeUninit::uninit();
2452      let ptr = UNINIT.as_ptr();
2453      assert_eq!(
2454          ::core::mem::size_of::<pallas_fp>(),
2455          32usize,
2456          concat!("Size of: ", stringify!(pallas_fp))
2457      );
2458      assert_eq!(
2459          ::core::mem::align_of::<pallas_fp>(),
2460          8usize,
2461          concat!("Alignment of ", stringify!(pallas_fp))
2462      );
2463      assert_eq!(
2464          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
2465          0usize,
2466          concat!(
2467              "Offset of field: ",
2468              stringify!(pallas_fp),
2469              "::",
2470              stringify!(limbs)
2471          )
2472      );
2473  }
2474  #[repr(C)]
2475  #[derive(Copy, Clone)]
2476  pub struct pallas_ec_aff {
2477      x: pallas_fp,
2478      y: pallas_fp,
2479  }
2480  #[test]
2481  fn bindgen_test_layout_pallas_ec_aff() {
2482      const UNINIT: ::core::mem::MaybeUninit<pallas_ec_aff> = ::core::mem::MaybeUninit::uninit();
2483      let ptr = UNINIT.as_ptr();
2484      assert_eq!(
2485          ::core::mem::size_of::<pallas_ec_aff>(),
2486          64usize,
2487          concat!("Size of: ", stringify!(pallas_ec_aff))
2488      );
2489      assert_eq!(
2490          ::core::mem::align_of::<pallas_ec_aff>(),
2491          8usize,
2492          concat!("Alignment of ", stringify!(pallas_ec_aff))
2493      );
2494      assert_eq!(
2495          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
2496          0usize,
2497          concat!(
2498              "Offset of field: ",
2499              stringify!(pallas_ec_aff),
2500              "::",
2501              stringify!(x)
2502          )
2503      );
2504      assert_eq!(
2505          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
2506          32usize,
2507          concat!(
2508              "Offset of field: ",
2509              stringify!(pallas_ec_aff),
2510              "::",
2511              stringify!(y)
2512          )
2513      );
2514  }
2515  #[repr(C)]
2516  #[derive(Copy, Clone)]
2517  pub struct pallas_ec_jac {
2518      x: pallas_fp,
2519      y: pallas_fp,
2520      z: pallas_fp,
2521  }
2522  #[test]
2523  fn bindgen_test_layout_pallas_ec_jac() {
2524      const UNINIT: ::core::mem::MaybeUninit<pallas_ec_jac> = ::core::mem::MaybeUninit::uninit();
2525      let ptr = UNINIT.as_ptr();
2526      assert_eq!(
2527          ::core::mem::size_of::<pallas_ec_jac>(),
2528          96usize,
2529          concat!("Size of: ", stringify!(pallas_ec_jac))
2530      );
2531      assert_eq!(
2532          ::core::mem::align_of::<pallas_ec_jac>(),
2533          8usize,
2534          concat!("Alignment of ", stringify!(pallas_ec_jac))
2535      );
2536      assert_eq!(
2537          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
2538          0usize,
2539          concat!(
2540              "Offset of field: ",
2541              stringify!(pallas_ec_jac),
2542              "::",
2543              stringify!(x)
2544          )
2545      );
2546      assert_eq!(
2547          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
2548          32usize,
2549          concat!(
2550              "Offset of field: ",
2551              stringify!(pallas_ec_jac),
2552              "::",
2553              stringify!(y)
2554          )
2555      );
2556      assert_eq!(
2557          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
2558          64usize,
2559          concat!(
2560              "Offset of field: ",
2561              stringify!(pallas_ec_jac),
2562              "::",
2563              stringify!(z)
2564          )
2565      );
2566  }
2567  #[repr(C)]
2568  #[derive(Copy, Clone)]
2569  pub struct pallas_ec_prj {
2570      x: pallas_fp,
2571      y: pallas_fp,
2572      z: pallas_fp,
2573  }
2574  #[test]
2575  fn bindgen_test_layout_pallas_ec_prj() {
2576      const UNINIT: ::core::mem::MaybeUninit<pallas_ec_prj> = ::core::mem::MaybeUninit::uninit();
2577      let ptr = UNINIT.as_ptr();
2578      assert_eq!(
2579          ::core::mem::size_of::<pallas_ec_prj>(),
2580          96usize,
2581          concat!("Size of: ", stringify!(pallas_ec_prj))
2582      );
2583      assert_eq!(
2584          ::core::mem::align_of::<pallas_ec_prj>(),
2585          8usize,
2586          concat!("Alignment of ", stringify!(pallas_ec_prj))
2587      );
2588      assert_eq!(
2589          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
2590          0usize,
2591          concat!(
2592              "Offset of field: ",
2593              stringify!(pallas_ec_prj),
2594              "::",
2595              stringify!(x)
2596          )
2597      );
2598      assert_eq!(
2599          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
2600          32usize,
2601          concat!(
2602              "Offset of field: ",
2603              stringify!(pallas_ec_prj),
2604              "::",
2605              stringify!(y)
2606          )
2607      );
2608      assert_eq!(
2609          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
2610          64usize,
2611          concat!(
2612              "Offset of field: ",
2613              stringify!(pallas_ec_prj),
2614              "::",
2615              stringify!(z)
2616          )
2617      );
2618  }
2619  extern "C" {
2620      #[must_use]
2621      pub fn ctt_pallas_fr_unmarshalBE(dst: *mut pallas_fr, src: *const byte, src_len: isize)
2622          -> bool;
2623  }
2624  extern "C" {
2625      #[must_use]
2626      pub fn ctt_pallas_fr_marshalBE(dst: *mut byte, dst_len: isize, src: *const pallas_fr) -> bool;
2627  }
2628  extern "C" {
2629      pub fn ctt_pallas_fr_is_eq(a: *const pallas_fr, b: *const pallas_fr) -> secret_bool;
2630  }
2631  extern "C" {
2632      pub fn ctt_pallas_fr_is_zero(a: *const pallas_fr) -> secret_bool;
2633  }
2634  extern "C" {
2635      pub fn ctt_pallas_fr_is_one(a: *const pallas_fr) -> secret_bool;
2636  }
2637  extern "C" {
2638      pub fn ctt_pallas_fr_is_minus_one(a: *const pallas_fr) -> secret_bool;
2639  }
2640  extern "C" {
2641      pub fn ctt_pallas_fr_set_zero(a: *mut pallas_fr);
2642  }
2643  extern "C" {
2644      pub fn ctt_pallas_fr_set_one(a: *mut pallas_fr);
2645  }
2646  extern "C" {
2647      pub fn ctt_pallas_fr_set_minus_one(a: *mut pallas_fr);
2648  }
2649  extern "C" {
2650      pub fn ctt_pallas_fr_neg(r: *mut pallas_fr, a: *const pallas_fr);
2651  }
2652  extern "C" {
2653      pub fn ctt_pallas_fr_neg_in_place(a: *mut pallas_fr);
2654  }
2655  extern "C" {
2656      pub fn ctt_pallas_fr_sum(r: *mut pallas_fr, a: *const pallas_fr, b: *const pallas_fr);
2657  }
2658  extern "C" {
2659      pub fn ctt_pallas_fr_add_in_place(a: *mut pallas_fr, b: *const pallas_fr);
2660  }
2661  extern "C" {
2662      pub fn ctt_pallas_fr_diff(r: *mut pallas_fr, a: *const pallas_fr, b: *const pallas_fr);
2663  }
2664  extern "C" {
2665      pub fn ctt_pallas_fr_sub_in_place(a: *mut pallas_fr, b: *const pallas_fr);
2666  }
2667  extern "C" {
2668      pub fn ctt_pallas_fr_double(r: *mut pallas_fr, a: *const pallas_fr);
2669  }
2670  extern "C" {
2671      pub fn ctt_pallas_fr_double_in_place(a: *mut pallas_fr);
2672  }
2673  extern "C" {
2674      pub fn ctt_pallas_fr_prod(r: *mut pallas_fr, a: *const pallas_fr, b: *const pallas_fr);
2675  }
2676  extern "C" {
2677      pub fn ctt_pallas_fr_mul_in_place(a: *mut pallas_fr, b: *const pallas_fr);
2678  }
2679  extern "C" {
2680      pub fn ctt_pallas_fr_square(r: *mut pallas_fr, a: *const pallas_fr);
2681  }
2682  extern "C" {
2683      pub fn ctt_pallas_fr_square_in_place(a: *mut pallas_fr);
2684  }
2685  extern "C" {
2686      pub fn ctt_pallas_fr_div2(a: *mut pallas_fr);
2687  }
2688  extern "C" {
2689      pub fn ctt_pallas_fr_inv(r: *mut pallas_fr, a: *const pallas_fr);
2690  }
2691  extern "C" {
2692      pub fn ctt_pallas_fr_inv_in_place(a: *mut pallas_fr);
2693  }
2694  extern "C" {
2695      pub fn ctt_pallas_fr_ccopy(a: *mut pallas_fr, b: *const pallas_fr, ctl: secret_bool);
2696  }
2697  extern "C" {
2698      pub fn ctt_pallas_fr_cswap(a: *mut pallas_fr, b: *mut pallas_fr, ctl: secret_bool);
2699  }
2700  extern "C" {
2701      pub fn ctt_pallas_fr_cset_zero(a: *mut pallas_fr, ctl: secret_bool);
2702  }
2703  extern "C" {
2704      pub fn ctt_pallas_fr_cset_one(a: *mut pallas_fr, ctl: secret_bool);
2705  }
2706  extern "C" {
2707      pub fn ctt_pallas_fr_cneg_in_place(a: *mut pallas_fr, ctl: secret_bool);
2708  }
2709  extern "C" {
2710      pub fn ctt_pallas_fr_cadd_in_place(a: *mut pallas_fr, b: *const pallas_fr, ctl: secret_bool);
2711  }
2712  extern "C" {
2713      pub fn ctt_pallas_fr_csub_in_place(a: *mut pallas_fr, b: *const pallas_fr, ctl: secret_bool);
2714  }
2715  extern "C" {
2716      #[must_use]
2717      pub fn ctt_pallas_fp_unmarshalBE(dst: *mut pallas_fp, src: *const byte, src_len: isize)
2718          -> bool;
2719  }
2720  extern "C" {
2721      #[must_use]
2722      pub fn ctt_pallas_fp_marshalBE(dst: *mut byte, dst_len: isize, src: *const pallas_fp) -> bool;
2723  }
2724  extern "C" {
2725      pub fn ctt_pallas_fp_is_eq(a: *const pallas_fp, b: *const pallas_fp) -> secret_bool;
2726  }
2727  extern "C" {
2728      pub fn ctt_pallas_fp_is_zero(a: *const pallas_fp) -> secret_bool;
2729  }
2730  extern "C" {
2731      pub fn ctt_pallas_fp_is_one(a: *const pallas_fp) -> secret_bool;
2732  }
2733  extern "C" {
2734      pub fn ctt_pallas_fp_is_minus_one(a: *const pallas_fp) -> secret_bool;
2735  }
2736  extern "C" {
2737      pub fn ctt_pallas_fp_set_zero(a: *mut pallas_fp);
2738  }
2739  extern "C" {
2740      pub fn ctt_pallas_fp_set_one(a: *mut pallas_fp);
2741  }
2742  extern "C" {
2743      pub fn ctt_pallas_fp_set_minus_one(a: *mut pallas_fp);
2744  }
2745  extern "C" {
2746      pub fn ctt_pallas_fp_neg(r: *mut pallas_fp, a: *const pallas_fp);
2747  }
2748  extern "C" {
2749      pub fn ctt_pallas_fp_neg_in_place(a: *mut pallas_fp);
2750  }
2751  extern "C" {
2752      pub fn ctt_pallas_fp_sum(r: *mut pallas_fp, a: *const pallas_fp, b: *const pallas_fp);
2753  }
2754  extern "C" {
2755      pub fn ctt_pallas_fp_add_in_place(a: *mut pallas_fp, b: *const pallas_fp);
2756  }
2757  extern "C" {
2758      pub fn ctt_pallas_fp_diff(r: *mut pallas_fp, a: *const pallas_fp, b: *const pallas_fp);
2759  }
2760  extern "C" {
2761      pub fn ctt_pallas_fp_sub_in_place(a: *mut pallas_fp, b: *const pallas_fp);
2762  }
2763  extern "C" {
2764      pub fn ctt_pallas_fp_double(r: *mut pallas_fp, a: *const pallas_fp);
2765  }
2766  extern "C" {
2767      pub fn ctt_pallas_fp_double_in_place(a: *mut pallas_fp);
2768  }
2769  extern "C" {
2770      pub fn ctt_pallas_fp_prod(r: *mut pallas_fp, a: *const pallas_fp, b: *const pallas_fp);
2771  }
2772  extern "C" {
2773      pub fn ctt_pallas_fp_mul_in_place(a: *mut pallas_fp, b: *const pallas_fp);
2774  }
2775  extern "C" {
2776      pub fn ctt_pallas_fp_square(r: *mut pallas_fp, a: *const pallas_fp);
2777  }
2778  extern "C" {
2779      pub fn ctt_pallas_fp_square_in_place(a: *mut pallas_fp);
2780  }
2781  extern "C" {
2782      pub fn ctt_pallas_fp_div2(a: *mut pallas_fp);
2783  }
2784  extern "C" {
2785      pub fn ctt_pallas_fp_inv(r: *mut pallas_fp, a: *const pallas_fp);
2786  }
2787  extern "C" {
2788      pub fn ctt_pallas_fp_inv_in_place(a: *mut pallas_fp);
2789  }
2790  extern "C" {
2791      pub fn ctt_pallas_fp_ccopy(a: *mut pallas_fp, b: *const pallas_fp, ctl: secret_bool);
2792  }
2793  extern "C" {
2794      pub fn ctt_pallas_fp_cswap(a: *mut pallas_fp, b: *mut pallas_fp, ctl: secret_bool);
2795  }
2796  extern "C" {
2797      pub fn ctt_pallas_fp_cset_zero(a: *mut pallas_fp, ctl: secret_bool);
2798  }
2799  extern "C" {
2800      pub fn ctt_pallas_fp_cset_one(a: *mut pallas_fp, ctl: secret_bool);
2801  }
2802  extern "C" {
2803      pub fn ctt_pallas_fp_cneg_in_place(a: *mut pallas_fp, ctl: secret_bool);
2804  }
2805  extern "C" {
2806      pub fn ctt_pallas_fp_cadd_in_place(a: *mut pallas_fp, b: *const pallas_fp, ctl: secret_bool);
2807  }
2808  extern "C" {
2809      pub fn ctt_pallas_fp_csub_in_place(a: *mut pallas_fp, b: *const pallas_fp, ctl: secret_bool);
2810  }
2811  extern "C" {
2812      pub fn ctt_pallas_fp_is_square(a: *const pallas_fp) -> secret_bool;
2813  }
2814  extern "C" {
2815      pub fn ctt_pallas_fp_invsqrt(r: *mut pallas_fp, a: *const pallas_fp);
2816  }
2817  extern "C" {
2818      pub fn ctt_pallas_fp_invsqrt_in_place(r: *mut pallas_fp, a: *const pallas_fp) -> secret_bool;
2819  }
2820  extern "C" {
2821      pub fn ctt_pallas_fp_sqrt_in_place(a: *mut pallas_fp);
2822  }
2823  extern "C" {
2824      pub fn ctt_pallas_fp_sqrt_if_square_in_place(a: *mut pallas_fp) -> secret_bool;
2825  }
2826  extern "C" {
2827      pub fn ctt_pallas_fp_sqrt_invsqrt(
2828          sqrt: *mut pallas_fp,
2829          invsqrt: *mut pallas_fp,
2830          a: *const pallas_fp,
2831      );
2832  }
2833  extern "C" {
2834      pub fn ctt_pallas_fp_sqrt_invsqrt_if_square(
2835          sqrt: *mut pallas_fp,
2836          invsqrt: *mut pallas_fp,
2837          a: *const pallas_fp,
2838      ) -> secret_bool;
2839  }
2840  extern "C" {
2841      pub fn ctt_pallas_fp_sqrt_ratio_if_square(
2842          r: *mut pallas_fp,
2843          u: *const pallas_fp,
2844          v: *const pallas_fp,
2845      ) -> secret_bool;
2846  }
2847  extern "C" {
2848      pub fn ctt_pallas_ec_aff_is_eq(P: *const pallas_ec_aff, Q: *const pallas_ec_aff)
2849          -> secret_bool;
2850  }
2851  extern "C" {
2852      pub fn ctt_pallas_ec_aff_is_inf(P: *const pallas_ec_aff) -> secret_bool;
2853  }
2854  extern "C" {
2855      pub fn ctt_pallas_ec_aff_set_inf(P: *mut pallas_ec_aff);
2856  }
2857  extern "C" {
2858      pub fn ctt_pallas_ec_aff_ccopy(
2859          P: *mut pallas_ec_aff,
2860          Q: *const pallas_ec_aff,
2861          ctl: secret_bool,
2862      );
2863  }
2864  extern "C" {
2865      pub fn ctt_pallas_ec_aff_is_on_curve(x: *const pallas_fp, y: *const pallas_fp) -> secret_bool;
2866  }
2867  extern "C" {
2868      pub fn ctt_pallas_ec_aff_neg(P: *mut pallas_ec_aff, Q: *const pallas_ec_aff);
2869  }
2870  extern "C" {
2871      pub fn ctt_pallas_ec_aff_neg_in_place(P: *mut pallas_ec_aff);
2872  }
2873  extern "C" {
2874      pub fn ctt_pallas_ec_jac_is_eq(P: *const pallas_ec_jac, Q: *const pallas_ec_jac)
2875          -> secret_bool;
2876  }
2877  extern "C" {
2878      pub fn ctt_pallas_ec_jac_is_inf(P: *const pallas_ec_jac) -> secret_bool;
2879  }
2880  extern "C" {
2881      pub fn ctt_pallas_ec_jac_set_inf(P: *mut pallas_ec_jac);
2882  }
2883  extern "C" {
2884      pub fn ctt_pallas_ec_jac_ccopy(
2885          P: *mut pallas_ec_jac,
2886          Q: *const pallas_ec_jac,
2887          ctl: secret_bool,
2888      );
2889  }
2890  extern "C" {
2891      pub fn ctt_pallas_ec_jac_neg(P: *mut pallas_ec_jac, Q: *const pallas_ec_jac);
2892  }
2893  extern "C" {
2894      pub fn ctt_pallas_ec_jac_neg_in_place(P: *mut pallas_ec_jac);
2895  }
2896  extern "C" {
2897      pub fn ctt_pallas_ec_jac_cneg_in_place(P: *mut pallas_ec_jac, ctl: secret_bool);
2898  }
2899  extern "C" {
2900      pub fn ctt_pallas_ec_jac_sum(
2901          r: *mut pallas_ec_jac,
2902          P: *const pallas_ec_jac,
2903          Q: *const pallas_ec_jac,
2904      );
2905  }
2906  extern "C" {
2907      pub fn ctt_pallas_ec_jac_add_in_place(P: *mut pallas_ec_jac, Q: *const pallas_ec_jac);
2908  }
2909  extern "C" {
2910      pub fn ctt_pallas_ec_jac_diff(
2911          r: *mut pallas_ec_jac,
2912          P: *const pallas_ec_jac,
2913          Q: *const pallas_ec_jac,
2914      );
2915  }
2916  extern "C" {
2917      pub fn ctt_pallas_ec_jac_double(r: *mut pallas_ec_jac, P: *const pallas_ec_jac);
2918  }
2919  extern "C" {
2920      pub fn ctt_pallas_ec_jac_double_in_place(P: *mut pallas_ec_jac);
2921  }
2922  extern "C" {
2923      pub fn ctt_pallas_ec_jac_affine(dst: *mut pallas_ec_aff, src: *const pallas_ec_jac);
2924  }
2925  extern "C" {
2926      pub fn ctt_pallas_ec_jac_from_affine(dst: *mut pallas_ec_jac, src: *const pallas_ec_aff);
2927  }
2928  extern "C" {
2929      pub fn ctt_pallas_ec_prj_is_eq(P: *const pallas_ec_prj, Q: *const pallas_ec_prj)
2930          -> secret_bool;
2931  }
2932  extern "C" {
2933      pub fn ctt_pallas_ec_prj_is_inf(P: *const pallas_ec_prj) -> secret_bool;
2934  }
2935  extern "C" {
2936      pub fn ctt_pallas_ec_prj_set_inf(P: *mut pallas_ec_prj);
2937  }
2938  extern "C" {
2939      pub fn ctt_pallas_ec_prj_ccopy(
2940          P: *mut pallas_ec_prj,
2941          Q: *const pallas_ec_prj,
2942          ctl: secret_bool,
2943      );
2944  }
2945  extern "C" {
2946      pub fn ctt_pallas_ec_prj_neg(P: *mut pallas_ec_prj, Q: *const pallas_ec_prj);
2947  }
2948  extern "C" {
2949      pub fn ctt_pallas_ec_prj_neg_in_place(P: *mut pallas_ec_prj);
2950  }
2951  extern "C" {
2952      pub fn ctt_pallas_ec_prj_cneg_in_place(P: *mut pallas_ec_prj, ctl: secret_bool);
2953  }
2954  extern "C" {
2955      pub fn ctt_pallas_ec_prj_sum(
2956          r: *mut pallas_ec_prj,
2957          P: *const pallas_ec_prj,
2958          Q: *const pallas_ec_prj,
2959      );
2960  }
2961  extern "C" {
2962      pub fn ctt_pallas_ec_prj_add_in_place(P: *mut pallas_ec_prj, Q: *const pallas_ec_prj);
2963  }
2964  extern "C" {
2965      pub fn ctt_pallas_ec_prj_diff(
2966          r: *mut pallas_ec_prj,
2967          P: *const pallas_ec_prj,
2968          Q: *const pallas_ec_prj,
2969      );
2970  }
2971  extern "C" {
2972      pub fn ctt_pallas_ec_prj_double(r: *mut pallas_ec_prj, P: *const pallas_ec_prj);
2973  }
2974  extern "C" {
2975      pub fn ctt_pallas_ec_prj_double_in_place(P: *mut pallas_ec_prj);
2976  }
2977  extern "C" {
2978      pub fn ctt_pallas_ec_prj_affine(dst: *mut pallas_ec_aff, src: *const pallas_ec_prj);
2979  }
2980  extern "C" {
2981      pub fn ctt_pallas_ec_prj_from_affine(dst: *mut pallas_ec_prj, src: *const pallas_ec_aff);
2982  }
2983  #[repr(C)]
2984  #[derive(Copy, Clone)]
2985  pub struct vesta_fr {
2986      limbs: [secret_word; 4usize],
2987  }
2988  #[test]
2989  fn bindgen_test_layout_vesta_fr() {
2990      const UNINIT: ::core::mem::MaybeUninit<vesta_fr> = ::core::mem::MaybeUninit::uninit();
2991      let ptr = UNINIT.as_ptr();
2992      assert_eq!(
2993          ::core::mem::size_of::<vesta_fr>(),
2994          32usize,
2995          concat!("Size of: ", stringify!(vesta_fr))
2996      );
2997      assert_eq!(
2998          ::core::mem::align_of::<vesta_fr>(),
2999          8usize,
3000          concat!("Alignment of ", stringify!(vesta_fr))
3001      );
3002      assert_eq!(
3003          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
3004          0usize,
3005          concat!(
3006              "Offset of field: ",
3007              stringify!(vesta_fr),
3008              "::",
3009              stringify!(limbs)
3010          )
3011      );
3012  }
3013  #[repr(C)]
3014  #[derive(Copy, Clone)]
3015  pub struct vesta_fp {
3016      limbs: [secret_word; 4usize],
3017  }
3018  #[test]
3019  fn bindgen_test_layout_vesta_fp() {
3020      const UNINIT: ::core::mem::MaybeUninit<vesta_fp> = ::core::mem::MaybeUninit::uninit();
3021      let ptr = UNINIT.as_ptr();
3022      assert_eq!(
3023          ::core::mem::size_of::<vesta_fp>(),
3024          32usize,
3025          concat!("Size of: ", stringify!(vesta_fp))
3026      );
3027      assert_eq!(
3028          ::core::mem::align_of::<vesta_fp>(),
3029          8usize,
3030          concat!("Alignment of ", stringify!(vesta_fp))
3031      );
3032      assert_eq!(
3033          unsafe { ::core::ptr::addr_of!((*ptr).limbs) as usize - ptr as usize },
3034          0usize,
3035          concat!(
3036              "Offset of field: ",
3037              stringify!(vesta_fp),
3038              "::",
3039              stringify!(limbs)
3040          )
3041      );
3042  }
3043  #[repr(C)]
3044  #[derive(Copy, Clone)]
3045  pub struct vesta_ec_aff {
3046      x: vesta_fp,
3047      y: vesta_fp,
3048  }
3049  #[test]
3050  fn bindgen_test_layout_vesta_ec_aff() {
3051      const UNINIT: ::core::mem::MaybeUninit<vesta_ec_aff> = ::core::mem::MaybeUninit::uninit();
3052      let ptr = UNINIT.as_ptr();
3053      assert_eq!(
3054          ::core::mem::size_of::<vesta_ec_aff>(),
3055          64usize,
3056          concat!("Size of: ", stringify!(vesta_ec_aff))
3057      );
3058      assert_eq!(
3059          ::core::mem::align_of::<vesta_ec_aff>(),
3060          8usize,
3061          concat!("Alignment of ", stringify!(vesta_ec_aff))
3062      );
3063      assert_eq!(
3064          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
3065          0usize,
3066          concat!(
3067              "Offset of field: ",
3068              stringify!(vesta_ec_aff),
3069              "::",
3070              stringify!(x)
3071          )
3072      );
3073      assert_eq!(
3074          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
3075          32usize,
3076          concat!(
3077              "Offset of field: ",
3078              stringify!(vesta_ec_aff),
3079              "::",
3080              stringify!(y)
3081          )
3082      );
3083  }
3084  #[repr(C)]
3085  #[derive(Copy, Clone)]
3086  pub struct vesta_ec_jac {
3087      x: vesta_fp,
3088      y: vesta_fp,
3089      z: vesta_fp,
3090  }
3091  #[test]
3092  fn bindgen_test_layout_vesta_ec_jac() {
3093      const UNINIT: ::core::mem::MaybeUninit<vesta_ec_jac> = ::core::mem::MaybeUninit::uninit();
3094      let ptr = UNINIT.as_ptr();
3095      assert_eq!(
3096          ::core::mem::size_of::<vesta_ec_jac>(),
3097          96usize,
3098          concat!("Size of: ", stringify!(vesta_ec_jac))
3099      );
3100      assert_eq!(
3101          ::core::mem::align_of::<vesta_ec_jac>(),
3102          8usize,
3103          concat!("Alignment of ", stringify!(vesta_ec_jac))
3104      );
3105      assert_eq!(
3106          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
3107          0usize,
3108          concat!(
3109              "Offset of field: ",
3110              stringify!(vesta_ec_jac),
3111              "::",
3112              stringify!(x)
3113          )
3114      );
3115      assert_eq!(
3116          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
3117          32usize,
3118          concat!(
3119              "Offset of field: ",
3120              stringify!(vesta_ec_jac),
3121              "::",
3122              stringify!(y)
3123          )
3124      );
3125      assert_eq!(
3126          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
3127          64usize,
3128          concat!(
3129              "Offset of field: ",
3130              stringify!(vesta_ec_jac),
3131              "::",
3132              stringify!(z)
3133          )
3134      );
3135  }
3136  #[repr(C)]
3137  #[derive(Copy, Clone)]
3138  pub struct vesta_ec_prj {
3139      x: vesta_fp,
3140      y: vesta_fp,
3141      z: vesta_fp,
3142  }
3143  #[test]
3144  fn bindgen_test_layout_vesta_ec_prj() {
3145      const UNINIT: ::core::mem::MaybeUninit<vesta_ec_prj> = ::core::mem::MaybeUninit::uninit();
3146      let ptr = UNINIT.as_ptr();
3147      assert_eq!(
3148          ::core::mem::size_of::<vesta_ec_prj>(),
3149          96usize,
3150          concat!("Size of: ", stringify!(vesta_ec_prj))
3151      );
3152      assert_eq!(
3153          ::core::mem::align_of::<vesta_ec_prj>(),
3154          8usize,
3155          concat!("Alignment of ", stringify!(vesta_ec_prj))
3156      );
3157      assert_eq!(
3158          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
3159          0usize,
3160          concat!(
3161              "Offset of field: ",
3162              stringify!(vesta_ec_prj),
3163              "::",
3164              stringify!(x)
3165          )
3166      );
3167      assert_eq!(
3168          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
3169          32usize,
3170          concat!(
3171              "Offset of field: ",
3172              stringify!(vesta_ec_prj),
3173              "::",
3174              stringify!(y)
3175          )
3176      );
3177      assert_eq!(
3178          unsafe { ::core::ptr::addr_of!((*ptr).z) as usize - ptr as usize },
3179          64usize,
3180          concat!(
3181              "Offset of field: ",
3182              stringify!(vesta_ec_prj),
3183              "::",
3184              stringify!(z)
3185          )
3186      );
3187  }
3188  extern "C" {
3189      #[must_use]
3190      pub fn ctt_vesta_fr_unmarshalBE(dst: *mut vesta_fr, src: *const byte, src_len: isize) -> bool;
3191  }
3192  extern "C" {
3193      #[must_use]
3194      pub fn ctt_vesta_fr_marshalBE(dst: *mut byte, dst_len: isize, src: *const vesta_fr) -> bool;
3195  }
3196  extern "C" {
3197      pub fn ctt_vesta_fr_is_eq(a: *const vesta_fr, b: *const vesta_fr) -> secret_bool;
3198  }
3199  extern "C" {
3200      pub fn ctt_vesta_fr_is_zero(a: *const vesta_fr) -> secret_bool;
3201  }
3202  extern "C" {
3203      pub fn ctt_vesta_fr_is_one(a: *const vesta_fr) -> secret_bool;
3204  }
3205  extern "C" {
3206      pub fn ctt_vesta_fr_is_minus_one(a: *const vesta_fr) -> secret_bool;
3207  }
3208  extern "C" {
3209      pub fn ctt_vesta_fr_set_zero(a: *mut vesta_fr);
3210  }
3211  extern "C" {
3212      pub fn ctt_vesta_fr_set_one(a: *mut vesta_fr);
3213  }
3214  extern "C" {
3215      pub fn ctt_vesta_fr_set_minus_one(a: *mut vesta_fr);
3216  }
3217  extern "C" {
3218      pub fn ctt_vesta_fr_neg(r: *mut vesta_fr, a: *const vesta_fr);
3219  }
3220  extern "C" {
3221      pub fn ctt_vesta_fr_neg_in_place(a: *mut vesta_fr);
3222  }
3223  extern "C" {
3224      pub fn ctt_vesta_fr_sum(r: *mut vesta_fr, a: *const vesta_fr, b: *const vesta_fr);
3225  }
3226  extern "C" {
3227      pub fn ctt_vesta_fr_add_in_place(a: *mut vesta_fr, b: *const vesta_fr);
3228  }
3229  extern "C" {
3230      pub fn ctt_vesta_fr_diff(r: *mut vesta_fr, a: *const vesta_fr, b: *const vesta_fr);
3231  }
3232  extern "C" {
3233      pub fn ctt_vesta_fr_sub_in_place(a: *mut vesta_fr, b: *const vesta_fr);
3234  }
3235  extern "C" {
3236      pub fn ctt_vesta_fr_double(r: *mut vesta_fr, a: *const vesta_fr);
3237  }
3238  extern "C" {
3239      pub fn ctt_vesta_fr_double_in_place(a: *mut vesta_fr);
3240  }
3241  extern "C" {
3242      pub fn ctt_vesta_fr_prod(r: *mut vesta_fr, a: *const vesta_fr, b: *const vesta_fr);
3243  }
3244  extern "C" {
3245      pub fn ctt_vesta_fr_mul_in_place(a: *mut vesta_fr, b: *const vesta_fr);
3246  }
3247  extern "C" {
3248      pub fn ctt_vesta_fr_square(r: *mut vesta_fr, a: *const vesta_fr);
3249  }
3250  extern "C" {
3251      pub fn ctt_vesta_fr_square_in_place(a: *mut vesta_fr);
3252  }
3253  extern "C" {
3254      pub fn ctt_vesta_fr_div2(a: *mut vesta_fr);
3255  }
3256  extern "C" {
3257      pub fn ctt_vesta_fr_inv(r: *mut vesta_fr, a: *const vesta_fr);
3258  }
3259  extern "C" {
3260      pub fn ctt_vesta_fr_inv_in_place(a: *mut vesta_fr);
3261  }
3262  extern "C" {
3263      pub fn ctt_vesta_fr_ccopy(a: *mut vesta_fr, b: *const vesta_fr, ctl: secret_bool);
3264  }
3265  extern "C" {
3266      pub fn ctt_vesta_fr_cswap(a: *mut vesta_fr, b: *mut vesta_fr, ctl: secret_bool);
3267  }
3268  extern "C" {
3269      pub fn ctt_vesta_fr_cset_zero(a: *mut vesta_fr, ctl: secret_bool);
3270  }
3271  extern "C" {
3272      pub fn ctt_vesta_fr_cset_one(a: *mut vesta_fr, ctl: secret_bool);
3273  }
3274  extern "C" {
3275      pub fn ctt_vesta_fr_cneg_in_place(a: *mut vesta_fr, ctl: secret_bool);
3276  }
3277  extern "C" {
3278      pub fn ctt_vesta_fr_cadd_in_place(a: *mut vesta_fr, b: *const vesta_fr, ctl: secret_bool);
3279  }
3280  extern "C" {
3281      pub fn ctt_vesta_fr_csub_in_place(a: *mut vesta_fr, b: *const vesta_fr, ctl: secret_bool);
3282  }
3283  extern "C" {
3284      #[must_use]
3285      pub fn ctt_vesta_fp_unmarshalBE(dst: *mut vesta_fp, src: *const byte, src_len: isize) -> bool;
3286  }
3287  extern "C" {
3288      #[must_use]
3289      pub fn ctt_vesta_fp_marshalBE(dst: *mut byte, dst_len: isize, src: *const vesta_fp) -> bool;
3290  }
3291  extern "C" {
3292      pub fn ctt_vesta_fp_is_eq(a: *const vesta_fp, b: *const vesta_fp) -> secret_bool;
3293  }
3294  extern "C" {
3295      pub fn ctt_vesta_fp_is_zero(a: *const vesta_fp) -> secret_bool;
3296  }
3297  extern "C" {
3298      pub fn ctt_vesta_fp_is_one(a: *const vesta_fp) -> secret_bool;
3299  }
3300  extern "C" {
3301      pub fn ctt_vesta_fp_is_minus_one(a: *const vesta_fp) -> secret_bool;
3302  }
3303  extern "C" {
3304      pub fn ctt_vesta_fp_set_zero(a: *mut vesta_fp);
3305  }
3306  extern "C" {
3307      pub fn ctt_vesta_fp_set_one(a: *mut vesta_fp);
3308  }
3309  extern "C" {
3310      pub fn ctt_vesta_fp_set_minus_one(a: *mut vesta_fp);
3311  }
3312  extern "C" {
3313      pub fn ctt_vesta_fp_neg(r: *mut vesta_fp, a: *const vesta_fp);
3314  }
3315  extern "C" {
3316      pub fn ctt_vesta_fp_neg_in_place(a: *mut vesta_fp);
3317  }
3318  extern "C" {
3319      pub fn ctt_vesta_fp_sum(r: *mut vesta_fp, a: *const vesta_fp, b: *const vesta_fp);
3320  }
3321  extern "C" {
3322      pub fn ctt_vesta_fp_add_in_place(a: *mut vesta_fp, b: *const vesta_fp);
3323  }
3324  extern "C" {
3325      pub fn ctt_vesta_fp_diff(r: *mut vesta_fp, a: *const vesta_fp, b: *const vesta_fp);
3326  }
3327  extern "C" {
3328      pub fn ctt_vesta_fp_sub_in_place(a: *mut vesta_fp, b: *const vesta_fp);
3329  }
3330  extern "C" {
3331      pub fn ctt_vesta_fp_double(r: *mut vesta_fp, a: *const vesta_fp);
3332  }
3333  extern "C" {
3334      pub fn ctt_vesta_fp_double_in_place(a: *mut vesta_fp);
3335  }
3336  extern "C" {
3337      pub fn ctt_vesta_fp_prod(r: *mut vesta_fp, a: *const vesta_fp, b: *const vesta_fp);
3338  }
3339  extern "C" {
3340      pub fn ctt_vesta_fp_mul_in_place(a: *mut vesta_fp, b: *const vesta_fp);
3341  }
3342  extern "C" {
3343      pub fn ctt_vesta_fp_square(r: *mut vesta_fp, a: *const vesta_fp);
3344  }
3345  extern "C" {
3346      pub fn ctt_vesta_fp_square_in_place(a: *mut vesta_fp);
3347  }
3348  extern "C" {
3349      pub fn ctt_vesta_fp_div2(a: *mut vesta_fp);
3350  }
3351  extern "C" {
3352      pub fn ctt_vesta_fp_inv(r: *mut vesta_fp, a: *const vesta_fp);
3353  }
3354  extern "C" {
3355      pub fn ctt_vesta_fp_inv_in_place(a: *mut vesta_fp);
3356  }
3357  extern "C" {
3358      pub fn ctt_vesta_fp_ccopy(a: *mut vesta_fp, b: *const vesta_fp, ctl: secret_bool);
3359  }
3360  extern "C" {
3361      pub fn ctt_vesta_fp_cswap(a: *mut vesta_fp, b: *mut vesta_fp, ctl: secret_bool);
3362  }
3363  extern "C" {
3364      pub fn ctt_vesta_fp_cset_zero(a: *mut vesta_fp, ctl: secret_bool);
3365  }
3366  extern "C" {
3367      pub fn ctt_vesta_fp_cset_one(a: *mut vesta_fp, ctl: secret_bool);
3368  }
3369  extern "C" {
3370      pub fn ctt_vesta_fp_cneg_in_place(a: *mut vesta_fp, ctl: secret_bool);
3371  }
3372  extern "C" {
3373      pub fn ctt_vesta_fp_cadd_in_place(a: *mut vesta_fp, b: *const vesta_fp, ctl: secret_bool);
3374  }
3375  extern "C" {
3376      pub fn ctt_vesta_fp_csub_in_place(a: *mut vesta_fp, b: *const vesta_fp, ctl: secret_bool);
3377  }
3378  extern "C" {
3379      pub fn ctt_vesta_fp_is_square(a: *const vesta_fp) -> secret_bool;
3380  }
3381  extern "C" {
3382      pub fn ctt_vesta_fp_invsqrt(r: *mut vesta_fp, a: *const vesta_fp);
3383  }
3384  extern "C" {
3385      pub fn ctt_vesta_fp_invsqrt_in_place(r: *mut vesta_fp, a: *const vesta_fp) -> secret_bool;
3386  }
3387  extern "C" {
3388      pub fn ctt_vesta_fp_sqrt_in_place(a: *mut vesta_fp);
3389  }
3390  extern "C" {
3391      pub fn ctt_vesta_fp_sqrt_if_square_in_place(a: *mut vesta_fp) -> secret_bool;
3392  }
3393  extern "C" {
3394      pub fn ctt_vesta_fp_sqrt_invsqrt(
3395          sqrt: *mut vesta_fp,
3396          invsqrt: *mut vesta_fp,
3397          a: *const vesta_fp,
3398      );
3399  }
3400  extern "C" {
3401      pub fn ctt_vesta_fp_sqrt_invsqrt_if_square(
3402          sqrt: *mut vesta_fp,
3403          invsqrt: *mut vesta_fp,
3404          a: *const vesta_fp,
3405      ) -> secret_bool;
3406  }
3407  extern "C" {
3408      pub fn ctt_vesta_fp_sqrt_ratio_if_square(
3409          r: *mut vesta_fp,
3410          u: *const vesta_fp,
3411          v: *const vesta_fp,
3412      ) -> secret_bool;
3413  }
3414  extern "C" {
3415      pub fn ctt_vesta_ec_aff_is_eq(P: *const vesta_ec_aff, Q: *const vesta_ec_aff) -> secret_bool;
3416  }
3417  extern "C" {
3418      pub fn ctt_vesta_ec_aff_is_inf(P: *const vesta_ec_aff) -> secret_bool;
3419  }
3420  extern "C" {
3421      pub fn ctt_vesta_ec_aff_set_inf(P: *mut vesta_ec_aff);
3422  }
3423  extern "C" {
3424      pub fn ctt_vesta_ec_aff_ccopy(P: *mut vesta_ec_aff, Q: *const vesta_ec_aff, ctl: secret_bool);
3425  }
3426  extern "C" {
3427      pub fn ctt_vesta_ec_aff_is_on_curve(x: *const vesta_fp, y: *const vesta_fp) -> secret_bool;
3428  }
3429  extern "C" {
3430      pub fn ctt_vesta_ec_aff_neg(P: *mut vesta_ec_aff, Q: *const vesta_ec_aff);
3431  }
3432  extern "C" {
3433      pub fn ctt_vesta_ec_aff_neg_in_place(P: *mut vesta_ec_aff);
3434  }
3435  extern "C" {
3436      pub fn ctt_vesta_ec_jac_is_eq(P: *const vesta_ec_jac, Q: *const vesta_ec_jac) -> secret_bool;
3437  }
3438  extern "C" {
3439      pub fn ctt_vesta_ec_jac_is_inf(P: *const vesta_ec_jac) -> secret_bool;
3440  }
3441  extern "C" {
3442      pub fn ctt_vesta_ec_jac_set_inf(P: *mut vesta_ec_jac);
3443  }
3444  extern "C" {
3445      pub fn ctt_vesta_ec_jac_ccopy(P: *mut vesta_ec_jac, Q: *const vesta_ec_jac, ctl: secret_bool);
3446  }
3447  extern "C" {
3448      pub fn ctt_vesta_ec_jac_neg(P: *mut vesta_ec_jac, Q: *const vesta_ec_jac);
3449  }
3450  extern "C" {
3451      pub fn ctt_vesta_ec_jac_neg_in_place(P: *mut vesta_ec_jac);
3452  }
3453  extern "C" {
3454      pub fn ctt_vesta_ec_jac_cneg_in_place(P: *mut vesta_ec_jac, ctl: secret_bool);
3455  }
3456  extern "C" {
3457      pub fn ctt_vesta_ec_jac_sum(
3458          r: *mut vesta_ec_jac,
3459          P: *const vesta_ec_jac,
3460          Q: *const vesta_ec_jac,
3461      );
3462  }
3463  extern "C" {
3464      pub fn ctt_vesta_ec_jac_add_in_place(P: *mut vesta_ec_jac, Q: *const vesta_ec_jac);
3465  }
3466  extern "C" {
3467      pub fn ctt_vesta_ec_jac_diff(
3468          r: *mut vesta_ec_jac,
3469          P: *const vesta_ec_jac,
3470          Q: *const vesta_ec_jac,
3471      );
3472  }
3473  extern "C" {
3474      pub fn ctt_vesta_ec_jac_double(r: *mut vesta_ec_jac, P: *const vesta_ec_jac);
3475  }
3476  extern "C" {
3477      pub fn ctt_vesta_ec_jac_double_in_place(P: *mut vesta_ec_jac);
3478  }
3479  extern "C" {
3480      pub fn ctt_vesta_ec_jac_affine(dst: *mut vesta_ec_aff, src: *const vesta_ec_jac);
3481  }
3482  extern "C" {
3483      pub fn ctt_vesta_ec_jac_from_affine(dst: *mut vesta_ec_jac, src: *const vesta_ec_aff);
3484  }
3485  extern "C" {
3486      pub fn ctt_vesta_ec_prj_is_eq(P: *const vesta_ec_prj, Q: *const vesta_ec_prj) -> secret_bool;
3487  }
3488  extern "C" {
3489      pub fn ctt_vesta_ec_prj_is_inf(P: *const vesta_ec_prj) -> secret_bool;
3490  }
3491  extern "C" {
3492      pub fn ctt_vesta_ec_prj_set_inf(P: *mut vesta_ec_prj);
3493  }
3494  extern "C" {
3495      pub fn ctt_vesta_ec_prj_ccopy(P: *mut vesta_ec_prj, Q: *const vesta_ec_prj, ctl: secret_bool);
3496  }
3497  extern "C" {
3498      pub fn ctt_vesta_ec_prj_neg(P: *mut vesta_ec_prj, Q: *const vesta_ec_prj);
3499  }
3500  extern "C" {
3501      pub fn ctt_vesta_ec_prj_neg_in_place(P: *mut vesta_ec_prj);
3502  }
3503  extern "C" {
3504      pub fn ctt_vesta_ec_prj_cneg_in_place(P: *mut vesta_ec_prj, ctl: secret_bool);
3505  }
3506  extern "C" {
3507      pub fn ctt_vesta_ec_prj_sum(
3508          r: *mut vesta_ec_prj,
3509          P: *const vesta_ec_prj,
3510          Q: *const vesta_ec_prj,
3511      );
3512  }
3513  extern "C" {
3514      pub fn ctt_vesta_ec_prj_add_in_place(P: *mut vesta_ec_prj, Q: *const vesta_ec_prj);
3515  }
3516  extern "C" {
3517      pub fn ctt_vesta_ec_prj_diff(
3518          r: *mut vesta_ec_prj,
3519          P: *const vesta_ec_prj,
3520          Q: *const vesta_ec_prj,
3521      );
3522  }
3523  extern "C" {
3524      pub fn ctt_vesta_ec_prj_double(r: *mut vesta_ec_prj, P: *const vesta_ec_prj);
3525  }
3526  extern "C" {
3527      pub fn ctt_vesta_ec_prj_double_in_place(P: *mut vesta_ec_prj);
3528  }
3529  extern "C" {
3530      pub fn ctt_vesta_ec_prj_affine(dst: *mut vesta_ec_aff, src: *const vesta_ec_prj);
3531  }
3532  extern "C" {
3533      pub fn ctt_vesta_ec_prj_from_affine(dst: *mut vesta_ec_prj, src: *const vesta_ec_aff);
3534  }
3535  #[repr(u8)]
3536  #[derive(Copy, Clone, Hash, PartialEq, Eq)]
3537  pub enum ctt_codec_scalar_status {
3538      cttCodecScalar_Success = 0,
3539      cttCodecScalar_Zero = 1,
3540      cttCodecScalar_ScalarLargerThanCurveOrder = 2,
3541  }
3542  #[repr(u8)]
3543  #[derive(Copy, Clone, Hash, PartialEq, Eq)]
3544  pub enum ctt_codec_ecc_status {
3545      cttCodecEcc_Success = 0,
3546      cttCodecEcc_InvalidEncoding = 1,
3547      cttCodecEcc_CoordinateGreaterThanOrEqualModulus = 2,
3548      cttCodecEcc_PointNotOnCurve = 3,
3549      cttCodecEcc_PointNotInSubgroup = 4,
3550      cttCodecEcc_PointAtInfinity = 5,
3551  }
3552  #[repr(C)]
3553  #[derive(Copy, Clone)]
3554  pub struct ctt_eth_bls_fp {
3555      raw: [byte; 48usize],
3556  }
3557  #[test]
3558  fn bindgen_test_layout_ctt_eth_bls_fp() {
3559      const UNINIT: ::core::mem::MaybeUninit<ctt_eth_bls_fp> = ::core::mem::MaybeUninit::uninit();
3560      let ptr = UNINIT.as_ptr();
3561      assert_eq!(
3562          ::core::mem::size_of::<ctt_eth_bls_fp>(),
3563          48usize,
3564          concat!("Size of: ", stringify!(ctt_eth_bls_fp))
3565      );
3566      assert_eq!(
3567          ::core::mem::align_of::<ctt_eth_bls_fp>(),
3568          1usize,
3569          concat!("Alignment of ", stringify!(ctt_eth_bls_fp))
3570      );
3571      assert_eq!(
3572          unsafe { ::core::ptr::addr_of!((*ptr).raw) as usize - ptr as usize },
3573          0usize,
3574          concat!(
3575              "Offset of field: ",
3576              stringify!(ctt_eth_bls_fp),
3577              "::",
3578              stringify!(raw)
3579          )
3580      );
3581  }
3582  #[repr(C)]
3583  #[derive(Copy, Clone)]
3584  pub struct ctt_eth_bls_fp2 {
3585      coords: [ctt_eth_bls_fp; 2usize],
3586  }
3587  #[test]
3588  fn bindgen_test_layout_ctt_eth_bls_fp2() {
3589      const UNINIT: ::core::mem::MaybeUninit<ctt_eth_bls_fp2> = ::core::mem::MaybeUninit::uninit();
3590      let ptr = UNINIT.as_ptr();
3591      assert_eq!(
3592          ::core::mem::size_of::<ctt_eth_bls_fp2>(),
3593          96usize,
3594          concat!("Size of: ", stringify!(ctt_eth_bls_fp2))
3595      );
3596      assert_eq!(
3597          ::core::mem::align_of::<ctt_eth_bls_fp2>(),
3598          1usize,
3599          concat!("Alignment of ", stringify!(ctt_eth_bls_fp2))
3600      );
3601      assert_eq!(
3602          unsafe { ::core::ptr::addr_of!((*ptr).coords) as usize - ptr as usize },
3603          0usize,
3604          concat!(
3605              "Offset of field: ",
3606              stringify!(ctt_eth_bls_fp2),
3607              "::",
3608              stringify!(coords)
3609          )
3610      );
3611  }
3612  #[repr(C)]
3613  #[derive(Copy, Clone)]
3614  pub struct ctt_eth_bls_seckey {
3615      raw: [byte; 32usize],
3616  }
3617  #[test]
3618  fn bindgen_test_layout_ctt_eth_bls_seckey() {
3619      const UNINIT: ::core::mem::MaybeUninit<ctt_eth_bls_seckey> = ::core::mem::MaybeUninit::uninit();
3620      let ptr = UNINIT.as_ptr();
3621      assert_eq!(
3622          ::core::mem::size_of::<ctt_eth_bls_seckey>(),
3623          32usize,
3624          concat!("Size of: ", stringify!(ctt_eth_bls_seckey))
3625      );
3626      assert_eq!(
3627          ::core::mem::align_of::<ctt_eth_bls_seckey>(),
3628          1usize,
3629          concat!("Alignment of ", stringify!(ctt_eth_bls_seckey))
3630      );
3631      assert_eq!(
3632          unsafe { ::core::ptr::addr_of!((*ptr).raw) as usize - ptr as usize },
3633          0usize,
3634          concat!(
3635              "Offset of field: ",
3636              stringify!(ctt_eth_bls_seckey),
3637              "::",
3638              stringify!(raw)
3639          )
3640      );
3641  }
3642  #[repr(C)]
3643  #[derive(Copy, Clone)]
3644  pub struct ctt_eth_bls_pubkey {
3645      x: ctt_eth_bls_fp,
3646      y: ctt_eth_bls_fp,
3647  }
3648  #[test]
3649  fn bindgen_test_layout_ctt_eth_bls_pubkey() {
3650      const UNINIT: ::core::mem::MaybeUninit<ctt_eth_bls_pubkey> = ::core::mem::MaybeUninit::uninit();
3651      let ptr = UNINIT.as_ptr();
3652      assert_eq!(
3653          ::core::mem::size_of::<ctt_eth_bls_pubkey>(),
3654          96usize,
3655          concat!("Size of: ", stringify!(ctt_eth_bls_pubkey))
3656      );
3657      assert_eq!(
3658          ::core::mem::align_of::<ctt_eth_bls_pubkey>(),
3659          1usize,
3660          concat!("Alignment of ", stringify!(ctt_eth_bls_pubkey))
3661      );
3662      assert_eq!(
3663          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
3664          0usize,
3665          concat!(
3666              "Offset of field: ",
3667              stringify!(ctt_eth_bls_pubkey),
3668              "::",
3669              stringify!(x)
3670          )
3671      );
3672      assert_eq!(
3673          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
3674          48usize,
3675          concat!(
3676              "Offset of field: ",
3677              stringify!(ctt_eth_bls_pubkey),
3678              "::",
3679              stringify!(y)
3680          )
3681      );
3682  }
3683  #[repr(C)]
3684  #[derive(Copy, Clone)]
3685  pub struct ctt_eth_bls_signature {
3686      x: ctt_eth_bls_fp2,
3687      y: ctt_eth_bls_fp2,
3688  }
3689  #[test]
3690  fn bindgen_test_layout_ctt_eth_bls_signature() {
3691      const UNINIT: ::core::mem::MaybeUninit<ctt_eth_bls_signature> =
3692          ::core::mem::MaybeUninit::uninit();
3693      let ptr = UNINIT.as_ptr();
3694      assert_eq!(
3695          ::core::mem::size_of::<ctt_eth_bls_signature>(),
3696          192usize,
3697          concat!("Size of: ", stringify!(ctt_eth_bls_signature))
3698      );
3699      assert_eq!(
3700          ::core::mem::align_of::<ctt_eth_bls_signature>(),
3701          1usize,
3702          concat!("Alignment of ", stringify!(ctt_eth_bls_signature))
3703      );
3704      assert_eq!(
3705          unsafe { ::core::ptr::addr_of!((*ptr).x) as usize - ptr as usize },
3706          0usize,
3707          concat!(
3708              "Offset of field: ",
3709              stringify!(ctt_eth_bls_signature),
3710              "::",
3711              stringify!(x)
3712          )
3713      );
3714      assert_eq!(
3715          unsafe { ::core::ptr::addr_of!((*ptr).y) as usize - ptr as usize },
3716          96usize,
3717          concat!(
3718              "Offset of field: ",
3719              stringify!(ctt_eth_bls_signature),
3720              "::",
3721              stringify!(y)
3722          )
3723      );
3724  }
3725  #[repr(u8)]
3726  #[derive(Copy, Clone, Hash, PartialEq, Eq)]
3727  pub enum ctt_eth_bls_status {
3728      cttBLS_Success = 0,
3729      cttBLS_VerificationFailure = 1,
3730      cttBLS_PointAtInfinity = 2,
3731      cttBLS_ZeroLengthAggregation = 3,
3732      cttBLS_InconsistentLengthsOfInputs = 4,
3733  }
3734  extern "C" {
3735      #[must_use]
3736      pub fn ctt_eth_bls_pubkey_is_zero(pubkey: *const ctt_eth_bls_pubkey) -> bool;
3737  }
3738  extern "C" {
3739      #[must_use]
3740      pub fn ctt_eth_bls_signature_is_zero(sig: *const ctt_eth_bls_signature) -> bool;
3741  }
3742  extern "C" {
3743      #[must_use]
3744      pub fn ctt_eth_bls_pubkeys_are_equal(
3745          a: *const ctt_eth_bls_pubkey,
3746          b: *const ctt_eth_bls_pubkey,
3747      ) -> bool;
3748  }
3749  extern "C" {
3750      #[must_use]
3751      pub fn ctt_eth_bls_signatures_are_equal(
3752          a: *const ctt_eth_bls_signature,
3753          b: *const ctt_eth_bls_signature,
3754      ) -> bool;
3755  }
3756  extern "C" {
3757      #[must_use]
3758      #[doc = " Validate the secret key.\n\n  Regarding timing attacks, this will leak timing information only if the key is invalid.\n  Namely, the secret key is 0 or the secret key is too large."]
3759      pub fn ctt_eth_bls_validate_seckey(
3760          seckey: *const ctt_eth_bls_seckey,
3761      ) -> ctt_codec_scalar_status;
3762  }
3763  extern "C" {
3764      #[must_use]
3765      #[doc = " Validate the public key.\n\n  This is an expensive operation that can be cached."]
3766      pub fn ctt_eth_bls_validate_pubkey(pubkey: *const ctt_eth_bls_pubkey) -> ctt_codec_ecc_status;
3767  }
3768  extern "C" {
3769      #[must_use]
3770      #[doc = " Validate the signature.\n\n  This is an expensive operation that can be cached."]
3771      pub fn ctt_eth_bls_validate_signature(
3772          pubkey: *const ctt_eth_bls_signature,
3773      ) -> ctt_codec_ecc_status;
3774  }
3775  extern "C" {
3776      #[must_use]
3777      #[doc = " Serialize a secret key\n\n  Returns cttCodecScalar_Success if successful"]
3778      pub fn ctt_eth_bls_serialize_seckey(
3779          dst: *mut byte,
3780          seckey: *const ctt_eth_bls_seckey,
3781      ) -> ctt_codec_scalar_status;
3782  }
3783  extern "C" {
3784      #[must_use]
3785      #[doc = " Serialize a public key in compressed (Zcash) format\n\n  Returns cttCodecEcc_Success if successful"]
3786      pub fn ctt_eth_bls_serialize_pubkey_compressed(
3787          dst: *mut byte,
3788          pubkey: *const ctt_eth_bls_pubkey,
3789      ) -> ctt_codec_ecc_status;
3790  }
3791  extern "C" {
3792      #[must_use]
3793      #[doc = " Serialize a signature in compressed (Zcash) format\n\n  Returns cttCodecEcc_Success if successful"]
3794      pub fn ctt_eth_bls_serialize_signature_compressed(
3795          dst: *mut byte,
3796          sig: *const ctt_eth_bls_signature,
3797      ) -> ctt_codec_ecc_status;
3798  }
3799  extern "C" {
3800      #[must_use]
3801      #[doc = " Deserialize a secret key\n  This also validates the secret key.\n\n  This is protected against side-channel unless your key is invalid.\n  In that case it will like whether it's all zeros or larger than the curve order."]
3802      pub fn ctt_eth_bls_deserialize_seckey(
3803          seckey: *mut ctt_eth_bls_seckey,
3804          src: *const byte,
3805      ) -> ctt_codec_scalar_status;
3806  }
3807  extern "C" {
3808      #[must_use]
3809      #[doc = " Deserialize a public key in compressed (Zcash) format.\n  This does not validate the public key.\n  It is intended for cases where public keys are stored in a trusted location\n  and validation can be cached.\n\n  Warning ⚠:\n    This procedure skips the very expensive subgroup checks.\n    Not checking subgroup exposes a protocol to small subgroup attacks.\n\n  Returns cttCodecEcc_Success if successful"]
3810      pub fn ctt_eth_bls_deserialize_pubkey_compressed_unchecked(
3811          pubkey: *mut ctt_eth_bls_pubkey,
3812          src: *const byte,
3813      ) -> ctt_codec_ecc_status;
3814  }
3815  extern "C" {
3816      #[must_use]
3817      #[doc = " Deserialize a public_key in compressed (Zcash) format.\n  This also validates the public key.\n\n  Returns cttCodecEcc_Success if successful"]
3818      pub fn ctt_eth_bls_deserialize_pubkey_compressed(
3819          pubkey: *mut ctt_eth_bls_pubkey,
3820          src: *const byte,
3821      ) -> ctt_codec_ecc_status;
3822  }
3823  extern "C" {
3824      #[must_use]
3825      #[doc = " Deserialize a signature in compressed (Zcash) format.\n  This does not validate the signature.\n  It is intended for cases where public keys are stored in a trusted location\n  and validation can be cached.\n\n  Warning ⚠:\n    This procedure skips the very expensive subgroup checks.\n    Not checking subgroup exposes a protocol to small subgroup attacks.\n\n  Returns cttCodecEcc_Success if successful"]
3826      pub fn ctt_eth_bls_deserialize_signature_compressed_unchecked(
3827          sig: *mut ctt_eth_bls_signature,
3828          src: *const byte,
3829      ) -> ctt_codec_ecc_status;
3830  }
3831  extern "C" {
3832      #[must_use]
3833      #[doc = " Deserialize a signature in compressed (Zcash) format.\n  This also validates the signature.\n\n  Returns cttCodecEcc_Success if successful"]
3834      pub fn ctt_eth_bls_deserialize_signature_compressed(
3835          sig: *mut ctt_eth_bls_signature,
3836          src: *const byte,
3837      ) -> ctt_codec_ecc_status;
3838  }
3839  extern "C" {
3840      #[doc = " Derive the public key matching with a secret key\n\n  Secret protection:\n  - A valid secret key will only leak that it is valid.\n  - An invalid secret key will leak whether it's all zero or larger than the curve order."]
3841      pub fn ctt_eth_bls_derive_pubkey(
3842          pubkey: *mut ctt_eth_bls_pubkey,
3843          seckey: *const ctt_eth_bls_seckey,
3844      );
3845  }
3846  extern "C" {
3847      #[doc = " Produce a signature for the message under the specified secret key\n  Signature is on BLS12-381 G2 (and public key on G1)\n\n  For message domain separation purpose, the tag is `BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_`\n\n  Input:\n  - A secret key\n  - A message\n\n  Output:\n  - `signature` is overwritten with `message` signed with `secretKey`\n    with the scheme\n  - A status code indicating success or if the secret key is invalid.\n\n  Secret protection:\n  - A valid secret key will only leak that it is valid.\n  - An invalid secret key will leak whether it's all zero or larger than the curve order."]
3848      pub fn ctt_eth_bls_sign(
3849          sig: *mut ctt_eth_bls_signature,
3850          seckey: *const ctt_eth_bls_seckey,
3851          message: *const byte,
3852          message_len: isize,
3853      );
3854  }
3855  extern "C" {
3856      #[must_use]
3857      #[doc = " Check that a signature is valid for a message\n  under the provided public key.\n  returns `true` if the signature is valid, `false` otherwise.\n\n  For message domain separation purpose, the tag is `BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_`\n\n  Input:\n  - A public key initialized by one of the key derivation or deserialization procedure.\n    Or validated via validate_pubkey\n  - A message\n  - A signature initialized by one of the key derivation or deserialization procedure.\n    Or validated via validate_signature\n\n  Output:\n  - a status code with verification success if signature is valid\n    or indicating verification failure\n\n  In particular, the public key and signature are assumed to be on curve and subgroup-checked."]
3858      pub fn ctt_eth_bls_verify(
3859          pubkey: *const ctt_eth_bls_pubkey,
3860          message: *const byte,
3861          message_len: isize,
3862          sig: *const ctt_eth_bls_signature,
3863      ) -> ctt_eth_bls_status;
3864  }
3865  extern "C" {
3866      #[must_use]
3867      #[doc = " Check that a signature is valid for a message\n  under the aggregate of provided public keys.\n  returns `true` if the signature is valid, `false` otherwise.\n\n  For message domain separation purpose, the tag is `BLS_SIG_BLS12381G2_XMD:SHA-256_SSWU_RO_POP_`\n\n  Input:\n  - Public keys initialized by one of the key derivation or deserialization procedure.\n    Or validated via validate_pubkey\n  - A message\n  - A signature initialized by one of the key derivation or deserialization procedure.\n    Or validated via validate_signature\n\n  In particular, the public keys and signature are assumed to be on curve subgroup checked."]
3868      pub fn ctt_eth_bls_fast_aggregate_verify(
3869          pubkeys: *const ctt_eth_bls_pubkey,
3870          pubkeys_len: isize,
3871          message: *const byte,
3872          message_len: isize,
3873          aggregate_sig: *const ctt_eth_bls_signature,
3874      ) -> ctt_eth_bls_status;
3875  }