stdlibs/libcrypt/doc/encrypt.3
author hgs
Tue, 02 Nov 2010 19:23:22 +0530
changeset 79 564bc7b7ad27
permissions -rw-r--r--
201043
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
79
hgs
parents:
diff changeset
     1
.\" Portions Copyright © 2005-2006 Nokia. All rights reserved.
hgs
parents:
diff changeset
     2
.\" FreeSec: libcrypt for NetBSD
hgs
parents:
diff changeset
     3
.\"
hgs
parents:
diff changeset
     4
.\" Copyright (c) 1994 David Burren
hgs
parents:
diff changeset
     5
.\" All rights reserved.
hgs
parents:
diff changeset
     6
.\"
hgs
parents:
diff changeset
     7
.\" Redistribution and use in source and binary forms, with or without
hgs
parents:
diff changeset
     8
.\" modification, are permitted provided that the following conditions
hgs
parents:
diff changeset
     9
.\" are met:
hgs
parents:
diff changeset
    10
.\" 1. Redistributions of source code must retain the above copyright
hgs
parents:
diff changeset
    11
.\"    notice, this list of conditions and the following disclaimer.
hgs
parents:
diff changeset
    12
.\" 2. Redistributions in binary form must reproduce the above copyright
hgs
parents:
diff changeset
    13
.\"    notice, this list of conditions and the following disclaimer in the
hgs
parents:
diff changeset
    14
.\"    documentation and/or other materials provided with the distribution.
hgs
parents:
diff changeset
    15
.\" 4. Neither the name of the author nor the names of other contributors
hgs
parents:
diff changeset
    16
.\"    may be used to endorse or promote products derived from this software
hgs
parents:
diff changeset
    17
.\"    without specific prior written permission.
hgs
parents:
diff changeset
    18
.\"
hgs
parents:
diff changeset
    19
.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
hgs
parents:
diff changeset
    20
.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
hgs
parents:
diff changeset
    21
.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
hgs
parents:
diff changeset
    22
.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
hgs
parents:
diff changeset
    23
.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
hgs
parents:
diff changeset
    24
.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
hgs
parents:
diff changeset
    25
.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
hgs
parents:
diff changeset
    26
.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
hgs
parents:
diff changeset
    27
.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
hgs
parents:
diff changeset
    28
.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
hgs
parents:
diff changeset
    29
.\" SUCH DAMAGE.
hgs
parents:
diff changeset
    30
.\"
hgs
parents:
diff changeset
    31
.\" $FreeBSD: src/lib/libcrypt/crypt.3,v 1.31 2005/02/09 18:03:14 ru Exp $
hgs
parents:
diff changeset
    32
.\"
hgs
parents:
diff changeset
    33
.Dd January 19, 1997
hgs
parents:
diff changeset
    34
.Dt ENCRYPT 3
hgs
parents:
diff changeset
    35
.Os
hgs
parents:
diff changeset
    36
.Sh NAME
hgs
parents:
diff changeset
    37
.Nm encrypt, setkey
hgs
parents:
diff changeset
    38
.Nd encrypt 64-bit messages
hgs
parents:
diff changeset
    39
.Sh LIBRARY
hgs
parents:
diff changeset
    40
.Lb libcrypt
hgs
parents:
diff changeset
    41
.Sh SYNOPSIS
hgs
parents:
diff changeset
    42
.In unistd.h
hgs
parents:
diff changeset
    43
.Ft void
hgs
parents:
diff changeset
    44
.Fn encrypt "char block[64]" "int edflag"
hgs
parents:
diff changeset
    45
.In stdlib.h
hgs
parents:
diff changeset
    46
.Ft void
hgs
parents:
diff changeset
    47
.Fn setkey "const char *key"
hgs
parents:
diff changeset
    48
.Sh RETURN VALUES
hgs
parents:
diff changeset
    49
The
hgs
parents:
diff changeset
    50
.Fn encrypt 
hgs
parents:
diff changeset
    51
and 
hgs
parents:
diff changeset
    52
.Fn setkey
hgs
parents:
diff changeset
    53
functions do not return any value.
hgs
parents:
diff changeset
    54
.Sh DESCRIPTION
hgs
parents:
diff changeset
    55
.Fn encrypt()
hgs
parents:
diff changeset
    56
function encrypts and decrypts 64-bit messages. The algorithm used to perform 
hgs
parents:
diff changeset
    57
encryption/decryption is Data Encryption Standard (DES).
hgs
parents:
diff changeset
    58
.Pp
hgs
parents:
diff changeset
    59
.Fn setkey()
hgs
parents:
diff changeset
    60
is invoked to set the key for the DES machine.
hgs
parents:
diff changeset
    61
.Fn setkey()'
hgs
parents:
diff changeset
    62
s
hgs
parents:
diff changeset
    63
.Fn key
hgs
parents:
diff changeset
    64
parameter is an array of 64 bytes, and the numerical value of each byte in this
hgs
parents:
diff changeset
    65
array is either 0 or 1. The 56-bit key for the DES algorithm is computed from the
hgs
parents:
diff changeset
    66
.Fn key
hgs
parents:
diff changeset
    67
parameter.
hgs
parents:
diff changeset
    68
.Pp
hgs
parents:
diff changeset
    69
.Fn encrypt
hgs
parents:
diff changeset
    70
function either encrypts or decrypts the data block. The exact operation depends 
hgs
parents:
diff changeset
    71
on the value of 
hgs
parents:
diff changeset
    72
.Fn edflag
hgs
parents:
diff changeset
    73
parameter. 
hgs
parents:
diff changeset
    74
.Fn block
hgs
parents:
diff changeset
    75
is encrypted if 
hgs
parents:
diff changeset
    76
.Fn edflag
hgs
parents:
diff changeset
    77
parameter is 0, and decrypted if 1 is being passed as the value of 
hgs
parents:
diff changeset
    78
.Fn edflag 
hgs
parents:
diff changeset
    79
parameter. 
hgs
parents:
diff changeset
    80
.Fn block
hgs
parents:
diff changeset
    81
is an array of 64 bytes, wherein the numerical value of each byte is either 0 or 1.
hgs
parents:
diff changeset
    82
Like the 
hgs
parents:
diff changeset
    83
.Fn setkey'
hgs
parents:
diff changeset
    84
s
hgs
parents:
diff changeset
    85
.Fn key 
hgs
parents:
diff changeset
    86
parameter, 
hgs
parents:
diff changeset
    87
.Fn block 
hgs
parents:
diff changeset
    88
is a bit vector representation of the actual value that is encoded. It is modified in place
hgs
parents:
diff changeset
    89
to return the result.
hgs
parents:
diff changeset
    90
.Pp
hgs
parents:
diff changeset
    91
.Fn encrypt
hgs
parents:
diff changeset
    92
and
hgs
parents:
diff changeset
    93
.Fn setkey
hgs
parents:
diff changeset
    94
are not reentrant as the key is stored statically.
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
.Sh ERRORS
hgs
parents:
diff changeset
    97
.Fn errno
hgs
parents:
diff changeset
    98
should be set to zero prior to calling any of the above functions. The behavior of
hgs
parents:
diff changeset
    99
.Fn encrypt
hgs
parents:
diff changeset
   100
will be undefined if size of
hgs
parents:
diff changeset
   101
.Fn block
hgs
parents:
diff changeset
   102
argument is not 64.
hgs
parents:
diff changeset
   103
.Sh EXAMPLE
hgs
parents:
diff changeset
   104
.Bd -literal -offset indent
hgs
parents:
diff changeset
   105
#include <stdlib.h>
hgs
parents:
diff changeset
   106
#include <unistd.h>
hgs
parents:
diff changeset
   107
hgs
parents:
diff changeset
   108
void encrypt_user()
hgs
parents:
diff changeset
   109
{
hgs
parents:
diff changeset
   110
	/* bit vector containing the key */
hgs
parents:
diff changeset
   111
	char key[64] = 
hgs
parents:
diff changeset
   112
	{
hgs
parents:
diff changeset
   113
			0, 0, 0, 0, 0, 0, 0, 1,
hgs
parents:
diff changeset
   114
			0, 0, 1, 1, 0, 0, 0, 1,
hgs
parents:
diff changeset
   115
			1, 1, 0, 1, 1, 0, 0, 1,
hgs
parents:
diff changeset
   116
			0, 1, 1, 0, 0, 0, 0, 1,
hgs
parents:
diff changeset
   117
			1, 0, 0, 1, 1, 1, 0, 1,
hgs
parents:
diff changeset
   118
			1, 1, 0, 0, 0, 0, 0, 1,
hgs
parents:
diff changeset
   119
			0, 0, 1, 1, 0, 1, 1, 1,
hgs
parents:
diff changeset
   120
			0, 1, 1, 0, 1, 1, 1, 0
hgs
parents:
diff changeset
   121
	};
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
	/* bit vector containing the data block to be encrypted */
hgs
parents:
diff changeset
   124
	char block[64] = 
hgs
parents:
diff changeset
   125
	{
hgs
parents:
diff changeset
   126
		0, 1, 0, 1, 1, 1, 0, 0,
hgs
parents:
diff changeset
   127
		1, 1, 0, 1, 0, 1, 0, 1,
hgs
parents:
diff changeset
   128
		0, 1, 0, 0, 1, 1, 0, 0,
hgs
parents:
diff changeset
   129
		1, 0, 1, 0, 1, 0, 0, 0,
hgs
parents:
diff changeset
   130
		0, 0, 1, 1, 1, 1, 0, 1,
hgs
parents:
diff changeset
   131
		1, 1, 1, 0, 1, 1, 1, 1,
hgs
parents:
diff changeset
   132
		0, 1, 0, 1, 0, 1, 1, 1,
hgs
parents:
diff changeset
   133
		1, 1, 0, 1, 1, 0, 1, 0
hgs
parents:
diff changeset
   134
	};
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
	setkey(key);		/* Set the key for DES encryption */
hgs
parents:
diff changeset
   137
	
hgs
parents:
diff changeset
   138
	/* Perform encryption/decryption of the message block */
hgs
parents:
diff changeset
   139
	encrypt(block, 0);	/* Encryption. The input block is modified in place
hgs
parents:
diff changeset
   140
					 * to return the output to the user
hgs
parents:
diff changeset
   141
					 */
hgs
parents:
diff changeset
   142
hgs
parents:
diff changeset
   143
	encrypt(block, 1);	/* Decryption. The input block is modified in place
hgs
parents:
diff changeset
   144
					 * to return the result of the decryption operation
hgs
parents:
diff changeset
   145
					 */
hgs
parents:
diff changeset
   146
}
hgs
parents:
diff changeset
   147
.Ed
hgs
parents:
diff changeset
   148
.Sh SEE ALSO
hgs
parents:
diff changeset
   149
.Sh HISTORY
hgs
parents:
diff changeset
   150
.Sh BUGS
hgs
parents:
diff changeset
   151
If 
hgs
parents:
diff changeset
   152
.Fn encrypt
hgs
parents:
diff changeset
   153
is called without priorly invoking 
hgs
parents:
diff changeset
   154
.Fn setkey
hgs
parents:
diff changeset
   155
the implementation assumes a bit vector consisting of all zeroes as the key
hgs
parents:
diff changeset
   156
for the DES algorithm. In this scenaro the outcome of 
hgs
parents:
diff changeset
   157
.Fn encrypt
hgs
parents:
diff changeset
   158
function is different from that of Linux's.