@@ -156,14 +156,18 @@ get_nonce_value([#'Extension'{
156
156
get_nonce_value ([_Extn | Rest ]) ->
157
157
get_nonce_value (Rest ).
158
158
159
+ verify_signature (_ , _ , _ , [], _ , _ ) ->
160
+ {error , ocsp_responder_cert_not_found };
159
161
verify_signature (ResponseDataDer , SignatureAlgo , Signature ,
160
- Certs , ResponderID , IssuerCert ) ->
161
- case find_responder_cert (ResponderID , Certs , IssuerCert ) of
162
- {ok , Cert } ->
163
- do_verify_signature (
164
- ResponseDataDer , Signature , SignatureAlgo , Cert );
165
- {error , Reason } ->
166
- {error , Reason }
162
+ [Cert | TCerts ], ResponderID , IssuerCert ) ->
163
+ maybe
164
+ true ?= is_responder_cert (ResponderID , Cert ),
165
+ true ?= is_authorized_responder (Cert , IssuerCert ),
166
+ ok ?= do_verify_signature (ResponseDataDer , Signature , SignatureAlgo , Cert )
167
+ else
168
+ _ ->
169
+ verify_signature (ResponseDataDer , SignatureAlgo , Signature ,
170
+ TCerts , ResponderID , IssuerCert )
167
171
end .
168
172
169
173
verify_past_timestamp (Timestamp ) ->
@@ -192,18 +196,12 @@ verify_next_update(asn1_NOVALUE) ->
192
196
verify_next_update (NextUpdate ) ->
193
197
verify_future_timestamp (NextUpdate ).
194
198
195
- find_responder_cert (_ResponderID , [], _ ) ->
196
- {error , ocsp_responder_cert_not_found };
197
- find_responder_cert (ResponderID , [Cert | TCerts ], IssuerCert ) ->
198
- maybe
199
- true ?= is_responder_cert (ResponderID , Cert ),
200
- ok ?= verify_responder_cert (Cert , IssuerCert ),
201
- {ok , Cert }
202
- else
203
- _ -> find_responder_cert (ResponderID , TCerts , IssuerCert )
204
- end .
199
+ is_responder_cert ({byName , Name }, Cert ) ->
200
+ public_key :der_encode ('Name' , Name ) == get_subject_name (Cert );
201
+ is_responder_cert ({byKey , Key }, Cert ) ->
202
+ Key == crypto :hash (sha , get_public_key (Cert )).
205
203
206
- verify_responder_cert (Cert , IssuerCert ) ->
204
+ is_authorized_responder (Cert , IssuerCert ) ->
207
205
Case1 =
208
206
% % the CA who issued the certificate in question signed the
209
207
% % response
@@ -224,7 +222,7 @@ verify_responder_cert(Cert, IssuerCert) ->
224
222
225
223
case lists :any (fun (E ) -> E () end , [Case1 , Case2 , Case3 ]) of
226
224
true ->
227
- ok ;
225
+ true ;
228
226
_ ->
229
227
not_authorized_responder
230
228
end .
@@ -244,11 +242,6 @@ get_public_key_rec(#'OTPCertificate'{tbsCertificate = TbsCert}) ->
244
242
PKInfo = TbsCert # 'OTPTBSCertificate' .subjectPublicKeyInfo ,
245
243
PKInfo # 'OTPSubjectPublicKeyInfo' .subjectPublicKey .
246
244
247
- is_responder_cert ({byName , Name }, Cert ) ->
248
- public_key :der_encode ('Name' , Name ) == get_subject_name (Cert );
249
- is_responder_cert ({byKey , Key }, Cert ) ->
250
- Key == crypto :hash (sha , get_public_key (Cert )).
251
-
252
245
get_subject_name (# 'OTPCertificate' {tbsCertificate = TbsCert }) ->
253
246
public_key :pkix_encode ('Name' , TbsCert # 'OTPTBSCertificate' .subject , otp ).
254
247
0 commit comments