Artifact
90cac0344f8a2b3ca4aaf2c7d8b5fed4507e9605:
Wiki page
[(crypto tweetnacl)] by
murphy
2018-01-31 20:26:38.
0000: 44 20 32 30 31 38 2d 30 31 2d 33 31 54 32 30 3a D 2018-01-31T20:
0010: 32 36 3a 33 38 2e 37 39 34 0a 4c 20 28 63 72 79 26:38.794.L (cry
0020: 70 74 6f 5c 73 74 77 65 65 74 6e 61 63 6c 29 0a pto\stweetnacl).
0030: 50 20 62 38 63 65 65 36 37 39 36 31 38 39 35 61 P b8cee67961895a
0040: 65 35 61 63 39 38 39 31 30 30 30 62 36 66 37 30 e5ac9891000b6f70
0050: 39 32 63 61 66 32 30 65 33 37 0a 55 20 6d 75 72 92caf20e37.U mur
0060: 70 68 79 0a 57 20 35 36 33 38 0a 3c 68 31 3e 54 phy.W 5638.<h1>T
0070: 77 65 65 74 4e 61 43 6c 20 42 69 6e 64 69 6e 67 weetNaCl Binding
0080: 73 3c 2f 68 31 3e 0d 0a 0d 0a 3c 68 32 3e 53 79 s</h1>....<h2>Sy
0090: 6e 6f 70 73 69 73 3c 2f 68 32 3e 0d 0a 0d 0a 3c nopsis</h2>....<
00a0: 63 6f 64 65 3e 28 69 6d 70 6f 72 74 20 28 63 72 code>(import (cr
00b0: 79 70 74 6f 20 74 77 65 65 74 6e 61 63 6c 29 29 ypto tweetnacl))
00c0: 3c 2f 63 6f 64 65 3e 0d 0a 0d 0a 42 69 6e 64 69 </code>....Bindi
00d0: 6e 67 73 20 74 6f 20 74 68 65 20 5b 68 74 74 70 ngs to the [http
00e0: 73 3a 2f 2f 74 77 65 65 74 6e 61 63 6c 2e 63 72 s://tweetnacl.cr
00f0: 2e 79 70 2e 74 6f 2f 7c 54 77 65 65 74 4e 61 43 .yp.to/|TweetNaC
0100: 6c 5d 20 6c 69 62 72 61 72 79 20 6f 66 20 63 72 l] library of cr
0110: 79 70 74 6f 67 72 61 70 68 69 63 20 6f 70 65 72 yptographic oper
0120: 61 74 69 6f 6e 73 2e 0d 0a 0d 0a 3c 68 32 3e 4b ations.....<h2>K
0130: 65 79 73 3c 2f 68 32 3e 0d 0a 0d 0a 3c 68 33 3e eys</h2>....<h3>
0140: 72 65 63 6f 72 64 3a 20 3c 63 6f 64 65 3e 6b 65 record: <code>ke
0150: 79 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 3c y</code></h3>..<
0160: 68 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 h3>procedure: <c
0170: 6f 64 65 3e 28 6b 65 79 3f 20 3c 69 3e 61 6e 79 ode>(key? <i>any
0180: 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 </i>)</code></h3
0190: 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 >..<h3>procedure
01a0: 3a 20 3c 63 6f 64 65 3e 28 6d 61 6b 65 2d 6b 65 : <code>(make-ke
01b0: 79 20 3c 69 3e 61 6c 67 6f 72 69 74 68 6d 3c 2f y <i>algorithm</
01c0: 69 3e 20 3c 69 3e 70 75 62 6c 69 63 3c 2f 69 3e i> <i>public</i>
01d0: 20 3c 69 3e 73 65 63 72 65 74 3c 2f 69 3e 29 3c <i>secret</i>)<
01e0: 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 /code></h3>..<h3
01f0: 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 >procedure: <cod
0200: 65 3e 28 6b 65 79 2d 61 6c 67 6f 72 69 74 68 6d e>(key-algorithm
0210: 20 3c 69 3e 6b 65 79 3c 2f 69 3e 29 3c 2f 63 6f <i>key</i>)</co
0220: 64 65 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 3e 70 72 de></h3>..<h3>pr
0230: 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 ocedure: <code>(
0240: 70 75 62 6c 69 63 2d 6b 65 79 20 3c 69 3e 6b 65 public-key <i>ke
0250: 79 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 y</i>)</code></h
0260: 33 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 3>..<h3>procedur
0270: 65 3a 20 3c 63 6f 64 65 3e 28 73 65 63 72 65 74 e: <code>(secret
0280: 2d 6b 65 79 20 3c 69 3e 6b 65 79 3c 2f 69 3e 29 -key <i>key</i>)
0290: 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a </code></h3>....
02a0: 4b 65 79 73 20 61 72 65 20 72 65 70 72 65 73 65 Keys are represe
02b0: 6e 74 65 64 20 62 79 20 72 65 63 6f 72 64 20 69 nted by record i
02c0: 6e 73 74 61 6e 63 65 73 20 74 68 61 74 20 68 6f nstances that ho
02d0: 6c 64 20 61 6e 20 61 6c 67 6f 72 69 74 68 6d 20 ld an algorithm
02e0: 6e 61 6d 65 2c 20 61 20 70 75 62 6c 69 63 20 6b name, a public k
02f0: 65 79 20 62 79 74 65 76 65 63 74 6f 72 20 61 6e ey bytevector an
0300: 64 20 61 20 73 65 63 72 65 74 20 6b 65 79 20 62 d a secret key b
0310: 79 74 65 76 65 63 74 6f 72 2e 20 44 65 70 65 6e ytevector. Depen
0320: 64 69 6e 67 20 6f 6e 20 74 68 65 20 61 6c 67 6f ding on the algo
0330: 72 69 74 68 6d 20 61 6e 64 20 69 6e 74 65 6e 64 rithm and intend
0340: 65 64 20 75 73 65 20 6f 66 20 74 68 65 20 6b 65 ed use of the ke
0350: 79 2c 20 65 69 74 68 65 72 20 74 68 65 20 70 75 y, either the pu
0360: 62 6c 69 63 20 6f 72 20 73 65 63 72 65 74 20 63 blic or secret c
0370: 6f 6d 70 6f 6e 65 6e 74 20 6d 61 79 20 62 65 20 omponent may be
0380: 3c 74 74 3e 23 66 3c 2f 74 74 3e 2e 0d 0a 0d 0a <tt>#f</tt>.....
0390: 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c <h3>procedure: <
03a0: 63 6f 64 65 3e 28 63 68 65 63 6b 2d 6b 65 79 20 code>(check-key
03b0: 3c 69 3e 77 68 6f 3c 2f 69 3e 20 3c 69 3e 61 6c <i>who</i> <i>al
03c0: 67 6f 72 69 74 68 6d 3c 2f 69 3e 20 3c 69 3e 61 gorithm</i> <i>a
03d0: 6e 79 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f ny</i>)</code></
03e0: 68 33 3e 0d 0a 0d 0a 45 6e 73 75 72 65 73 20 74 h3>....Ensures t
03f0: 68 61 74 20 74 68 65 20 67 69 76 65 6e 20 76 61 hat the given va
0400: 6c 75 65 20 69 73 20 61 20 6b 65 79 20 77 69 74 lue is a key wit
0410: 68 20 74 68 65 20 67 69 76 65 6e 20 61 6c 67 6f h the given algo
0420: 72 69 74 68 6d 20 6e 61 6d 65 20 61 6e 64 20 72 rithm name and r
0430: 65 74 75 72 6e 73 20 74 68 65 20 6b 65 79 2e 20 eturns the key.
0440: 49 66 20 74 68 65 20 76 61 6c 75 65 20 64 6f 65 If the value doe
0450: 73 20 6e 6f 74 20 70 61 73 73 20 74 68 65 20 63 s not pass the c
0460: 68 65 63 6b 2c 20 61 6e 20 65 72 72 6f 72 20 63 heck, an error c
0470: 6f 6e 64 69 74 69 6f 6e 20 69 73 20 72 61 69 73 ondition is rais
0480: 65 64 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 ed that contains
0490: 20 61 20 3c 74 74 3e 26 77 68 6f 3c 2f 74 74 3e a <tt>&who</tt>
04a0: 20 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 64 69 63 condition indic
04b0: 61 74 69 6e 67 20 74 68 65 20 67 69 76 65 6e 20 ating the given
04c0: 6c 6f 63 61 74 69 6f 6e 2e 0d 0a 0d 0a 3c 68 32 location.....<h2
04d0: 3e 41 73 79 6d 6d 65 74 72 69 63 20 42 6f 78 65 >Asymmetric Boxe
04e0: 73 3c 2f 68 32 3e 0d 0a 0d 0a 3c 68 33 3e 63 6f s</h2>....<h3>co
04f0: 6e 73 74 61 6e 74 3a 20 3c 63 6f 64 65 3e 61 73 nstant: <code>as
0500: 79 6d 6d 65 74 72 69 63 2d 62 6f 78 2d 61 6c 67 ymmetric-box-alg
0510: 6f 72 69 74 68 6d 3c 2f 63 6f 64 65 3e 3c 2f 68 orithm</code></h
0520: 33 3e 0d 0a 0d 0a 54 68 65 20 6e 61 6d 65 20 6f 3>....The name o
0530: 66 20 74 68 65 20 61 73 79 6d 6d 65 74 72 69 63 f the asymmetric
0540: 20 62 6f 78 20 61 6c 67 6f 72 69 74 68 6d 2e 0d box algorithm..
0550: 0a 0d 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a ...<h3>constant:
0560: 20 3c 63 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 <code>asymmetri
0570: 63 2d 62 6f 78 2d 70 75 62 6c 69 63 6b 65 79 62 c-box-publickeyb
0580: 79 74 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e ytes</code></h3>
0590: 0d 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 ..<h3>constant:
05a0: 3c 63 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 63 <code>asymmetric
05b0: 2d 62 6f 78 2d 73 65 63 72 65 74 6b 65 79 62 79 -box-secretkeyby
05c0: 74 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d tes</code></h3>.
05d0: 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c .<h3>constant: <
05e0: 63 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 63 2d code>asymmetric-
05f0: 62 6f 78 2d 6e 6f 6e 63 65 62 79 74 65 73 3c 2f box-noncebytes</
0600: 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 42 79 code></h3>....By
0610: 74 65 20 6c 65 6e 67 74 68 73 20 6f 66 20 61 6c te lengths of al
0620: 67 6f 72 69 74 68 6d 20 70 61 72 61 6d 65 74 65 gorithm paramete
0630: 72 73 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 65 rs.....<h3>proce
0640: 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 6d 61 6b dure: <code>(mak
0650: 65 2d 61 73 79 6d 6d 65 74 72 69 63 2d 62 6f 78 e-asymmetric-box
0660: 2d 6b 65 79 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 -key)</code></h3
0670: 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 >..<h3>procedure
0680: 3a 20 3c 63 6f 64 65 3e 28 6d 61 6b 65 2d 61 73 : <code>(make-as
0690: 79 6d 6d 65 74 72 69 63 2d 62 6f 78 2d 6b 65 79 ymmetric-box-key
06a0: 20 3c 69 3e 70 6f 72 74 3c 2f 69 3e 29 3c 2f 63 <i>port</i>)</c
06b0: 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 47 65 6e ode></h3>....Gen
06c0: 65 72 61 74 65 20 61 20 6e 65 77 20 6b 65 79 70 erate a new keyp
06d0: 61 69 72 20 75 73 69 6e 67 20 65 6e 74 72 6f 70 air using entrop
06e0: 79 20 66 72 6f 6d 20 74 68 65 20 67 69 76 65 6e y from the given
06f0: 20 70 6f 72 74 20 6f 72 20 66 72 6f 6d 20 3c 74 port or from <t
0700: 74 3e 28 63 75 72 72 65 6e 74 2d 65 6e 74 72 6f t>(current-entro
0710: 70 79 2d 70 6f 72 74 29 3c 2f 74 74 3e 2e 0d 0a py-port)</tt>...
0720: 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 3a ..<h3>procedure:
0730: 20 3c 63 6f 64 65 3e 28 28 61 73 79 6d 6d 65 74 <code>((asymmet
0740: 72 69 63 2d 62 6f 78 20 3c 69 3e 70 6b 3c 2f 69 ric-box <i>pk</i
0750: 3e 20 3c 69 3e 73 6b 3c 2f 69 3e 29 20 3c 69 3e > <i>sk</i>) <i>
0760: 64 61 74 61 3c 2f 69 3e 20 3c 69 3e 6e 6f 6e 63 data</i> <i>nonc
0770: 65 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 e</i>)</code></h
0780: 33 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 3>..<h3>procedur
0790: 65 3a 20 3c 63 6f 64 65 3e 28 28 61 73 79 6d 6d e: <code>((asymm
07a0: 65 74 72 69 63 2d 75 6e 62 6f 78 20 3c 69 3e 70 etric-unbox <i>p
07b0: 6b 3c 2f 69 3e 20 3c 69 3e 73 6b 3c 2f 69 3e 29 k</i> <i>sk</i>)
07c0: 20 3c 69 3e 64 61 74 61 3c 2f 69 3e 20 3c 69 3e <i>data</i> <i>
07d0: 6e 6f 6e 63 65 3c 2f 69 3e 29 3c 2f 63 6f 64 65 nonce</i>)</code
07e0: 3e 3c 2f 68 33 3e 0d 0a 0d 0a 50 65 72 66 6f 72 ></h3>....Perfor
07f0: 6d 20 6b 65 79 20 61 67 72 65 65 6d 65 6e 74 20 m key agreement
0800: 61 6e 64 20 72 65 74 75 72 6e 20 62 6f 78 69 6e and return boxin
0810: 67 20 61 6e 64 20 75 6e 62 6f 78 69 6e 67 20 70 g and unboxing p
0820: 72 6f 63 65 64 75 72 65 73 2e 0d 0a 0d 0a 3c 68 rocedures.....<h
0830: 32 3e 41 73 79 6d 6d 65 74 72 69 63 20 53 69 67 2>Asymmetric Sig
0840: 6e 61 74 75 72 65 73 3c 2f 68 32 3e 0d 0a 0d 0a natures</h2>....
0850: 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 <h3>constant: <c
0860: 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 63 2d 73 ode>asymmetric-s
0870: 69 67 6e 2d 61 6c 67 6f 72 69 74 68 6d 3c 2f 63 ign-algorithm</c
0880: 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 54 68 65 ode></h3>....The
0890: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 61 73 79 name of the asy
08a0: 6d 6d 65 74 72 69 63 20 73 69 67 6e 61 74 75 72 mmetric signatur
08b0: 65 20 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 0d 0a e algorithm.....
08c0: 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 <h3>constant: <c
08d0: 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 63 2d 73 ode>asymmetric-s
08e0: 69 67 6e 2d 70 75 62 6c 69 63 6b 65 79 62 79 74 ign-publickeybyt
08f0: 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a es</code></h3>..
0900: 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 <h3>constant: <c
0910: 6f 64 65 3e 61 73 79 6d 6d 65 74 72 69 63 2d 73 ode>asymmetric-s
0920: 69 67 6e 2d 73 65 63 72 65 74 6b 65 79 62 79 74 ign-secretkeybyt
0930: 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a es</code></h3>..
0940: 0d 0a 42 79 74 65 20 6c 65 6e 67 74 68 73 20 6f ..Byte lengths o
0950: 66 20 61 6c 67 6f 72 69 74 68 6d 20 70 61 72 61 f algorithm para
0960: 6d 65 74 65 72 73 2e 0d 0a 0d 0a 3c 68 33 3e 70 meters.....<h3>p
0970: 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e rocedure: <code>
0980: 28 6d 61 6b 65 2d 61 73 79 6d 6d 65 74 72 69 63 (make-asymmetric
0990: 2d 73 69 67 6e 2d 6b 65 79 29 3c 2f 63 6f 64 65 -sign-key)</code
09a0: 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 3e 70 72 6f 63 ></h3>..<h3>proc
09b0: 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 6d 61 edure: <code>(ma
09c0: 6b 65 2d 61 73 79 6d 6d 65 74 72 69 63 2d 73 69 ke-asymmetric-si
09d0: 67 6e 2d 6b 65 79 20 3c 69 3e 70 6f 72 74 3c 2f gn-key <i>port</
09e0: 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d i>)</code></h3>.
09f0: 0a 0d 0a 47 65 6e 65 72 61 74 65 20 61 20 6e 65 ...Generate a ne
0a00: 77 20 6b 65 79 70 61 69 72 20 75 73 69 6e 67 20 w keypair using
0a10: 65 6e 74 72 6f 70 79 20 66 72 6f 6d 20 74 68 65 entropy from the
0a20: 20 67 69 76 65 6e 20 70 6f 72 74 20 6f 72 20 66 given port or f
0a30: 72 6f 6d 20 3c 74 74 3e 28 63 75 72 72 65 6e 74 rom <tt>(current
0a40: 2d 65 6e 74 72 6f 70 79 2d 70 6f 72 74 29 3c 2f -entropy-port)</
0a50: 74 74 3e 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 tt>.....<h3>proc
0a60: 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 28 61 edure: <code>((a
0a70: 73 79 6d 6d 65 74 72 69 63 2d 73 69 67 6e 20 3c symmetric-sign <
0a80: 69 3e 73 6b 3c 2f 69 3e 29 20 3c 69 3e 64 61 74 i>sk</i>) <i>dat
0a90: 61 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 a</i>)</code></h
0aa0: 33 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 3>..<h3>procedur
0ab0: 65 3a 20 3c 63 6f 64 65 3e 28 28 61 73 79 6d 6d e: <code>((asymm
0ac0: 65 74 72 69 63 2d 76 65 72 69 66 79 20 3c 69 3e etric-verify <i>
0ad0: 70 6b 3c 2f 69 3e 29 20 3c 69 3e 64 61 74 61 3c pk</i>) <i>data<
0ae0: 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e /i>)</code></h3>
0af0: 0d 0a 0d 0a 43 72 65 61 74 65 20 73 69 67 6e 61 ....Create signa
0b00: 74 75 72 65 20 61 6e 64 20 76 65 72 69 66 69 63 ture and verific
0b10: 61 74 69 6f 6e 20 70 72 6f 63 65 64 75 72 65 73 ation procedures
0b20: 2e 0d 0a 0d 0a 3c 68 32 3e 53 79 6d 6d 65 74 72 .....<h2>Symmetr
0b30: 69 63 20 42 6f 78 65 73 3c 2f 68 32 3e 0d 0a 0d ic Boxes</h2>...
0b40: 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c .<h3>constant: <
0b50: 63 6f 64 65 3e 73 79 6d 6d 65 74 72 69 63 2d 62 code>symmetric-b
0b60: 6f 78 2d 61 6c 67 6f 72 69 74 68 6d 3c 2f 63 6f ox-algorithm</co
0b70: 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 54 68 65 20 de></h3>....The
0b80: 6e 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 6d name of the symm
0b90: 65 74 72 69 63 20 62 6f 78 20 61 6c 67 6f 72 69 etric box algori
0ba0: 74 68 6d 2e 0d 0a 0d 0a 3c 68 33 3e 63 6f 6e 73 thm.....<h3>cons
0bb0: 74 61 6e 74 3a 20 3c 63 6f 64 65 3e 73 79 6d 6d tant: <code>symm
0bc0: 65 74 72 69 63 2d 62 6f 78 2d 6b 65 79 62 79 74 etric-box-keybyt
0bd0: 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a es</code></h3>..
0be0: 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 <h3>constant: <c
0bf0: 6f 64 65 3e 73 79 6d 6d 65 74 72 69 63 2d 62 6f ode>symmetric-bo
0c00: 78 2d 6e 6f 6e 63 65 62 79 74 65 73 3c 2f 63 6f x-noncebytes</co
0c10: 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 42 79 74 65 de></h3>....Byte
0c20: 20 6c 65 6e 67 74 68 73 20 6f 66 20 61 6c 67 6f lengths of algo
0c30: 72 69 74 68 6d 20 70 61 72 61 6d 65 74 65 72 73 rithm parameters
0c40: 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 .....<h3>procedu
0c50: 72 65 3a 20 3c 63 6f 64 65 3e 28 6d 61 6b 65 2d re: <code>(make-
0c60: 73 79 6d 6d 65 74 72 69 63 2d 62 6f 78 2d 6b 65 symmetric-box-ke
0c70: 79 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a y)</code></h3>..
0c80: 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c <h3>procedure: <
0c90: 63 6f 64 65 3e 28 6d 61 6b 65 2d 73 79 6d 6d 65 code>(make-symme
0ca0: 74 72 69 63 2d 62 6f 78 2d 6b 65 79 20 3c 69 3e tric-box-key <i>
0cb0: 70 6f 72 74 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e port</i>)</code>
0cc0: 3c 2f 68 33 3e 0d 0a 0d 0a 47 65 6e 65 72 61 74 </h3>....Generat
0cd0: 65 20 61 20 6e 65 77 20 6b 65 79 20 75 73 69 6e e a new key usin
0ce0: 67 20 65 6e 74 72 6f 70 79 20 66 72 6f 6d 20 74 g entropy from t
0cf0: 68 65 20 67 69 76 65 6e 20 70 6f 72 74 20 6f 72 he given port or
0d00: 20 66 72 6f 6d 20 3c 74 74 3e 28 63 75 72 72 65 from <tt>(curre
0d10: 6e 74 2d 65 6e 74 72 6f 70 79 2d 70 6f 72 74 29 nt-entropy-port)
0d20: 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 </tt>.....<h3>pr
0d30: 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 ocedure: <code>(
0d40: 64 65 72 69 76 65 2d 73 79 6d 6d 65 74 72 69 63 derive-symmetric
0d50: 2d 62 6f 78 2d 6b 65 79 20 3c 69 3e 70 6b 3c 2f -box-key <i>pk</
0d60: 69 3e 20 3c 69 3e 73 6b 3c 2f 69 3e 29 3c 2f 63 i> <i>sk</i>)</c
0d70: 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 44 65 72 ode></h3>....Der
0d80: 69 76 65 20 61 20 73 79 6d 6d 65 74 72 69 63 20 ive a symmetric
0d90: 62 6f 78 20 6b 65 79 20 74 68 72 6f 75 67 68 20 box key through
0da0: 61 6e 20 61 73 79 6d 6d 65 74 72 69 63 20 62 6f an asymmetric bo
0db0: 78 20 6b 65 79 20 61 67 72 65 65 6d 65 6e 74 2e x key agreement.
0dc0: 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 ....<h3>procedur
0dd0: 65 3a 20 3c 63 6f 64 65 3e 28 28 73 79 6d 6d 65 e: <code>((symme
0de0: 74 72 69 63 2d 62 6f 78 20 3c 69 3e 6b 3c 2f 69 tric-box <i>k</i
0df0: 3e 29 20 3c 69 3e 64 61 74 61 3c 2f 69 3e 20 3c >) <i>data</i> <
0e00: 69 3e 6e 6f 6e 63 65 3c 2f 69 3e 29 3c 2f 63 6f i>nonce</i>)</co
0e10: 64 65 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 3e 70 72 de></h3>..<h3>pr
0e20: 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 ocedure: <code>(
0e30: 28 73 79 6d 6d 65 74 72 69 63 2d 75 6e 62 6f 78 (symmetric-unbox
0e40: 20 3c 69 3e 6b 3c 2f 69 3e 29 20 3c 69 3e 64 61 <i>k</i>) <i>da
0e50: 74 61 3c 2f 69 3e 20 3c 69 3e 6e 6f 6e 63 65 3c ta</i> <i>nonce<
0e60: 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e /i>)</code></h3>
0e70: 0d 0a 0d 0a 43 72 65 61 74 65 20 62 6f 78 69 6e ....Create boxin
0e80: 67 20 61 6e 64 20 75 6e 62 6f 78 69 6e 67 20 70 g and unboxing p
0e90: 72 6f 63 65 64 75 72 65 73 2e 0d 0a 0d 0a 3c 68 rocedures.....<h
0ea0: 32 3e 53 79 6d 6d 65 74 72 69 63 20 53 69 67 6e 2>Symmetric Sign
0eb0: 61 74 75 72 65 73 3c 2f 68 32 3e 0d 0a 0d 0a 3c atures</h2>....<
0ec0: 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 6f h3>constant: <co
0ed0: 64 65 3e 73 79 6d 6d 65 74 72 69 63 2d 73 69 67 de>symmetric-sig
0ee0: 6e 2d 61 6c 67 6f 72 69 74 68 6d 3c 2f 63 6f 64 n-algorithm</cod
0ef0: 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 54 68 65 20 6e e></h3>....The n
0f00: 61 6d 65 20 6f 66 20 74 68 65 20 73 79 6d 6d 65 ame of the symme
0f10: 74 72 69 63 20 73 69 67 6e 61 74 75 72 65 20 61 tric signature a
0f20: 6c 67 6f 72 69 74 68 6d 2e 0d 0a 0d 0a 3c 68 33 lgorithm.....<h3
0f30: 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 6f 64 65 >constant: <code
0f40: 3e 73 79 6d 6d 65 74 72 69 63 2d 73 69 67 6e 2d >symmetric-sign-
0f50: 6b 65 79 62 79 74 65 73 3c 2f 63 6f 64 65 3e 3c keybytes</code><
0f60: 2f 68 33 3e 0d 0a 0d 0a 42 79 74 65 20 6c 65 6e /h3>....Byte len
0f70: 67 74 68 73 20 6f 66 20 61 6c 67 6f 72 69 74 68 gths of algorith
0f80: 6d 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 0d m parameters....
0f90: 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 .<h3>procedure:
0fa0: 3c 63 6f 64 65 3e 28 6d 61 6b 65 2d 73 79 6d 6d <code>(make-symm
0fb0: 65 74 72 69 63 2d 73 69 67 6e 2d 6b 65 79 29 3c etric-sign-key)<
0fc0: 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 /code></h3>..<h3
0fd0: 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 >procedure: <cod
0fe0: 65 3e 28 6d 61 6b 65 2d 73 79 6d 6d 65 74 72 69 e>(make-symmetri
0ff0: 63 2d 73 69 67 6e 2d 6b 65 79 20 3c 69 3e 70 6f c-sign-key <i>po
1000: 72 74 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f rt</i>)</code></
1010: 68 33 3e 0d 0a 0d 0a 47 65 6e 65 72 61 74 65 20 h3>....Generate
1020: 61 20 6e 65 77 20 6b 65 79 20 75 73 69 6e 67 20 a new key using
1030: 65 6e 74 72 6f 70 79 20 66 72 6f 6d 20 74 68 65 entropy from the
1040: 20 67 69 76 65 6e 20 70 6f 72 74 20 6f 72 20 66 given port or f
1050: 72 6f 6d 20 3c 74 74 3e 28 63 75 72 72 65 6e 74 rom <tt>(current
1060: 2d 65 6e 74 72 6f 70 79 2d 70 6f 72 74 29 3c 2f -entropy-port)</
1070: 74 74 3e 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 tt>.....<h3>proc
1080: 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 28 73 edure: <code>((s
1090: 79 6d 6d 65 74 72 69 63 2d 73 69 67 6e 20 3c 69 ymmetric-sign <i
10a0: 3e 6b 3c 2f 69 3e 29 20 3c 69 3e 64 61 74 61 3c >k</i>) <i>data<
10b0: 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e /i>)</code></h3>
10c0: 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 3a ..<h3>procedure:
10d0: 20 3c 63 6f 64 65 3e 28 28 73 79 6d 6d 65 74 72 <code>((symmetr
10e0: 69 63 2d 76 65 72 69 66 79 20 3c 69 3e 6b 3c 2f ic-verify <i>k</
10f0: 69 3e 29 20 3c 69 3e 64 61 74 61 3c 2f 69 3e 29 i>) <i>data</i>)
1100: 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a </code></h3>....
1110: 43 72 65 61 74 65 20 73 69 67 6e 61 74 75 72 65 Create signature
1120: 20 61 6e 64 20 76 65 72 69 66 69 63 61 74 69 6f and verificatio
1130: 6e 20 70 72 6f 63 65 64 75 72 65 73 2e 0d 0a 0d n procedures....
1140: 0a 3c 68 32 3e 50 73 65 75 64 6f 2d 52 61 6e 64 .<h2>Pseudo-Rand
1150: 6f 6d 20 53 74 72 65 61 6d 73 3c 2f 68 32 3e 0d om Streams</h2>.
1160: 0a 0d 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a ...<h3>constant:
1170: 20 3c 63 6f 64 65 3e 72 61 6e 64 6f 6d 2d 73 74 <code>random-st
1180: 72 65 61 6d 2d 61 6c 67 6f 72 69 74 68 6d 3c 2f ream-algorithm</
1190: 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 54 68 code></h3>....Th
11a0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 70 73 e name of the ps
11b0: 65 75 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62 eudo-random numb
11c0: 65 72 20 67 65 6e 65 72 61 74 6f 72 20 61 6c 67 er generator alg
11d0: 6f 72 69 74 68 6d 2e 0d 0a 0d 0a 3c 68 33 3e 63 orithm.....<h3>c
11e0: 6f 6e 73 74 61 6e 74 3a 20 3c 63 6f 64 65 3e 72 onstant: <code>r
11f0: 61 6e 64 6f 6d 2d 73 74 72 65 61 6d 2d 6b 65 79 andom-stream-key
1200: 62 79 74 65 73 3c 2f 63 6f 64 65 3e 3c 2f 68 33 bytes</code></h3
1210: 3e 0d 0a 3c 68 33 3e 63 6f 6e 73 74 61 6e 74 3a >..<h3>constant:
1220: 20 3c 63 6f 64 65 3e 72 61 6e 64 6f 6d 2d 73 74 <code>random-st
1230: 72 65 61 6d 2d 6e 6f 6e 63 65 62 79 74 65 73 3c ream-noncebytes<
1240: 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 42 /code></h3>....B
1250: 79 74 65 20 6c 65 6e 67 74 68 73 20 6f 66 20 61 yte lengths of a
1260: 6c 67 6f 72 69 74 68 6d 20 70 61 72 61 6d 65 74 lgorithm paramet
1270: 65 72 73 2e 0d 0a 0d 0a 3c 68 33 3e 70 72 6f 63 ers.....<h3>proc
1280: 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e 28 6d 61 edure: <code>(ma
1290: 6b 65 2d 72 61 6e 64 6f 6d 2d 73 74 72 65 61 6d ke-random-stream
12a0: 2d 6b 65 79 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 -key)</code></h3
12b0: 3e 0d 0a 3c 68 33 3e 70 72 6f 63 65 64 75 72 65 >..<h3>procedure
12c0: 3a 20 3c 63 6f 64 65 3e 28 6d 61 6b 65 2d 72 61 : <code>(make-ra
12d0: 6e 64 6f 6d 2d 73 74 72 65 61 6d 2d 6b 65 79 20 ndom-stream-key
12e0: 3c 69 3e 70 6f 72 74 3c 2f 69 3e 29 3c 2f 63 6f <i>port</i>)</co
12f0: 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a 47 65 6e 65 de></h3>....Gene
1300: 72 61 74 65 20 61 20 6e 65 77 20 6b 65 79 20 75 rate a new key u
1310: 73 69 6e 67 20 65 6e 74 72 6f 70 79 20 66 72 6f sing entropy fro
1320: 6d 20 74 68 65 20 67 69 76 65 6e 20 70 6f 72 74 m the given port
1330: 20 6f 72 20 66 72 6f 6d 20 3c 74 74 3e 28 63 75 or from <tt>(cu
1340: 72 72 65 6e 74 2d 65 6e 74 72 6f 70 79 2d 70 6f rrent-entropy-po
1350: 72 74 29 3c 2f 74 74 3e 2e 0d 0a 0d 0a 3c 68 33 rt)</tt>.....<h3
1360: 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 >procedure: <cod
1370: 65 3e 28 64 65 72 69 76 65 2d 72 61 6e 64 6f 6d e>(derive-random
1380: 2d 73 74 72 65 61 6d 2d 6b 65 79 20 3c 69 3e 70 -stream-key <i>p
1390: 6b 3c 2f 69 3e 20 3c 69 3e 73 6b 3c 2f 69 3e 29 k</i> <i>sk</i>)
13a0: 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d 0a </code></h3>....
13b0: 44 65 72 69 76 65 20 61 20 70 73 65 75 64 6f 2d Derive a pseudo-
13c0: 72 61 6e 64 6f 6d 20 73 74 72 65 61 6d 20 6b 65 random stream ke
13d0: 79 20 74 68 72 6f 75 67 68 20 61 6e 20 61 73 79 y through an asy
13e0: 6d 6d 65 74 72 69 63 20 62 6f 78 20 6b 65 79 20 mmetric box key
13f0: 61 67 72 65 65 6d 65 6e 74 2e 0d 0a 0d 0a 3c 68 agreement.....<h
1400: 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 3>procedure: <co
1410: 64 65 3e 28 6f 70 65 6e 2d 72 61 6e 64 6f 6d 2d de>(open-random-
1420: 73 74 72 65 61 6d 20 3c 69 3e 6b 3c 2f 69 3e 20 stream <i>k</i>
1430: 3c 69 3e 6e 6f 6e 63 65 3c 2f 69 3e 29 3c 2f 63 <i>nonce</i>)</c
1440: 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 3c 68 33 3e 70 ode></h3>..<h3>p
1450: 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 64 65 3e rocedure: <code>
1460: 28 6f 70 65 6e 2d 72 61 6e 64 6f 6d 2d 73 74 72 (open-random-str
1470: 65 61 6d 20 3c 69 3e 6b 3c 2f 69 3e 20 3c 69 3e eam <i>k</i> <i>
1480: 6e 6f 6e 63 65 3c 2f 69 3e 20 3c 69 3e 6c 69 6d nonce</i> <i>lim
1490: 69 74 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f it</i>)</code></
14a0: 68 33 3e 0d 0a 0d 0a 4f 70 65 6e 20 61 20 62 69 h3>....Open a bi
14b0: 6e 61 72 79 20 69 6e 70 75 74 20 70 6f 72 74 20 nary input port
14c0: 62 61 63 6b 65 64 20 62 79 20 61 20 70 73 65 75 backed by a pseu
14d0: 64 6f 2d 72 61 6e 64 6f 6d 20 6e 75 6d 62 65 72 do-random number
14e0: 20 67 65 6e 65 72 61 74 6f 72 2e 20 54 68 65 20 generator. The
14f0: 64 65 66 61 75 6c 74 20 6c 69 6d 69 74 2c 20 61 default limit, a
1500: 66 74 65 72 20 77 68 69 63 68 20 74 68 65 20 70 fter which the p
1510: 6f 72 74 20 77 69 6c 6c 20 73 69 67 6e 61 6c 20 ort will signal
1520: 65 6e 64 20 6f 66 20 66 69 6c 65 2c 20 69 73 20 end of file, is
1530: 31 20 47 69 42 20 6f 66 20 72 61 6e 64 6f 6d 20 1 GiB of random
1540: 64 61 74 61 2c 20 62 75 74 20 3c 74 74 3e 23 66 data, but <tt>#f
1550: 3c 2f 74 74 3e 20 6f 72 20 3c 74 74 3e 2b 69 6e </tt> or <tt>+in
1560: 66 2e 30 3c 2f 74 74 3e 20 6d 61 79 20 62 65 20 f.0</tt> may be
1570: 70 61 73 73 65 64 20 74 6f 20 64 65 61 63 74 69 passed to deacti
1580: 76 61 74 65 20 74 68 65 20 6c 69 6d 69 74 2e 0d vate the limit..
1590: 0a 0d 0a 3c 68 32 3e 4d 65 73 73 61 67 65 20 44 ...<h2>Message D
15a0: 69 67 65 73 74 73 3c 2f 68 32 3e 0d 0a 0d 0a 3c igests</h2>....<
15b0: 68 33 3e 63 6f 6e 73 74 61 6e 74 3a 20 3c 63 6f h3>constant: <co
15c0: 64 65 3e 68 61 73 68 2d 61 6c 67 6f 72 69 74 68 de>hash-algorith
15d0: 6d 3c 2f 63 6f 64 65 3e 3c 2f 68 33 3e 0d 0a 0d m</code></h3>...
15e0: 0a 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 .The name of the
15f0: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 20 message digest
1600: 61 6c 67 6f 72 69 74 68 6d 2e 0d 0a 0d 0a 3c 68 algorithm.....<h
1610: 33 3e 70 72 6f 63 65 64 75 72 65 3a 20 3c 63 6f 3>procedure: <co
1620: 64 65 3e 28 68 61 73 68 20 3c 69 3e 64 61 74 61 de>(hash <i>data
1630: 3c 2f 69 3e 29 3c 2f 63 6f 64 65 3e 3c 2f 68 33 </i>)</code></h3
1640: 3e 0d 0a 0d 0a 43 6f 6d 70 75 74 65 20 74 68 65 >....Compute the
1650: 20 6d 65 73 73 61 67 65 20 64 69 67 65 73 74 20 message digest
1660: 6f 66 20 62 69 6e 61 72 79 20 64 61 74 61 2e 0d of binary data..
1670: 0a 0a 5a 20 38 65 62 64 64 39 64 63 35 35 33 30 ..Z 8ebdd9dc5530
1680: 66 38 31 66 30 33 32 64 39 33 31 30 62 31 30 32 f81f032d9310b102
1690: 66 33 37 30 0a f370.