serpent: Provide little-endian version too, but ours is big
[secnet] / secnet.8
CommitLineData
3ca86f6d
RK
1.TH secnet 8
2
3.SH NAME
4secnet \- VPN router daemon
5
6.SH SYNOPSIS
7\fBsecnet\fR [\fIOPTIONS\fR]
8
9.SH DESCRIPTION
10\fBsecnet\fR allows virtual private networks to be constructed
11spanning multiple separate sites.
12
13.SH OPTIONS
14.TP
15.B --verbose\fR, \fB-v
16Enable extra diagnostics.
17.TP
18.B --nowarnings\fR, \fB-w
19Suppress warnings.
20.TP
21.B --help
22Display usage message.
23.TP
24.B --version
25Display version string.
26.TP
27.B --nodetach\fR, \fB-n
28Don't go into background.
29The default behaviour is to become a daemon during startup.
30.TP
31.B --silent\fR, \fB--quiet\fR, \fB-f
32Suppress error messages.
33.TP
34.B --debug\fR, \fB-d
35Enable debug messages.
36.TP
37.B --config\fR, \fB-c \fIPATH
38Specify configuration file.
39The default is \fI/etc/secnet/secnet.conf\fR.
40.TP
41.B --just-check-config\fR, \fB-j
42Check configuration and exit.
43.TP
44.B --sites-key\fR, \fB-s \fIKEY
45Configuration file key defining active sites.
46The default is \fBsites\fR.
47
48.SH "CONFIGURATION FILE"
49.SS Overview
50The default configuration file is \fI/etc/secnet/secnet.conf\fR.
51This can be overridden with the \fB--config\fR option.
52.PP
53The configuration file defines a dictionary (a mapping from keys to
54values) of configuration information for secnet.
55It is recursive in nature, i.e. values may themselves include dictionaries.
56Any node in the nested structure thus defined can be identified by a
57\fIpath\fR, which is the sequence of keys necessary to reach it from
58the root, separated by "/" characters.
59See \fBPaths\fR below for how this is used.
60.PP
61Furthermore, when a key is looked up in a dictionary, if it cannot be
62found, it is sought in the parent dictionary, and so on back to the
63root.
64For instance, each \fIsite\fR must contain the \fBresolver\fR key, but
65in a typical configuration there is no value in having different
66resolvers for each site.
67Therefore \fBresolver\fR is defined at the root and thus automatically
68incorporated into all sites.
69.SS Whitespace
70Whitespace, including newlines, is ignored except to the extent that
71it bounds other symbols.
72.PP
73Comment begin with "#" and continues to the end of the line.
74Comments are ignored.
75.SS Inclusion
76A file may be recursively included into the configuration file using a
77line of the form:
78.IP
79\fBinclude \fIPATH
80.PP
81This is handled at a higher level than the main parser and so
82precludes the possibility of using the string \fBinclude\fR for any
83other purpose.
84.\" check if this is true. it's probably a bug!
85.SS Assignments
86The configuration file contains one or more assigments.
87Each assignment is written:
88.IP
89\fIkey\fR [\fB=\fR] \fIlist\fR\fB;\fR
90.PP
91i.e. the equals sign is optional.
92The semicolon is mandatory in all contexts.
93.PP
94Keys start with a letter or "_" and continue with any numbers of
95letters, digits, "_" and "-".
96.PP
97Each \fIkey\fR is a list of one or more \fIvalues\fR, separated by commas.
98Possible values types are \fIboolean\fR, \fIstring\fR, \fInumber\fR,
99\fIdictionary\fR, \fIpath\fR and \fIclosure evaluation\fR.
100.\" This man page draws a distinction between a closure (the thing
101.\" evaluated) and a closure evaluation (the closure plus is
102.\" arguments).
103.SS "Strings"
104Strings are contained within "double quotes".
105There is (currently) no escape syntax and no way to include quotes
106inside strings.
107.PP
108Example:
109.nf
110 filename "/var/log/secnet";
111.fi
112.SS "Numbers"
113Numbers are encoded in decimal and do not include a sign.
114Numbers must lie in the range 0 to 4294967295.
115.PP
116Example:
117.nf
118 mtu 1400;
119.fi
120.SS "Dictionaries"
121.\" In conffile.y dictionaries can be preceded by a search path, but
122.\" this is not implemented elsewhere, so not documented here.
123Dictionaries consist of one or more assignments, in the same syntax as
124given above, enclosed in "{" and "}".
125.PP
126Example:
127.nf
128 system {
129 userid "secnet";
130 pidfile "/var/run/secnet.pid";
131 };
132.fi
133.SS "Paths"
134Paths allow a key already defined in the configuration to be aliased.
135.PP
136Paths consist of a sequence of keys separated by "/".
137If the path starts with a "/" then it is an \fIabsolute path\fR and
138the search starts at the root of the configuration.
139Otherwise it is a \fIrelative path\fR and starts in the containing
140dictionary or in any of its parents, down to and including the root.
141If there is more than one match, the one furthest from the root "wins".
142.PP
143The value of a path is the list assigned to the key it refers to.
144Lists are flattened; for example if a key is defined as a list of two
145paths, and each of those refers to a list of two integers, the
146original key is therefore defined to be a list of four integers, not
147a list consisting of two lists.
148.PP
149It is not possible to refer to a \fIlater\fR key using a path.
150.PP
151Example:
152.nf
153 vpn {
154 test {
155 kakajou vpn-data/test/kakajou/kakajou;
156 araminta vpn-data/test/araminta/araminta;
157 deodand vpn-data/test/deodand/deodand;
158 all-sites kakajou,araminta,deodand;
159 };
160 };
161 all-sites vpn/test/all-sites;
162.fi
163.PP
164Here, each of \fBvpn/test/kakajou\fR, \fBvpn/test/araminta\fR and
165\fBvpn/test/deodand\fR are defined as aliases to values defined
166elsewhere.
167\fBvpn/tests/all-sites\fR is defined as the list of all three of those
168values, and \fBall-sites\fR is then defined to be an alias for that.
169.SS "Booleans"
170The (single-element) paths \fBfalse\fR, \fBno\fR and \fBnowise\fR are
171predefined and refer to a boolean false value.
172Similarly \fBtrue\fR, \fByes\fR and \fBverily\fR point at a boolean
173true value.
174.PP
175In all six cases, variants with just the first letter capitalized, and
176with all letters capitalized, are also provided.
177.PP
178Example:
179.nf
180 random randomfile("/dev/urandom",no);
181.fi
182.SS "Closure Evaluation"
183Closure evaluation uses the following syntax:
184.IP
185\fICLOSURE \fB( \fIARGUMENTS \fB)
186.PP
187\fICLOSURE\fR may be a path referring to a closure, or may itself be a
188closure evaluation.
189.PP
190\fIARGUMENTS\fR is a list of zero or more values, separated by commas.
191As a shortcut, if the arguments consist of a single dictionary, the
192parentheses may be ommitted:
193.IP
194\fICLOSURE \fB{ \fR... \fB}
195.PP
196Example:
197.nf
198 sites map(site, vpn/test/all-sites);
199.fi
200.PP
201When a closure is evaluated it returns a value (a list, much as above)
202and may also have side effects (which may be immediate or may be
203deferred to some later phase of execution).
204A list of built-in closures is given below.
205.SS "Mandatory Keys"
206Two keys are mandatory.
207\fBsystem\fR must be a dictionary in which the following keys can be
208looked up:
209.TP
210.B log
211A \fIlog closure\fR; see the \fBlogfile\fR documentation below.
212The destination for log messages.
213Mandatory.
214.TP
215.B userid
216A string.
217The userid to run as after dropping privilege.
218Optional.
219.TP
220.B pidfile
221A string.
222The path to write a pidfile.
223Optional.
224.PP
225\fBsites\fR should be a list of \fIsite closures\fR; see the \fBsite\fR documentation below.
226This defines the collection of tunnel endpoints that \fBsecnet\fR will
227communicate with.
228.PP
229Recall the recursive lookup logic described in \fBOverview\fR above:
230if (for instance) \fBlog\fR is defined in the top level dictionary but
231not in \fBsystem\fR, it will nevertheless be found when looked up in
232the latter.
233
234.SH CLOSURES
235\fBsecnet\fR contains a collection of built-in closures
236with names (i.e. single-element paths) given below.
237.PP
238Most of them return anonymous closures of various types,
239which are described contextually.
240
241.SS adns
242\fBadns(\fIDICT\fB)\fR => \fIresolver closure\fR
243.TP
244.I DICT
245This either be empty or contain the single key \fBconfig\fR, with a
246string value giving configuration to supply to ADNS.
247This might be read from a file using \fBreadfile\fR.
248.PP
249A \fIresolver closure\fR is a means of converting hostnames into
250network addresses.
251
252.SS diffie-hellman
253.PP
254\fBdiffie-hellman(\fIMODULUS\fB, \fIGENERATOR\fR[\fB, \fICHECK\fR]\fB)\fR => \fIdh closure\fR
255.TP
256.I MODULUS
257String.
258The prime modulus \fIp\fR in hex.
259.TP
260.I GENERATOR
261String.
262The generator \fIg\fR in hex.
263.TP
264.I CHECK
265Boolean.
266If \fBtrue\fR (the default) then check if \fIp\fR is prime.
267.PP
268A \fIdh closure\fR defines a group to be used for key exchange.
269The same group must be used by all sites in the VPN.
270
271.SS logfile
272\fBlogfile(\fIDICT\fB)\fR => \fIlog closure\fR
273.PP
274Valid keys in the \fIDICT\fR argument are:
275.TP
276.B filename
277The path to log to.
278.TP
279.B class
280A list of strings defining which classes of message to log.
281The possible message classes are \fBdebug-config\fR,
282\fBdebug-phase\fR, \fBdebug\fR, \fBinfo\fR, \fBnotice\fR,
283\fBwarning\fR, \fBerror\fR, \fBsecurity\fR and \fBfatal\fR.
284.IP
285\fBall-debug\fR is the union of all the \fBdebug\fR... classes.
286\fBdefault\fR is equivalent to \fBwarning, error, security, fatal\fR.
287\fBverbose\fR is equivalent to \fBinfo, notice, warning, error,
288security, fatal\fR.
289\fBquiet\fR is equivalent to \fBfatal\fR.
290.PP
291A \fIlog closure\fR is a means of saving log messages.
292See also \fBsyslog\fR below.
293
294.SS makelist
295\fBmakelist(\fIDICT\fB)\fR => \fILIST\fR
296.PP
297Returns the (flattened) list of values from the dictionary, discarding
298the keys.
299
300.SS map
301\fBmap(\fICLOSURE\fB, \fIINPUT\fR...\fB)\fR => \fILIST\fR
302.PP
303Applies \fICLOSURE\fR to all its additional input arguments and
304returns the resulting list.
305
306.SS md5
307\fBmd5\fR is a \fIhash closure\fR implementing the MD5 algorithm.
308
309.SS null-netlink
310\fBnull-netlink(\fIDICT\fB)\fR => \fInetlink closure\fR
311.br
312\fBnull-netlink(\fIDICT\fB)\fR => \fIpure closure\fR
313.\" TODO pure closure is what it's called internally but this is a
314.\" very opaque name to use in docs
315.PP
316Valid keys in the \fIDICT\fR argument are:
317.TP
318.B name
319String.
320The name for the netlink device.
321The default is \fBnull-netlink\fR.
322.TP
323.B networks
324List of strings.
325The networks on the host side of the netlink device.
326.TP
327.B remote-networks
328List of strings.
329Networks that may be claimed by remote sites using this netlink device.
330.TP
331.B secnet-address
332String.
333IP address of this netlink.
334Incompatible with \fBptp-address\fR.
335.TP
336.B ptp-address
337String.
338IP address of the other end of a point-to-point link.
339Incompatible with \fBsecnet-address\fR.
340.TP
341.B mtu
342Number.
343The MTU of the netlink device.
344The default is 1000.
345.PP
346If \fBptp-address\fR is used then the result is a \fInetlink closure\fR.
347This can be used directly with the \fBlink\fR key in the \fBsites\fR
348closure (see below).
349.PP
350If \fBsecnet-address\fR is used then the result is a \fIpure
351closure\fR.
352This must be evaluated to yield a \fInetlink closure\fR, using a
353dictionary argument with the following keys:
354.TP
355.B routes
356String list.
357networks reachable via this tunnel, in \fIaddress\fB/\fIbits\fR format.
358.TP
359.B options
360String list.
361A list of options:
362.RS
363.TP
364.B allow-route
365Allow packets received via this tunnel to be routed down other tunnels
366(without this option only packets from the host will be routed).
367.TP
368.B soft
369Remove these routes from the host routing table when the link quality
370is 0.
371.RE
372.TP
373.B mtu
374Number.
375Default MTU over this link.
376The default is inherited from the \fIpure closure\fR.
377.TP
378.B priority
379Number.
380The priority of this link.
381Higher values beat lower values.
382The default is 0.
383
384.\" TODO ptp-address turns up in sites.conf, but why? I think this
385.\" is a bug in make-secnet-sites; it is not used by
386 \" netlink_inst_create.
387
388.PP
389A \fInetlink closure\fR is a virtual IP link, and is supplied to the
390\fBlink\fR key of a \fIsite\fR closure.
391.PP
392The netlink created by \fBnull-netlink\fR has no connection to the
393host.
394See \fBtun\fR and \fBuserv-ipif\fR below for more useful alternatives.
395
396
397
398.SS randomfile
399\fBrandomfile(\fIFILENAME\fR[\fB, \fIBLOCKING\fR]\fB)\fR => \fIrandomsource closure\fR
400.TP
401.I FILENAME
402String.
403Path to random device, e.g. \fI/dev/urandom\fR.
404.TP
405.I BLOCKING
406Boolean.
407\fBTrue\fR if this is a blocking device and \fBfalse\fR otherwise (the default).
408Blocking device support is not implemented so this must always be
409\fBFalse\fR or absent.
410.PP
411A \fIrandomsource closure\fR is a source of random numbers.
412
413.SS readfile
414\fBreadfile(\fIPATH\fB)\fR => \fISTRING\fR
415.PP
416Read the contents of the file \fIPATH\fR (a string) and return it as a string.
417
418.SS serpent256-cbc
419\fBserpent256-cbc(\fIDICT\fB)\fR => \fItransform closure\fR
420.PP
421Valid keys in the \fIDICT\fR argument are:
422.TP
423.B max-sequence-skew
424The maximum acceptable difference between the sequence number in a
425received, decrypted message and the previous one.
426The default is 10.
427It may be necessary to increase this is if connectivity is poor.
428.PP
429A \fItransform closure\fR is a reversible means of transforming
430messages for transmission over a (presumably) insecure network.
431It is responsible for both confidentiality and integrity.
af43f0b7
IJ
432.PP
433Note that this uses a big-endian variant of the Serpent block cipher
434(which is not compatible with most other Serpent implementations).
3ca86f6d
RK
435.SS rsa-private
436\fBrsa-private(\fIPATH\fB\fR[, \fICHECK\fR]\fB)\fR => \fIrsaprivkey closure\fR
437.TP
438.I PATH
439String.
440The path to a file containing an RSA private key in SSH format
441(version 1).
442There must be no passphrase.
443.TP
444.I CHECK
445Boolean.
446If \fBtrue\fR (the default) then check that the key is valid.
447
448.SS rsa-public
449\fBrsa-public(\fIKEY\fB, \fIMODULUS\fB)\fR => \fIrsapubkey closure\fR
450.TP
451.I KEY
452String.
453The public key exponent (\fIe\fR), in decimal.
454.TP
455.I MODULUS
456String.
457The modulus (\fIn\fR), in decimal.
458
459.SS sha1
460\fBsha1\fR is a \fIhash closure\fR implementing the SHA-1 algorithm.
461
462.SS site
463\fBsite(\fIDICT\fB)\fR => \fIsite closure\fR
464.PP
465Valid keys in the \fIDICT\fR argument are:
466.TP
467.B local-name
468String.
469The site's name for itself.
470.TP
471.B name
472String.
473The name of the site's peer.
474.TP
475.B link
476A \fInetlink closure\fR.
477.TP
478.B comm
479A \fIcomm closure\fR.
480.TP
481.B resolver
482A \fIresolver closure\fR.
483.TP
484.B random
485A \fIrandomsource closure\fR.
486.TP
487.B local-key
488An \fIrsaprivkey closure\fR.
489The key used to prove our identity to the peer.
490.TP
491.B address
492String.
493The DNS name of the peer.
494Optional, but if it is missing then it will not be possible to
495initiate new connections to the peer.
496.TP
497.B port
498Number.
499The port to contact the peer.
500.TP
501.B key
502An \fIrsapubkey closure\fR.
503The key used to verify the peer's identity.
504.TP
505.B transform
506A \fItransform closure\fR.
507Used to protect packets exchanged with the peer.
508.TP
509.B dh
510A \fIdh closure\fR.
511The group to use in key exchange.
512.TP
513.B hash
514The hash function used during setup.
515.\" TODO clarify what we actually use it for!
516.TP
517.B key-lifetime
518Number.
519The maximum lifetime of a session key in milliseconds.
520The default is one hour.
521.TP
522.B setup-retries
523Number.
524The maximum number of times a key negotiation packet will be
525transmitted before giving up.
526The default is 5.
527.TP
528.B setup-timeout
529Number.
530The time between retransmissions of key negotiation packets, in milliseconds.
531The default is one second.
532.TP
533.B wait-time
534Number.
535The time to wait after a failed key setup before making another
536attempt, in milliseconds.
537The default is 20s.
538.TP
539.B renegotiate-time
540Number.
541The time after which a new session key will be negotiated, \fIif\fR
542there is traffic on the link, in milliseconds.
543It must not be greater than the \fBkey-lifetime\fR.
544The default 5 minutes less than the key lifetime, unless the lifetime
545is less than 10 minutes in which case the default is half the
546lifetime.
547.TP
548.B keepalive
549Boolean.
550If \fBtrue\fR then attempt to always maintain a live session key.
551Not implemented.
552.TP
553.B log-events
554String list.
555Types of event to log for this site.
556.RS
557.TP
558.B unexpected
559Unexpected key setup packets (including late retransmissions).
560.TP
561.B setup-init
562Start of attempt to setup a session key.
563.TP
564.B setup-timeout
565Failure of attempt to setup a session key, through timeout.
566.TP
567.B activate-key
568Activation of a new session key.
569.TP
570.B timeout-key
571Deletion of current session key through age.
572.TP
573.B security
574Anything potentially suspicious.
575.TP
576.B state-change
577Steps in the key setup protocol.
578.TP
579.B packet-drop
580Whenever we throw away an outgoing packet.
581.TP
582.B dump-packets
583Every key setup packet we see.
584.TP
585.B errors
586Failure of name resolution, internal errors.
587.TP
588.B all
589Everything (too much!)
590.RE
591.PP
592A \fIsite closure\fR defines one site to communicate with.
593\fBsecnet\fR expects the (root) key \fBsite\fR to be a list of site
594closures.
595
596.SS sysbuffer
597\fBsysbuffer(\fR[\fISIZE\fR[\fB, \fIOPTIONS\fR]]\fB)\fR => \fIbuffer closure\fR
598.TP
599.I SIZE
600Number.
601The size of the buffer in bytes.
602This must be between 64 and 131072.
603The default is 4096.
604.TP
605.I OPTIONS
606Dictionary.
607Optional and presently unused.
608.\" lockdown is accepted but ignored.
609.PP
610A \fIbuffer closure\fR is a means of buffering packets to send or that
611have been received.
612
613.SS syslog
614\fBsyslog(\fIDICT\fB)\fR => \fIlog closure\fR
615.PP
616Valid keys in the \fIDICT\fR argument are:
617.TP
618.B ident
619String.
620The ident string to pass to \fBopenlog\fR(3); this value will appear
621in each message.
622.TP
623.B facility
624String.
625The facility to log as.
626The possible values are \fBauthpriv\fR, \fBcron\fR, \fBdaemon\fR,
627\fBkern\fR, \fBlocal0\fR-\fB7\fR, \fBlpr\fR, \fBmail\fR, \fBnews\fR,
628\fBsyslog\fR, \fBuser\fR and \fBuucp\fR.
629.PP
630See also \fBlogfile\fR above.
631
632.SS tun
633\fBtun(\fIDICT\fB)\fR => \fInetlink closure\fR
634.br
635\fBtun(\fIDICT\fB)\fR => \fIpure closure\fR
636.PP
637Valid keys in the \fIDICT\fR argument are those documented for
638\fBnull-netlink\fR above, plus:
639.TP
640.B flavour
641String.
642The type of TUN interface to use.
643Possible values are \fBlinux\fR, \fBbsd\fR, \fBstreams\fR and \fBguess\fR.
644The default is \fBguess\fR.
645.TP
646.B device
647String.
648The path to the TUN/TAP device file.
649The default is \fI/dev/net/tun\fR for the \fBlinux\fR flavour and
650\fI/dev/tun\fR for the others.
651.TP
652.B interface
653String.
654The interface to use.
655The default is to pick one automatically.
656This cannot be used with the \fBstreams\fR flavour.
657.TP
658.B local-address
659String.
660IP address of the host's tunnel interface.
661.\" README says this belongs to netlink-null but actually it's
662 \" duplicated between slip & tun
663.TP
664.B ifconfig-path
665String.
666The name of the \fBifconfig\fR command.
667The default is simply "ifconfig".
668.TP
669.B route-path
670String.
671The name of the \fBroute\fR command.
672The default is simply "route".
673.TP
674.B ifconfig-type
675String.
676The syntax expected by the \fBifconfig\fR command.
677Possible values are \fBlinux\fR, \fBbsd\fR, \fBioctl\fR,
678\fBsolaris-2.5\fR and \fBguess\fR.
679The default is \fBguess\fR.
680.TP
681.B route-type
682String.
683The syntax expected by the \fBifconfig\fR command.
684Possible values are \fBlinux\fR, \fBbsd\fR, \fBioctl\fR,
685\fBsolaris-2.5\fR and \fBguess\fR.
686The default is \fBguess\fR.
687.TP
688.B buffer
689A \fIbuffer closure\fR to use for packets transferred from the host to secnet.
690The buffer size must be at least 60 greater than the MTU.
691.\" TODO rumour has is that buffers are sometimes shareable between
692.\" netlink devices - document that if the conditions are reasonable
693.\" ones.
694.PP
695The \fBifconfig-type\fR and \fBroute-type\fR values determine how
696those commands are executed.
697If they are set to \fBioctl\fR then low-level system calls are used
698directly instead of invoking the commands.
699.PP
700The netlink created by \fBtun\fR uses the \fBtun\fR device to
701communicate with the host kernel.
702
703.SS udp
704\fBudp(\fIDICT\fB)\fR => \fIcomm closure\fR
705.PP
706Valid keys in the \fIDICT\fR argument are:
707.TP
708.B address
709String.
710The IP address to bind on.
711The default is 0.0.0.0, i.e. "any".
712.TP
713.B port
714Number.
715The port number to bind to.
716The default is 0, i.e. the OS will choose one.
717It is suggested that any given VPN agree a common port number.
718.TP
719.B buffer
720A \fIbuffer closure\fR.
721See the \fBsysbuffer\fR closure above.
722.TP
723.B authbind
724String.
725The path to a helper program to bind the socket.
726Optional.
727.IP
728The program will be invoked with the address and port number as its
729arguments, and with the socket to bind as file descriptor 0.
730It should either bind the socket as requested, or exit with nonzero
731status.
732.PP
733A \fIcomm closure\fR is a means of sending and receiving messages via
734a network.
735It does not provide confidentiality, reliablity or availability.
736
737.SS userv-ipif
738\fBuserv-ipif(\fIDICT\fB)\fR => \fInetlink closure\fR
739.br
740\fBuserv-ipif(\fIDICT\fB)\fR => \fIpure closure\fR
741.PP
742Valid keys in the \fIDICT\fR argument are those documented for
743\fBnull-netlink\fR above, plus:
744.TP
745.B local-address
746String.
747IP address of the host's SLIP interface.
748.\" README says this belongs to netlink-null but actually it's
749 \" duplicated between SLIP & tun
750.TP
751.B userv-path
752String.
753Where to find \fBuserv\fR(1).
754The default is \fB"userv"\fR.
755.TP
756.B service-user
757String.
758The name of the user that owns the service.
759The default is \fB"root"\fR.
760.TP
761.B service-name
762String.
763The name of the service to request.
764The default is \fB"ipif"\fR.
765.TP
766.B buffer
767A \fIbuffer closure\fR to use for packets transferred from the host to secnet.
768.PP
769The netlink created by \fBuserv-ipif\fR invokes the specified \fBuserv\fR service with pipes connected to its standard input and output.
770It uses SLIP to communicate with the host kernel via these pipes.
771
772.SH FILES
773.TP
774.I /etc/secnet/secnet.conf
775Configuration file.
776
777.SH "SEE ALSO"
778\fBuserv\fR(1)