summaryrefslogtreecommitdiffstats
path: root/crypto/srp
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2015-01-22 03:40:55 +0000
committerMatt Caswell <matt@openssl.org>2015-01-22 09:20:09 +0000
commit0f113f3ee4d629ef9a4a30911b22b224772085e5 (patch)
treee014603da5aed1d0751f587a66d6e270b6bda3de /crypto/srp
parent22b52164aaed31d6e93dbd2d397ace041360e6aa (diff)
Run util/openssl-format-source -v -c .
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'crypto/srp')
-rw-r--r--crypto/srp/srp.h148
-rw-r--r--crypto/srp/srp_lcl.h23
-rw-r--r--crypto/srp/srp_lib.c545
-rw-r--r--crypto/srp/srp_vfy.c1034
-rw-r--r--crypto/srp/srptest.c290
5 files changed, 1000 insertions, 1040 deletions
diff --git a/crypto/srp/srp.h b/crypto/srp/srp.h
index c4017b3d4c..49cf960347 100644
--- a/crypto/srp/srp.h
+++ b/crypto/srp/srp.h
@@ -1,7 +1,8 @@
/* crypto/srp/srp.h */
-/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
- * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
- * for the EdelKey project and contributed to the OpenSSL project 2004.
+/*
+ * Written by Christophe Renou (christophe.renou@edelweb.fr) with the
+ * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the
+ * EdelKey project and contributed to the OpenSSL project 2004.
*/
/* ====================================================================
* Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -11,7 +12,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -57,116 +58,113 @@
*
*/
#ifndef __SRP_H__
-#define __SRP_H__
+# define __SRP_H__
-#ifndef OPENSSL_NO_SRP
+# ifndef OPENSSL_NO_SRP
-#include <stdio.h>
-#include <string.h>
+# include <stdio.h>
+# include <string.h>
#ifdef __cplusplus
extern "C" {
#endif
-#include <openssl/safestack.h>
-#include <openssl/bn.h>
-#include <openssl/crypto.h>
+# include <openssl/safestack.h>
+# include <openssl/bn.h>
+# include <openssl/crypto.h>
-typedef struct SRP_gN_cache_st
- {
- char *b64_bn;
- BIGNUM *bn;
- } SRP_gN_cache;
+typedef struct SRP_gN_cache_st {
+ char *b64_bn;
+ BIGNUM *bn;
+} SRP_gN_cache;
DECLARE_STACK_OF(SRP_gN_cache)
-typedef struct SRP_user_pwd_st
- {
- char *id;
- BIGNUM *s;
- BIGNUM *v;
- const BIGNUM *g;
- const BIGNUM *N;
- char *info;
- } SRP_user_pwd;
+typedef struct SRP_user_pwd_st {
+ char *id;
+ BIGNUM *s;
+ BIGNUM *v;
+ const BIGNUM *g;
+ const BIGNUM *N;
+ char *info;
+} SRP_user_pwd;
DECLARE_STACK_OF(SRP_user_pwd)
-typedef struct SRP_VBASE_st
- {
- STACK_OF(SRP_user_pwd) *users_pwd;
- STACK_OF(SRP_gN_cache) *gN_cache;
+typedef struct SRP_VBASE_st {
+ STACK_OF(SRP_user_pwd) *users_pwd;
+ STACK_OF(SRP_gN_cache) *gN_cache;
/* to simulate a user */
- char *seed_key;
- BIGNUM *default_g;
- BIGNUM *default_N;
- } SRP_VBASE;
+ char *seed_key;
+ BIGNUM *default_g;
+ BIGNUM *default_N;
+} SRP_VBASE;
-
-/*Structure interne pour retenir les couples N et g*/
-typedef struct SRP_gN_st
- {
- char *id;
- BIGNUM *g;
- BIGNUM *N;
- } SRP_gN;
+/*
+ * Structure interne pour retenir les couples N et g
+ */
+typedef struct SRP_gN_st {
+ char *id;
+ BIGNUM *g;
+ BIGNUM *N;
+} SRP_gN;
DECLARE_STACK_OF(SRP_gN)
SRP_VBASE *SRP_VBASE_new(char *seed_key);
int SRP_VBASE_free(SRP_VBASE *vb);
-int SRP_VBASE_init(SRP_VBASE *vb, char * verifier_file);
+int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file);
SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username);
char *SRP_create_verifier(const char *user, const char *pass, char **salt,
- char **verifier, const char *N, const char *g);
-int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, BIGNUM **verifier, const BIGNUM *N, const BIGNUM *g);
-
-
-#define SRP_NO_ERROR 0
-#define SRP_ERR_VBASE_INCOMPLETE_FILE 1
-#define SRP_ERR_VBASE_BN_LIB 2
-#define SRP_ERR_OPEN_FILE 3
-#define SRP_ERR_MEMORY 4
-
-#define DB_srptype 0
-#define DB_srpverifier 1
-#define DB_srpsalt 2
-#define DB_srpid 3
-#define DB_srpgN 4
-#define DB_srpinfo 5
-#undef DB_NUMBER
-#define DB_NUMBER 6
-
-#define DB_SRP_INDEX 'I'
-#define DB_SRP_VALID 'V'
-#define DB_SRP_REVOKED 'R'
-#define DB_SRP_MODIF 'v'
-
+ char **verifier, const char *N, const char *g);
+int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt,
+ BIGNUM **verifier, const BIGNUM *N,
+ const BIGNUM *g);
+
+# define SRP_NO_ERROR 0
+# define SRP_ERR_VBASE_INCOMPLETE_FILE 1
+# define SRP_ERR_VBASE_BN_LIB 2
+# define SRP_ERR_OPEN_FILE 3
+# define SRP_ERR_MEMORY 4
+
+# define DB_srptype 0
+# define DB_srpverifier 1
+# define DB_srpsalt 2
+# define DB_srpid 3
+# define DB_srpgN 4
+# define DB_srpinfo 5
+# undef DB_NUMBER
+# define DB_NUMBER 6
+
+# define DB_SRP_INDEX 'I'
+# define DB_SRP_VALID 'V'
+# define DB_SRP_REVOKED 'R'
+# define DB_SRP_MODIF 'v'
/* see srp.c */
-char * SRP_check_known_gN_param(BIGNUM* g, BIGNUM* N);
-SRP_gN *SRP_get_default_gN(const char * id) ;
+char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N);
+SRP_gN *SRP_get_default_gN(const char *id);
/* server side .... */
-BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N);
+BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b,
+ BIGNUM *N);
BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v);
int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N);
-BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N) ;
-
-
+BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N);
/* client side .... */
BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass);
BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g);
-BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u);
+BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x,
+ BIGNUM *a, BIGNUM *u);
int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N);
-#define SRP_MINIMAL_N 1024
+# define SRP_MINIMAL_N 1024
#ifdef __cplusplus
}
#endif
-#endif
+# endif
#endif
diff --git a/crypto/srp/srp_lcl.h b/crypto/srp/srp_lcl.h
index 42bda3f148..9a7fce1b4c 100644
--- a/crypto/srp/srp_lcl.h
+++ b/crypto/srp/srp_lcl.h
@@ -1,6 +1,7 @@
/* crypto/srp/srp_lcl.h */
-/* Written by Peter Sylvester (peter.sylvester@edelweb.fr)
- * for the EdelKey project and contributed to the OpenSSL project 2004.
+/*
+ * Written by Peter Sylvester (peter.sylvester@edelweb.fr) for the EdelKey
+ * project and contributed to the OpenSSL project 2004.
*/
/* ====================================================================
* Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -10,7 +11,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -56,17 +57,17 @@
*
*/
#ifndef HEADER_SRP_LCL_H
-#define HEADER_SRP_LCL_H
+# define HEADER_SRP_LCL_H
-#include <openssl/srp.h>
-#include <openssl/sha.h>
+# include <openssl/srp.h>
+# include <openssl/sha.h>
-#if 0
-#define srp_bn_print(a) {fprintf(stderr, #a "="); BN_print_fp(stderr,a); \
+# if 0
+# define srp_bn_print(a) {fprintf(stderr, #a "="); BN_print_fp(stderr,a); \
fprintf(stderr,"\n");}
-#else
-#define srp_bn_print(a)
-#endif
+# else
+# define srp_bn_print(a)
+# endif
diff --git a/crypto/srp/srp_lib.c b/crypto/srp/srp_lib.c
index 71492f3cef..6997a28957 100644
--- a/crypto/srp/srp_lib.c
+++ b/crypto/srp/srp_lib.c
@@ -1,7 +1,8 @@
/* crypto/srp/srp_lib.c */
-/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
- * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
- * for the EdelKey project and contributed to the OpenSSL project 2004.
+/*
+ * Written by Christophe Renou (christophe.renou@edelweb.fr) with the
+ * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the
+ * EdelKey project and contributed to the OpenSSL project 2004.
*/
/* ====================================================================
* Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -11,7 +12,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -57,295 +58,285 @@
*
*/
#ifndef OPENSSL_NO_SRP
-#include "cryptlib.h"
-#include "srp_lcl.h"
-#include <openssl/srp.h>
-#include <openssl/evp.h>
-#include "internal/bn_srp.h"
+# include "cryptlib.h"
+# include "srp_lcl.h"
+# include <openssl/srp.h>
+# include <openssl/evp.h>
+# include "internal/bn_srp.h"
static BIGNUM *srp_Calc_k(BIGNUM *N, BIGNUM *g)
- {
- /* k = SHA1(N | PAD(g)) -- tls-srp draft 8 */
-
- unsigned char digest[SHA_DIGEST_LENGTH];
- unsigned char *tmp;
- EVP_MD_CTX ctxt;
- int longg ;
- int longN = BN_num_bytes(N);
-
- if (BN_ucmp(g, N) >= 0)
- return NULL;
-
- if ((tmp = OPENSSL_malloc(longN)) == NULL)
- return NULL;
- BN_bn2bin(N,tmp) ;
-
- EVP_MD_CTX_init(&ctxt);
- EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
- EVP_DigestUpdate(&ctxt, tmp, longN);
-
- memset(tmp, 0, longN);
- longg = BN_bn2bin(g,tmp) ;
- /* use the zeros behind to pad on left */
- EVP_DigestUpdate(&ctxt, tmp + longg, longN-longg);
- EVP_DigestUpdate(&ctxt, tmp, longg);
- OPENSSL_free(tmp);
-
- EVP_DigestFinal_ex(&ctxt, digest, NULL);
- EVP_MD_CTX_cleanup(&ctxt);
- return BN_bin2bn(digest, sizeof(digest), NULL);
- }
+{
+ /* k = SHA1(N | PAD(g)) -- tls-srp draft 8 */
+
+ unsigned char digest[SHA_DIGEST_LENGTH];
+ unsigned char *tmp;
+ EVP_MD_CTX ctxt;
+ int longg;
+ int longN = BN_num_bytes(N);
+
+ if (BN_ucmp(g, N) >= 0)
+ return NULL;
+
+ if ((tmp = OPENSSL_malloc(longN)) == NULL)
+ return NULL;
+ BN_bn2bin(N, tmp);
+
+ EVP_MD_CTX_init(&ctxt);
+ EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
+ EVP_DigestUpdate(&ctxt, tmp, longN);
+
+ memset(tmp, 0, longN);
+ longg = BN_bn2bin(g, tmp);
+ /* use the zeros behind to pad on left */
+ EVP_DigestUpdate(&ctxt, tmp + longg, longN - longg);
+ EVP_DigestUpdate(&ctxt, tmp, longg);
+ OPENSSL_free(tmp);
+
+ EVP_DigestFinal_ex(&ctxt, digest, NULL);
+ EVP_MD_CTX_cleanup(&ctxt);
+ return BN_bin2bn(digest, sizeof(digest), NULL);
+}
BIGNUM *SRP_Calc_u(BIGNUM *A, BIGNUM *B, BIGNUM *N)
- {
- /* k = SHA1(PAD(A) || PAD(B) ) -- tls-srp draft 8 */
-
- BIGNUM *u;
- unsigned char cu[SHA_DIGEST_LENGTH];
- unsigned char *cAB;
- EVP_MD_CTX ctxt;
- int longN;
- if ((A == NULL) ||(B == NULL) || (N == NULL))
- return NULL;
-
- if (BN_ucmp(A, N) >= 0 || BN_ucmp(B, N) >= 0)
- return NULL;
-
- longN= BN_num_bytes(N);
-
- if ((cAB = OPENSSL_malloc(2*longN)) == NULL)
- return NULL;
-
- memset(cAB, 0, longN);
-
- EVP_MD_CTX_init(&ctxt);
- EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
- EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(A,cAB+longN), longN);
- EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(B,cAB+longN), longN);
- OPENSSL_free(cAB);
- EVP_DigestFinal_ex(&ctxt, cu, NULL);
- EVP_MD_CTX_cleanup(&ctxt);
-
- if (!(u = BN_bin2bn(cu, sizeof(cu), NULL)))
- return NULL;
- if (!BN_is_zero(u))
- return u;
- BN_free(u);
- return NULL;
+{
+ /* k = SHA1(PAD(A) || PAD(B) ) -- tls-srp draft 8 */
+
+ BIGNUM *u;
+ unsigned char cu[SHA_DIGEST_LENGTH];
+ unsigned char *cAB;
+ EVP_MD_CTX ctxt;
+ int longN;
+ if ((A == NULL) || (B == NULL) || (N == NULL))
+ return NULL;
+
+ if (BN_ucmp(A, N) >= 0 || BN_ucmp(B, N) >= 0)
+ return NULL;
+
+ longN = BN_num_bytes(N);
+
+ if ((cAB = OPENSSL_malloc(2 * longN)) == NULL)
+ return NULL;
+
+ memset(cAB, 0, longN);
+
+ EVP_MD_CTX_init(&ctxt);
+ EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
+ EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(A, cAB + longN), longN);
+ EVP_DigestUpdate(&ctxt, cAB + BN_bn2bin(B, cAB + longN), longN);
+ OPENSSL_free(cAB);
+ EVP_DigestFinal_ex(&ctxt, cu, NULL);
+ EVP_MD_CTX_cleanup(&ctxt);
+
+ if (!(u = BN_bin2bn(cu, sizeof(cu), NULL)))
+ return NULL;
+ if (!BN_is_zero(u))
+ return u;
+ BN_free(u);
+ return NULL;
}
-BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b, BIGNUM *N)
- {
- BIGNUM *tmp = NULL, *S = NULL;
- BN_CTX *bn_ctx;
-
- if (u == NULL || A == NULL || v == NULL || b == NULL || N == NULL)
- return NULL;
-
- if ((bn_ctx = BN_CTX_new()) == NULL ||
- (tmp = BN_new()) == NULL ||
- (S = BN_new()) == NULL )
- goto err;
-
- /* S = (A*v**u) ** b */
-
- if (!BN_mod_exp(tmp,v,u,N,bn_ctx))
- goto err;
- if (!BN_mod_mul(tmp,A,tmp,N,bn_ctx))
- goto err;
- if (!BN_mod_exp(S,tmp,b,N,bn_ctx))
- goto err;
-err:
- BN_CTX_free(bn_ctx);
- BN_clear_free(tmp);
- return S;
- }
+BIGNUM *SRP_Calc_server_key(BIGNUM *A, BIGNUM *v, BIGNUM *u, BIGNUM *b,
+ BIGNUM *N)
+{
+ BIGNUM *tmp = NULL, *S = NULL;
+ BN_CTX *bn_ctx;
+
+ if (u == NULL || A == NULL || v == NULL || b == NULL || N == NULL)
+ return NULL;
+
+ if ((bn_ctx = BN_CTX_new()) == NULL ||
+ (tmp = BN_new()) == NULL || (S = BN_new()) == NULL)
+ goto err;
+
+ /* S = (A*v**u) ** b */
+
+ if (!BN_mod_exp(tmp, v, u, N, bn_ctx))
+ goto err;
+ if (!BN_mod_mul(tmp, A, tmp, N, bn_ctx))
+ goto err;
+ if (!BN_mod_exp(S, tmp, b, N, bn_ctx))
+ goto err;
+ err:
+ BN_CTX_free(bn_ctx);
+ BN_clear_free(tmp);
+ return S;
+}
BIGNUM *SRP_Calc_B(BIGNUM *b, BIGNUM *N, BIGNUM *g, BIGNUM *v)
- {
- BIGNUM *kv = NULL, *gb = NULL;
- BIGNUM *B = NULL, *k = NULL;
- BN_CTX *bn_ctx;
-
- if (b == NULL || N == NULL || g == NULL || v == NULL ||
- (bn_ctx = BN_CTX_new()) == NULL)
- return NULL;
-
- if ( (kv = BN_new()) == NULL ||
- (gb = BN_new()) == NULL ||
- (B = BN_new())== NULL)
- goto err;
-
- /* B = g**b + k*v */
-
- if (!BN_mod_exp(gb,g,b,N,bn_ctx) ||
- !(k = srp_Calc_k(N,g)) ||
- !BN_mod_mul(kv,v,k,N,bn_ctx) ||
- !BN_mod_add(B,gb,kv,N,bn_ctx))
- {
- BN_free(B);
- B = NULL;
- }
-err:
- BN_CTX_free(bn_ctx);
- BN_clear_free(kv);
- BN_clear_free(gb);
- BN_free(k);
- return B;
- }
+{
+ BIGNUM *kv = NULL, *gb = NULL;
+ BIGNUM *B = NULL, *k = NULL;
+ BN_CTX *bn_ctx;
+
+ if (b == NULL || N == NULL || g == NULL || v == NULL ||
+ (bn_ctx = BN_CTX_new()) == NULL)
+ return NULL;
+
+ if ((kv = BN_new()) == NULL ||
+ (gb = BN_new()) == NULL || (B = BN_new()) == NULL)
+ goto err;
+
+ /* B = g**b + k*v */
+
+ if (!BN_mod_exp(gb, g, b, N, bn_ctx) ||
+ !(k = srp_Calc_k(N, g)) ||
+ !BN_mod_mul(kv, v, k, N, bn_ctx) ||
+ !BN_mod_add(B, gb, kv, N, bn_ctx)) {
+ BN_free(B);
+ B = NULL;
+ }
+ err:
+ BN_CTX_free(bn_ctx);
+ BN_clear_free(kv);
+ BN_clear_free(gb);
+ BN_free(k);
+ return B;
+}
BIGNUM *SRP_Calc_x(BIGNUM *s, const char *user, const char *pass)
- {
- unsigned char dig[SHA_DIGEST_LENGTH];
- EVP_MD_CTX ctxt;
- unsigned char *cs;
-
- if ((s == NULL) ||
- (user == NULL) ||
- (pass == NULL))
- return NULL;
-
- if ((cs = OPENSSL_malloc(BN_num_bytes(s))) == NULL)
- return NULL;
-
- EVP_MD_CTX_init(&ctxt);
- EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
- EVP_DigestUpdate(&ctxt, user, strlen(user));
- EVP_DigestUpdate(&ctxt, ":", 1);
- EVP_DigestUpdate(&ctxt, pass, strlen(pass));
- EVP_DigestFinal_ex(&ctxt, dig, NULL);
-
- EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
- BN_bn2bin(s,cs);
- EVP_DigestUpdate(&ctxt, cs, BN_num_bytes(s));
- OPENSSL_free(cs);
- EVP_DigestUpdate(&ctxt, dig, sizeof(dig));
- EVP_DigestFinal_ex(&ctxt, dig, NULL);
- EVP_MD_CTX_cleanup(&ctxt);
-
- return BN_bin2bn(dig, sizeof(dig), NULL);
- }
+{
+ unsigned char dig[SHA_DIGEST_LENGTH];
+ EVP_MD_CTX ctxt;
+ unsigned char *cs;
+
+ if ((s == NULL) || (user == NULL) || (pass == NULL))
+ return NULL;
+
+ if ((cs = OPENSSL_malloc(BN_num_bytes(s))) == NULL)
+ return NULL;
+
+ EVP_MD_CTX_init(&ctxt);
+ EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
+ EVP_DigestUpdate(&ctxt, user, strlen(user));
+ EVP_DigestUpdate(&ctxt, ":", 1);
+ EVP_DigestUpdate(&ctxt, pass, strlen(pass));
+ EVP_DigestFinal_ex(&ctxt, dig, NULL);
+
+ EVP_DigestInit_ex(&ctxt, EVP_sha1(), NULL);
+ BN_bn2bin(s, cs);
+ EVP_DigestUpdate(&ctxt, cs, BN_num_bytes(s));
+ OPENSSL_free(cs);
+ EVP_DigestUpdate(&ctxt, dig, sizeof(dig));
+ EVP_DigestFinal_ex(&ctxt, dig, NULL);
+ EVP_MD_CTX_cleanup(&ctxt);
+
+ return BN_bin2bn(dig, sizeof(dig), NULL);
+}
BIGNUM *SRP_Calc_A(BIGNUM *a, BIGNUM *N, BIGNUM *g)
- {
- BN_CTX *bn_ctx;
- BIGNUM * A = NULL;
-
- if (a == NULL || N == NULL || g == NULL ||
- (bn_ctx = BN_CTX_new()) == NULL)
- return NULL;
-
- if ((A = BN_new()) != NULL &&
- !BN_mod_exp(A,g,a,N,bn_ctx))
- {
- BN_free(A);
- A = NULL;
- }
- BN_CTX_free(bn_ctx);
- return A;
- }
-
-
-BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x, BIGNUM *a, BIGNUM *u)
- {
- BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL , *k = NULL, *K = NULL;
- BN_CTX *bn_ctx;
-
- if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL || a == NULL ||
- (bn_ctx = BN_CTX_new()) == NULL)
- return NULL;
-
- if ((tmp = BN_new()) == NULL ||
- (tmp2 = BN_new())== NULL ||
- (tmp3 = BN_new())== NULL ||
- (K = BN_new()) == NULL)
- goto err;
-
- if (!BN_mod_exp(tmp,g,x,N,bn_ctx))
- goto err;
- if (!(k = srp_Calc_k(N,g)))
- goto err;
- if (!BN_mod_mul(tmp2,tmp,k,N,bn_ctx))
- goto err;
- if (!BN_mod_sub(tmp,B,tmp2,N,bn_ctx))
- goto err;
-
- if (!BN_mod_mul(tmp3,u,x,N,bn_ctx))
- goto err;
- if (!BN_mod_add(tmp2,a,tmp3,N,bn_ctx))
- goto err;
- if (!BN_mod_exp(K,tmp,tmp2,N,bn_ctx))
- goto err;
-
-err :
- BN_CTX_free(bn_ctx);
- BN_clear_free(tmp);
- BN_clear_free(tmp2);
- BN_clear_free(tmp3);
- BN_free(k);
- return K;
- }
+{
+ BN_CTX *bn_ctx;
+ BIGNUM *A = NULL;
+
+ if (a == NULL || N == NULL || g == NULL ||
+ (bn_ctx = BN_CTX_new()) == NULL)
+ return NULL;
+
+ if ((A = BN_new()) != NULL && !BN_mod_exp(A, g, a, N, bn_ctx)) {
+ BN_free(A);
+ A = NULL;
+ }
+ BN_CTX_free(bn_ctx);
+ return A;
+}
+
+BIGNUM *SRP_Calc_client_key(BIGNUM *N, BIGNUM *B, BIGNUM *g, BIGNUM *x,
+ BIGNUM *a, BIGNUM *u)
+{
+ BIGNUM *tmp = NULL, *tmp2 = NULL, *tmp3 = NULL, *k = NULL, *K = NULL;
+ BN_CTX *bn_ctx;
+
+ if (u == NULL || B == NULL || N == NULL || g == NULL || x == NULL
+ || a == NULL || (bn_ctx = BN_CTX_new()) == NULL)
+ return NULL;
+
+ if ((tmp = BN_new()) == NULL ||
+ (tmp2 = BN_new()) == NULL ||
+ (tmp3 = BN_new()) == NULL || (K = BN_new()) == NULL)
+ goto err;
+
+ if (!BN_mod_exp(tmp, g, x, N, bn_ctx))
+ goto err;
+ if (!(k = srp_Calc_k(N, g)))
+ goto err;
+ if (!BN_mod_mul(tmp2, tmp, k, N, bn_ctx))
+ goto err;
+ if (!BN_mod_sub(tmp, B, tmp2, N, bn_ctx))
+ goto err;
+
+ if (!BN_mod_mul(tmp3, u, x, N, bn_ctx))
+ goto err;
+ if (!BN_mod_add(tmp2, a, tmp3, N, bn_ctx))
+ goto err;
+ if (!BN_mod_exp(K, tmp, tmp2, N, bn_ctx))
+ goto err;
+
+ err:
+ BN_CTX_free(bn_ctx);
+ BN_clear_free(tmp);
+ BN_clear_free(tmp2);
+ BN_clear_free(tmp3);
+ BN_free(k);
+ return K;
+}
int SRP_Verify_B_mod_N(BIGNUM *B, BIGNUM *N)
- {
- BIGNUM *r;
- BN_CTX *bn_ctx;
- int ret = 0;
-
- if (B == NULL || N == NULL ||
- (bn_ctx = BN_CTX_new()) == NULL)
- return 0;
-
- if ((r = BN_new()) == NULL)
- goto err;
- /* Checks if B % N == 0 */
- if (!BN_nnmod(r,B,N,bn_ctx))
- goto err;
- ret = !BN_is_zero(r);
-err:
- BN_CTX_free(bn_ctx);
- BN_free(r);
- return ret;
- }
+{
+ BIGNUM *r;
+ BN_CTX *bn_ctx;
+ int ret = 0;
+
+ if (B == NULL || N == NULL || (bn_ctx = BN_CTX_new()) == NULL)
+ return 0;
+
+ if ((r = BN_new()) == NULL)
+ goto err;
+ /* Checks if B % N == 0 */
+ if (!BN_nnmod(r, B, N, bn_ctx))
+ goto err;
+ ret = !BN_is_zero(r);
+ err:
+ BN_CTX_free(bn_ctx);
+ BN_free(r);
+ return ret;
+}
int SRP_Verify_A_mod_N(BIGNUM *A, BIGNUM *N)
- {
- /* Checks if A % N == 0 */
- return SRP_Verify_B_mod_N(A,N) ;
- }
-
-
-/* Check if G and N are kwown parameters.
- The values have been generated from the ietf-tls-srp draft version 8
-*/
-char * SRP_check_known_gN_param(BIGNUM* g, BIGNUM* N)
- {
- size_t i;
- if ((g == NULL) || (N == NULL))
- return 0;
-
- srp_bn_print(g);
- srp_bn_print(N);
-
- for(i = 0; i < KNOWN_GN_NUMBER; i++)
- {
- if (BN_cmp(knowngN[i].g, g) == 0 && BN_cmp(knowngN[i].N, N) == 0)
- return knowngN[i].id;
- }
- return NULL;
- }
+{
+ /* Checks if A % N == 0 */
+ return SRP_Verify_B_mod_N(A, N);
+}
+
+/*
+ * Check if G and N are kwown parameters. The values have been generated
+ * from the ietf-tls-srp draft version 8
+ */
+char *SRP_check_known_gN_param(BIGNUM *g, BIGNUM *N)
+{
+ size_t i;
+ if ((g == NULL) || (N == NULL))
+ return 0;
+
+ srp_bn_print(g);
+ srp_bn_print(N);
+
+ for (i = 0; i < KNOWN_GN_NUMBER; i++) {
+ if (BN_cmp(knowngN[i].g, g) == 0 && BN_cmp(knowngN[i].N, N) == 0)
+ return knowngN[i].id;
+ }
+ return NULL;
+}
SRP_gN *SRP_get_default_gN(const char *id)
- {
- size_t i;
-
- if (id == NULL)
- return knowngN;
- for(i = 0; i < KNOWN_GN_NUMBER; i++)
- {
- if (strcmp(knowngN[i].id, id)==0)
- return knowngN + i;
- }
- return NULL;
- }
+{
+ size_t i;
+
+ if (id == NULL)
+ return knowngN;
+ for (i = 0; i < KNOWN_GN_NUMBER; i++) {
+ if (strcmp(knowngN[i].id, id) == 0)
+ return knowngN + i;
+ }
+ return NULL;
+}
#endif
diff --git a/crypto/srp/srp_vfy.c b/crypto/srp/srp_vfy.c
index eda79bce54..df82ca3830 100644
--- a/crypto/srp/srp_vfy.c
+++ b/crypto/srp/srp_vfy.c
@@ -1,7 +1,8 @@
/* crypto/srp/srp_vfy.c */
-/* Written by Christophe Renou (christophe.renou@edelweb.fr) with
- * the precious help of Peter Sylvester (peter.sylvester@edelweb.fr)
- * for the EdelKey project and contributed to the OpenSSL project 2004.
+/*
+ * Written by Christophe Renou (christophe.renou@edelweb.fr) with the
+ * precious help of Peter Sylvester (peter.sylvester@edelweb.fr) for the
+ * EdelKey project and contributed to the OpenSSL project 2004.
*/
/* ====================================================================
* Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -11,7 +12,7 @@
* are met:
*
* 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
+ * notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
@@ -57,607 +58,584 @@
*
*/
#ifndef OPENSSL_NO_SRP
-#include "cryptlib.h"
-#include "srp_lcl.h"
-#include <openssl/srp.h>
-#include <openssl/evp.h>
-#include <openssl/buffer.h>
-#include <openssl/rand.h>
-#include <openssl/txt_db.h>
+# include "cryptlib.h"
+# include "srp_lcl.h"
+# include <openssl/srp.h>
+# include <openssl/evp.h>
+# include <openssl/buffer.h>
+# include <openssl/rand.h>
+# include <openssl/txt_db.h>
-#define SRP_RANDOM_SALT_LEN 20
-#define MAX_LEN 2500
+# define SRP_RANDOM_SALT_LEN 20
+# define MAX_LEN 2500
static char b64table[] =
- "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz./";
-/* the following two conversion routines have been inspired by code from Stanford */
+/*
+ * the following two conversion routines have been inspired by code from
+ * Stanford
+ */
/*
* Convert a base64 string into raw byte array representation.
*/
static int t_fromb64(unsigned char *a, const char *src)
- {
- char *loc;
- int i, j;
- int size;
-
- while(*src && (*src == ' ' || *src == '\t' || *src == '\n'))
- ++src;
- size = strlen(src);
- i = 0;
- while(i < size)
- {
- loc = strchr(b64table, src[i]);
- if(loc == (char *) 0) break;
- else a[i] = loc - b64table;
- ++i;
- }
- /* if nothing valid to process we have a zero length response */
- if (i == 0)
- return 0;
- size = i;
- i = size - 1;
- j = size;
- while(1)
- {
- a[j] = a[i];
- if(--i < 0) break;
- a[j] |= (a[i] & 3) << 6;
- --j;
- a[j] = (unsigned char) ((a[i] & 0x3c) >> 2);
- if(--i < 0) break;
- a[j] |= (a[i] & 0xf) << 4;
- --j;
- a[j] = (unsigned char) ((a[i] & 0x30) >> 4);
- if(--i < 0) break;
- a[j] |= (a[i] << 2);
-
- a[--j] = 0;
- if(--i < 0) break;
- }
- while(a[j] == 0 && j <= size) ++j;
- i = 0;
- while (j <= size) a[i++] = a[j++];
- return i;
- }
-
+{
+ char *loc;
+ int i, j;
+ int size;
+
+ while (*src && (*src == ' ' || *src == '\t' || *src == '\n'))
+ ++src;
+ size = strlen(src);
+ i = 0;
+ while (i < size) {
+ loc = strchr(b64table, src[i]);
+ if (loc == (char *)0)
+ break;
+ else
+ a[i] = loc - b64table;
+ ++i;
+ }
+ /* if nothing valid to process we have a zero length response */
+ if (i == 0)
+ return 0;
+ size = i;
+ i = size - 1;
+ j = size;
+ while (1) {
+ a[j] = a[i];
+ if (--i < 0)
+ break;
+ a[j] |= (a[i] & 3) << 6;
+ --j;
+ a[j] = (unsigned char)((a[i] & 0x3c) >> 2);
+ if (--i < 0)
+ break;
+ a[j] |= (a[i] & 0xf) << 4;
+ --j;
+ a[j] = (unsigned char)((a[i] & 0x30) >> 4);
+ if (--i < 0)
+ break;
+ a[j] |= (a[i] << 2);
+
+ a[--j] = 0;
+ if (--i < 0)
+ break;
+ }
+ while (a[j] == 0 && j <= size)
+ ++j;
+ i = 0;
+ while (j <= size)
+ a[i++] = a[j++];
+ return i;
+}
/*
* Convert a raw byte string into a null-terminated base64 ASCII string.
*/
static char *t_tob64(char *dst, const unsigned char *src, int size)
- {
- int c, pos = size % 3;
- unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
- char *olddst = dst;
-
- switch(pos)
- {
- case 1:
- b2 = src[0];
- break;
- case 2:
- b1 = src[0];
- b2 = src[1];
- break;
- }
-
- while(1)
- {
- c = (b0 & 0xfc) >> 2;
- if(notleading || c != 0)
- {
- *dst++ = b64table[c];
- notleading = 1;
- }
- c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
- if(notleading || c != 0)
- {
- *dst++ = b64table[c];
- notleading = 1;
- }
- c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
- if(notleading || c != 0)
- {
- *dst++ = b64table[c];
- notleading = 1;
- }
- c = b2 & 0x3f;
- if(notleading || c != 0)
- {
- *dst++ = b64table[c];
- notleading = 1;
- }
- if(pos >= size) break;
- else
- {
- b0 = src[pos++];
- b1 = src[pos++];
- b2 = src[pos++];
- }
- }
-
- *dst++ = '\0';
- return olddst;
- }
+{
+ int c, pos = size % 3;
+ unsigned char b0 = 0, b1 = 0, b2 = 0, notleading = 0;
+ char *olddst = dst;
+
+ switch (pos) {
+ case 1:
+ b2 = src[0];
+ break;
+ case 2:
+ b1 = src[0];
+ b2 = src[1];
+ break;
+ }
+
+ while (1) {
+ c = (b0 & 0xfc) >> 2;
+ if (notleading || c != 0) {
+ *dst++ = b64table[c];
+ notleading = 1;
+ }
+ c = ((b0 & 3) << 4) | ((b1 & 0xf0) >> 4);
+ if (notleading || c != 0) {
+ *dst++ = b64table[c];
+ notleading = 1;
+ }
+ c = ((b1 & 0xf) << 2) | ((b2 & 0xc0) >> 6);
+ if (notleading || c != 0) {
+ *dst++ = b64table[c];
+ notleading = 1;
+ }
+ c = b2 & 0x3f;
+ if (notleading || c != 0) {
+ *dst++ = b64table[c];
+ notleading = 1;
+ }
+ if (pos >= size)
+ break;
+ else {
+ b0 = src[pos++];
+ b1 = src[pos++];
+ b2 = src[pos++];
+ }
+ }
+
+ *dst++ = '\0';
+ return olddst;
+}
static void SRP_user_pwd_free(SRP_user_pwd *user_pwd)
- {
- if (user_pwd == NULL)
- return;
- BN_free(user_pwd->s);
- BN_clear_free(user_pwd->v);
- OPENSSL_free(user_pwd->id);
- OPENSSL_free(user_pwd->info);
- OPENSSL_free(user_pwd);
- }
+{
+ if (user_pwd == NULL)
+ return;
+ BN_free(user_pwd->s);
+ BN_clear_free(user_pwd->v);
+ OPENSSL_free(user_pwd->id);
+ OPENSSL_free(user_pwd->info);
+ OPENSSL_free(user_pwd);
+}
static SRP_user_pwd *SRP_user_pwd_new(void)
- {
- SRP_user_pwd *ret = OPENSSL_malloc(sizeof(SRP_user_pwd));
- if (ret == NULL)
- return NULL;
- ret->N = NULL;
- ret->g = NULL;
- ret->s = NULL;
- ret->v = NULL;
- ret->id = NULL ;
- ret->info = NULL;
- return ret;
- }
+{
+ SRP_user_pwd *ret = OPENSSL_malloc(sizeof(SRP_user_pwd));
+ if (ret == NULL)
+ return NULL;
+ ret->N = NULL;
+ ret->g = NULL;
+ ret->s = NULL;
+ ret->v = NULL;
+ ret->id = NULL;
+ ret->info = NULL;
+ return ret;
+}
static void SRP_user_pwd_set_gN(SRP_user_pwd *vinfo, const BIGNUM *g,
- const BIGNUM *N)