throbber
mcg.h
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 225
`
`

`
`* The author of this software is Matt Blaze.
`
`*
`
`Copyright
`
`(c) 1994 by AT&T.
`
`* Permission to use, Copy, and modify this software without fee
`
`* is hereby granted, provided that this entire notice is included in
`
`* all copies of any software which is or includes a copy or
`
`* modification of this software and in all copies of the supporting
`* documentation for such software.
`
`* This software is subject to United States export controls.
`
`* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
`
`IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
`* WARRANTY.
`* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
`
`* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
`
`/* MacGuffin Constants */
`
`#define SIZE (l<<l6)
`
`extern unsigned short stable[SIZE];
`
`extern unsigned short lookupmasks[4][3];
`
`extern unsigned short outputmasks[4];
`
`/*
`
`*
`*/
`
`input and output
`
`lookup masks
`
`/* Sl+S2 */
`#define LOOKOO
`
`OXOO36
`
`#define LOOKOl
`
`OxO6cO
`
`#define LOOKO2 OX6900
`
`#define OUTO
`
`OXOOOf
`
`/* s3+s4 */
`#define LOOKlO OX5048
`
`#define LOOKll OX2lO6
`
`#define LOOKl2 OX84ll
`
`#define OUTl
`
`OXOOfO
`
`/* s5+s7 */
`#define LOOK2O OX860l
`
`#define LOOK2l OX4828
`
`#define LOOK22
`
`OXIOC4
`
`#define OUT2
`
`Ox33OO
`
`/* s6+s8 */
`#define LOOK3O
`
`OX298O
`
`#define LOOK3l Ox90ll
`
`#define LOOK32 OxO22a
`
`#define OUT3
`
`OxccOO
`
`#define ROUNDS 32
`
`#define KSIZE (ROUNDS*3)
`
`"YP“'def Struct “‘C9—keY {
`unsigned short val[KSIZE];
`EXNbflD
`
`Petitioner Oracle-Apple-Exhibit1010-Page 226
`
`

`
`} mcg_key ;
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 227
`
`

`
`mcgsbox.c
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 228
`
`

`
`* The author of this software is Matt Blaze.
`
`*
`
`Copyright
`
`(c) 1992, 1993, 1994 by AT&T.
`
`* Permission to use, Copy, and modify this software without fee
`
`* is hereby granted, provided that this entire notice is included in
`
`* all copies of any software which is or includes a copy or
`
`* modification of this software and in all copies of the supporting
`* documentation for such software.
`
`* This software is subject to United States export controls.
`
`* THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
`
`IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
`* WARRANTY.
`* REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
`
`* OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
`
`* MacGuffin optimized table initialization and key setup
`
`* 10/3/94 matt blaze
`*
`
`/
`
`#include "mcg.h"
`
`*
`
`the 8 s—boxes, expanded to put the output bits in the right
`
`* places.
`
`note that these are the des s—boxes
`
`(in left—right,
`
`* not cannonical, order), but with only the "outer" two output
`* bits.
`
`*/
`
`unsigned short sboxes[8][64]
`/* 0
`(S1) */
`
`= {
`
`{OXOOO2, OXOOOO, OXOOOO, OXOOO3, OXOOO3, OXOOOl, OXOOOl, OXOOOO,
`OXOOOO, OXOOO2, OXOOO3, OXOOOO, OXOOO3, OXOOO3, OXOOO2, OXOOOl,
`
`OXOOOl, OXOOO2, OXOOO2, OXOOOO, OXOOOO, OXOOO2, OXOOO2, OXOOO3,
`
`OXOOOl, OXOOO3, OXOOO3, OXOOOl, OXOOOO, OXOOOl, OXOOOl, OXOOO2,
`
`OXOOOO, OXOOO3, OXOOOl, OXOOO2, OXOOO2, OXOOO2, OXOOO2, OXOOOO,
`
`OXOOO3, OXOOOO, OXOOOO, OXOOO3, OXOOOO, OXOOOl, OXOOO3, OXOOOl,
`
`OXOOO3, OXOOOl, OXOOO2, OXOOO3, OXOOO3, OXOOOl, OXOOOl, OXOOO2,
`
`OXOOOl, OXOOO2, OXOOO2, OXOOOO, OXOOOl, OXOOOO, OXOOOO, OXOOO3},
`(s2) */
`
`/* 1
`
`{OXOOOC, OXOOO4, OXOOO4, OXOOOC, OXOOO8, OXOOOO, OXOOO8, OXOOO4,
`OXOOOO, OXOOOC, OXOOOC, OXOOOO, OXOOO4, OXOOO8, OXOOOO, OXOOO8,
`
`OXOOOC, OXOOO8, OXOOO4, OXOOOO, OXOOOO, OXOOO4, OXOOOC, OXOOO8,
`
`OXOOO8, OXOOOO, OXOOOO, OXOOOC, OXOOO4, OXOOOC, OXOOO8, OXOOO4,
`
`OXOOOO, OXOOOC, OXOOO8, OXOOO8, OXOOO4, OXOOO8, OXOOOC, OXOOO4,
`
`OXOOO8, OXOOO4, OXOOOO, OXOOOC, OXOOOC, OXOOOO, OXOOO4, OXOOOO,
`
`OXOOO4, OXOOOC, OXOOO8, OXOOOO, OXOOO8, OXOOO4, OXOOOO, OXOOO8,
`
`OXOOOC, OXOOOO, OXOOO4, OXOOO4, OXOOOO, OXOOO8, OXOOOC, OXOOOC},
`(s3) */
`
`/* 2
`
`{OxOO20, OxOO30, OXOOOO, OXOOlO, OXOO30, OXOOOO, OXOO20, OXOO30,
`OXOOOO, OxOOlO, OXOOlO, OXOOOO, OXOO30, OXOOOO, OxOOlO, OXOO20,
`
`oxooio, oxoooo, oxoo3o, oxoo2o. oxoo2o. Qxooio. 0xoo%%fifi8§aa5gfim%A
`OXOO30, OXOO20, OXOOOO, OXOO30, OXOOOO, OXOO30, OxOO20, OXOOlO,
`EXNDHD
`
`pple - Exhibit 1010 - Page 229
`
`

`
`oxoo3o. QxOOlO. oxoooo. oxoozo. oxoooo, oxoo3o, oxoo3o, oxoooo.
`
`oxoo2o. oxoooo, oxoo3o, oxoo3o. Qxooio. oxoozo. oxoooo. oxooio.
`
`oxoo3o, oxoooo. QxOOlO. oxoo3o, oxoooo. oxoozo. oxoozo. 9xOOlO.
`
`oxooio. oxoo3o. oxoozo. 9xOOlO. oxoozo. oxoooo. QxOOlO. oxoozo}.
`(S4) */
`
`/* 3
`
`{oxoo4o, oxooco, oxooco, OxOO80. OxOO80. oxooco. oxoo4o. oxoo4o.
`oxoooo, oxoooo, oxoooo, oxooco, oxooco, oxoooo, OxOO80. oxoo4o.
`
`oxoo4o. oxoooo, oxoooo. oxoo4o. OxOO80. oxoooo. oxoo4o. OxOO80.
`
`oxooco. oxoo4o. OxOO80. OxOO80. oxoooo, OxOO80. oxooco, oxooco.
`
`OxOO80. oxoo4o. oxoooo, oxooco, oxooco, oxoooo, oxoooo, oxoooo.
`
`OxOO80. OxOO80. oxooco. oxoo4o. oxoo4o. oxooco, oxooco, OxOO80.
`
`oxooco, oxooco. oxoo4o. oxoooo. oxoo4o. oxoo4o. OxOO80. oxooco.
`
`oxoo4o. OxOO80. oxoooo. oxoo4o. OxOO80. oxoooo, oxoooo, oxooso}.
`(s5) */
`
`/* 4
`
`{oxoooo, oxo2oo. oxo2oo. oxo3oo, oxoooo, oxoooo. oxoioo. oxo2oo.
`oxoioo, oxoooo. oxo2oo. oxoioo. oxo3oo, oxo3oo, oxoooo. oxoioo.
`
`oxo2oo. oxoioo. oxoioo. oxoooo. oxoioo. oxo3oo, oxo3oo. oxo2oo.
`
`oxo3oo. oxoioo. oxoooo, oxo3oo. oxo2oo. oxo2oo. oxo3oo, oxoooo.
`
`oxoooo, oxo3oo, oxoooo. oxo2oo. oxoioo. oxo2oo. oxo3oo. oxoioo.
`
`oxo2oo. oxoioo. oxo3oo. oxo2oo. oxoioo. oxoooo. oxo2oo. oxo3oo.
`
`oxo3oo, oxoooo, oxo3oo, oxo3oo. oxo2oo. oxoooo. oxoioo. oxo3oo.
`
`oxoooo. oxo2oo. oxoioo. oxoooo, oxoooo. oxoioo. oxo2oo. oxoioo}.
`(S6) */
`
`/* 5
`
`{oxo8oo, oxosoo. oxo4oo. oxocoo, oxosoo, oxoooo, oxocoo, oxoooo.
`oxocoo. oxo4oo. oxoooo, oxosoo, oxoooo, oxocoo, oxosoo. oxo4oo.
`
`oxoooo, oxoooo, oxocoo. oxo4oo. oxo4oo. oxocoo, oxoooo, oxosoo.
`
`oxosoo, oxoooo. oxo4oo. oxocoo. oxo4oo. oxo4oo. oxocoo, oxosoo.
`
`oxocoo, oxoooo, oxosoo. oxo4oo. oxocoo, oxoooo. oxo4oo. oxosoo.
`
`oxoooo, oxocoo, oxosoo. oxo4oo. oxosoo, oxocoo. oxo4oo. oxosoo.
`
`oxo4oo, oxocoo, oxoooo, oxosoo, oxoooo. oxo4oo. oxosoo. oxo4oo.
`
`oxo4oo, oxoooo, oxocoo, oxoooo, oxocoo, oxosoo, oxoooo, oxocoo}.
`(S7) */
`
`/* 6
`
`{oxoooo, ox3ooo, ox3ooo, oxoooo, oxoooo, ox3ooo, oxzooo, oxiooo.
`ox3ooo, oxoooo, oxoooo, ox3ooo, oxzooo, oxiooo, ox3ooo, oxzooo.
`
`oxiooo, oxzooo, oxzooo, oxiooo, ox3ooo, oxiooo, oxiooo, oxzooo.
`
`oxiooo, oxoooo, oxzooo, ox3ooo, oxoooo, oxzooo, oxiooo, oxoooo.
`
`oxiooo, oxoooo, oxoooo, ox3ooo, ox3ooo, ox3ooo, ox3ooo, oxzooo.
`
`oxzooo, oxiooo, oxiooo, oxoooo, oxiooo, oxzooo, oxzooo, oxiooo.
`
`oxzooo, ox3ooo, ox3ooo, oxiooo, oxoooo, oxoooo, oxzooo, ox3ooo.
`
`oxoooo, oxzooo, oxiooo, oxoooo, ox3ooo, oxiooo, oxoooo, oxzooo}.
`(S8) */
`
`/* 7
`
`{oxcooo, ox4ooo, oxoooo, oxcooo, oxsooo, oxcooo, oxoooo, oxsooo.
`oxoooo, oxsooo, oxcooo, ox4ooo, oxcooo, ox4ooo, ox4ooo, oxoooo.
`
`oxsooo, oxsooo, oxcooo, ox4ooo, ox4ooo, oxoooo, oxsooo, oxcooo.
`
`ox4ooo, oxoooo, oxoooo, oxsooo, oxsooo, oxcooo, ox4ooo, oxoooo.
`
`ox4ooo, oxoooo, oxcooo, ox4ooo, oxoooo, oxsooo, ox4ooo, ox4ooo.
`
`oxcooo, oxoooo, oxsooo, oxsooo, oxsooo, oxsooo, oxoooo, oxcooo.
`
`oxoooo, oxcooo, oxoooo, oxsooo, oxsooo, oxcooo, oxcooo, oxoooo.
`
`oxcooo, ox4ooo, ox4ooo, ox4ooo, ox4ooo, oxoooo, oxsooo, oxcooo}};
`
`* table s—box outputs, expanded for 16 bit input
`
`* this one table includes all 8 sboxes — just mask off
`
`*
`
`the output bits not in use
`
`* /
`unsigned short stable[SIZE];
`EXNDHD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 230
`
`

`
`* we can exploit two features of the s—box input and output
`
`* permutations — first, each s—box uses as input two different bits
`
`*
`
`from each of the three registers in the right side, and, second,
`
`* for each s—box there is another—sbox with no common input bits
`
`* between them.
`
`therefore we can lookup two s—box outputs in one
`
`* probe of the table.
`
`just mask off the approprate input bits
`
`*
`
`in the table below for each of the three registers and or
`
`* together for the table lookup index.
`
`* These are also available in #defines, for better lookup
`
`* speed in unrolled loops.
`*/
`
`unsigned short lookupmasks[4][3]
`/* a
`.
`b
`.
`c
`*/
`
`= {
`
`{OxOO36, OxO6cO, Ox6900},
`
`/* sl+s2 */
`
`{Ox5048, Ox2lO6, Ox84ll},
`
`/* s3+s4 */
`
`{Ox860l, Ox4828, OxlOc4},
`
`/* s5+s7 */
`
`{Ox2980, Ox90ll, OxO22a}};
`
`/* s6+s8 */
`
`/*
`
`* this table contains the corresponding output masks for the table
`
`*
`
`lookup procedure mentioned above.
`
`* similarly available in #defines.
`*/
`
`unsigned short outputmasks[4]
`OxOOOf,
`/* sl+s2 */
`
`= {
`
`OxOOfO,
`
`/* s3+s4 */
`
`Ox3300,
`
`/* s5+s7 */
`
`OxccOO};
`
`/* s6+s8 */
`
`/*
`
`* initialize the macguffin s—box tables.
`
`* this takes a while, but is only done once.
`*/
`
`mcg_init()
`
`{
`
`unsigned int i,j,k;
`int b;
`
`/*
`
`*
`
`input permutation for the 8 s—boxes.
`
`* each row entry is a bit position from
`
`* one of the three right hand registers,
`* as follows:
`
`a,a,b,b,c,c
`
`*
`
`*/
`
`static int sbits[8][6] = {
`
`{2.5.s,9,11.13}.
`
`{l,4,7,lO,8,l4},
`
`{3.s,s,13.o.15}.
`
`{12,14,1,2,4,10},
`
`{o,1o.3,14,6,12},
`ExmbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 231
`
`

`
`{7,8,l2,l5,l,5},
`
`{9,15,5,11,2,7},
`
`{11,13,o,4,3,9}};
`
`/* fill the table */
`if ((stab1e[O]==Oxc86e) && (stab1e[Oxffff]==Oxedaf))
`return 0;
`
`i<SIZE;
`for (i=0;
`stab1e[i]=O;
`
`i++)
`
`{
`
`for (j=O;
`
`j<8;
`
`j++)
`
`|=
`stab1e[i]
`sboxes[j][((i>>sbits[j][O])&l)
`
`|(((i>>sbits[j][l])&l)<<l)
`
`|(((i>>sbits[j][2])&l)<<2)
`
`|(((i>>sbitS[j][3])&l)<<3)
`
`|(((i>>sbits[j][4])&l)<<4)
`
`|(((i>>sbitS[j][5])&l)<<5)];
`
`}r
`
`eturn 1;
`
`#ifdef SOLARISZX
`
`#define bcopy(s,d,1) memcpy(d,s,1)
`#endif
`
`mcg_keyset(key,ek)
`unsigned char *key;
`
`mcg_key *ek;
`
`int i,j;
`
`unsigned char k[2][8];
`
`mcg_init();
`bcopy(&key[O].k[O].8);
`
`bcopy(&key[8].k[l].8);
`for (i=0;
`i<KSIZE;
`i++)
`
`ek—>Va1[i]=O;
`
`for (i=0;
`
`i<2;
`
`i++)
`
`{
`j++)
`j<32;
`for (j=O;
`mcg_b1ock_encrypt(k[i],ek);
`
`ek->va1[j*3]
`
`“= k[i][O]
`
`|
`
`(k[i][1]<<8);
`
`ek->va1[j*3+1]
`
`‘= k[i][2]
`
`ek->va1[j*3+2]
`
`‘= k[i][4]
`
`|
`
`|
`
`(k[i][3]<<8);
`
`(k[i][5]<<8);
`
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 232
`
`

`
`m0unt.x
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 233
`
`

`
`/* @(#)mount.x
`
`1.2 87/11/12 3.9 RPCSRC */
`
`/* @(#)mount.x 1.2 87/09/18 Copyr 1987 Sun Micro */
`
`* Sun RPC is a product of Sun Microsystems,
`
`Inc. and is provided for
`
`* unrestricted use provided that this legend is included on all tape
`
`* media and as a part of the software program in whole or part. Users
`
`* may copy or modify Sun RPC without charge, but are not authorized
`
`*
`
`to license or distribute it to anyone else except as part of a product or
`
`* program developed by the user.
`
`* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
`
`* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
`
`* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
`
`* Sun RPC is provided with no support and without any obligation on the
`
`Inc.
`* part of Sun Microsystems,
`* modification or enhancement.
`
`to assist in its use, correction,
`
`* SUN MICROSYSTEMS,
`
`INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
`
`INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
`*
`* OR ANY PART THEREOF.
`
`* In no event will Sun Microsystems,
`
`Inc. be liable for any lost revenue
`
`* or profits or other special,
`
`indirect and consequential damages, even if
`
`* Sun has been advised of the possibility of such damages.
`
`* Sun Microsystems,
`* 2550 Garcia Avenue
`
`Inc.
`
`* Mountain View, California
`
`94043
`
`*/
`
`/*
`
`* Protocol description for the mount program
`*/
`
`const MNTPATHLEN = 1024;
`
`/* maximum bytes in a pathname argument */
`
`const MNTNAMLEN = 255;
`
`/* maximum bytes in a name argument */
`
`const FHSIZE = 32;
`
`/* size in bytes of a file handle */
`
`/*
`
`* The fhandle is the file handle that the server passes to the client.
`
`* All file operations are done using the file handles to refer to a file
`
`* or a directory. The file handle can contain whatever information the
`
`* server needs to distinguish an individual file.
`*/
`
`struct fhandle {
`opaque data[FHSIZE];
`
`* If a status of zero is returned,
`
`the call completed successfully, and
`
`* a file handle for the directory follows. A non—zero status indicates
`
`* some sort of error. The status corresponds with UNIX eE%fifiO&§mBE£fi}Appb__Exmbfl1010__Page234
`
`EXNbflD
`
`

`
`union fhstatus switch (unsigned fhs_status)
`case 0:
`
`{
`
`struct fhandle fhs_fhandle;
`default:
`
`void;
`
`},-
`
`/9:
`
`* The type dirpath is the pathname of a directory
`*/
`
`typedef string dirpath<MNTPATHLEN>;
`
`/*
`
`* The type name is used for arbitrary names
`*/
`
`(hostnames, groupnames)
`
`typedef string name<MNTNAMLEN>;
`
`/*
`* A list of who has what mounted
`*
`
`/
`
`{
`struct mountlist
`name ml_hostname;
`
`dirpath ml_directory;
`
`mountlist *ml_next;
`
`};
`
`/*
`
`* A list of netgroups
`*/
`
`typedef struct groupnode *groups;
`
`struct groupnode {
`name gr_name;
`
`groups *gr_next;
`
`};
`
`/*
`
`* A list of what is exported and to whom
`*
`/
`
`struct exports {
`dirpath ex_dir;
`groups ex_groups;
`
`exports *ex_next;
`
`};
`
`program MOUNTPROG {
`/*
`
`* Version one of the mount protocol communicates with version two
`
`* of the NFS protocol. The only connecting point is the fhandle
`
`* structure, which is the same for both protocols.
`*/
`
`version MOUNTVERS {
`/*
`* Does no work. It is made available in all RPC services
`
`*
`
`to allow server reponse testing and timing
`
`*/
`void
`
`EXNDHD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 235
`
`

`
`MOUNTPROC_NULL(VOid)
`
`= O;
`
`then fhs_fhandle contains the
`* If fhs_status is 0,
`* file handle for the directory. This file handle may
`
`* be used in the NFS protocol. This procedure also adds
`
`* a new entry to the mount list for this client mounting
`
`*
`
`the directory.
`
`* Unix authentication required.
`*/
`fhstatus
`
`MOUNTPROC_MNT(dirpath)
`
`= 1;
`
`/*
`
`* Returns the list of remotely mounted filesystems. The
`
`* mountlist contains one entry for each hostname and
`
`* directory pair.
`*/
`mountlist
`
`MOUNTPROC_DUMP(void)
`
`= 2;
`
`/*
`
`* Removes the mount list entry for the directory
`
`* Unix authentication required.
`*/
`void
`
`MOUNTPROC_UMNT(dirpath)
`
`= 3;
`
`/*
`* Removes all of the mount list entries for this client
`
`* Unix authentication required.
`*/
`void
`
`MOUNTPROC_UMNTALL(VOid)
`
`= 4;
`
`/9:
`
`* Returns a list of all the exported filesystems, and which
`
`* machines are allowed to import it.
`*/
`
`exports
`
`MOUNTPROC_EXPORT(VOid)
`
`= 5;
`
`/9:
`
`* Identical to MOUNTPROC_EXPORT above
`*/
`
`exports
`
`MOUNTPROC_EXPORTALL(Void)
`
`= 6;
`
`} = 1:
`
`} = 100005;
`
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 236
`
`

`
`nfsproto.x
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 237
`
`

`
`/* @(#)nfs_prot.x
`
`1.2 87/11/12 3.9 RPCSRC */
`
`* Sun RPC is a product of Sun Microsystems,
`
`Inc. and is provided for
`
`* unrestricted use provided that this legend is included on all tape
`
`* media and as a part of the software program in whole or part. Users
`
`* may copy or modify Sun RPC without charge, but are not authorized
`
`to license or distribute it to anyone else except as part of a product or
`*
`* program developed by the user.
`
`* SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
`
`* WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
`
`* PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
`
`* Sun RPC is provided with no support and without any obligation on the
`
`Inc.
`* part of Sun Microsystems,
`* modification or enhancement.
`
`to assist in its use, correction,
`
`* SUN MICROSYSTEMS,
`
`INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
`
`INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
`*
`* OR ANY PART THEREOF.
`
`* In no event will Sun Microsystems,
`
`Inc. be liable for any lost revenue
`
`* or profits or other special,
`
`indirect and consequential damages, even if
`
`* Sun has been advised of the possibility of such damages.
`
`* Sun Microsystems,
`* 2550 Garcia Avenue
`
`Inc.
`
`* Mountain View, California
`
`94043
`
`* nfs_prot.x 1.2 87/10/12
`* Copyright 1987 Sun Microsystems,
`*/
`
`Inc.
`
`const NFS_PORT
`
`const NFS_MAXDATA
`
`const NFS_MAXPATHLEN
`
`= 2049;
`
`= 8192;
`
`= 1024;
`
`const NFS_MAXNAMLEN = 255;
`
`const NFS_FHSIZE
`
`= 32;
`
`const NFS_COOKIESIZE
`
`= 4;
`
`const NFS_FIFO_DEV = -1;
`
`/* size kludge for named pipes */
`
`/*
`
`* File types
`*/
`
`const NFSMODE_FMT
`
`= 0170000;
`
`/* type Of file */
`
`const NFSMODE_DIR
`
`= 0040000;
`
`/* directory */
`
`const NFSMODE_CHR
`
`= 0020000;
`
`/* character special */
`
`const NFSMODE_BLK = 0060000;
`
`/* block special */
`
`const NFSMODE_REG = 0100000;
`
`/* regular */
`
`const NFSMODE_LNK = 0120000;
`
`/* symbolic link */
`
`const NFSMODE_SOCK = 0140000;
`
`/* socket */
`
`const NFSMODE_FIFO = 0010000;
`
`/* fifo */
`
`/*
`
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 238
`
`

`
`* Error status
`
`*/
`
`enum nfsstat {
`NFS_OK= 0,
`
`/* no error */
`
`NFSERR_PERM=l,
`
`NFSERR_NOENT=2,
`NFSERR_IO=5,
`
`NFSERR_NXIO=6,
`
`NFSERR_ACCES=l3,
`
`NFSERR_EXIST=l7,
`
`NFSERR_NODEV=l9,
`
`/*
`
`/*
`
`Not owner */
`
`No such file or directory */
`I/O error */
`
`No such device or address */
`
`Permission denied */
`
`File exists */
`
`No such device */
`
`NFSERR_NOTDIR=20,
`
`Not a directory*/
`
`NFSERR_ISDIR=2l,
`
`Is a directory */
`
`NFSERR_FBIG=27,
`
`File too large */
`
`NFSERR_NOSPC=28,
`
`No space left on device */
`
`NFSERR_ROFS=30,
`
`Read—only file system */
`
`NFSERR_NAMETOOLONG=63,
`
`/* File name too long */
`
`NFSERR_NOTEMPTY=66,
`
`Directory not empty */
`
`NFSERR_DQUOT=69,
`
`NFSERR_STALE=70,
`
`NFSERR_WFLUSH=99
`
`Disc quota exceeded */
`Stale NFS file handle */
`
`write cache flushed */
`
`/*
`
`/*
`
`};
`
`/*
`
`* File types
`*/
`
`enum ftype {
`NFNON = O,
`
`/* non-file */
`
`NFREG = l,
`
`/* regular file */
`
`NFDIR = 2,
`
`/* directory */
`
`NFBLK = 3,
`NFCHR = 4,
`
`/* block special */
`/*
`
`character special */
`
`NFLNK = 5,
`NFSOCK = 6,
`
`/* symbolic link */
`unix domain sockets */
`/*
`
`NFBAD = 7,
`
`/* unused */
`
`NFFIFO = 8
`
`/* named pipe */
`
`};
`
`/*
`* File access handle
`
`*/
`
`struct nfs_fh {
`opaque data[NFS_FHSIZE];
`
`};
`
`/*
`* Timeval
`
`*/
`
`struct nfstime {
`unsigned seconds;
`
`unsigned useconds;
`
`};
`
`/*
`* File attributes
`
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 239
`
`

`
`*/
`
`struct fattr {
`ftype type;
`
`/* file type */
`
`unsigned mode;
`
`/* protection mode bits */
`
`unsigned nlink;
`
`/* # hard links */
`
`unsigned uid;
`
`unsigned gid;
`
`/* owner user id */
`
`/* owner group id */
`
`unsigned size;
`
`/* file size in bytes */
`
`unsigned blocksize;
`
`/* prefered block size */
`
`unsigned rdev;
`
`/* special device # */
`
`unsigned blocks;
`
`/* Kb of disk used by file */
`
`unsigned fsid;
`
`/* device # */
`
`unsigned fileid;
`nfstime atime;
`
`/* inode # */
`/* time of last access */
`
`nfstime mtime;
`
`/* time of last modification */
`
`nfstime ctime;
`
`/* time of last change */
`
`};
`
`/*
`* File attributes which can be set
`
`*/
`
`struct sattr {
`unsigned mode;
`
`/* protection mode bits */
`
`unsigned uid;
`
`/* owner user id */
`
`unsigned gid;
`
`/* owner group id */
`
`unsigned size;
`nfstime atime;
`
`/* file size in bytes */
`/* time of last access */
`
`nfstime mtime;
`
`/* time of last modification */
`
`typedef string filename<NFS_MAXNAMLEN>;
`
`typedef string nfspath<NFS_MAXPATHLEN>;
`
`/*
`
`* Reply status with file attributes
`*/
`
`union attrstat switch (nfsstat status)
`case NFS_OK:
`fattr attributes;
`default:
`
`{
`
`void;
`
`};
`
`struct sattrargs {
`nfs_fh file;
`sattr attributes;
`
`};
`
`/*
`
`* Arguments for directory operations
`*/
`
`struct diropargs {
`nfs_fh dir;
`
`/* directory file handle */
`
`filename name’
`
`/* name (“P t0 NFS—MAXNA“LEN bYte1%)etifi<§ner Oracle-Apple-Exhibit1010-Page 240
`
`};
`
`EXNbflD
`
`

`
`struct diropokres {
`nfs_fh file;
`fattr attributes;
`
`};
`
`/*
`
`* Results from directory operation
`*/
`
`union diropres switch (nfsstat status)
`case NFS_OK:
`diropokres diropres;
`default:
`
`{
`
`void;
`
`};
`
`union readlinkres switch (nfsstat status)
`case NFS_OK:
`nfspath data;
`default:
`
`{
`
`void;
`
`};
`
`/*
`
`* Arguments to remote read
`*/
`
`struct readargs {
`nfs_fh file;
`unsigned offset;
`
`/* handle for file */
`/* byte offset in file */
`
`unsigned count;
`
`/* immediate read count */
`
`unsigned totalcount;
`
`/* total read count
`
`(from this offset)*/
`
`};
`
`/*
`
`* Status OK portion of remote read reply
`*/
`
`struct readokres {
`fattr
`attributes;
`
`/* attributes, need for pagin*/
`
`opaque data<NFS_MAXDATA>;
`
`};
`
`union readres switch (nfsstat status)
`case NFS_OK:
`readokres reply;
`default:
`
`{
`
`void;
`
`};
`
`/*
`
`* Arguments to remote write
`*/
`
`struct writeargs {
`/* handle for file */
`nfs_fh file;
`unsigned beginoffset;
`/* beginning byte offset in file */
`
`unsigned Offset’
`unsigned totalcount;
`EXNbflD
`
`/* Current byte Offset in file */ Petitioner Oracle-Apple-Exhibit1010-Page 241
`/* total write count
`(to this offset)*/
`
`

`
`opaque data<NFS_MAXDATA>;
`
`};
`
`struct createargs {
`diropargs where;
`sattr attributes;
`
`};
`
`struct renameargs {
`diropargs from;
`
`diropargs to;
`
`};
`
`struct linkargs {
`nfs_fh from;
`diropargs to;
`
`};
`
`struct symlinkargs {
`diropargs from;
`nfspath to;
`sattr attributes;
`
`};
`
`typedef opaque nfscookie[NFS_COOKIESIZE];
`
`/*
`
`* Arguments to readdir
`*/
`
`struct readdirargs {
`/* directory handle */
`nfs_fh dir;
`nfscookie cookie;
`
`unsigned count;
`
`/* number of directory bytes to read */
`
`};
`
`struct entry {
`unsigned fileid;
`filename name;
`
`nfscookie cookie;
`
`entry *nextentry;
`
`};
`
`struct dirlist {
`entry *entries;
`bool eof;
`
`};
`
`union readdirres switch (nfsstat status)
`case NFS_OK:
`dirlist reply;
`default:
`
`{
`
`void;
`
`};
`
`struct statfsokres {
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 242
`
`

`
`unsigned tsize;
`
`/* preferred transfer size in bytes */
`
`unsigned bsize;
`
`/* fundamental file system block size */
`
`unsigned blocks;
`
`/* total blocks in file system */
`
`unsigned bfree;
`
`/* free blocks in fs */
`
`unsigned bavail;
`
`/* free blocks avail to non—superuser */
`
`};
`
`union statfsres switch (nfsstat status)
`case NFS_OK:
`statfsokres reply;
`default:
`
`{
`
`void;
`
`};
`
`/*
`* Remote file service routines
`
`*/
`
`program NFS_PROGRAM {
`
`Version NFS_VERSION {
`Void
`
`NFSPROC_NULL(Void)
`
`= 0;
`
`attrstat
`
`NFSPROC_GETATTR(nfs_fh)
`
`=
`
`1;
`
`attrstat
`
`NFSPROC_SETATTR(sattrargs)
`
`= 2;
`
`Void
`
`NFSPROC_ROOT(VOid)
`
`= 3;
`
`diropres
`
`NFSPROC_LOOKUP(diropargs)
`
`= 4;
`
`readlinkres
`
`NFSPROC_READLINK(nfs_fh)
`
`= 5;
`
`readres
`
`NFSPROC_READ(readargs)
`
`= 6;
`
`Void
`
`NFSPROC_WRITECACHE(VOid)
`
`= 7;
`
`attrstat
`
`NFSPROC_WRITE(writeargs)
`
`= 8;
`
`diropres
`
`NFSPROC_CREATE(createargs)
`
`= 9;
`
`nfsstat
`
`NFSPROC_REMOVE(diropargs)
`
`= 10;
`
`nfsstat
`
`NFSPROC_RENAME(renameargs)
`
`= 11;
`
`nfsstat
`
`ExmbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 243
`
`

`
`NFSPROC_LINK(1inkargs)
`
`= 12;
`
`nfsstat
`
`NFSPROC_SYMLINK(symlinkargs)
`
`= 13;
`
`diropres
`
`NFSPROC_MKDIR(createargs)
`
`= 14;
`
`nfsstat
`
`NFSPROC_RMDIR(diropargs)
`
`= 15;
`
`readdirres
`
`NFSPROC_READDIR(readdirargs)
`
`= 16;
`
`statfsres
`
`NFSPROC_STATFS(nfs_fh)
`
`= 17;
`
`}=2:
`
`} = 100003;
`
`EXNbflD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 244
`
`

`
`notes .II1S
`
`Exhibit D
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 245
`
`

`
`.TL
`
`CFS Version 1.3.2
`
`Installation and Operation
`.AU
`
`Matt Blaze
`.AI
`
`AT&T Bell Laboratories
`
`600 Mountain Avenue, Room 2A-360C
`
`Murray Hill, NJ 07974
`
`mab@research.att.com
`
`(for cfs questions, use cfs@research.att.com)
`
`.NH
`
`General
`.PP
`
`CFS pushes encryption services into the Unix(tm) file system.
`
`It
`
`supports secure storage at the system level through a standard Unix
`
`file system interface to encrypted files. Users associate a
`
`cryptographic key with the directories they wish to protect. Files in
`
`these directories (as well as their pathname components) are
`
`transparently encrypted and decrypted with the specified key without
`further user intervention; cleartext is never stored on a disk or sent
`
`to a remote file server.
`
`CFS employs a novel combination of DES
`
`stream and codebook cipher modes to provide high security with good
`
`performance on a modern workstation.
`
`CFS can use any available file
`
`system for its underlying storage without modification,
`
`including
`
`remote file servers such as NFS.
`
`System management functions, such as
`
`file backup, work in a normal manner and without knowledge of the key.
`.PP
`
`CFS as distributed runs under SunOS and, with a little coaxing,
`
`It has also
`several other BSD—derived systems including BSD/386.
`been ported by users to Solaris, Ultrix, Linux, and several other popular
`
`Oss, but is unlikely to work on such systems "out of the box".
`
`"#ifdefs" for most of these systems are included in the distribution;
`
`see the Makefile for compilation details. User—contributed patches for
`
`porting CFS to platforms not
`
`included in the distribution are made available
`
`in the CFS-USERS mailing list archive. You should check the archive
`
`before undertaking a major porting effort.
`
`(Of course,
`
`I encourage you
`
`to share any ports, patches or enhancements you develop.)
`.PP
`
`CFS runs entirely at user level, as a local NFS server running on the
`
`client machine's "loopback" interface.
`.B
`
`The system consists of
`
`cfsd
`.R
`
`(the CFS server daemon), and a small suite of tools
`.B
`
`(cmkdir, cattach, cdetach,
`.R
`
`and
`.B
`
`ssh)
`.R
`
`that create encrypted directories and manage keys as theyF%irifio|;i1§re6r,ac|e_App|e_Exhibit1010_Page246
`CFS, and the motivation and principles behind it,
`is described in
`EXNbflD
`
`

`
`detail in:
`. IP
`
`Matt Blaze,
`. I
`
`"A Cryptographic File System for Unix."
`
`Proc. 1st ACM Conference on Computer and Communications Security,
`. R
`
`Fairfax, VA, November 1993.
`. PP
`
`Another paper describes a key management scheme for CFS that, while
`
`included in this distribution, may be of interest.
`
`not
`. IP
`
`Matt Blaze,
`. I
`
`"Key Management in an Encrypting File System."
`
`Proc. USENIX Summer 1994 Technical Conference,
`. R
`
`Boston, MA, June 1994.
`. PP
`
`The CFS distribution also includes "ESM", an encrypting session
`
`manager that allows shell-to-shell encrypted sessions across insecure
`network links.
`It is described in the
`. B "README . esm"
`
`file in the distribution directory and in more detail in the paper
`. IP
`
`Matt Blaze and Steve Bellovin. "Session—layer Encryption."
`. I
`
`Proc. 1995 USENIX Security Workshop,
`. R
`
`Salt Lake City, June 1995.
`. PP
`
`These papers are available for anonymous ftp from research.att.com,
`
`in
`
`the files /dist/mab/cfs*.ps and /dist/mab/sesscrypt.ps. You should
`
`read them before attempting to install and use CFS. Details on the
`
`usage of each of the CFS commands
`
`(cattach, etc.) can be found in the
`
`man pages included in this distribution. You can print them with
`
`troff —man, and should install them wherever local man pages go on
`your system.
`. PP
`
`Basically, CFS provides a mechanism to associate "real" directories
`
`(on other file systems)
`
`that contain encrypted data with temporary
`
`"virtual" names through which users can read and write cleartext.
`
`These virtual names appear under the CFS mount point, which is usually
`
`called /crypt (this document assumes that convention). Users create
`
`encrypted directories on regular file systems (e.g.,
`
`in their home
`
`directories) using the
`.B cmkdir
`
`command, which creates the directory and assigns to it a cryptographic
`
`"passphrase" which will be used to encrypt its contents.
`
`To actually
`
`use an encrypted directory, it must be "attached" to CFS using the
`.B cattach
`
`command, which asks for the passphrase and installs an association
`
`between the "real" directory and a temporary name under /crypt.
`
`Cleartext is read and written under the virtual directory in /crypt,
`but the files are stored in encrypted form (with encrypted names)
`in
`
`the real directory. When the directory is not in use,
`
`the association
`
`is removed with the
`.B cdetach
`
`EXMDHD
`
`Petitioner Oracle-Apple — Exhibit 1010 — Page 247
`
`

`
`command, which deletes the cleartext virtual directory under /crypt
`
`(but not the ciphertext files, of course). When CFS is run on a
`
`client workstation,
`
`the cleartext data (and the cryptographic key
`
`passphrase) are never stored on a disk or sent over a network, even
`
`when the real directory is located on a remote file server.
`
`the virtual memory system can theoretically violate this
`(Actually,
`rule; see the "Internals" section, below.)
`.PP
`
`CFS is implemented as a server, called
`.B cfsd,
`
`for the Sun Network File System (NFS) protocol plus extensions for
`
`associating keys with directories.
`
`cfsd monitors the localhost
`
`virtual network interface for remote procedure call requests from the
`local machine. Once the local machine invokes an NFS "mount" on the
`
`localhost interface for the CFS mount point (/crypt), cfsd handles
`
`file system operations for the mounted file system as if it were a
`
`remote file server.
`
`Initially,
`
`/crypt appears completely empty.
`
`The
`
`user interface programs (such as the
`.B cattach
`
`command) send RPCs to cfsd giving the information required to manage
`
`the attached virtual directories that appear under /crypt (e.g., what
`
`name to use, what key to use,
`
`the name of the directory on the real
`
`file system, etc.).
`.NH 2
`
`License
`.IP
`
`.ce 9999
`
`Copyright
`.ce 0
`
`.IP
`
`(c) 1992, 1993, 1994, 1995 by AT&T.
`
`Permission to use, Copy, and modify this software without fee
`
`is hereby granted, provided that this entire notice is included in
`
`all copies of any software which is or includes a copy or
`
`modification of this software and in all copies of the supporting
`documentation for such software.
`.IP
`
`This software is subject to United States export controls.
`.IP
`
`THIS SOFTWARE IS BEING PROVIDED "AS IS", WITHOUT ANY EXPRESS OR IMPLIED
`
`IN PARTICULAR, NEITHER THE AUTHORS NOR AT&T MAKE ANY
`WARRANTY.
`REPRESENTATION OR WARRANTY OF ANY KIND CONCERNING THE MERCHANTABILITY
`
`OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR PURPOSE.
`
`.PP
`
`Please abide by the restrictions in the above license agreement.
`
`The
`
`limitations on distribution are there to meet legal requirements that
`
`are taken quite seriously by the government and by AT&T's lawyers.
`
`If
`
`you violate them, you risk creating all sorts of unpleasantness for
`
`yourself and for others (e.g., me).
`
`If the export requirements are
`
`not generally abided by, it will also make it increasingly difficult
`to release future such efforts.
`.PP
`
`It would be a good idea to check with me before including CFS as part
`of some other software distribution.
`
`.NH
`
`Installation
`
`EXMDHD
`
`Petitioner Oracle-Apple - Exhibit 1010 - Page 248
`
`

`
`.PP
`
`CFS was developed under SunOS 4.1.2 and BSD/386 (BSDI).
`
`I have not
`
`tested it, or even compiled it, on
`.I any
`
`other platforms.
`
`If you are interested in porting it to something
`
`different, such as SYSV or whatever, you should first
`
`get it running under one of the known configurations so that you know
`
`what to expect and are sure you have the complete system. You should
`also read and understand the "Internals" section below.
`The rest of
`
`this section assumes you are using one of the known systems.
`
`I'm afraid
`
`we do not have the resources to help you install or port CFS; you're
`on your own.
`.PP
`
`The system is designed to be installed on individual single—user
`
`workstations. You really should not install
`
`(or use) it on a shared
`
`file or compute server, even though such a configuration is
`
`technically possible. There are three main reasons for this. First,
`
`CFS trades off encryption speed for memory by precomputing large
`
`stream ciphers for each attached directory. While this is usually
`fine for a small number of attaches, more than four or five at a time
`
`can quickly reduce a system to thrashing.
`
`Furthermore, cfsd is
`
`single—threaded, and therefore does not handle many concurrent I/O
`
`operations very well.
`
`Second, any time an attach is active, an
`
`attacker who can log in to the target system and spoof either the UID
`
`of the legitimate user or "root" can potentially compromise the
`
`cleartext or learn the key by examining the address space of the cfsd
`
`process. Finally, if the connection between the user and the machine
`
`running CFS is compromised (e.g., by watching the Ethernet traffic
`
`between a terminal server and the host), an attacker can potentially
`
`observe the the entire dialog between the user and CFS,
`
`including any
`
`passphrases given to cattach and any cleartext written to /crypt.
`
`In
`
`fact, most successful attacks on cryptographically strong systems do
`
`not attack the encryption scheme at all, but instead rely on poorly
`
`managed installation, key management, and usage protocols.
`
`Be sure
`
`your users understand what parts of the system they are trusting
`
`before CFS is used to protect sensitive data.
`.PP
`
`CFS is a user-level NFS server.
`.I mount
`
`It does not, however,
`
`include the
`
`protocol, so you'll also need to have /etc/mountd (sometimes called
`
`/usr/etc/rpc.mountd)
`
`installed on your system. You will need the
`
`ability to become "root" on the target machine.
`.PP
`
`To install, first edit the Makefile for your local configuration.
`
`Everything you should have to edit is toward the beginning of the
`file. Make sure BINDIR and ETCDIR are set to the correct directories.
`
`Check the LIBS and COMPAT variables; for SunOS,
`
`these should be empty,
`
`but other systems may require —lrpc and —lcompat.
`
`CFLAGS should be
`
`just -0 for SunOS.
`
`If you're running a variant of BSD4.4, add
`
`-DBSD44.
`
`To support the BSD4.4 filesystem's short symbolic links (the link
`
`pointer is kept in the directory inode), add —DSHORTLINKS.
`
`If your client system does not put NFS requests on a
`
`p

This document is available on Docket Alarm but you must sign up to view it.


Or .

Accessing this document will incur an additional charge of $.

After purchase, you can access this document again without charge.

Accept $ Charge
throbber

Still Working On It

This document is taking longer than usual to download. This can happen if we need to contact the court directly to obtain the document and their servers are running slowly.

Give it another minute or two to complete, and then try the refresh button.

throbber

A few More Minutes ... Still Working

It can take up to 5 minutes for us to download a document if the court servers are running slowly.

Thank you for your continued patience.

This document could not be displayed.

We could not find this document within its docket. Please go back to the docket page and check the link. If that does not work, go back to the docket and refresh it to pull the newest information.

Your account does not support viewing this document.

You need a Paid Account to view this document. Click here to change your account type.

Your account does not support viewing this document.

Set your membership status to view this document.

With a Docket Alarm membership, you'll get a whole lot more, including:

  • Up-to-date information for this case.
  • Email alerts whenever there is an update.
  • Full text search for other cases.
  • Get email alerts whenever a new case matches your search.

Become a Member

One Moment Please

The filing “” is large (MB) and is being downloaded.

Please refresh this page in a few minutes to see if the filing has been downloaded. The filing will also be emailed to you when the download completes.

Your document is on its way!

If you do not receive the document in five minutes, contact support at support@docketalarm.com.

Sealed Document

We are unable to display this document, it may be under a court ordered seal.

If you have proper credentials to access the file, you may proceed directly to the court's system using your government issued username and password.


Access Government Site

We are redirecting you
to a mobile optimized page.





Document Unreadable or Corrupt

Refresh this Document
Go to the Docket

We are unable to display this document.

Refresh this Document
Go to the Docket