Hex Artifact Content
Not logged in

Artifact b805184f933fb94939065bb33e590c602d296c7a:


0000: 2f 2f 20 63 72 79 70 74 6f 5f 62 6f 78 2e 68 0a  // crypto_box.h.
0010: 0a 70 75 62 20 63 6f 6e 73 74 20 63 72 79 70 74  .pub const crypt
0020: 6f 5f 62 6f 78 5f 53 45 45 44 42 59 54 45 53 3a  o_box_SEEDBYTES:
0030: 20 75 73 69 7a 65 20 3d 20 63 72 79 70 74 6f 5f   usize = crypto_
0040: 62 6f 78 5f 63 75 72 76 65 32 35 35 31 39 78 73  box_curve25519xs
0050: 61 6c 73 61 32 30 70 6f 6c 79 31 33 30 35 5f 53  alsa20poly1305_S
0060: 45 45 44 42 59 54 45 53 3b 0a 70 75 62 20 63 6f  EEDBYTES;.pub co
0070: 6e 73 74 20 63 72 79 70 74 6f 5f 62 6f 78 5f 50  nst crypto_box_P
0080: 55 42 4c 49 43 4b 45 59 42 59 54 45 53 3a 20 75  UBLICKEYBYTES: u
0090: 73 69 7a 65 20 3d 20 63 72 79 70 74 6f 5f 62 6f  size = crypto_bo
00a0: 78 5f 63 75 72 76 65 32 35 35 31 39 78 73 61 6c  x_curve25519xsal
00b0: 73 61 32 30 70 6f 6c 79 31 33 30 35 5f 50 55 42  sa20poly1305_PUB
00c0: 4c 49 43 4b 45 59 42 59 54 45 53 3b 0a 70 75 62  LICKEYBYTES;.pub
00d0: 20 63 6f 6e 73 74 20 63 72 79 70 74 6f 5f 62 6f   const crypto_bo
00e0: 78 5f 53 45 43 52 45 54 4b 45 59 42 59 54 45 53  x_SECRETKEYBYTES
00f0: 3a 20 75 73 69 7a 65 20 3d 20 63 72 79 70 74 6f  : usize = crypto
0100: 5f 62 6f 78 5f 63 75 72 76 65 32 35 35 31 39 78  _box_curve25519x
0110: 73 61 6c 73 61 32 30 70 6f 6c 79 31 33 30 35 5f  salsa20poly1305_
0120: 53 45 43 52 45 54 4b 45 59 42 59 54 45 53 3b 0a  SECRETKEYBYTES;.
0130: 70 75 62 20 63 6f 6e 73 74 20 63 72 79 70 74 6f  pub const crypto
0140: 5f 62 6f 78 5f 42 45 46 4f 52 45 4e 4d 42 59 54  _box_BEFORENMBYT
0150: 45 53 3a 20 75 73 69 7a 65 20 3d 20 63 72 79 70  ES: usize = cryp
0160: 74 6f 5f 62 6f 78 5f 63 75 72 76 65 32 35 35 31  to_box_curve2551
0170: 39 78 73 61 6c 73 61 32 30 70 6f 6c 79 31 33 30  9xsalsa20poly130
0180: 35 5f 42 45 46 4f 52 45 4e 4d 42 59 54 45 53 3b  5_BEFORENMBYTES;
0190: 0a 70 75 62 20 63 6f 6e 73 74 20 63 72 79 70 74  .pub const crypt
01a0: 6f 5f 62 6f 78 5f 4e 4f 4e 43 45 42 59 54 45 53  o_box_NONCEBYTES
01b0: 3a 20 75 73 69 7a 65 20 3d 20 63 72 79 70 74 6f  : usize = crypto
01c0: 5f 62 6f 78 5f 63 75 72 76 65 32 35 35 31 39 78  _box_curve25519x
01d0: 73 61 6c 73 61 32 30 70 6f 6c 79 31 33 30 35 5f  salsa20poly1305_
01e0: 4e 4f 4e 43 45 42 59 54 45 53 3b 0a 70 75 62 20  NONCEBYTES;.pub 
01f0: 63 6f 6e 73 74 20 63 72 79 70 74 6f 5f 62 6f 78  const crypto_box
0200: 5f 5a 45 52 4f 42 59 54 45 53 3a 20 75 73 69 7a  _ZEROBYTES: usiz
0210: 65 20 3d 20 63 72 79 70 74 6f 5f 62 6f 78 5f 63  e = crypto_box_c
0220: 75 72 76 65 32 35 35 31 39 78 73 61 6c 73 61 32  urve25519xsalsa2
0230: 30 70 6f 6c 79 31 33 30 35 5f 5a 45 52 4f 42 59  0poly1305_ZEROBY
0240: 54 45 53 3b 0a 70 75 62 20 63 6f 6e 73 74 20 63  TES;.pub const c
0250: 72 79 70 74 6f 5f 62 6f 78 5f 42 4f 58 5a 45 52  rypto_box_BOXZER
0260: 4f 42 59 54 45 53 3a 20 75 73 69 7a 65 20 3d 20  OBYTES: usize = 
0270: 63 72 79 70 74 6f 5f 62 6f 78 5f 63 75 72 76 65  crypto_box_curve
0280: 32 35 35 31 39 78 73 61 6c 73 61 32 30 70 6f 6c  25519xsalsa20pol
0290: 79 31 33 30 35 5f 42 4f 58 5a 45 52 4f 42 59 54  y1305_BOXZEROBYT
02a0: 45 53 3b 0a 70 75 62 20 63 6f 6e 73 74 20 63 72  ES;.pub const cr
02b0: 79 70 74 6f 5f 62 6f 78 5f 4d 41 43 42 59 54 45  ypto_box_MACBYTE
02c0: 53 3a 20 75 73 69 7a 65 20 3d 20 63 72 79 70 74  S: usize = crypt
02d0: 6f 5f 62 6f 78 5f 63 75 72 76 65 32 35 35 31 39  o_box_curve25519
02e0: 78 73 61 6c 73 61 32 30 70 6f 6c 79 31 33 30 35  xsalsa20poly1305
02f0: 5f 4d 41 43 42 59 54 45 53 3b 0a 70 75 62 20 63  _MACBYTES;.pub c
0300: 6f 6e 73 74 20 63 72 79 70 74 6f 5f 62 6f 78 5f  onst crypto_box_
0310: 50 52 49 4d 49 54 49 56 45 3a 20 2a 63 6f 6e 73  PRIMITIVE: *cons
0320: 74 20 63 5f 63 68 61 72 20 3d 20 28 62 22 63 75  t c_char = (b"cu
0330: 72 76 65 32 35 35 31 39 78 73 61 6c 73 61 32 30  rve25519xsalsa20
0340: 70 6f 6c 79 31 33 30 35 5c 30 22 20 61 73 20 2a  poly1305\0" as *
0350: 63 6f 6e 73 74 20 75 38 29 20 61 73 0a 20 20 20  const u8) as.   
0360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0380: 20 20 20 20 20 20 20 20 20 20 20 20 20 2a 63 6f               *co
0390: 6e 73 74 20 63 5f 63 68 61 72 3b 0a 70 75 62 20  nst c_char;.pub 
03a0: 63 6f 6e 73 74 20 63 72 79 70 74 6f 5f 62 6f 78  const crypto_box
03b0: 5f 53 45 41 4c 42 59 54 45 53 3a 20 75 73 69 7a  _SEALBYTES: usiz
03c0: 65 20 3d 20 28 63 72 79 70 74 6f 5f 62 6f 78 5f  e = (crypto_box_
03d0: 50 55 42 4c 49 43 4b 45 59 42 59 54 45 53 20 2b  PUBLICKEYBYTES +
03e0: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 4d 41 43 42   crypto_box_MACB
03f0: 59 54 45 53 29 3b 0a 0a 0a 65 78 74 65 72 6e 20  YTES);...extern 
0400: 22 43 22 20 7b 0a 20 20 20 20 70 75 62 20 66 6e  "C" {.    pub fn
0410: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 73 65 65 64   crypto_box_seed
0420: 62 79 74 65 73 28 29 20 2d 3e 20 73 69 7a 65 5f  bytes() -> size_
0430: 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72  t;.    pub fn cr
0440: 79 70 74 6f 5f 62 6f 78 5f 70 75 62 6c 69 63 6b  ypto_box_publick
0450: 65 79 62 79 74 65 73 28 29 20 2d 3e 20 73 69 7a  eybytes() -> siz
0460: 65 5f 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20  e_t;.    pub fn 
0470: 63 72 79 70 74 6f 5f 62 6f 78 5f 73 65 63 72 65  crypto_box_secre
0480: 74 6b 65 79 62 79 74 65 73 28 29 20 2d 3e 20 73  tkeybytes() -> s
0490: 69 7a 65 5f 74 3b 0a 20 20 20 20 70 75 62 20 66  ize_t;.    pub f
04a0: 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 62 65 66  n crypto_box_bef
04b0: 6f 72 65 6e 6d 62 79 74 65 73 28 29 20 2d 3e 20  orenmbytes() -> 
04c0: 73 69 7a 65 5f 74 3b 0a 20 20 20 20 70 75 62 20  size_t;.    pub 
04d0: 66 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 6e 6f  fn crypto_box_no
04e0: 6e 63 65 62 79 74 65 73 28 29 20 2d 3e 20 73 69  ncebytes() -> si
04f0: 7a 65 5f 74 3b 0a 20 20 20 20 70 75 62 20 66 6e  ze_t;.    pub fn
0500: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 7a 65 72 6f   crypto_box_zero
0510: 62 79 74 65 73 28 29 20 2d 3e 20 73 69 7a 65 5f  bytes() -> size_
0520: 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72  t;.    pub fn cr
0530: 79 70 74 6f 5f 62 6f 78 5f 62 6f 78 7a 65 72 6f  ypto_box_boxzero
0540: 62 79 74 65 73 28 29 20 2d 3e 20 73 69 7a 65 5f  bytes() -> size_
0550: 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72  t;.    pub fn cr
0560: 79 70 74 6f 5f 62 6f 78 5f 6d 61 63 62 79 74 65  ypto_box_macbyte
0570: 73 28 29 20 2d 3e 20 73 69 7a 65 5f 74 3b 0a 20  s() -> size_t;. 
0580: 20 20 20 70 75 62 20 66 6e 20 63 72 79 70 74 6f     pub fn crypto
0590: 5f 62 6f 78 5f 70 72 69 6d 69 74 69 76 65 28 29  _box_primitive()
05a0: 20 2d 3e 20 2a 63 6f 6e 73 74 20 63 5f 63 68 61   -> *const c_cha
05b0: 72 3b 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72  r;.    pub fn cr
05c0: 79 70 74 6f 5f 62 6f 78 5f 73 65 61 6c 62 79 74  ypto_box_sealbyt
05d0: 65 73 28 29 20 2d 3e 20 73 69 7a 65 5f 74 3b 0a  es() -> size_t;.
05e0: 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72 79 70  .    pub fn cryp
05f0: 74 6f 5f 62 6f 78 5f 73 65 65 64 5f 6b 65 79 70  to_box_seed_keyp
0600: 61 69 72 28 70 6b 3a 20 2a 6d 75 74 20 75 38 2c  air(pk: *mut u8,
0610: 20 73 6b 3a 20 2a 6d 75 74 20 75 38 2c 20 73 65   sk: *mut u8, se
0620: 65 64 3a 20 2a 63 6f 6e 73 74 20 75 38 29 20 2d  ed: *const u8) -
0630: 3e 20 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62  > c_int;.    pub
0640: 20 66 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 6b   fn crypto_box_k
0650: 65 79 70 61 69 72 28 70 6b 3a 20 2a 6d 75 74 20  eypair(pk: *mut 
0660: 75 38 2c 20 73 6b 3a 20 2a 6d 75 74 20 75 38 29  u8, sk: *mut u8)
0670: 20 2d 3e 20 63 5f 69 6e 74 3b 0a 20 20 20 20 70   -> c_int;.    p
0680: 75 62 20 66 6e 20 63 72 79 70 74 6f 5f 62 6f 78  ub fn crypto_box
0690: 5f 62 65 66 6f 72 65 6e 6d 28 6b 3a 20 2a 6d 75  _beforenm(k: *mu
06a0: 74 20 75 38 2c 20 70 6b 3a 20 2a 63 6f 6e 73 74  t u8, pk: *const
06b0: 20 75 38 2c 20 73 6b 3a 20 2a 63 6f 6e 73 74 20   u8, sk: *const 
06c0: 75 38 29 20 2d 3e 20 63 5f 69 6e 74 3b 0a 20 20  u8) -> c_int;.  
06d0: 20 20 70 75 62 20 66 6e 20 63 72 79 70 74 6f 5f    pub fn crypto_
06e0: 62 6f 78 5f 61 66 74 65 72 6e 6d 28 63 3a 20 2a  box_afternm(c: *
06f0: 6d 75 74 20 75 38 2c 0a 20 20 20 20 20 20 20 20  mut u8,.        
0700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0710: 20 20 20 20 20 20 6d 3a 20 2a 63 6f 6e 73 74 20        m: *const 
0720: 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
0730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0740: 20 20 6d 6c 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c    mlen: c_ulongl
0750: 6f 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ong,.           
0760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0770: 20 20 20 6e 3a 20 2a 63 6f 6e 73 74 20 75 38 2c     n: *const u8,
0780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
07a0: 3a 20 2a 63 6f 6e 73 74 20 75 38 29 0a 20 20 20  : *const u8).   
07b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
07c0: 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 63 5f             -> c_
07d0: 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20  int;.    pub fn 
07e0: 63 72 79 70 74 6f 5f 62 6f 78 5f 6f 70 65 6e 5f  crypto_box_open_
07f0: 61 66 74 65 72 6e 6d 28 6d 3a 20 2a 6d 75 74 20  afternm(m: *mut 
0800: 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  u8,.            
0810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0820: 20 20 20 20 20 20 20 63 3a 20 2a 63 6f 6e 73 74         c: *const
0830: 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
0840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0850: 20 20 20 20 20 20 20 20 63 6c 65 6e 3a 20 63 5f          clen: c_
0860: 75 6c 6f 6e 67 6c 6f 6e 67 2c 0a 20 20 20 20 20  ulonglong,.     
0870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 3a                n:
0890: 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20 20 20   *const u8,.    
08a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6b                 k
08c0: 3a 20 2a 63 6f 6e 73 74 20 75 38 29 0a 20 20 20  : *const u8).   
08d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
08f0: 2d 3e 20 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75  -> c_int;.    pu
0900: 62 20 66 6e 20 63 72 79 70 74 6f 5f 62 6f 78 28  b fn crypto_box(
0910: 63 3a 20 2a 6d 75 74 20 75 38 2c 0a 20 20 20 20  c: *mut u8,.    
0920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0930: 20 20 6d 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a    m: *const u8,.
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0950: 20 20 20 20 20 20 6d 6c 65 6e 3a 20 63 5f 75 6c        mlen: c_ul
0960: 6f 6e 67 6c 6f 6e 67 2c 0a 20 20 20 20 20 20 20  onglong,.       
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
0980: 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20 20  : *const u8,.   
0990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09a0: 20 20 20 70 6b 3a 20 2a 63 6f 6e 73 74 20 75 38     pk: *const u8
09b0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
09c0: 20 20 20 20 20 20 20 20 73 6b 3a 20 2a 63 6f 6e          sk: *con
09d0: 73 74 20 75 38 29 0a 20 20 20 20 20 20 20 20 20  st u8).         
09e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20               -> 
09f0: 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66  c_int;.    pub f
0a00: 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 6f 70 65  n crypto_box_ope
0a10: 6e 28 6d 3a 20 2a 6d 75 74 20 75 38 2c 0a 20 20  n(m: *mut u8,.  
0a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a30: 20 20 20 20 20 20 20 20 20 63 3a 20 2a 63 6f 6e           c: *con
0a40: 73 74 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20  st u8,.         
0a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a60: 20 20 63 6c 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c    clen: c_ulongl
0a70: 6f 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ong,.           
0a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a90: 6e 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20  n: *const u8,.  
0aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ab0: 20 20 20 20 20 20 20 20 20 70 6b 3a 20 2a 63 6f           pk: *co
0ac0: 6e 73 74 20 75 38 2c 0a 20 20 20 20 20 20 20 20  nst u8,.        
0ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ae0: 20 20 20 73 6b 3a 20 2a 63 6f 6e 73 74 20 75 38     sk: *const u8
0af0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
0b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20               -> 
0b10: 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66  c_int;.    pub f
0b20: 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 65 61 73  n crypto_box_eas
0b30: 79 28 63 3a 20 2a 6d 75 74 20 75 38 2c 0a 20 20  y(c: *mut u8,.  
0b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b50: 20 20 20 20 20 20 20 20 20 6d 3a 20 2a 63 6f 6e           m: *con
0b60: 73 74 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20  st u8,.         
0b70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b80: 20 20 6d 6c 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c    mlen: c_ulongl
0b90: 6f 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ong,.           
0ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bb0: 6e 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20  n: *const u8,.  
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0bd0: 20 20 20 20 20 20 20 20 20 70 6b 3a 20 2a 63 6f           pk: *co
0be0: 6e 73 74 20 75 38 2c 0a 20 20 20 20 20 20 20 20  nst u8,.        
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c00: 20 20 20 73 6b 3a 20 2a 63 6f 6e 73 74 20 75 38     sk: *const u8
0c10: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20               -> 
0c30: 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66  c_int;.    pub f
0c40: 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 6f 70 65  n crypto_box_ope
0c50: 6e 5f 65 61 73 79 28 6d 3a 20 2a 6d 75 74 20 75  n_easy(m: *mut u
0c60: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
0c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0c80: 20 20 20 63 3a 20 2a 63 6f 6e 73 74 20 75 38 2c     c: *const u8,
0c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0cb0: 20 63 6c 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c 6f   clen: c_ulonglo
0cc0: 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng,.            
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 20 20 20 6e 3a 20 2a 63 6f 6e 73 74 20 75 38      n: *const u8
0cf0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d10: 20 20 70 6b 3a 20 2a 63 6f 6e 73 74 20 75 38 2c    pk: *const u8,
0d20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d40: 20 73 6b 3a 20 2a 63 6f 6e 73 74 20 75 38 29 0a   sk: *const u8).
0d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0d70: 2d 3e 20 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75  -> c_int;.    pu
0d80: 62 20 66 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f  b fn crypto_box_
0d90: 64 65 74 61 63 68 65 64 28 63 3a 20 2a 6d 75 74  detached(c: *mut
0da0: 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
0db0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0dc0: 20 20 20 20 6d 61 63 3a 20 2a 6d 75 74 20 75 38      mac: *mut u8
0dd0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0df0: 20 6d 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20   m: *const u8,. 
0e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 6c                ml
0e20: 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c 6f 6e 67 2c  en: c_ulonglong,
0e30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
0e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e50: 6e 3a 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20  n: *const u8,.  
0e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 6b 3a               pk:
0e80: 20 2a 63 6f 6e 73 74 20 75 38 2c 0a 20 20 20 20   *const u8,.    
0e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ea0: 20 20 20 20 20 20 20 20 20 20 20 73 6b 3a 20 2a             sk: *
0eb0: 63 6f 6e 73 74 20 75 38 29 0a 20 20 20 20 20 20  const u8).      
0ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ed0: 20 20 20 20 20 20 20 20 20 2d 3e 20 63 5f 69 6e           -> c_in
0ee0: 74 3b 0a 20 20 20 20 70 75 62 20 66 6e 20 63 72  t;.    pub fn cr
0ef0: 79 70 74 6f 5f 62 6f 78 5f 6f 70 65 6e 5f 64 65  ypto_box_open_de
0f00: 74 61 63 68 65 64 28 6d 3a 20 2a 6d 75 74 20 75  tached(m: *mut u
0f10: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
0f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f30: 20 20 20 20 20 20 20 63 3a 20 2a 63 6f 6e 73 74         c: *const
0f40: 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
0f50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f60: 20 20 20 20 20 20 20 20 20 6d 61 63 3a 20 2a 63           mac: *c
0f70: 6f 6e 73 74 20 75 38 2c 0a 20 20 20 20 20 20 20  onst u8,.       
0f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6c 65               cle
0fa0: 6e 3a 20 63 5f 75 6c 6f 6e 67 6c 6f 6e 67 2c 0a  n: c_ulonglong,.
0fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0fd0: 20 20 20 20 6e 3a 20 2a 63 6f 6e 73 74 20 75 38      n: *const u8
0fe0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
0ff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1000: 20 20 20 20 20 20 70 6b 3a 20 2a 63 6f 6e 73 74        pk: *const
1010: 20 75 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20   u8,.           
1020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1030: 20 20 20 20 20 20 20 20 20 73 6b 3a 20 2a 63 6f           sk: *co
1040: 6e 73 74 20 75 38 29 0a 20 20 20 20 20 20 20 20  nst u8).        
1050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1060: 20 20 20 20 20 20 20 20 20 20 20 20 2d 3e 20 63              -> c
1070: 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66 6e  _int;.    pub fn
1080: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 73 65 61 6c   crypto_box_seal
1090: 28 63 3a 20 2a 6d 75 74 20 75 38 2c 20 6d 3a 20  (c: *mut u8, m: 
10a0: 2a 63 6f 6e 73 74 20 75 38 2c 20 6d 6c 65 6e 3a  *const u8, mlen:
10b0: 20 63 5f 75 6c 6f 6e 67 6c 6f 6e 67 2c 20 70 6b   c_ulonglong, pk
10c0: 3a 20 2a 63 6f 6e 73 74 20 75 38 29 20 2d 3e 20  : *const u8) -> 
10d0: 63 5f 69 6e 74 3b 0a 20 20 20 20 70 75 62 20 66  c_int;.    pub f
10e0: 6e 20 63 72 79 70 74 6f 5f 62 6f 78 5f 73 65 61  n crypto_box_sea
10f0: 6c 5f 6f 70 65 6e 28 6d 3a 20 2a 6d 75 74 20 75  l_open(m: *mut u
1100: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
1110: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1120: 20 20 20 63 3a 20 2a 63 6f 6e 73 74 20 75 38 2c     c: *const u8,
1130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1140: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1150: 20 63 6c 65 6e 3a 20 63 5f 75 6c 6f 6e 67 6c 6f   clen: c_ulonglo
1160: 6e 67 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ng,.            
1170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1180: 20 20 20 20 70 6b 3a 20 2a 63 6f 6e 73 74 20 75      pk: *const u
1190: 38 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  8,.             
11a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b0: 20 20 20 73 6b 3a 20 2a 63 6f 6e 73 74 20 75 38     sk: *const u8
11c0: 29 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ).              
11d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e0: 20 20 2d 3e 20 63 5f 69 6e 74 3b 0a 7d 0a 0a 23    -> c_int;.}..#
11f0: 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 63  [test].fn test_c
1200: 72 79 70 74 6f 5f 62 6f 78 5f 73 65 65 64 62 79  rypto_box_seedby
1210: 74 65 73 28 29 20 7b 0a 20 20 20 20 61 73 73 65  tes() {.    asse
1220: 72 74 21 28 75 6e 73 61 66 65 20 7b 20 63 72 79  rt!(unsafe { cry
1230: 70 74 6f 5f 62 6f 78 5f 73 65 65 64 62 79 74 65  pto_box_seedbyte
1240: 73 28 29 20 61 73 20 75 73 69 7a 65 20 7d 20 3d  s() as usize } =
1250: 3d 20 63 72 79 70 74 6f 5f 62 6f 78 5f 53 45 45  = crypto_box_SEE
1260: 44 42 59 54 45 53 29 0a 7d 0a 23 5b 74 65 73 74  DBYTES).}.#[test
1270: 5d 0a 66 6e 20 74 65 73 74 5f 63 72 79 70 74 6f  ].fn test_crypto
1280: 5f 62 6f 78 5f 70 75 62 6c 69 63 6b 65 79 62 79  _box_publickeyby
1290: 74 65 73 28 29 20 7b 0a 20 20 20 20 61 73 73 65  tes() {.    asse
12a0: 72 74 21 28 75 6e 73 61 66 65 20 7b 20 63 72 79  rt!(unsafe { cry
12b0: 70 74 6f 5f 62 6f 78 5f 70 75 62 6c 69 63 6b 65  pto_box_publicke
12c0: 79 62 79 74 65 73 28 29 20 61 73 20 75 73 69 7a  ybytes() as usiz
12d0: 65 20 7d 20 3d 3d 20 63 72 79 70 74 6f 5f 62 6f  e } == crypto_bo
12e0: 78 5f 50 55 42 4c 49 43 4b 45 59 42 59 54 45 53  x_PUBLICKEYBYTES
12f0: 29 0a 7d 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 74  ).}.#[test].fn t
1300: 65 73 74 5f 63 72 79 70 74 6f 5f 62 6f 78 5f 73  est_crypto_box_s
1310: 65 63 72 65 74 6b 65 79 62 79 74 65 73 28 29 20  ecretkeybytes() 
1320: 7b 0a 20 20 20 20 61 73 73 65 72 74 21 28 75 6e  {.    assert!(un
1330: 73 61 66 65 20 7b 20 63 72 79 70 74 6f 5f 62 6f  safe { crypto_bo
1340: 78 5f 73 65 63 72 65 74 6b 65 79 62 79 74 65 73  x_secretkeybytes
1350: 28 29 20 61 73 20 75 73 69 7a 65 20 7d 20 3d 3d  () as usize } ==
1360: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 53 45 43 52   crypto_box_SECR
1370: 45 54 4b 45 59 42 59 54 45 53 29 0a 7d 0a 23 5b  ETKEYBYTES).}.#[
1380: 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 63 72  test].fn test_cr
1390: 79 70 74 6f 5f 62 6f 78 5f 62 65 66 6f 72 65 6e  ypto_box_beforen
13a0: 6d 62 79 74 65 73 28 29 20 7b 0a 20 20 20 20 61  mbytes() {.    a
13b0: 73 73 65 72 74 21 28 75 6e 73 61 66 65 20 7b 20  ssert!(unsafe { 
13c0: 63 72 79 70 74 6f 5f 62 6f 78 5f 62 65 66 6f 72  crypto_box_befor
13d0: 65 6e 6d 62 79 74 65 73 28 29 20 61 73 20 75 73  enmbytes() as us
13e0: 69 7a 65 20 7d 20 3d 3d 20 63 72 79 70 74 6f 5f  ize } == crypto_
13f0: 62 6f 78 5f 42 45 46 4f 52 45 4e 4d 42 59 54 45  box_BEFORENMBYTE
1400: 53 29 0a 7d 0a 23 5b 74 65 73 74 5d 0a 66 6e 20  S).}.#[test].fn 
1410: 74 65 73 74 5f 63 72 79 70 74 6f 5f 62 6f 78 5f  test_crypto_box_
1420: 6e 6f 6e 63 65 62 79 74 65 73 28 29 20 7b 0a 20  noncebytes() {. 
1430: 20 20 20 61 73 73 65 72 74 21 28 75 6e 73 61 66     assert!(unsaf
1440: 65 20 7b 20 63 72 79 70 74 6f 5f 62 6f 78 5f 6e  e { crypto_box_n
1450: 6f 6e 63 65 62 79 74 65 73 28 29 20 61 73 20 75  oncebytes() as u
1460: 73 69 7a 65 20 7d 20 3d 3d 20 63 72 79 70 74 6f  size } == crypto
1470: 5f 62 6f 78 5f 4e 4f 4e 43 45 42 59 54 45 53 29  _box_NONCEBYTES)
1480: 0a 7d 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 74 65  .}.#[test].fn te
1490: 73 74 5f 63 72 79 70 74 6f 5f 62 6f 78 5f 7a 65  st_crypto_box_ze
14a0: 72 6f 62 79 74 65 73 28 29 20 7b 0a 20 20 20 20  robytes() {.    
14b0: 61 73 73 65 72 74 21 28 75 6e 73 61 66 65 20 7b  assert!(unsafe {
14c0: 20 63 72 79 70 74 6f 5f 62 6f 78 5f 7a 65 72 6f   crypto_box_zero
14d0: 62 79 74 65 73 28 29 20 61 73 20 75 73 69 7a 65  bytes() as usize
14e0: 20 7d 20 3d 3d 20 63 72 79 70 74 6f 5f 62 6f 78   } == crypto_box
14f0: 5f 5a 45 52 4f 42 59 54 45 53 29 0a 7d 0a 23 5b  _ZEROBYTES).}.#[
1500: 74 65 73 74 5d 0a 66 6e 20 74 65 73 74 5f 63 72  test].fn test_cr
1510: 79 70 74 6f 5f 62 6f 78 5f 62 6f 78 7a 65 72 6f  ypto_box_boxzero
1520: 62 79 74 65 73 28 29 20 7b 0a 20 20 20 20 61 73  bytes() {.    as
1530: 73 65 72 74 21 28 75 6e 73 61 66 65 20 7b 20 63  sert!(unsafe { c
1540: 72 79 70 74 6f 5f 62 6f 78 5f 62 6f 78 7a 65 72  rypto_box_boxzer
1550: 6f 62 79 74 65 73 28 29 20 61 73 20 75 73 69 7a  obytes() as usiz
1560: 65 20 7d 20 3d 3d 20 63 72 79 70 74 6f 5f 62 6f  e } == crypto_bo
1570: 78 5f 42 4f 58 5a 45 52 4f 42 59 54 45 53 29 0a  x_BOXZEROBYTES).
1580: 7d 0a 23 5b 74 65 73 74 5d 0a 66 6e 20 74 65 73  }.#[test].fn tes
1590: 74 5f 63 72 79 70 74 6f 5f 62 6f 78 5f 6d 61 63  t_crypto_box_mac
15a0: 62 79 74 65 73 28 29 20 7b 0a 20 20 20 20 61 73  bytes() {.    as
15b0: 73 65 72 74 21 28 75 6e 73 61 66 65 20 7b 20 63  sert!(unsafe { c
15c0: 72 79 70 74 6f 5f 62 6f 78 5f 6d 61 63 62 79 74  rypto_box_macbyt
15d0: 65 73 28 29 20 61 73 20 75 73 69 7a 65 20 7d 20  es() as usize } 
15e0: 3d 3d 20 63 72 79 70 74 6f 5f 62 6f 78 5f 4d 41  == crypto_box_MA
15f0: 43 42 59 54 45 53 29 0a 7d 0a 23 5b 74 65 73 74  CBYTES).}.#[test
1600: 5d 0a 66 6e 20 74 65 73 74 5f 63 72 79 70 74 6f  ].fn test_crypto
1610: 5f 62 6f 78 5f 70 72 69 6d 69 74 69 76 65 28 29  _box_primitive()
1620: 20 7b 0a 20 20 20 20 75 73 65 20 73 74 64 3a 3a   {.    use std::
1630: 66 66 69 3a 3a 43 53 74 72 3b 0a 20 20 20 20 75  ffi::CStr;.    u
1640: 6e 73 61 66 65 20 7b 0a 20 20 20 20 20 20 20 20  nsafe {.        
1650: 61 73 73 65 72 74 5f 65 71 21 28 43 53 74 72 3a  assert_eq!(CStr:
1660: 3a 66 72 6f 6d 5f 70 74 72 28 63 72 79 70 74 6f  :from_ptr(crypto
1670: 5f 62 6f 78 5f 50 52 49 4d 49 54 49 56 45 29 2c  _box_PRIMITIVE),
1680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1690: 20 20 20 20 43 53 74 72 3a 3a 66 72 6f 6d 5f 70      CStr::from_p
16a0: 74 72 28 63 72 79 70 74 6f 5f 62 6f 78 5f 70 72  tr(crypto_box_pr
16b0: 69 6d 69 74 69 76 65 28 29 29 29 3b 0a 20 20 20  imitive()));.   
16c0: 20 7d 0a 7d 0a 23 5b 74 65 73 74 5d 0a 66 6e 20   }.}.#[test].fn 
16d0: 74 65 73 74 5f 63 72 79 70 74 6f 5f 62 6f 78 5f  test_crypto_box_
16e0: 73 65 61 6c 62 79 74 65 73 28 29 20 7b 0a 20 20  sealbytes() {.  
16f0: 20 20 61 73 73 65 72 74 21 28 75 6e 73 61 66 65    assert!(unsafe
1700: 20 7b 20 63 72 79 70 74 6f 5f 62 6f 78 5f 73 65   { crypto_box_se
1710: 61 6c 62 79 74 65 73 28 29 20 61 73 20 75 73 69  albytes() as usi
1720: 7a 65 20 7d 20 3d 3d 20 63 72 79 70 74 6f 5f 62  ze } == crypto_b
1730: 6f 78 5f 53 45 41 4c 42 59 54 45 53 29 0a 7d 0a  ox_SEALBYTES).}.