/* * Copyright (c) 1997-2007 The Stanford SRP Authentication Project * All Rights Reserved. * * Permission is hereby granted, free of charge, to any person obtaining * a copy of this software and associated documentation files (the * "Software"), to deal in the Software without restriction, including * without limitation the rights to use, copy, modify, merge, publish, * distribute, sublicense, and/or sell copies of the Software, and to * permit persons to whom the Software is furnished to do so, subject to * the following conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND, * EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY * WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. * * IN NO EVENT SHALL STANFORD BE LIABLE FOR ANY SPECIAL, INCIDENTAL, * INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND, OR ANY DAMAGES WHATSOEVER * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER OR NOT ADVISED OF * THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF LIABILITY, ARISING OUT * OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * Redistributions in source or binary form must retain an intact copy * of this copyright notice. */ #ifndef SRP_AUX_H #define SRP_AUX_H #include "cstr.h" #ifdef __cplusplus extern "C" { #endif /* BigInteger abstraction API */ #ifndef MATH_PRIV typedef void * BigInteger; typedef void * BigIntegerCtx; typedef void * BigIntegerModAccel; #endif /* * Some functions return a BigIntegerResult. * Use BigIntegerOK to test for success. */ #define BIG_INTEGER_SUCCESS 0 #define BIG_INTEGER_ERROR -1 #define BigIntegerOK(v) ((v) == BIG_INTEGER_SUCCESS) typedef int BigIntegerResult; _TYPE( BigInteger ) BigIntegerFromInt P((unsigned int number)); _TYPE( BigInteger ) BigIntegerFromBytes P((const unsigned char * bytes, int length)); #define BigIntegerByteLen(X) ((BigIntegerBitLen(X)+7)/8) _TYPE( int ) BigIntegerToBytes P((BigInteger src, unsigned char * dest, int destlen)); _TYPE( BigIntegerResult ) BigIntegerToCstr P((BigInteger src, cstr * dest)); _TYPE( BigIntegerResult ) BigIntegerToCstrEx P((BigInteger src, cstr * dest, int len)); _TYPE( BigIntegerResult ) BigIntegerToHex P((BigInteger src, char * dest, int destlen)); _TYPE( BigIntegerResult ) BigIntegerToString P((BigInteger src, char * dest, int destlen, unsigned int radix)); _TYPE( int ) BigIntegerBitLen P((BigInteger b)); _TYPE( int ) BigIntegerCmp P((BigInteger c1, BigInteger c2)); _TYPE( int ) BigIntegerCmpInt P((BigInteger c1, unsigned int c2)); _TYPE( BigIntegerResult ) BigIntegerLShift P((BigInteger result, BigInteger x, unsigned int bits)); _TYPE( BigIntegerResult ) BigIntegerAdd P((BigInteger result, BigInteger a1, BigInteger a2)); _TYPE( BigIntegerResult ) BigIntegerAddInt P((BigInteger result, BigInteger a1, unsigned int a2)); _TYPE( BigIntegerResult ) BigIntegerSub P((BigInteger result, BigInteger s1, BigInteger s2)); _TYPE( BigIntegerResult ) BigIntegerSubInt P((BigInteger result, BigInteger s1, unsigned int s2)); /* For BigIntegerMul{,Int}: result != m1, m2 */ _TYPE( BigIntegerResult ) BigIntegerMul P((BigInteger result, BigInteger m1, BigInteger m2, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerMulInt P((BigInteger result, BigInteger m1, unsigned int m2, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerDivInt P((BigInteger result, BigInteger d, unsigned int m, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerMod P((BigInteger result, BigInteger d, BigInteger m, BigIntegerCtx ctx)); _TYPE( unsigned int ) BigIntegerModInt P((BigInteger d, unsigned int m, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerModMul P((BigInteger result, BigInteger m1, BigInteger m2, BigInteger m, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerModExp P((BigInteger result, BigInteger base, BigInteger expt, BigInteger modulus, BigIntegerCtx ctx, BigIntegerModAccel accel)); _TYPE( int ) BigIntegerCheckPrime P((BigInteger n, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerFree P((BigInteger b)); _TYPE( BigIntegerResult ) BigIntegerClearFree P((BigInteger b)); _TYPE( BigIntegerCtx ) BigIntegerCtxNew(); _TYPE( BigIntegerResult ) BigIntegerCtxFree P((BigIntegerCtx ctx)); _TYPE( BigIntegerModAccel ) BigIntegerModAccelNew P((BigInteger m, BigIntegerCtx ctx)); _TYPE( BigIntegerResult ) BigIntegerModAccelFree P((BigIntegerModAccel accel)); _TYPE( BigIntegerResult ) BigIntegerInitialize(); _TYPE( BigIntegerResult ) BigIntegerFinalize(); _TYPE( BigIntegerResult ) BigIntegerUseEngine P((const char * engine)); _TYPE( BigIntegerResult ) BigIntegerReleaseEngine(); /* Miscellaneous functions - formerly in t_pwd.h */ /* * "t_random" is a cryptographic random number generator, which is seeded * from various high-entropy sources and uses a one-way hash function * in a feedback configuration. * "t_sessionkey" is the interleaved hash used to generate session keys * from a large integer. * "t_mgf1" is an implementation of MGF1 using SHA1 to generate session * keys from large integers, and is preferred over the older * interleaved hash, and is used with SRP6. * "t_getpass" reads a password from the terminal without echoing. */ _TYPE( void ) t_random P((unsigned char *, unsigned)); _TYPE( void ) t_stronginitrand(); _TYPE( unsigned char * ) t_sessionkey P((unsigned char *, unsigned char *, unsigned)); _TYPE( void ) t_mgf1 P((unsigned char *, unsigned, const unsigned char *, unsigned)); _TYPE( int ) t_getpass P((char *, unsigned, const char *)); #ifdef __cplusplus } #endif #endif /* SRP_AUX_H */