]>
Commit | Line | Data |
---|---|---|
0f113f3e | 1 | /* |
22fbfe6a MC |
2 | * {- join("\n * ", @autowarntext) -} |
3 | * | |
a28d06f3 | 4 | * Copyright 2004-2021 The OpenSSL Project Authors. All Rights Reserved. |
3b855b1f | 5 | * Copyright (c) 2004, EdelKey Project. All Rights Reserved. |
edc032b5 | 6 | * |
48f4ad77 | 7 | * Licensed under the Apache License 2.0 (the "License"). You may not use |
21dcbebc RS |
8 | * this file except in compliance with the License. You can obtain a copy |
9 | * in the file LICENSE in the source distribution or at | |
10 | * https://www.openssl.org/source/license.html | |
3b855b1f TH |
11 | * |
12 | * Originally written by Christophe Renou and Peter Sylvester, | |
13 | * for the EdelKey project. | |
edc032b5 | 14 | */ |
21dcbebc | 15 | |
22fbfe6a MC |
16 | {- |
17 | use OpenSSL::stackhash qw(generate_stack_macros); | |
18 | -} | |
19 | ||
ae4186b0 DMSP |
20 | #ifndef OPENSSL_SRP_H |
21 | # define OPENSSL_SRP_H | |
d86167ec DMSP |
22 | # pragma once |
23 | ||
24 | # include <openssl/macros.h> | |
936c2b9e | 25 | # ifndef OPENSSL_NO_DEPRECATED_3_0 |
d86167ec DMSP |
26 | # define HEADER_SRP_H |
27 | # endif | |
edc032b5 | 28 | |
857048a7 | 29 | #include <openssl/opensslconf.h> |
edc032b5 | 30 | |
3c27208f | 31 | #ifndef OPENSSL_NO_SRP |
857048a7 RS |
32 | # include <stdio.h> |
33 | # include <string.h> | |
857048a7 RS |
34 | # include <openssl/safestack.h> |
35 | # include <openssl/bn.h> | |
36 | # include <openssl/crypto.h> | |
edc032b5 | 37 | |
3c27208f RS |
38 | # ifdef __cplusplus |
39 | extern "C" { | |
40 | # endif | |
41 | ||
6d2a1eff MC |
42 | # ifndef OPENSSL_NO_DEPRECATED_3_0 |
43 | ||
0f113f3e MC |
44 | typedef struct SRP_gN_cache_st { |
45 | char *b64_bn; | |
46 | BIGNUM *bn; | |
47 | } SRP_gN_cache; | |
22fbfe6a MC |
48 | {- |
49 | generate_stack_macros("SRP_gN_cache"); | |
50 | -} | |
51 | ||
edc032b5 | 52 | |
0f113f3e | 53 | typedef struct SRP_user_pwd_st { |
380f18ed | 54 | /* Owned by us. */ |
0f113f3e MC |
55 | char *id; |
56 | BIGNUM *s; | |
57 | BIGNUM *v; | |
380f18ed | 58 | /* Not owned by us. */ |
0f113f3e MC |
59 | const BIGNUM *g; |
60 | const BIGNUM *N; | |
380f18ed | 61 | /* Owned by us. */ |
0f113f3e MC |
62 | char *info; |
63 | } SRP_user_pwd; | |
22fbfe6a MC |
64 | {- |
65 | generate_stack_macros("SRP_user_pwd"); | |
66 | -} | |
edc032b5 | 67 | |
6d2a1eff | 68 | OSSL_DEPRECATEDIN_3_0 |
ebfd055b | 69 | SRP_user_pwd *SRP_user_pwd_new(void); |
6d2a1eff | 70 | OSSL_DEPRECATEDIN_3_0 |
380f18ed EK |
71 | void SRP_user_pwd_free(SRP_user_pwd *user_pwd); |
72 | ||
6d2a1eff MC |
73 | OSSL_DEPRECATEDIN_3_0 |
74 | void SRP_user_pwd_set_gN(SRP_user_pwd *user_pwd, const BIGNUM *g, | |
75 | const BIGNUM *N); | |
76 | OSSL_DEPRECATEDIN_3_0 | |
77 | int SRP_user_pwd_set1_ids(SRP_user_pwd *user_pwd, const char *id, | |
78 | const char *info); | |
79 | OSSL_DEPRECATEDIN_3_0 | |
ebfd055b AS |
80 | int SRP_user_pwd_set0_sv(SRP_user_pwd *user_pwd, BIGNUM *s, BIGNUM *v); |
81 | ||
0f113f3e MC |
82 | typedef struct SRP_VBASE_st { |
83 | STACK_OF(SRP_user_pwd) *users_pwd; | |
84 | STACK_OF(SRP_gN_cache) *gN_cache; | |
edc032b5 | 85 | /* to simulate a user */ |
0f113f3e | 86 | char *seed_key; |
98370c2d MC |
87 | const BIGNUM *default_g; |
88 | const BIGNUM *default_N; | |
0f113f3e | 89 | } SRP_VBASE; |
edc032b5 | 90 | |
0f113f3e | 91 | /* |
02e112a8 | 92 | * Internal structure storing N and g pair |
0f113f3e MC |
93 | */ |
94 | typedef struct SRP_gN_st { | |
95 | char *id; | |
98370c2d MC |
96 | const BIGNUM *g; |
97 | const BIGNUM *N; | |
0f113f3e | 98 | } SRP_gN; |
22fbfe6a MC |
99 | {- |
100 | generate_stack_macros("SRP_gN"); | |
101 | -} | |
102 | ||
edc032b5 | 103 | |
6d2a1eff | 104 | OSSL_DEPRECATEDIN_3_0 |
edc032b5 | 105 | SRP_VBASE *SRP_VBASE_new(char *seed_key); |
6d2a1eff | 106 | OSSL_DEPRECATEDIN_3_0 |
895cba19 | 107 | void SRP_VBASE_free(SRP_VBASE *vb); |
6d2a1eff | 108 | OSSL_DEPRECATEDIN_3_0 |
0f113f3e | 109 | int SRP_VBASE_init(SRP_VBASE *vb, char *verifier_file); |
380f18ed | 110 | |
6d2a1eff | 111 | OSSL_DEPRECATEDIN_3_0 |
51f03f12 | 112 | int SRP_VBASE_add0_user(SRP_VBASE *vb, SRP_user_pwd *user_pwd); |
6d2a1eff | 113 | |
380f18ed | 114 | /* NOTE: unlike in SRP_VBASE_get_by_user, caller owns the returned pointer.*/ |
6d2a1eff | 115 | OSSL_DEPRECATEDIN_3_0 |
380f18ed EK |
116 | SRP_user_pwd *SRP_VBASE_get1_by_user(SRP_VBASE *vb, char *username); |
117 | ||
6d2a1eff | 118 | OSSL_DEPRECATEDIN_3_0 |
e85982c7 MC |
119 | char *SRP_create_verifier_ex(const char *user, const char *pass, char **salt, |
120 | char **verifier, const char *N, const char *g, | |
b4250010 | 121 | OSSL_LIB_CTX *libctx, const char *propq); |
6d2a1eff | 122 | OSSL_DEPRECATEDIN_3_0 |
edc032b5 | 123 | char *SRP_create_verifier(const char *user, const char *pass, char **salt, |
0f113f3e | 124 | char **verifier, const char *N, const char *g); |
6d2a1eff | 125 | OSSL_DEPRECATEDIN_3_0 |
e85982c7 MC |
126 | int SRP_create_verifier_BN_ex(const char *user, const char *pass, BIGNUM **salt, |
127 | BIGNUM **verifier, const BIGNUM *N, | |
b4250010 | 128 | const BIGNUM *g, OSSL_LIB_CTX *libctx, |
e85982c7 | 129 | const char *propq); |
6d2a1eff | 130 | OSSL_DEPRECATEDIN_3_0 |
0f113f3e MC |
131 | int SRP_create_verifier_BN(const char *user, const char *pass, BIGNUM **salt, |
132 | BIGNUM **verifier, const BIGNUM *N, | |
133 | const BIGNUM *g); | |
134 | ||
6d2a1eff MC |
135 | # define SRP_NO_ERROR 0 |
136 | # define SRP_ERR_VBASE_INCOMPLETE_FILE 1 | |
137 | # define SRP_ERR_VBASE_BN_LIB 2 | |
138 | # define SRP_ERR_OPEN_FILE 3 | |
139 | # define SRP_ERR_MEMORY 4 | |
140 | ||
141 | # define DB_srptype 0 | |
142 | # define DB_srpverifier 1 | |
143 | # define DB_srpsalt 2 | |
144 | # define DB_srpid 3 | |
145 | # define DB_srpgN 4 | |
146 | # define DB_srpinfo 5 | |
147 | # undef DB_NUMBER | |
148 | # define DB_NUMBER 6 | |
149 | ||
150 | # define DB_SRP_INDEX 'I' | |
151 | # define DB_SRP_VALID 'V' | |
152 | # define DB_SRP_REVOKED 'R' | |
153 | # define DB_SRP_MODIF 'v' | |
edc032b5 BL |
154 | |
155 | /* see srp.c */ | |
6d2a1eff | 156 | OSSL_DEPRECATEDIN_3_0 |
98370c2d | 157 | char *SRP_check_known_gN_param(const BIGNUM *g, const BIGNUM *N); |
6d2a1eff | 158 | OSSL_DEPRECATEDIN_3_0 |
0f113f3e | 159 | SRP_gN *SRP_get_default_gN(const char *id); |
edc032b5 BL |
160 | |
161 | /* server side .... */ | |
6d2a1eff | 162 | OSSL_DEPRECATEDIN_3_0 |
98370c2d MC |
163 | BIGNUM *SRP_Calc_server_key(const BIGNUM *A, const BIGNUM *v, const BIGNUM *u, |
164 | const BIGNUM *b, const BIGNUM *N); | |
6d2a1eff | 165 | OSSL_DEPRECATEDIN_3_0 |
e85982c7 | 166 | BIGNUM *SRP_Calc_B_ex(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, |
b4250010 | 167 | const BIGNUM *v, OSSL_LIB_CTX *libctx, const char *propq); |
6d2a1eff | 168 | OSSL_DEPRECATEDIN_3_0 |
98370c2d MC |
169 | BIGNUM *SRP_Calc_B(const BIGNUM *b, const BIGNUM *N, const BIGNUM *g, |
170 | const BIGNUM *v); | |
6d2a1eff MC |
171 | |
172 | OSSL_DEPRECATEDIN_3_0 | |
98370c2d | 173 | int SRP_Verify_A_mod_N(const BIGNUM *A, const BIGNUM *N); |
6d2a1eff | 174 | OSSL_DEPRECATEDIN_3_0 |
e85982c7 | 175 | BIGNUM *SRP_Calc_u_ex(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N, |
b4250010 | 176 | OSSL_LIB_CTX *libctx, const char *propq); |
6d2a1eff | 177 | OSSL_DEPRECATEDIN_3_0 |
98370c2d | 178 | BIGNUM *SRP_Calc_u(const BIGNUM *A, const BIGNUM *B, const BIGNUM *N); |
edc032b5 BL |
179 | |
180 | /* client side .... */ | |
6d2a1eff MC |
181 | |
182 | OSSL_DEPRECATEDIN_3_0 | |
e85982c7 | 183 | BIGNUM *SRP_Calc_x_ex(const BIGNUM *s, const char *user, const char *pass, |
b4250010 | 184 | OSSL_LIB_CTX *libctx, const char *propq); |
6d2a1eff | 185 | OSSL_DEPRECATEDIN_3_0 |
98370c2d | 186 | BIGNUM *SRP_Calc_x(const BIGNUM *s, const char *user, const char *pass); |
6d2a1eff | 187 | OSSL_DEPRECATEDIN_3_0 |
98370c2d | 188 | BIGNUM *SRP_Calc_A(const BIGNUM *a, const BIGNUM *N, const BIGNUM *g); |
6d2a1eff | 189 | OSSL_DEPRECATEDIN_3_0 |
e85982c7 MC |
190 | BIGNUM *SRP_Calc_client_key_ex(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, |
191 | const BIGNUM *x, const BIGNUM *a, const BIGNUM *u, | |
b4250010 | 192 | OSSL_LIB_CTX *libctx, const char *propq); |
6d2a1eff | 193 | OSSL_DEPRECATEDIN_3_0 |
98370c2d MC |
194 | BIGNUM *SRP_Calc_client_key(const BIGNUM *N, const BIGNUM *B, const BIGNUM *g, |
195 | const BIGNUM *x, const BIGNUM *a, const BIGNUM *u); | |
6d2a1eff | 196 | OSSL_DEPRECATEDIN_3_0 |
98370c2d | 197 | int SRP_Verify_B_mod_N(const BIGNUM *B, const BIGNUM *N); |
edc032b5 | 198 | |
6d2a1eff MC |
199 | # define SRP_MINIMAL_N 1024 |
200 | ||
201 | # endif /* OPENSSL_NO_DEPRECATED_3_0 */ | |
202 | ||
203 | /* This method ignores the configured seed and fails for an unknown user. */ | |
204 | # ifndef OPENSSL_NO_DEPRECATED_1_1_0 | |
205 | OSSL_DEPRECATEDIN_1_1_0 | |
206 | SRP_user_pwd *SRP_VBASE_get_by_user(SRP_VBASE *vb, char *username); | |
207 | # endif | |
edc032b5 | 208 | |
3c27208f | 209 | # ifdef __cplusplus |
edc032b5 | 210 | } |
3c27208f RS |
211 | # endif |
212 | # endif | |
edc032b5 | 213 | |
edc032b5 | 214 | #endif |