summaryrefslogtreecommitdiff
path: root/usr/src/lib/libresolv2/common/cylink/ctk_prime.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/lib/libresolv2/common/cylink/ctk_prime.c')
-rw-r--r--usr/src/lib/libresolv2/common/cylink/ctk_prime.c442
1 files changed, 0 insertions, 442 deletions
diff --git a/usr/src/lib/libresolv2/common/cylink/ctk_prime.c b/usr/src/lib/libresolv2/common/cylink/ctk_prime.c
deleted file mode 100644
index 45b576eb3f..0000000000
--- a/usr/src/lib/libresolv2/common/cylink/ctk_prime.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/*
- * Copyright (c) 1999 by Sun Microsystems, Inc.
- * All rights reserved.
- */
-
-/*
- * Cylink Corporation © 1998
- *
- * This software is licensed by Cylink to the Internet Software Consortium to
- * promote implementation of royalty free public key cryptography within IETF
- * standards. Cylink wishes to expressly thank the contributions of Dr.
- * Martin Hellman, Whitfield Diffie, Ralph Merkle and Stanford University for
- * their contributions to Internet Security. In accordance with the terms of
- * this license, ISC is authorized to distribute and sublicense this software
- * for the practice of IETF standards.
- *
- * The software includes BigNum, written by Colin Plumb and licensed by Philip
- * R. Zimmermann for royalty free use and distribution with Cylink's
- * software. Use of BigNum as a stand alone product or component is
- * specifically prohibited.
- *
- * Disclaimer of All Warranties. THIS SOFTWARE IS BEING PROVIDED "AS IS",
- * WITHOUT ANY EXPRESSED OR IMPLIED WARRANTY OF ANY KIND WHATSOEVER. IN
- * PARTICULAR, WITHOUT LIMITATION ON THE GENERALITY OF THE FOREGOING, CYLINK
- * MAKES NO REPRESENTATION OF THIS SOFTWARE OR ITS FITNESS FOR ANY PARTICULAR
- * PURPOSE.
- *
- * Cylink or its representatives shall not be liable for tort, indirect,
- * special or consequential damages such as loss of profits or loss of
- * goodwill from the use or inability to use the software for any purpose or
- * for any reason whatsoever.
- *
- * EXPORT LAW: Export of the Foundations Suite may be subject to compliance
- * with the rules and regulations promulgated from time to time by the Bureau
- * of Export Administration, United States Department of Commerce, which
- * restrict the export and re-export of certain products and technical data.
- * If the export of the Foundations Suite is controlled under such rules and
- * regulations, then the Foundations Suite shall not be exported or
- * re-exported, directly or indirectly, (a) without all export or re-export
- * licenses and governmental approvals required by any applicable laws, or (b)
- * in violation of any applicable prohibition against the export or re-export
- * of any part of the Foundations Suite. All export licenses for software
- * containing the Foundations Suite are the sole responsibility of the licensee.
- */
-
-/****************************************************************************
-* FILENAME: prime.c PRODUCT NAME: CRYPTOGRAPHIC TOOLKIT
-*
-* FILE STATUS:
-*
-* DESCRIPTION: Cryptographic Toolkit Internal Functions File
-* Prime Number functions
-* PRIVATE FUNCTIONS:
-*
-* int VerPrime( u_int16_t P_bytes, ord *P,
-* u_int16_t k, ord *RVAL,
-* YIELD_context *yield_cont )
-* int GenPrime( u_int16_t P_bytes, ord *P,
-* u_int16_t k, ord *RVAL,
-* YIELD_context *yield_cont )
-* Copyright (c) Cylink Corporation 1996. All rights reserved.
-*
-* REVISION HISTORY:
-*
-*
-****************************************************************************/
-
-#pragma ident "%Z%%M% %I% %E% SMI"
-
-/****************************************************************************
-* INCLUDE FILES
-****************************************************************************/
-
-#include "port_before.h"
-#include <sys/types.h>
-#include "cylink.h"
-#include "ctk_endian.h"
-
-/* system files */
-#ifdef VXD
-#include <vtoolsc.h>
-#else
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#endif
-
-/* program files */
-#include "cylink.h"
-#include "ctk_endian.h"
-#include "toolkit.h"
-#include "cencrint.h"
-#include "port_after.h"
-
-/****************************************************************************
-* PRIVATE FUNCTIONS DEFINITIONS
-****************************************************************************/
-/****************************************************************************
-* NAME: int VerPrime( u_int16_t P_bytes,
-* ord *P,
-* u_int16_t k,
-* ord *RVAL,
-* YIELD_context *yield_cont )
-*
-* DESCRIPTION: Verify Pseudo Prime number
-*
-* INPUTS:
-* PARAMETERS:
-* u_int16_t P_bytes Number of bytes in array
-* u_int16_t k Number of testing
-* ord *RVAL Pointer to random number generator value
-* YIELD_context *yield_cont Pointer to yield_cont structure (NULL if not used)
-* OUTPUT:
-* PARAMETERS:
-* ord *P Pointer to prime number
-* ord *RVAL Pointer to updated value
-*
-* RETURN:
-* SUCCESS No errors
-* ERR_INPUT_LEN Invalid length for input data(zero bytes)
-* ERR_PRIME Number is not prime
-* REVISION HISTORY:
-*
-* 24 Sep 94 KPZ Initial release
-* 14 Oct 94 GKL Second version (big endian support)
-* 08 Dec 94 GKL Added YIELD_context
-*
-****************************************************************************/
-
- int VerPrime( u_int16_t P_bytes,
- ord *P,
- u_int16_t k,
- ord *RVAL,
- YIELD_context *yield_cont ) /*TKL00601*/
-
-{
- int status = SUCCESS; /*function return status*/
- ord *b, *n, *c, *pp; /*pointers to working buffers */
- ord *m, *buf, *P_buf;
- u_int16_t max_bytes; /*number of maximum bytes*/
- u_int16_t P_longs; /*number of longs in Y*/
- u_int16_t i, j, s, k_b; /*counters*/
- u_int16_t exit ; /*flag for exit*/
-/* product of prime numbers from 3 to 379 (512-bit number) */
-#ifdef ORD_32
- ord b1[DSS_LENGTH_MIN/sizeof(ord)]={
- 0x2e30c48fL, 0x0decece9L, 0xbada8f98L, 0x9f7ecb29L,
- 0xa4a11de4L, 0x6ef04659L, 0xcbc38405L, 0x233db117L,
- 0x03e81187L, 0xc1b631a2L, 0x238bfb99L, 0x077ec3baL,
- 0xc5d5f09fL, 0xb0813c28L, 0x7646fa6eL, 0x106aa9fbL };
-#else
- ord b1[DSS_LENGTH_MIN/sizeof(ord)]={
- 0xc48f, 0x2e30, 0xece9, 0x0dec, 0x8f98, 0xbada, 0xcb29, 0x9f7e,
- 0x1de4, 0xa4a1, 0x4659, 0x6ef0, 0x8405, 0xcbc3, 0xb117, 0x233d,
- 0x1187, 0x03e8, 0x31a2, 0xc1b6, 0xfb99, 0x238b, 0xc3ba, 0x077e,
- 0xf09f, 0xc5d5, 0x3c28, 0xb081, 0xfa6e, 0x7646, 0xa9fb, 0x106a };
-#endif
- if ( P_bytes % sizeof(ord) != 0 ) /* not multiple 4 (32 bit) */
- {
- status = ERR_INPUT_LEN; /* invalid length for input data */
- return status;
- }
- if ( P_bytes <= DSS_LENGTH_MIN )
- {
- max_bytes = DSS_LENGTH_MIN;
- }
- else
- {
- max_bytes = P_bytes;
- }
- buf = (ord *)calloc( max_bytes / sizeof(ord), sizeof(ord) );
- P_buf = (ord *)calloc( max_bytes / sizeof(ord), sizeof(ord));
- if( !buf || !P_buf )
- {
- if ( buf )
- free( buf );
- if( P_buf )
- free( P_buf );
- return ERR_ALLOC;
- }
- memcpy( buf, b1, DSS_LENGTH_MIN );
- memcpy( P_buf, P, P_bytes );
-
- if ( (P_buf[0] & 0x1) == 0 )
- {
-#ifdef DEBUG1
- printf ("\n P is not pseudoprime");
-#endif
- status = ERR_PRIME;
- free ( buf );
- free( P_buf );
- return status;
- }
- P_longs = (u_int16_t) (P_bytes / sizeof(ord));
- b = (ord *)calloc( P_longs, sizeof(ord) );
- m = (ord *)malloc( P_longs * sizeof(ord) );
- n = (ord *)calloc( P_longs, sizeof(ord) );
- c = (ord *)calloc( P_longs, sizeof(ord) );
- pp = (ord *)malloc( P_longs * sizeof(ord) );
- if( !b || !m || !n || !c || !pp )
- {
- if( b )
- free( b );
- if( m )
- free( m );
- if( n )
- free( n );
- if( c )
- free( c );
- if( pp )
- free ( pp );
- }
- memcpy( m, P, P_bytes );
- memcpy( pp, P, P_bytes );
- /* Compute great common divisor(gcd) */
- if ( SteinGCD( P_buf, buf, (u_int16_t)(max_bytes / sizeof(ord)) ) == 0 )
- {
- pp[0] = pp[0] - 1; /* Initialized work buffer */
- m[0] = m[0] - 1;
- s = (u_int16_t) RShiftMostBit( m, (u_int16_t)(P_bytes / sizeof(ord)) ); /* Right shift by number of*/
- exit = 0; /* zero bits at rigth */
- k_b = 0;
- while( k_b != k )
- {
- MyGenRand( 4, b, RVAL ); /* generate random number */
- if ( SteinGCD( P_buf, b , (u_int16_t)(P_bytes / sizeof(ord)) ) ) /* check gcd */
- {
-#ifdef DEBUG1
- printf ("\n P is not pseudoprime");
-#endif
- status = ERR_PRIME;
- break;
- }
- k_b++; /* increment counter */
- if ( ( status = Expo ( 4, b, P_bytes, m,
- P_bytes, P, c ) ) != SUCCESS ) /* c=b^m mod(P) */ /*TKL00601*/
- {
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free (buf );
- free( P_buf );
- return status;
- }
- if ( c[0] == 1 ) /* if c==1 number is pseudo prime */
- {
- for ( i = 1; i < P_bytes / sizeof(ord); i++ )
- {
- if ( c[i] != 0 )
- {
- break;
- }
- }
- if ( i == P_bytes / sizeof(ord) )
- {
- if (yield_cont) /*TKL00601*/
-#ifdef VXD
- if ( VXD_Yield (yield_cont->yield_proc) )
-#else
- if ( yield_cont->yield_proc(0xFFFF) )
-#endif
-
- {
- status = ERR_CANCEL;
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free( P_buf );
- free (buf );
- return status;
- }
-#ifdef DEBUG1
- printf ("\n P is a pseudoprime %d",k_b);
-#endif
- if ( k_b == k )
- {
- break;
- }
- }
- }
- else
- {
- for ( j = 1; j <= s; j++ )
- {
- for ( i = 0; i < P_bytes / sizeof(ord); i++ ) /* if c==pp number is pseudo prime */
- {
- if ( c[i] != pp[i] )
- {
- break;
- }
- }
- if ( i == P_bytes / sizeof(ord) )
- {
- if (yield_cont) /*TKL00601*/
-#ifdef VXD
- if ( VXD_Yield (yield_cont->yield_proc) )
-#else
- if ( yield_cont->yield_proc(0xFFFF) )
-#endif
-
- {
- status = ERR_CANCEL;
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free( P_buf );
- free (buf );
- return status;
- }
-#ifdef DEBUG1
- printf ("\n P is a pseudoprime %d",k_b);
-#endif
- break;
- }
- if ( j == s )
- {
-#ifdef DEBUG1
- printf ("\n P is not pseudoprime");
-#endif
- status = ERR_PRIME;
- exit = 1;
- break;
- }
- else
- {
- if ( (status = Square(P_bytes, c, /*P_bytes,
- c,*/ P_bytes, P, c) )
- != SUCCESS ) /* c=c^2mod(p) */
- {
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free( P_buf );
- free (buf );
- return status;
- }
- }
- }
- }
- if ( exit == 1 ) /* Exit */
- {
- break;
- }
- }
- }
- else
- {
- if (yield_cont) /*TKL00601*/
-#ifdef VXD
- if ( VXD_Yield (yield_cont->yield_proc) )
-#else
- if ( yield_cont->yield_proc(0xFFFF) )
-#endif
-
- {
- status = ERR_CANCEL;
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free( P_buf );
- free (buf );
- return status;
- }
-#ifdef DEBUG1
- printf ("\n P is not pseudoprime");
-#endif
- status = ERR_PRIME;
- }
- free( b );
- free( m );
- free( n );
- free( c );
- free( pp );
- free( P_buf );
- free (buf );
- return status;
-}
-
-/****************************************************************************
-* NAME: int GenPrime( u_int16_t P_bytes,
-* ord *P,
-* u_int16_t k,
-* ord *RVAL,
-* YIELD_context *yield_cont )
-*
-* DESCRIPTION: Generate Random Pseudo Prime number
-*
-* INPUTS:
-* PARAMETERS:
-* u_int16_t P_bytes Number of bytes in array
-* u_int16_t k Number of testing
-* ord *RVAL Pointer to random number generator value
-* YIELD_context *yield_cont Pointer to yield_cont structure (NULL if not used)
-* OUTPUT:
-* PARAMETERS:
-* ord *P Pointer to prime number
-* ord *RVAL Pointer to updated value
-*
-* RETURN:
-* SUCCESS No errors
-* ERR_INPUT_LEN Invalid length for input data(zero bytes)
-* ERR_PRIME Number is not prime
-* REVISION HISTORY:
-*
-* 24 Sep 94 KPZ Initial release
-* 14 Oct 94 GKL Second version (big endian support)
-* 08 Dec 94 GKL Added YIELD_context
-*
-****************************************************************************/
-
- int GenPrime( u_int16_t P_bytes,
- ord *P,
- u_int16_t k,
- ord *RVAL,
- YIELD_context *yield_cont ) /*TKL00601*/
-{
- int status = SUCCESS; /* function return status */
- if ( P_bytes % sizeof(ord) != 0 ) /* not multiple 4 (32 bit) */
- {
- status = ERR_INPUT_LEN; /* invalid length for input data */
- return status;
- }
- do
- {
- MyGenRand( P_bytes, P, RVAL ); /* generate random number */
- P[0] |= 1;
- P[(P_bytes/sizeof(ord))-1] |= ((ord)1 << (BITS_COUNT-1));
- status = VerPrime( P_bytes, P, k, RVAL, yield_cont); /*TKL00601*/
- } while ((status != SUCCESS) && (status != ERR_CANCEL)); /*TKL00601*/
- return status;
-}
-