ftp.nice.ch/pub/next/unix/disk/SambaManager.1.0.NIHS.s.tar.gz#/SambaManager/ni_crypt.c

This is ni_crypt.c in view mode; [Download] [Up]

/*
  Two routines to encrypt/decrypt values for storage in NetInfo.
	The encrypting / decrypting algorithms used in the binary distributions have
	been removed and the routines have been set up to just do the hex encoding / 
	decoding.
*/


static char           toHex[16] = {'0', '1', '2', '3', '4', '5', '6', '7',
                                   '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
       
static unsigned char  fromHex[128] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                    	0,1,2,3,4,5,6,7,8,9,0,0,0,0,0,0,
                                    	0,10,11,12,13,14,15,0,0,0,0,0,0,0,0,0,
                                    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
                                    	0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
																			0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};


/*
  ni_encrypt will encrypt 16 bytes data from source,
  returning the hex encoded value in a 34 byte array target.
	The first character of the target will be a '+', to distinguish
	it from an unencoded password entry.
*/
void ni_encrypt(char *source, char *target) {
int    i, v;

// To signal a crypted entry, uncomment this:
//	*target++ = '+';
  for (i = 0; i < 16; i++) {
		// Put you crypting code here! Replacing the line below or the whole loop.
    v = (unsigned char)source[i];
    *target++ = toHex[v>>4];
    *target++ = toHex[v&0x0F];
  }
  *target = '\0';
}

/*
  ni_decrypt will decrypt 33 bytes data from source,
  returning the original 16 byte value in target.
	If the first character is not a '+', it will only
	convert from hex to binary.
*/
void ni_decrypt(char *source, char *target) {
int		i, v, decode;

	if (decode = (*source == '+'))
		source++;	/* Skip the leading + */
  for (i = 0; i < 16; i++) {
    v = fromHex[((unsigned char)*source++)&0x7F] << 4;
    v|= fromHex[((unsigned char)*source++)&0x7F];
		if (decode)
    	// Put you decrypting code here, or replace the whole loop!
		else
			target[i] = v;
  }
}


#ifdef TESTCRYPT
void main(int argc, char **argv) {
char  buffer[33], result[17];

  if (argc > 1) {
    ni_encrypt(argv[1], buffer);
    printf("encoding: %s --> %s\n", argv[1], buffer);
    ni_decrypt(buffer, result);
    result[16] = '\0';
    printf("decoding: %s --> %s\n", buffer, result);
  }
}
#endif

These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.